/* Leaf semantic theme compiler output. */
:root[data-leaf-theme="amaranth"][data-leaf-appearance="light"] {
  --lt-theme-source: amaranth-light;
  --lt-background: #ffffff;
  --lt-foreground: #222222;
  --lt-surface: #ffffff;
  --lt-surface-elevated: #ffffff;
  --lt-surface-muted: #f6f6f6;
  --lt-surface-sunken: #f0f0f0;
  --lt-border: #e0e0e0;
  --lt-border-strong: #bdbdbd;
  --lt-muted-foreground: #575757;
  --lt-hover-tint: #575757;
  --lt-primary: #6d45e0;
  --lt-primary-foreground: #ffffff;
  --lt-primary-ink: #6d45e0;
  --lt-accent: #086ddd;
  --lt-accent-foreground: #ffffff;
  --lt-accent-ink: #0764cc;
  --lt-danger: #d3243a;
  --lt-danger-foreground: #ffffff;
  --lt-warning: #8a6d00;
  --lt-success: #087a34;
  --lt-success-foreground: #ffffff;
  --lt-done: #6d45e0;
  --lt-link: #086ddd;
  --lt-link-hover: #6d45e0;
  --lt-focus-ring: #6d45e0;
  --lt-focus-selection-background: #d9e5fb;
  --lt-focus-selection-foreground: #222222;
  --lt-markdown-background: #ffffff;
  --lt-markdown-foreground: #222222;
  --lt-markdown-heading: #11111a;
  --lt-markdown-heading-2: #11111a;
  --lt-markdown-heading-3: #11111a;
  --lt-markdown-heading-4: #11111a;
  --lt-markdown-heading-5: #11111a;
  --lt-markdown-heading-6: #11111a;
  --lt-markdown-rule: #e0e0e0;
  --lt-markdown-link: #086ddd;
  --lt-markdown-blockquote-border: #6d45e0;
  --lt-markdown-blockquote-foreground: #444444;
  --lt-markdown-alert-note: #086ddd;
  --lt-markdown-alert-tip: #087a34;
  --lt-markdown-alert-important: #6d45e0;
  --lt-markdown-alert-warning: #8a6d00;
  --lt-markdown-alert-caution: #d3243a;
  --lt-markdown-badge-background: #eeeeee;
  --lt-markdown-badge-foreground: #222222;
  --lt-markdown-table-border: #8a8a8a;
  --lt-markdown-table-row-background: #f0f0f0;
  --lt-markdown-thematic-break: #e0e0e0;
  --lt-markdown-math-inline-background: #eeeeee;
  --lt-markdown-keyboard-background: #ffffff;
  --lt-markdown-keyboard-border: #d4d4d4;
  --lt-editor-inline-code-background: #f2f2f2;
  --lt-editor-inline-code-foreground: #222222;
  --lt-editor-code-background: #f6f6f6;
  --lt-editor-code-foreground: #222222;
  --lt-editor-code-border: #e0e0e0;
  --lt-editor-code-selection-background: #d9e5fb;
  --lt-editor-code-selection-foreground: #222222;
  --lt-syntax-background: #f6f6f6;
  --lt-syntax-foreground: #222222;
  --lt-syntax-comment: #5c5c5c;
  --lt-syntax-keyword: #b0246a;
  --lt-syntax-string: #8a5a00;
  --lt-syntax-number: #6a30c0;
  --lt-syntax-function: #0a5fa0;
  --lt-syntax-variable: #222222;
  --lt-syntax-type: #0a5fa0;
  --lt-syntax-operator: #b0246a;
  --lt-syntax-punctuation: #4a4a4a;
  --lt-syntax-inserted: #0a6a2f;
  --lt-syntax-inserted-background: #d6f2de;
  --lt-syntax-deleted: #a01a2a;
  --lt-syntax-deleted-background: #fbdde1;
  --lt-syntax-changed: #7a5200;
  --lt-syntax-changed-background: #f7ecc9;
  --lt-navigation-button-hover-background: #7d58ef;
  --lt-navigation-button-disabled-background: #eeeeee;
  --lt-navigation-button-disabled-foreground: #999999;
  --lt-navigation-recent-border: #e0e0e0;
  --lt-navigation-recent-item-foreground: #222222;
  --lt-navigation-recent-item-hover-foreground: #6d45e0;
  --lt-minimap-viewport-border: #6d45e0;
  --lt-minimap-viewport-background: rgba(109, 69, 224, 0.14);
}
:root[data-leaf-theme="amaranth"][data-leaf-appearance="dark"] {
  --lt-theme-source: amaranth-dark;
  --lt-background: #1e1e1e;
  --lt-foreground: #dadada;
  --lt-surface: #1e1e1e;
  --lt-surface-elevated: #262626;
  --lt-surface-muted: #2a2a2a;
  --lt-surface-sunken: #181818;
  --lt-border: #363636;
  --lt-border-strong: #555555;
  --lt-muted-foreground: #999999;
  --lt-hover-tint: #999999;
  --lt-primary: #a882ff;
  --lt-primary-foreground: #1e1e1e;
  --lt-primary-ink: #a882ff;
  --lt-accent: #4c9dff;
  --lt-accent-foreground: #1e1e1e;
  --lt-accent-ink: #4c9dff;
  --lt-danger: #fb4f55;
  --lt-danger-foreground: #1e1e1e;
  --lt-warning: #e0de71;
  --lt-success: #44cf6e;
  --lt-success-foreground: #1e1e1e;
  --lt-done: #a882ff;
  --lt-link: #4c9dff;
  --lt-link-hover: #a882ff;
  --lt-focus-ring: #a882ff;
  --lt-focus-selection-background: #2f3a54;
  --lt-focus-selection-foreground: #ffffff;
  --lt-markdown-background: #1e1e1e;
  --lt-markdown-foreground: #dadada;
  --lt-markdown-heading: #ffffff;
  --lt-markdown-heading-2: #ffffff;
  --lt-markdown-heading-3: #ffffff;
  --lt-markdown-heading-4: #ffffff;
  --lt-markdown-heading-5: #ffffff;
  --lt-markdown-heading-6: #ffffff;
  --lt-markdown-rule: #363636;
  --lt-markdown-link: #4c9dff;
  --lt-markdown-blockquote-border: #a882ff;
  --lt-markdown-blockquote-foreground: #dadada;
  --lt-markdown-alert-note: #4c9dff;
  --lt-markdown-alert-tip: #44cf6e;
  --lt-markdown-alert-important: #a882ff;
  --lt-markdown-alert-warning: #e0de71;
  --lt-markdown-alert-caution: #fb464c;
  --lt-markdown-badge-background: #2a2a2a;
  --lt-markdown-badge-foreground: #dadada;
  --lt-markdown-table-border: #696969;
  --lt-markdown-table-row-background: #181818;
  --lt-markdown-thematic-break: #363636;
  --lt-markdown-math-inline-background: #2a2a2a;
  --lt-markdown-keyboard-background: #242424;
  --lt-markdown-keyboard-border: #363636;
  --lt-editor-inline-code-background: #2a2a2a;
  --lt-editor-inline-code-foreground: #dadada;
  --lt-editor-code-background: #181818;
  --lt-editor-code-foreground: #dadada;
  --lt-editor-code-border: #363636;
  --lt-editor-code-selection-background: #2f3a54;
  --lt-editor-code-selection-foreground: #ffffff;
  --lt-syntax-background: #181818;
  --lt-syntax-foreground: #dadada;
  --lt-syntax-comment: #8c8c8c;
  --lt-syntax-keyword: #fa99cd;
  --lt-syntax-string: #e0de71;
  --lt-syntax-number: #a882ff;
  --lt-syntax-function: #44cf6e;
  --lt-syntax-variable: #dadada;
  --lt-syntax-type: #53dfdd;
  --lt-syntax-operator: #fa99cd;
  --lt-syntax-punctuation: #bababa;
  --lt-syntax-inserted: #44cf6e;
  --lt-syntax-inserted-background: #143621;
  --lt-syntax-deleted: #ff8f92;
  --lt-syntax-deleted-background: #3a1d20;
  --lt-syntax-changed: #e0de71;
  --lt-syntax-changed-background: #33301a;
  --lt-navigation-button-hover-background: #b89bff;
  --lt-navigation-button-disabled-background: #2a2a2a;
  --lt-navigation-button-disabled-foreground: #6a6a6a;
  --lt-navigation-recent-border: #363636;
  --lt-navigation-recent-item-foreground: #dadada;
  --lt-navigation-recent-item-hover-foreground: #a882ff;
  --lt-minimap-viewport-border: #a882ff;
  --lt-minimap-viewport-background: rgba(110, 118, 129, 0.14);
}
:root[data-leaf-theme="amber"][data-leaf-appearance="light"] {
  --lt-theme-source: amber-light;
  --lt-background: #ffffff;
  --lt-foreground: #282117;
  --lt-surface: #ffffff;
  --lt-surface-elevated: #ffffff;
  --lt-surface-muted: #f8f6f2;
  --lt-surface-sunken: #f3f0ea;
  --lt-border: #e7dfd4;
  --lt-border-strong: #cbbba3;
  --lt-muted-foreground: #66543a;
  --lt-hover-tint: #66543a;
  --lt-primary: #986313;
  --lt-primary-foreground: #ffffff;
  --lt-primary-ink: #986313;
  --lt-accent: #986313;
  --lt-accent-foreground: #ffffff;
  --lt-accent-ink: #825410;
  --lt-danger: #d3243a;
  --lt-danger-foreground: #ffffff;
  --lt-warning: #8a6d00;
  --lt-success: #087a34;
  --lt-success-foreground: #ffffff;
  --lt-done: #986313;
  --lt-link: #986313;
  --lt-link-hover: #6c460d;
  --lt-focus-ring: #c68118;
  --lt-focus-selection-background: #f9e6cb;
  --lt-focus-selection-foreground: #282117;
  --lt-markdown-background: #ffffff;
  --lt-markdown-foreground: #282117;
  --lt-markdown-heading: #15110c;
  --lt-markdown-heading-2: #15110c;
  --lt-markdown-heading-3: #15110c;
  --lt-markdown-heading-4: #15110c;
  --lt-markdown-heading-5: #15110c;
  --lt-markdown-heading-6: #15110c;
  --lt-markdown-rule: #e7dfd4;
  --lt-markdown-link: #986313;
  --lt-markdown-blockquote-border: #c68118;
  --lt-markdown-blockquote-foreground: #50422d;
  --lt-markdown-alert-note: #986313;
  --lt-markdown-alert-tip: #087a34;
  --lt-markdown-alert-important: #986313;
  --lt-markdown-alert-warning: #8a6d00;
  --lt-markdown-alert-caution: #d3243a;
  --lt-markdown-badge-background: #f2eee7;
  --lt-markdown-badge-foreground: #282117;
  --lt-markdown-table-border: #a2865b;
  --lt-markdown-table-row-background: #f3f0ea;
  --lt-markdown-thematic-break: #e7dfd4;
  --lt-markdown-math-inline-background: #f2eee7;
  --lt-markdown-keyboard-background: #ffffff;
  --lt-markdown-keyboard-border: #ddd3c3;
  --lt-editor-inline-code-background: #f5f2ed;
  --lt-editor-inline-code-foreground: #282117;
  --lt-editor-code-background: #f8f6f2;
  --lt-editor-code-foreground: #282117;
  --lt-editor-code-border: #e7dfd4;
  --lt-editor-code-selection-background: #f7e1c1;
  --lt-editor-code-selection-foreground: #282117;
  --lt-syntax-background: #f8f6f2;
  --lt-syntax-foreground: #282117;
  --lt-syntax-comment: #6c593d;
  --lt-syntax-keyword: #986313;
  --lt-syntax-string: #8a5a11;
  --lt-syntax-number: #754c0e;
  --lt-syntax-function: #825410;
  --lt-syntax-variable: #282117;
  --lt-syntax-type: #825410;
  --lt-syntax-operator: #986313;
  --lt-syntax-punctuation: #574831;
  --lt-syntax-inserted: #0a6a2f;
  --lt-syntax-inserted-background: #d6f2de;
  --lt-syntax-deleted: #a01a2a;
  --lt-syntax-deleted-background: #fbdde1;
  --lt-syntax-changed: #7a5200;
  --lt-syntax-changed-background: #f7ecc9;
  --lt-navigation-button-hover-background: #c27e18;
  --lt-navigation-button-disabled-background: #f2eee7;
  --lt-navigation-button-disabled-foreground: #ae9570;
  --lt-navigation-recent-border: #e7dfd4;
  --lt-navigation-recent-item-foreground: #282117;
  --lt-navigation-recent-item-hover-foreground: #986313;
  --lt-minimap-viewport-border: #986313;
  --lt-minimap-viewport-background: rgba(152, 99, 19, 0.14);
}
:root[data-leaf-theme="amber"][data-leaf-appearance="dark"] {
  --lt-theme-source: amber-dark;
  --lt-background: #211e18;
  --lt-foreground: #ded9d2;
  --lt-surface: #211e18;
  --lt-surface-elevated: #2a251e;
  --lt-surface-muted: #2e2922;
  --lt-surface-sunken: #1b1813;
  --lt-border: #3c352b;
  --lt-border-strong: #5e5444;
  --lt-muted-foreground: #a59783;
  --lt-hover-tint: #a59783;
  --lt-primary: #e0911c;
  --lt-primary-foreground: #211e18;
  --lt-primary-ink: #e0911c;
  --lt-accent: #eab059;
  --lt-accent-foreground: #211e18;
  --lt-accent-ink: #eab059;
  --lt-danger: #fb4f55;
  --lt-danger-foreground: #1e1e1e;
  --lt-warning: #e0de71;
  --lt-success: #44cf6e;
  --lt-success-foreground: #1e1e1e;
  --lt-done: #e0911c;
  --lt-link: #eab059;
  --lt-link-hover: #eebf78;
  --lt-focus-ring: #e0911c;
  --lt-focus-selection-background: #492f09;
  --lt-focus-selection-foreground: #ffffff;
  --lt-markdown-background: #211e18;
  --lt-markdown-foreground: #ded9d2;
  --lt-markdown-heading: #ffffff;
  --lt-markdown-heading-2: #ffffff;
  --lt-markdown-heading-3: #ffffff;
  --lt-markdown-heading-4: #ffffff;
  --lt-markdown-heading-5: #ffffff;
  --lt-markdown-heading-6: #ffffff;
  --lt-markdown-rule: #3c352b;
  --lt-markdown-link: #eab059;
  --lt-markdown-blockquote-border: #e0911c;
  --lt-markdown-blockquote-foreground: #ded9d2;
  --lt-markdown-alert-note: #eab059;
  --lt-markdown-alert-tip: #44cf6e;
  --lt-markdown-alert-important: #e0911c;
  --lt-markdown-alert-warning: #e0de71;
  --lt-markdown-alert-caution: #fb464c;
  --lt-markdown-badge-background: #2e2922;
  --lt-markdown-badge-foreground: #ded9d2;
  --lt-markdown-table-border: #746754;
  --lt-markdown-table-row-background: #1b1813;
  --lt-markdown-thematic-break: #3c352b;
  --lt-markdown-math-inline-background: #2e2922;
  --lt-markdown-keyboard-background: #28231d;
  --lt-markdown-keyboard-border: #3c352b;
  --lt-editor-inline-code-background: #2e2922;
  --lt-editor-inline-code-foreground: #ded9d2;
  --lt-editor-code-background: #1b1813;
  --lt-editor-code-foreground: #ded9d2;
  --lt-editor-code-border: #3c352b;
  --lt-editor-code-selection-background: #51350a;
  --lt-editor-code-selection-foreground: #ffffff;
  --lt-syntax-background: #1b1813;
  --lt-syntax-foreground: #ded9d2;
  --lt-syntax-comment: #998a73;
  --lt-syntax-keyword: #f1cb91;
  --lt-syntax-string: #f4d4a5;
  --lt-syntax-number: #d2881a;
  --lt-syntax-function: #eab059;
  --lt-syntax-variable: #ded9d2;
  --lt-syntax-type: #eab059;
  --lt-syntax-operator: #f1cb91;
  --lt-syntax-punctuation: #c2b9ab;
  --lt-syntax-inserted: #44cf6e;
  --lt-syntax-inserted-background: #143621;
  --lt-syntax-deleted: #ff8f92;
  --lt-syntax-deleted-background: #3a1d20;
  --lt-syntax-changed: #e0de71;
  --lt-syntax-changed-background: #33301a;
  --lt-navigation-button-hover-background: #eab059;
  --lt-navigation-button-disabled-background: #2e2922;
  --lt-navigation-button-disabled-foreground: #756855;
  --lt-navigation-recent-border: #3c352b;
  --lt-navigation-recent-item-foreground: #ded9d2;
  --lt-navigation-recent-item-hover-foreground: #eab059;
  --lt-minimap-viewport-border: #e0911c;
  --lt-minimap-viewport-background: rgba(224, 145, 28, 0.14);
}
:root[data-leaf-theme="arabica"][data-leaf-appearance="light"] {
  --lt-theme-source: arabica-light;
  --lt-background: #f5ece0;
  --lt-foreground: #3d2f26;
  --lt-surface: #ece0d0;
  --lt-surface-elevated: #faf4ec;
  --lt-surface-muted: #ece0d0;
  --lt-surface-sunken: #e2d3c0;
  --lt-border: #dbcab4;
  --lt-border-strong: #c0a888;
  --lt-muted-foreground: #6f5847;
  --lt-hover-tint: #6f5847;
  --lt-primary: #8839ef;
  --lt-primary-foreground: #ffffff;
  --lt-primary-ink: #8839ef;
  --lt-accent: #8839ef;
  --lt-accent-foreground: #ffffff;
  --lt-accent-ink: #6e12e5;
  --lt-danger: #c0392b;
  --lt-danger-foreground: #ffffff;
  --lt-warning: #8a5a12;
  --lt-success: #46671f;
  --lt-success-foreground: #ffffff;
  --lt-done: #245f50;
  --lt-link: #8839ef;
  --lt-link-hover: #7526d6;
  --lt-focus-ring: #8839ef;
  --lt-focus-selection-background: #ead6bd;
  --lt-focus-selection-foreground: #3d2f26;
  --lt-markdown-background: #f5ece0;
  --lt-markdown-foreground: #3d2f26;
  --lt-markdown-heading: #8839ef;
  --lt-markdown-heading-2: #4a3627;
  --lt-markdown-heading-3: #b5442f;
  --lt-markdown-heading-4: #8a5a12;
  --lt-markdown-heading-5: #46671f;
  --lt-markdown-heading-6: #6f5847;
  --lt-markdown-rule: #dbcab4;
  --lt-markdown-link: #8839ef;
  --lt-markdown-blockquote-border: #8839ef;
  --lt-markdown-blockquote-foreground: #6f5847;
  --lt-markdown-alert-note: #35529c;
  --lt-markdown-alert-tip: #46671f;
  --lt-markdown-alert-important: #8839ef;
  --lt-markdown-alert-warning: #8a5a12;
  --lt-markdown-alert-caution: #b5442f;
  --lt-markdown-badge-background: #ece0d0;
  --lt-markdown-badge-foreground: #3d2f26;
  --lt-markdown-table-border: #857566;
  --lt-markdown-table-row-background: #e2d3c0;
  --lt-markdown-thematic-break: #dbcab4;
  --lt-markdown-math-inline-background: #ece0d0;
  --lt-markdown-keyboard-background: #f5ece0;
  --lt-markdown-keyboard-border: #c0a888;
  --lt-editor-inline-code-background: #ece0d0;
  --lt-editor-inline-code-foreground: #3d2f26;
  --lt-editor-code-background: #ece0d0;
  --lt-editor-code-foreground: #3d2f26;
  --lt-editor-code-border: #dbcab4;
  --lt-editor-code-selection-background: #ead6bd;
  --lt-editor-code-selection-foreground: #3d2f26;
  --lt-syntax-background: #ece0d0;
  --lt-syntax-foreground: #3d2f26;
  --lt-syntax-comment: #6f5847;
  --lt-syntax-keyword: #7526d6;
  --lt-syntax-string: #46671f;
  --lt-syntax-number: #7d5010;
  --lt-syntax-function: #35529c;
  --lt-syntax-variable: #3d2f26;
  --lt-syntax-type: #245f50;
  --lt-syntax-operator: #9a2f57;
  --lt-syntax-punctuation: #6f5847;
  --lt-syntax-inserted: #2f6b1a;
  --lt-syntax-inserted-background: #dceccd;
  --lt-syntax-deleted: #a83226;
  --lt-syntax-deleted-background: #f4ddd6;
  --lt-syntax-changed: #7d5a12;
  --lt-syntax-changed-background: #f1e6c8;
  --lt-navigation-button-hover-background: #9d5cf0;
  --lt-navigation-button-disabled-background: #ece0d0;
  --lt-navigation-button-disabled-foreground: #a8927b;
  --lt-navigation-recent-border: #dbcab4;
  --lt-navigation-recent-item-foreground: #3d2f26;
  --lt-navigation-recent-item-hover-foreground: #8839ef;
  --lt-minimap-viewport-border: #8839ef;
  --lt-minimap-viewport-background: rgba(136, 57, 239, 0.14);
}
:root[data-leaf-theme="arabica"][data-leaf-appearance="dark"] {
  --lt-theme-source: arabica-dark;
  --lt-background: #241c17;
  --lt-foreground: #ece0d2;
  --lt-surface: #1d1611;
  --lt-surface-elevated: #33271f;
  --lt-surface-muted: #1d1611;
  --lt-surface-sunken: #160f0a;
  --lt-border: #3a2d23;
  --lt-border-strong: #55463a;
  --lt-muted-foreground: #b09a86;
  --lt-hover-tint: #b09a86;
  --lt-primary: #cba6f7;
  --lt-primary-foreground: #241c17;
  --lt-primary-ink: #cba6f7;
  --lt-accent: #cba6f7;
  --lt-accent-foreground: #241c17;
  --lt-accent-ink: #cba6f7;
  --lt-danger: #e8917f;
  --lt-danger-foreground: #241c17;
  --lt-warning: #e8c07a;
  --lt-success: #b7d38a;
  --lt-success-foreground: #241c17;
  --lt-done: #8fd0bc;
  --lt-link: #cba6f7;
  --lt-link-hover: #b4befe;
  --lt-focus-ring: #cba6f7;
  --lt-focus-selection-background: #4a3a2e;
  --lt-focus-selection-foreground: #ece0d2;
  --lt-markdown-background: #241c17;
  --lt-markdown-foreground: #ece0d2;
  --lt-markdown-heading: #cba6f7;
  --lt-markdown-heading-2: #fbf3ea;
  --lt-markdown-heading-3: #e8917f;
  --lt-markdown-heading-4: #e8c07a;
  --lt-markdown-heading-5: #b7d38a;
  --lt-markdown-heading-6: #b09a86;
  --lt-markdown-rule: #3a2d23;
  --lt-markdown-link: #cba6f7;
  --lt-markdown-blockquote-border: #cba6f7;
  --lt-markdown-blockquote-foreground: #c9b6a4;
  --lt-markdown-alert-note: #8fb3e6;
  --lt-markdown-alert-tip: #b7d38a;
  --lt-markdown-alert-important: #cba6f7;
  --lt-markdown-alert-warning: #e8c07a;
  --lt-markdown-alert-caution: #e8917f;
  --lt-markdown-badge-background: #33271f;
  --lt-markdown-badge-foreground: #ece0d2;
  --lt-markdown-table-border: #73675b;
  --lt-markdown-table-row-background: #160f0a;
  --lt-markdown-thematic-break: #3a2d23;
  --lt-markdown-math-inline-background: #33271f;
  --lt-markdown-keyboard-background: #33271f;
  --lt-markdown-keyboard-border: #55463a;
  --lt-editor-inline-code-background: #33271f;
  --lt-editor-inline-code-foreground: #ece0d2;
  --lt-editor-code-background: #1d1611;
  --lt-editor-code-foreground: #ece0d2;
  --lt-editor-code-border: #3a2d23;
  --lt-editor-code-selection-background: #4a3a2e;
  --lt-editor-code-selection-foreground: #ece0d2;
  --lt-syntax-background: #1d1611;
  --lt-syntax-foreground: #ece0d2;
  --lt-syntax-comment: #a1846e;
  --lt-syntax-keyword: #cba6f7;
  --lt-syntax-string: #b7d38a;
  --lt-syntax-number: #e8b57a;
  --lt-syntax-function: #8fb3e6;
  --lt-syntax-variable: #ece0d2;
  --lt-syntax-type: #e8c07a;
  --lt-syntax-operator: #f0b8d8;
  --lt-syntax-punctuation: #c9b6a4;
  --lt-syntax-inserted: #b7d38a;
  --lt-syntax-inserted-background: #24331e;
  --lt-syntax-deleted: #e8917f;
  --lt-syntax-deleted-background: #3a211b;
  --lt-syntax-changed: #e8c07a;
  --lt-syntax-changed-background: #3a3018;
  --lt-navigation-button-hover-background: #b4befe;
  --lt-navigation-button-disabled-background: #33271f;
  --lt-navigation-button-disabled-foreground: #6b5949;
  --lt-navigation-recent-border: #3a2d23;
  --lt-navigation-recent-item-foreground: #ece0d2;
  --lt-navigation-recent-item-hover-foreground: #cba6f7;
  --lt-minimap-viewport-border: #cba6f7;
  --lt-minimap-viewport-background: rgba(203, 166, 247, 0.14);
}
:root[data-leaf-theme="bloodleaf"][data-leaf-appearance="light"] {
  --lt-theme-source: bloodleaf-light;
  --lt-background: #ffffff;
  --lt-foreground: #15181c;
  --lt-surface: #ffffff;
  --lt-surface-elevated: #ffffff;
  --lt-surface-muted: #f2f5f8;
  --lt-surface-sunken: #e8edf2;
  --lt-border: #dde5ec;
  --lt-border-strong: #b4c0ca;
  --lt-muted-foreground: #5b656e;
  --lt-hover-tint: #5b656e;
  --lt-primary: #d81e28;
  --lt-primary-foreground: #ffffff;
  --lt-primary-ink: #d81e28;
  --lt-accent: #d81e28;
  --lt-accent-foreground: #ffffff;
  --lt-accent-ink: #c61c25;
  --lt-danger: #b81420;
  --lt-danger-foreground: #ffffff;
  --lt-warning: #8a6100;
  --lt-success: #1a7a3a;
  --lt-success-foreground: #ffffff;
  --lt-done: #0d74c8;
  --lt-link: #d81e28;
  --lt-link-hover: #a5121b;
  --lt-focus-ring: #d81e28;
  --lt-focus-selection-background: #ffdcdd;
  --lt-focus-selection-foreground: #15181c;
  --lt-markdown-background: #ffffff;
  --lt-markdown-foreground: #15181c;
  --lt-markdown-heading: #0c0f12;
  --lt-markdown-heading-2: #0c0f12;
  --lt-markdown-heading-3: #0d74c8;
  --lt-markdown-heading-4: #8a6100;
  --lt-markdown-heading-5: #d81e28;
  --lt-markdown-heading-6: #5b656e;
  --lt-markdown-rule: #dde5ec;
  --lt-markdown-link: #d81e28;
  --lt-markdown-blockquote-border: #d81e28;
  --lt-markdown-blockquote-foreground: #3a424a;
  --lt-markdown-alert-note: #0d74c8;
  --lt-markdown-alert-tip: #1a7a3a;
  --lt-markdown-alert-important: #d81e28;
  --lt-markdown-alert-warning: #8a6100;
  --lt-markdown-alert-caution: #b81420;
  --lt-markdown-badge-background: #eef2f6;
  --lt-markdown-badge-foreground: #15181c;
  --lt-markdown-table-border: #82888e;
  --lt-markdown-table-row-background: #e8edf2;
  --lt-markdown-thematic-break: #dde5ec;
  --lt-markdown-math-inline-background: #eef2f6;
  --lt-markdown-keyboard-background: #ffffff;
  --lt-markdown-keyboard-border: #c4ced7;
  --lt-editor-inline-code-background: #f1f4f7;
  --lt-editor-inline-code-foreground: #15181c;
  --lt-editor-code-background: #f2f5f8;
  --lt-editor-code-foreground: #15181c;
  --lt-editor-code-border: #dde5ec;
  --lt-editor-code-selection-background: #ffdcdd;
  --lt-editor-code-selection-foreground: #15181c;
  --lt-syntax-background: #f2f5f8;
  --lt-syntax-foreground: #15181c;
  --lt-syntax-comment: #5c6670;
  --lt-syntax-keyword: #b3121b;
  --lt-syntax-string: #0f6b3d;
  --lt-syntax-number: #8a5a00;
  --lt-syntax-function: #0a63ab;
  --lt-syntax-variable: #15181c;
  --lt-syntax-type: #0a63ab;
  --lt-syntax-operator: #b3121b;
  --lt-syntax-punctuation: #454e57;
  --lt-syntax-inserted: #0a6a2f;
  --lt-syntax-inserted-background: #d9f2e0;
  --lt-syntax-deleted: #a3121c;
  --lt-syntax-deleted-background: #fbdcde;
  --lt-syntax-changed: #7a5200;
  --lt-syntax-changed-background: #f7ecc9;
  --lt-navigation-button-hover-background: #e94b52;
  --lt-navigation-button-disabled-background: #eef2f6;
  --lt-navigation-button-disabled-foreground: #98a2ab;
  --lt-navigation-recent-border: #dde5ec;
  --lt-navigation-recent-item-foreground: #15181c;
  --lt-navigation-recent-item-hover-foreground: #d81e28;
  --lt-minimap-viewport-border: #d81e28;
  --lt-minimap-viewport-background: rgba(216, 30, 40, 0.12);
}
:root[data-leaf-theme="bloodleaf"][data-leaf-appearance="dark"] {
  --lt-theme-source: bloodleaf-dark;
  --lt-background: #0f141a;
  --lt-foreground: #dfe6ee;
  --lt-surface: #0f141a;
  --lt-surface-elevated: #1a222b;
  --lt-surface-muted: #1c242e;
  --lt-surface-sunken: #0a0e13;
  --lt-border: #28323d;
  --lt-border-strong: #3c4855;
  --lt-muted-foreground: #8b98a6;
  --lt-hover-tint: #8b98a6;
  --lt-primary: #ff4b52;
  --lt-primary-foreground: #0f141a;
  --lt-primary-ink: #ff4b52;
  --lt-accent: #ff4b52;
  --lt-accent-foreground: #0f141a;
  --lt-accent-ink: #ff4b52;
  --lt-danger: #ff5f63;
  --lt-danger-foreground: #0f141a;
  --lt-warning: #ffc043;
  --lt-success: #3fd07a;
  --lt-success-foreground: #0f141a;
  --lt-done: #4fb3ff;
  --lt-link: #ff6b70;
  --lt-link-hover: #ff9296;
  --lt-focus-ring: #ff4b52;
  --lt-focus-selection-background: #442026;
  --lt-focus-selection-foreground: #ffffff;
  --lt-markdown-background: #0f141a;
  --lt-markdown-foreground: #dfe6ee;
  --lt-markdown-heading: #ffffff;
  --lt-markdown-heading-2: #ffffff;
  --lt-markdown-heading-3: #4fb3ff;
  --lt-markdown-heading-4: #ffc043;
  --lt-markdown-heading-5: #ff5f63;
  --lt-markdown-heading-6: #8b98a6;
  --lt-markdown-rule: #28323d;
  --lt-markdown-link: #ff6b70;
  --lt-markdown-blockquote-border: #ff4b52;
  --lt-markdown-blockquote-foreground: #dfe6ee;
  --lt-markdown-alert-note: #4fb3ff;
  --lt-markdown-alert-tip: #3fd07a;
  --lt-markdown-alert-important: #ff4b52;
  --lt-markdown-alert-warning: #ffc043;
  --lt-markdown-alert-caution: #ff5f63;
  --lt-markdown-badge-background: #1c242e;
  --lt-markdown-badge-foreground: #dfe6ee;
  --lt-markdown-table-border: #59636d;
  --lt-markdown-table-row-background: #0a0e13;
  --lt-markdown-thematic-break: #28323d;
  --lt-markdown-math-inline-background: #1c242e;
  --lt-markdown-keyboard-background: #151b23;
  --lt-markdown-keyboard-border: #28323d;
  --lt-editor-inline-code-background: #1c242e;
  --lt-editor-inline-code-foreground: #dfe6ee;
  --lt-editor-code-background: #0a0e13;
  --lt-editor-code-foreground: #dfe6ee;
  --lt-editor-code-border: #28323d;
  --lt-editor-code-selection-background: #442026;
  --lt-editor-code-selection-foreground: #ffffff;
  --lt-syntax-background: #0a0e13;
  --lt-syntax-foreground: #dfe6ee;
  --lt-syntax-comment: #7b8794;
  --lt-syntax-keyword: #ff6b70;
  --lt-syntax-string: #ffc043;
  --lt-syntax-number: #4fb3ff;
  --lt-syntax-function: #3fd07a;
  --lt-syntax-variable: #dfe6ee;
  --lt-syntax-type: #5ad6e0;
  --lt-syntax-operator: #ff6b70;
  --lt-syntax-punctuation: #b3bfcb;
  --lt-syntax-inserted: #3fd07a;
  --lt-syntax-inserted-background: #0e3a22;
  --lt-syntax-deleted: #ff9296;
  --lt-syntax-deleted-background: #3f1a1e;
  --lt-syntax-changed: #ffc043;
  --lt-syntax-changed-background: #3a2c0d;
  --lt-navigation-button-hover-background: #ff6b70;
  --lt-navigation-button-disabled-background: #1c242e;
  --lt-navigation-button-disabled-foreground: #5d6975;
  --lt-navigation-recent-border: #28323d;
  --lt-navigation-recent-item-foreground: #dfe6ee;
  --lt-navigation-recent-item-hover-foreground: #ff6b70;
  --lt-minimap-viewport-border: #ff4b52;
  --lt-minimap-viewport-background: rgba(255, 75, 82, 0.12);
}
:root[data-leaf-theme="cobalt"][data-leaf-appearance="light"] {
  --lt-theme-source: cobalt-light;
  --lt-background: #ffffff;
  --lt-foreground: #1b222f;
  --lt-surface: #ffffff;
  --lt-surface-elevated: #ffffff;
  --lt-surface-muted: #f4f6f9;
  --lt-surface-sunken: #edf0f5;
  --lt-border: #dbe0eb;
  --lt-border-strong: #b1bed3;
  --lt-muted-foreground: #445879;
  --lt-hover-tint: #445879;
  --lt-primary: #2068e3;
  --lt-primary-foreground: #ffffff;
  --lt-primary-ink: #2068e3;
  --lt-accent: #2068e3;
  --lt-accent-foreground: #ffffff;
  --lt-accent-ink: #1858c5;
  --lt-danger: #d3243a;
  --lt-danger-foreground: #ffffff;
  --lt-warning: #8a6d00;
  --lt-success: #087a34;
  --lt-success-foreground: #ffffff;
  --lt-done: #2068e3;
  --lt-link: #2068e3;
  --lt-link-hover: #1449a4;
  --lt-focus-ring: #598feb;
  --lt-focus-selection-background: #dfe9fb;
  --lt-focus-selection-foreground: #1b222f;
  --lt-markdown-background: #ffffff;
  --lt-markdown-foreground: #1b222f;
  --lt-markdown-heading: #0e1219;
  --lt-markdown-heading-2: #0e1219;
  --lt-markdown-heading-3: #0e1219;
  --lt-markdown-heading-4: #0e1219;
  --lt-markdown-heading-5: #0e1219;
  --lt-markdown-heading-6: #0e1219;
  --lt-markdown-rule: #dbe0eb;
  --lt-markdown-link: #2068e3;
  --lt-markdown-blockquote-border: #598feb;
  --lt-markdown-blockquote-foreground: #35445f;
  --lt-markdown-alert-note: #2068e3;
  --lt-markdown-alert-tip: #087a34;
  --lt-markdown-alert-important: #2068e3;
  --lt-markdown-alert-warning: #8a6d00;
  --lt-markdown-alert-caution: #d3243a;
  --lt-markdown-badge-background: #ebeef4;
  --lt-markdown-badge-foreground: #1b222f;
  --lt-markdown-table-border: #758bb1;
  --lt-markdown-table-row-background: #edf0f5;
  --lt-markdown-thematic-break: #dbe0eb;
  --lt-markdown-math-inline-background: #ebeef4;
  --lt-markdown-keyboard-background: #ffffff;
  --lt-markdown-keyboard-border: #cdd5e3;
  --lt-editor-inline-code-background: #f0f2f6;
  --lt-editor-inline-code-foreground: #1b222f;
  --lt-editor-code-background: #f4f6f9;
  --lt-editor-code-foreground: #1b222f;
  --lt-editor-code-border: #dbe0eb;
  --lt-editor-code-selection-background: #d9e5fa;
  --lt-editor-code-selection-foreground: #1b222f;
  --lt-syntax-background: #f4f6f9;
  --lt-syntax-foreground: #1b222f;
  --lt-syntax-comment: #485d80;
  --lt-syntax-keyword: #2068e3;
  --lt-syntax-string: #1a5dd2;
  --lt-syntax-number: #164fb2;
  --lt-syntax-function: #1858c5;
  --lt-syntax-variable: #1b222f;
  --lt-syntax-type: #1858c5;
  --lt-syntax-operator: #2068e3;
  --lt-syntax-punctuation: #3a4b67;
  --lt-syntax-inserted: #0a6a2f;
  --lt-syntax-inserted-background: #d6f2de;
  --lt-syntax-deleted: #a01a2a;
  --lt-syntax-deleted-background: #fbdde1;
  --lt-syntax-changed: #7a5200;
  --lt-syntax-changed-background: #f7ecc9;
  --lt-navigation-button-hover-background: #548bea;
  --lt-navigation-button-disabled-background: #ebeef4;
  --lt-navigation-button-disabled-foreground: #879abb;
  --lt-navigation-recent-border: #dbe0eb;
  --lt-navigation-recent-item-foreground: #1b222f;
  --lt-navigation-recent-item-hover-foreground: #2068e3;
  --lt-minimap-viewport-border: #2068e3;
  --lt-minimap-viewport-background: rgba(32, 104, 227, 0.14);
}
:root[data-leaf-theme="cobalt"][data-leaf-appearance="dark"] {
  --lt-theme-source: cobalt-dark;
  --lt-background: #1b1e25;
  --lt-foreground: #d6dae1;
  --lt-surface: #1b1e25;
  --lt-surface-elevated: #22262e;
  --lt-surface-muted: #252a33;
  --lt-surface-sunken: #15181d;
  --lt-border: #303642;
  --lt-border-strong: #4b5668;
  --lt-muted-foreground: #8e9aad;
  --lt-hover-tint: #8e9aad;
  --lt-primary: #77a3ee;
  --lt-primary-foreground: #1b1e25;
  --lt-primary-ink: #77a3ee;
  --lt-accent: #9cbcf3;
  --lt-accent-foreground: #1b1e25;
  --lt-accent-ink: #9cbcf3;
  --lt-danger: #fb4f55;
  --lt-danger-foreground: #1e1e1e;
  --lt-warning: #e0de71;
  --lt-success: #44cf6e;
  --lt-success-foreground: #1e1e1e;
  --lt-done: #77a3ee;
  --lt-link: #9cbcf3;
  --lt-link-hover: #aec8f5;
  --lt-focus-ring: #77a3ee;
  --lt-focus-selection-background: #0e316f;
  --lt-focus-selection-foreground: #ffffff;
  --lt-markdown-background: #1b1e25;
  --lt-markdown-foreground: #d6dae1;
  --lt-markdown-heading: #ffffff;
  --lt-markdown-heading-2: #ffffff;
  --lt-markdown-heading-3: #ffffff;
  --lt-markdown-heading-4: #ffffff;
  --lt-markdown-heading-5: #ffffff;
  --lt-markdown-heading-6: #ffffff;
  --lt-markdown-rule: #303642;
  --lt-markdown-link: #9cbcf3;
  --lt-markdown-blockquote-border: #77a3ee;
  --lt-markdown-blockquote-foreground: #d6dae1;
  --lt-markdown-alert-note: #9cbcf3;
  --lt-markdown-alert-tip: #44cf6e;
  --lt-markdown-alert-important: #77a3ee;
  --lt-markdown-alert-warning: #e0de71;
  --lt-markdown-alert-caution: #fb464c;
  --lt-markdown-badge-background: #252a33;
  --lt-markdown-badge-foreground: #d6dae1;
  --lt-markdown-table-border: #5d6a80;
  --lt-markdown-table-row-background: #15181d;
  --lt-markdown-thematic-break: #303642;
  --lt-markdown-math-inline-background: #252a33;
  --lt-markdown-keyboard-background: #20242c;
  --lt-markdown-keyboard-border: #303642;
  --lt-editor-inline-code-background: #252a33;
  --lt-editor-inline-code-foreground: #d6dae1;
  --lt-editor-code-background: #15181d;
  --lt-editor-code-foreground: #d6dae1;
  --lt-editor-code-border: #303642;
  --lt-editor-code-selection-background: #0f377b;
  --lt-editor-code-selection-foreground: #ffffff;
  --lt-syntax-background: #15181d;
  --lt-syntax-foreground: #d6dae1;
  --lt-syntax-comment: #808da3;
  --lt-syntax-keyword: #bcd2f7;
  --lt-syntax-string: #c8daf8;
  --lt-syntax-number: #6898ec;
  --lt-syntax-function: #9cbcf3;
  --lt-syntax-variable: #d6dae1;
  --lt-syntax-type: #9cbcf3;
  --lt-syntax-operator: #bcd2f7;
  --lt-syntax-punctuation: #b3bbc8;
  --lt-syntax-inserted: #44cf6e;
  --lt-syntax-inserted-background: #143621;
  --lt-syntax-deleted: #ff8f92;
  --lt-syntax-deleted-background: #3a1d20;
  --lt-syntax-changed: #e0de71;
  --lt-syntax-changed-background: #33301a;
  --lt-navigation-button-hover-background: #9cbcf3;
  --lt-navigation-button-disabled-background: #252a33;
  --lt-navigation-button-disabled-foreground: #5e6b81;
  --lt-navigation-recent-border: #303642;
  --lt-navigation-recent-item-foreground: #d6dae1;
  --lt-navigation-recent-item-hover-foreground: #9cbcf3;
  --lt-minimap-viewport-border: #77a3ee;
  --lt-minimap-viewport-background: rgba(119, 163, 238, 0.14);
}
:root[data-leaf-theme="fern"][data-leaf-appearance="light"] {
  --lt-theme-source: fern-light;
  --lt-background: #ffffff;
  --lt-foreground: #222222;
  --lt-surface: #ffffff;
  --lt-surface-elevated: #ffffff;
  --lt-surface-muted: #f6f6f6;
  --lt-surface-sunken: #f0f0f0;
  --lt-border: #e0e0e0;
  --lt-border-strong: #bdbdbd;
  --lt-muted-foreground: #575757;
  --lt-hover-tint: #575757;
  --lt-primary: #1a7f37;
  --lt-primary-foreground: #ffffff;
  --lt-primary-ink: #1a7f37;
  --lt-accent: #1a7f37;
  --lt-accent-foreground: #ffffff;
  --lt-accent-ink: #187734;
  --lt-danger: #d3243a;
  --lt-danger-foreground: #ffffff;
  --lt-warning: #8a6d00;
  --lt-success: #087a34;
  --lt-success-foreground: #ffffff;
  --lt-done: #1a7f37;
  --lt-link: #1a7f37;
  --lt-link-hover: #0f5a27;
  --lt-focus-ring: #2da44e;
  --lt-focus-selection-background: #d6efdd;
  --lt-focus-selection-foreground: #222222;
  --lt-markdown-background: #ffffff;
  --lt-markdown-foreground: #222222;
  --lt-markdown-heading: #11111a;
  --lt-markdown-heading-2: #11111a;
  --lt-markdown-heading-3: #11111a;
  --lt-markdown-heading-4: #11111a;
  --lt-markdown-heading-5: #11111a;
  --lt-markdown-heading-6: #11111a;
  --lt-markdown-rule: #e0e0e0;
  --lt-markdown-link: #1a7f37;
  --lt-markdown-blockquote-border: #2da44e;
  --lt-markdown-blockquote-foreground: #444444;
  --lt-markdown-alert-note: #1a7f37;
  --lt-markdown-alert-tip: #087a34;
  --lt-markdown-alert-important: #1a7f37;
  --lt-markdown-alert-warning: #8a6d00;
  --lt-markdown-alert-caution: #d3243a;
  --lt-markdown-badge-background: #eeeeee;
  --lt-markdown-badge-foreground: #222222;
  --lt-markdown-table-border: #8a8a8a;
  --lt-markdown-table-row-background: #f0f0f0;
  --lt-markdown-thematic-break: #e0e0e0;
  --lt-markdown-math-inline-background: #eeeeee;
  --lt-markdown-keyboard-background: #ffffff;
  --lt-markdown-keyboard-border: #d4d4d4;
  --lt-editor-inline-code-background: #f2f2f2;
  --lt-editor-inline-code-foreground: #222222;
  --lt-editor-code-background: #f6f6f6;
  --lt-editor-code-foreground: #222222;
  --lt-editor-code-border: #e0e0e0;
  --lt-editor-code-selection-background: #d9e5fb;
  --lt-editor-code-selection-foreground: #222222;
  --lt-syntax-background: #f6f6f6;
  --lt-syntax-foreground: #222222;
  --lt-syntax-comment: #5c5c5c;
  --lt-syntax-keyword: #1a7f37;
  --lt-syntax-string: #8a5a00;
  --lt-syntax-number: #6a30c0;
  --lt-syntax-function: #0f6b4e;
  --lt-syntax-variable: #222222;
  --lt-syntax-type: #0f6b4e;
  --lt-syntax-operator: #1a7f37;
  --lt-syntax-punctuation: #4a4a4a;
  --lt-syntax-inserted: #0a6a2f;
  --lt-syntax-inserted-background: #d6f2de;
  --lt-syntax-deleted: #a01a2a;
  --lt-syntax-deleted-background: #fbdde1;
  --lt-syntax-changed: #7a5200;
  --lt-syntax-changed-background: #f7ecc9;
  --lt-navigation-button-hover-background: #24a148;
  --lt-navigation-button-disabled-background: #eeeeee;
  --lt-navigation-button-disabled-foreground: #999999;
  --lt-navigation-recent-border: #e0e0e0;
  --lt-navigation-recent-item-foreground: #222222;
  --lt-navigation-recent-item-hover-foreground: #1a7f37;
  --lt-minimap-viewport-border: #1a7f37;
  --lt-minimap-viewport-background: rgba(26, 127, 55, 0.14);
}
:root[data-leaf-theme="fern"][data-leaf-appearance="dark"] {
  --lt-theme-source: fern-dark;
  --lt-background: #1e1e1e;
  --lt-foreground: #dadada;
  --lt-surface: #1e1e1e;
  --lt-surface-elevated: #262626;
  --lt-surface-muted: #2a2a2a;
  --lt-surface-sunken: #181818;
  --lt-border: #363636;
  --lt-border-strong: #555555;
  --lt-muted-foreground: #999999;
  --lt-hover-tint: #999999;
  --lt-primary: #3fb950;
  --lt-primary-foreground: #1e1e1e;
  --lt-primary-ink: #3fb950;
  --lt-accent: #56d364;
  --lt-accent-foreground: #1e1e1e;
  --lt-accent-ink: #56d364;
  --lt-danger: #fb4f55;
  --lt-danger-foreground: #1e1e1e;
  --lt-warning: #e0de71;
  --lt-success: #44cf6e;
  --lt-success-foreground: #1e1e1e;
  --lt-done: #3fb950;
  --lt-link: #56d364;
  --lt-link-hover: #6fdd8b;
  --lt-focus-ring: #3fb950;
  --lt-focus-selection-background: #1f3a26;
  --lt-focus-selection-foreground: #ffffff;
  --lt-markdown-background: #1e1e1e;
  --lt-markdown-foreground: #dadada;
  --lt-markdown-heading: #ffffff;
  --lt-markdown-heading-2: #ffffff;
  --lt-markdown-heading-3: #ffffff;
  --lt-markdown-heading-4: #ffffff;
  --lt-markdown-heading-5: #ffffff;
  --lt-markdown-heading-6: #ffffff;
  --lt-markdown-rule: #363636;
  --lt-markdown-link: #56d364;
  --lt-markdown-blockquote-border: #3fb950;
  --lt-markdown-blockquote-foreground: #dadada;
  --lt-markdown-alert-note: #56d364;
  --lt-markdown-alert-tip: #44cf6e;
  --lt-markdown-alert-important: #3fb950;
  --lt-markdown-alert-warning: #e0de71;
  --lt-markdown-alert-caution: #fb464c;
  --lt-markdown-badge-background: #2a2a2a;
  --lt-markdown-badge-foreground: #dadada;
  --lt-markdown-table-border: #696969;
  --lt-markdown-table-row-background: #181818;
  --lt-markdown-thematic-break: #363636;
  --lt-markdown-math-inline-background: #2a2a2a;
  --lt-markdown-keyboard-background: #242424;
  --lt-markdown-keyboard-border: #363636;
  --lt-editor-inline-code-background: #2a2a2a;
  --lt-editor-inline-code-foreground: #dadada;
  --lt-editor-code-background: #181818;
  --lt-editor-code-foreground: #dadada;
  --lt-editor-code-border: #363636;
  --lt-editor-code-selection-background: #2f3a54;
  --lt-editor-code-selection-foreground: #ffffff;
  --lt-syntax-background: #181818;
  --lt-syntax-foreground: #dadada;
  --lt-syntax-comment: #8c8c8c;
  --lt-syntax-keyword: #7ee787;
  --lt-syntax-string: #e0de71;
  --lt-syntax-number: #a882ff;
  --lt-syntax-function: #56d364;
  --lt-syntax-variable: #dadada;
  --lt-syntax-type: #56d364;
  --lt-syntax-operator: #7ee787;
  --lt-syntax-punctuation: #bababa;
  --lt-syntax-inserted: #44cf6e;
  --lt-syntax-inserted-background: #143621;
  --lt-syntax-deleted: #ff8f92;
  --lt-syntax-deleted-background: #3a1d20;
  --lt-syntax-changed: #e0de71;
  --lt-syntax-changed-background: #33301a;
  --lt-navigation-button-hover-background: #56d364;
  --lt-navigation-button-disabled-background: #2a2a2a;
  --lt-navigation-button-disabled-foreground: #6a6a6a;
  --lt-navigation-recent-border: #363636;
  --lt-navigation-recent-item-foreground: #dadada;
  --lt-navigation-recent-item-hover-foreground: #56d364;
  --lt-minimap-viewport-border: #3fb950;
  --lt-minimap-viewport-background: rgba(110, 118, 129, 0.14);
}
:root[data-leaf-theme="ginger"][data-leaf-appearance="light"] {
  --lt-theme-source: ginger-light;
  --lt-background: #fdf7ef;
  --lt-foreground: #43382e;
  --lt-surface: #f5ece0;
  --lt-surface-elevated: #fffdf9;
  --lt-surface-muted: #f5ece0;
  --lt-surface-sunken: #ece0d0;
  --lt-border: #e6dac6;
  --lt-border-strong: #cbb99b;
  --lt-muted-foreground: #6f6151;
  --lt-hover-tint: #6f6151;
  --lt-primary: #f0662e;
  --lt-primary-foreground: #2b1e14;
  --lt-primary-ink: #b5461a;
  --lt-accent: #f0662e;
  --lt-accent-foreground: #2b1e14;
  --lt-accent-ink: #ac3a0c;
  --lt-danger: #c0392b;
  --lt-danger-foreground: #ffffff;
  --lt-warning: #8a5e12;
  --lt-success: #46671f;
  --lt-success-foreground: #ffffff;
  --lt-done: #197256;
  --lt-link: #b5461a;
  --lt-link-hover: #98380f;
  --lt-focus-ring: #f0662e;
  --lt-focus-selection-background: #fbdcc4;
  --lt-focus-selection-foreground: #43382e;
  --lt-markdown-background: #fdf7ef;
  --lt-markdown-foreground: #43382e;
  --lt-markdown-heading: #b5461a;
  --lt-markdown-heading-2: #3a2f26;
  --lt-markdown-heading-3: #c0395a;
  --lt-markdown-heading-4: #8a5e12;
  --lt-markdown-heading-5: #46671f;
  --lt-markdown-heading-6: #6f6151;
  --lt-markdown-rule: #e6dac6;
  --lt-markdown-link: #b5461a;
  --lt-markdown-blockquote-border: #f0662e;
  --lt-markdown-blockquote-foreground: #6f6151;
  --lt-markdown-alert-note: #3560b5;
  --lt-markdown-alert-tip: #46671f;
  --lt-markdown-alert-important: #bd4f1e;
  --lt-markdown-alert-warning: #8a5e12;
  --lt-markdown-alert-caution: #c0395a;
  --lt-markdown-badge-background: #f2e9db;
  --lt-markdown-badge-foreground: #43382e;
  --lt-markdown-table-border: #8b7f71;
  --lt-markdown-table-row-background: #ece0d0;
  --lt-markdown-thematic-break: #e6dac6;
  --lt-markdown-math-inline-background: #f2e9db;
  --lt-markdown-keyboard-background: #fdf7ef;
  --lt-markdown-keyboard-border: #cbb99b;
  --lt-editor-inline-code-background: #f2e9db;
  --lt-editor-inline-code-foreground: #43382e;
  --lt-editor-code-background: #f5ece0;
  --lt-editor-code-foreground: #43382e;
  --lt-editor-code-border: #e6dac6;
  --lt-editor-code-selection-background: #fbdcc4;
  --lt-editor-code-selection-foreground: #43382e;
  --lt-syntax-background: #f5ece0;
  --lt-syntax-foreground: #43382e;
  --lt-syntax-comment: #6f6151;
  --lt-syntax-keyword: #a63f16;
  --lt-syntax-string: #46671f;
  --lt-syntax-number: #9a4e12;
  --lt-syntax-function: #3560b5;
  --lt-syntax-variable: #43382e;
  --lt-syntax-type: #197256;
  --lt-syntax-operator: #b23a5f;
  --lt-syntax-punctuation: #6f6151;
  --lt-syntax-inserted: #2f6b1a;
  --lt-syntax-inserted-background: #dceccd;
  --lt-syntax-deleted: #a83226;
  --lt-syntax-deleted-background: #f4ddd6;
  --lt-syntax-changed: #7d5a12;
  --lt-syntax-changed-background: #f1e6c8;
  --lt-navigation-button-hover-background: #ff7d47;
  --lt-navigation-button-disabled-background: #f2e9db;
  --lt-navigation-button-disabled-foreground: #a8967a;
  --lt-navigation-recent-border: #e6dac6;
  --lt-navigation-recent-item-foreground: #43382e;
  --lt-navigation-recent-item-hover-foreground: #b5461a;
  --lt-minimap-viewport-border: #f0662e;
  --lt-minimap-viewport-background: rgba(240, 102, 46, 0.16);
}
:root[data-leaf-theme="ginger"][data-leaf-appearance="dark"] {
  --lt-theme-source: ginger-dark;
  --lt-background: #2a2d3d;
  --lt-foreground: #c6ceef;
  --lt-surface: #262a3a;
  --lt-surface-elevated: #33374a;
  --lt-surface-muted: #262a3a;
  --lt-surface-sunken: #21242f;
  --lt-border: #414559;
  --lt-border-strong: #515670;
  --lt-muted-foreground: #a5acc9;
  --lt-hover-tint: #a5acc9;
  --lt-primary: #f2934e;
  --lt-primary-foreground: #2a2d3d;
  --lt-primary-ink: #f2934e;
  --lt-accent: #f2934e;
  --lt-accent-foreground: #2a2d3d;
  --lt-accent-ink: #f2934e;
  --lt-danger: #ff777f;
  --lt-danger-foreground: #2a2d3d;
  --lt-warning: #f9e2af;
  --lt-success: #38c68d;
  --lt-success-foreground: #2a2d3d;
  --lt-done: #68bccc;
  --lt-link: #f2934e;
  --lt-link-hover: #f7ad72;
  --lt-focus-ring: #f2934e;
  --lt-focus-selection-background: #45372a;
  --lt-focus-selection-foreground: #ffffff;
  --lt-markdown-background: #2a2d3d;
  --lt-markdown-foreground: #c6ceef;
  --lt-markdown-heading: #f2934e;
  --lt-markdown-heading-2: #eef1fb;
  --lt-markdown-heading-3: #f3898f;
  --lt-markdown-heading-4: #f9c96f;
  --lt-markdown-heading-5: #7fd4a6;
  --lt-markdown-heading-6: #a5acc9;
  --lt-markdown-rule: #414559;
  --lt-markdown-link: #f2934e;
  --lt-markdown-blockquote-border: #f2934e;
  --lt-markdown-blockquote-foreground: #b5bddc;
  --lt-markdown-alert-note: #93b7f5;
  --lt-markdown-alert-tip: #38c68d;
  --lt-markdown-alert-important: #f2934e;
  --lt-markdown-alert-warning: #f9e2af;
  --lt-markdown-alert-caution: #f3898f;
  --lt-markdown-badge-background: #33374a;
  --lt-markdown-badge-foreground: #c6ceef;
  --lt-markdown-table-border: #71768f;
  --lt-markdown-table-row-background: #21242f;
  --lt-markdown-thematic-break: #414559;
  --lt-markdown-math-inline-background: #33374a;
  --lt-markdown-keyboard-background: #33374a;
  --lt-markdown-keyboard-border: #515670;
  --lt-editor-inline-code-background: #33374a;
  --lt-editor-inline-code-foreground: #c6ceef;
  --lt-editor-code-background: #242734;
  --lt-editor-code-foreground: #c6ceef;
  --lt-editor-code-border: #414559;
  --lt-editor-code-selection-background: #45372a;
  --lt-editor-code-selection-foreground: #ffffff;
  --lt-syntax-background: #242734;
  --lt-syntax-foreground: #c6ceef;
  --lt-syntax-comment: #949bb7;
  --lt-syntax-keyword: #f2934e;
  --lt-syntax-string: #38c68d;
  --lt-syntax-number: #f7ad72;
  --lt-syntax-function: #93b7f5;
  --lt-syntax-variable: #c6ceef;
  --lt-syntax-type: #f9c96f;
  --lt-syntax-operator: #f3898f;
  --lt-syntax-punctuation: #b5bddc;
  --lt-syntax-inserted: #38c68d;
  --lt-syntax-inserted-background: #1e3a2c;
  --lt-syntax-deleted: #ff626b;
  --lt-syntax-deleted-background: #3a2024;
  --lt-syntax-changed: #f9c96f;
  --lt-syntax-changed-background: #3a3320;
  --lt-navigation-button-hover-background: #f7ad72;
  --lt-navigation-button-disabled-background: #33374a;
  --lt-navigation-button-disabled-foreground: #6c7086;
  --lt-navigation-recent-border: #414559;
  --lt-navigation-recent-item-foreground: #c6ceef;
  --lt-navigation-recent-item-hover-foreground: #f2934e;
  --lt-minimap-viewport-border: #f2934e;
  --lt-minimap-viewport-background: rgba(242, 147, 78, 0.16);
}
:root[data-leaf-theme="github"][data-leaf-appearance="light"] {
  --lt-theme-source: github-light;
  --lt-background: #ffffff;
  --lt-foreground: #1f2328;
  --lt-surface: #ffffff;
  --lt-surface-elevated: #ffffff;
  --lt-surface-muted: #f6f8fa;
  --lt-surface-sunken: #f6f8fa;
  --lt-border: #d1d9e0;
  --lt-border-strong: #818b98;
  --lt-muted-foreground: #59636e;
  --lt-hover-tint: #59636e;
  --lt-primary: #1f883d;
  --lt-primary-foreground: #ffffff;
  --lt-primary-ink: #1f883d;
  --lt-accent: #0969da;
  --lt-accent-foreground: #ffffff;
  --lt-accent-ink: #0963cf;
  --lt-danger: #d1242f;
  --lt-danger-foreground: #ffffff;
  --lt-warning: #9a6700;
  --lt-success: #1a7f37;
  --lt-success-foreground: #ffffff;
  --lt-done: #8250df;
  --lt-link: #0969da;
  --lt-link-hover: #0969da;
  --lt-focus-ring: #0969da;
  --lt-focus-selection-background: #0969da33;
  --lt-focus-selection-foreground: #1f2328;
  --lt-markdown-background: #ffffff;
  --lt-markdown-foreground: #1f2328;
  --lt-markdown-heading: #1f2328;
  --lt-markdown-heading-2: #1f2328;
  --lt-markdown-heading-3: #1f2328;
  --lt-markdown-heading-4: #1f2328;
  --lt-markdown-heading-5: #1f2328;
  --lt-markdown-heading-6: #1f2328;
  --lt-markdown-rule: #d1d9e0b3;
  --lt-markdown-link: #0969da;
  --lt-markdown-blockquote-border: #d1d9e0;
  --lt-markdown-blockquote-foreground: #59636e;
  --lt-markdown-alert-note: #0969da;
  --lt-markdown-alert-tip: #1a7f37;
  --lt-markdown-alert-important: #1f883d;
  --lt-markdown-alert-warning: #9a6700;
  --lt-markdown-alert-caution: #d1242f;
  --lt-markdown-badge-background: #f6f8fa;
  --lt-markdown-badge-foreground: #25292e;
  --lt-markdown-table-border: #8a9097;
  --lt-markdown-table-row-background: #f6f8fa;
  --lt-markdown-thematic-break: #d1d9e0b3;
  --lt-markdown-math-inline-background: #f6f8fa;
  --lt-markdown-keyboard-background: #ffffff;
  --lt-markdown-keyboard-border: #d1d9e0;
  --lt-editor-inline-code-background: #f6f8fa;
  --lt-editor-inline-code-foreground: #1f2328;
  --lt-editor-code-background: #f6f8fa;
  --lt-editor-code-foreground: #1f2328;
  --lt-editor-code-border: #d1d9e0;
  --lt-editor-code-selection-background: #0969da33;
  --lt-editor-code-selection-foreground: #1f2328;
  --lt-syntax-background: #f6f8fa;
  --lt-syntax-foreground: #1f2328;
  --lt-syntax-comment: #59636e;
  --lt-syntax-keyword: #cf222e;
  --lt-syntax-string: #0a3069;
  --lt-syntax-number: #0550ae;
  --lt-syntax-function: #6639ba;
  --lt-syntax-variable: #953800;
  --lt-syntax-type: #6639ba;
  --lt-syntax-operator: #cf222e;
  --lt-syntax-punctuation: #59636e;
  --lt-syntax-inserted: #116329;
  --lt-syntax-inserted-background: #dafbe1;
  --lt-syntax-deleted: #82071e;
  --lt-syntax-deleted-background: #ffebe9;
  --lt-syntax-changed: #953800;
  --lt-syntax-changed-background: #ffd8b5;
  --lt-navigation-button-hover-background: #1c8139;
  --lt-navigation-button-disabled-background: #eff2f5;
  --lt-navigation-button-disabled-foreground: #818b98;
  --lt-navigation-recent-border: #d1d9e0;
  --lt-navigation-recent-item-foreground: #1f2328;
  --lt-navigation-recent-item-hover-foreground: #1f883d;
  --lt-minimap-viewport-border: #0969da;
  --lt-minimap-viewport-background: rgba(110, 118, 129, 0.14);
}
:root[data-leaf-theme="github"][data-leaf-appearance="dark"] {
  --lt-theme-source: github-dark;
  --lt-background: #0d1117;
  --lt-foreground: #f0f6fc;
  --lt-surface: #0d1117;
  --lt-surface-elevated: #0d1117;
  --lt-surface-muted: #151b23;
  --lt-surface-sunken: #010409;
  --lt-border: #39435f;
  --lt-border-strong: #5b6788;
  --lt-muted-foreground: #9198a1;
  --lt-hover-tint: #9198a1;
  --lt-primary: #238636;
  --lt-primary-foreground: #ffffff;
  --lt-primary-ink: #258f3a;
  --lt-accent: #4493f8;
  --lt-accent-foreground: #0d1117;
  --lt-accent-ink: #4493f8;
  --lt-danger: #f85149;
  --lt-danger-foreground: #ffffff;
  --lt-warning: #d29922;
  --lt-success: #3fb950;
  --lt-success-foreground: #ffffff;
  --lt-done: #ab7df8;
  --lt-link: #4493f8;
  --lt-link-hover: #4493f8;
  --lt-focus-ring: #1f6feb;
  --lt-focus-selection-background: #1f6febb3;
  --lt-focus-selection-foreground: #f0f6fc;
  --lt-markdown-background: #0d1117;
  --lt-markdown-foreground: #f0f6fc;
  --lt-markdown-heading: #f0f6fc;
  --lt-markdown-heading-2: #f0f6fc;
  --lt-markdown-heading-3: #f0f6fc;
  --lt-markdown-heading-4: #f0f6fc;
  --lt-markdown-heading-5: #f0f6fc;
  --lt-markdown-heading-6: #f0f6fc;
  --lt-markdown-rule: #39435fb3;
  --lt-markdown-link: #4493f8;
  --lt-markdown-blockquote-border: #39435f;
  --lt-markdown-blockquote-foreground: #9198a1;
  --lt-markdown-alert-note: #4493f8;
  --lt-markdown-alert-tip: #3fb950;
  --lt-markdown-alert-important: #258f3a;
  --lt-markdown-alert-warning: #d29922;
  --lt-markdown-alert-caution: #f85149;
  --lt-markdown-badge-background: #212830;
  --lt-markdown-badge-foreground: #f0f6fc;
  --lt-markdown-table-border: #566078;
  --lt-markdown-table-row-background: #010409;
  --lt-markdown-thematic-break: #39435fb3;
  --lt-markdown-math-inline-background: #212830;
  --lt-markdown-keyboard-background: #0d1117;
  --lt-markdown-keyboard-border: #39435f;
  --lt-editor-inline-code-background: #151b23;
  --lt-editor-inline-code-foreground: #f0f6fc;
  --lt-editor-code-background: #151b23;
  --lt-editor-code-foreground: #f0f6fc;
  --lt-editor-code-border: #39435f;
  --lt-editor-code-selection-background: #1f6febb3;
  --lt-editor-code-selection-foreground: #f0f6fc;
  --lt-syntax-background: #151b23;
  --lt-syntax-foreground: #f0f6fc;
  --lt-syntax-comment: #9198a1;
  --lt-syntax-keyword: #ff7b72;
  --lt-syntax-string: #a5d6ff;
  --lt-syntax-number: #79c0ff;
  --lt-syntax-function: #d2a8ff;
  --lt-syntax-variable: #ffa657;
  --lt-syntax-type: #d2a8ff;
  --lt-syntax-operator: #ff7b72;
  --lt-syntax-punctuation: #9198a1;
  --lt-syntax-inserted: #aff5b4;
  --lt-syntax-inserted-background: #033a16;
  --lt-syntax-deleted: #ffdcd7;
  --lt-syntax-deleted-background: #67060c;
  --lt-syntax-changed: #ffdfb6;
  --lt-syntax-changed-background: #5a1e02;
  --lt-navigation-button-hover-background: #29903b;
  --lt-navigation-button-disabled-background: #212830;
  --lt-navigation-button-disabled-foreground: #656c76;
  --lt-navigation-recent-border: #3d444d;
  --lt-navigation-recent-item-foreground: #f0f6fc;
  --lt-navigation-recent-item-hover-foreground: #238636;
  --lt-minimap-viewport-border: #4493f8;
  --lt-minimap-viewport-background: rgba(110, 118, 129, 0.14);
}
:root[data-leaf-theme="goldenrod"][data-leaf-appearance="light"] {
  --lt-theme-source: goldenrod-light;
  --lt-background: #fffdf7;
  --lt-foreground: #1c1a15;
  --lt-surface: #f7f3e8;
  --lt-surface-elevated: #ffffff;
  --lt-surface-muted: #f7f3e8;
  --lt-surface-sunken: #efe9d8;
  --lt-border: #e6ddc6;
  --lt-border-strong: #cbbd98;
  --lt-muted-foreground: #6e6550;
  --lt-hover-tint: #f0b400;
  --lt-primary: #f0b400;
  --lt-primary-foreground: #1c1a15;
  --lt-primary-ink: #9a6800;
  --lt-accent: #f0b400;
  --lt-accent-foreground: #1c1a15;
  --lt-accent-ink: #8f5c00;
  --lt-danger: #c0392b;
  --lt-danger-foreground: #ffffff;
  --lt-warning: #8a6000;
  --lt-success: #46671f;
  --lt-success-foreground: #ffffff;
  --lt-done: #8a6a00;
  --lt-link: #9a6800;
  --lt-link-hover: #7d5400;
  --lt-focus-ring: #e0a400;
  --lt-focus-selection-background: #fbe9b0;
  --lt-focus-selection-foreground: #1c1a15;
  --lt-markdown-background: #fffdf7;
  --lt-markdown-foreground: #1c1a15;
  --lt-markdown-heading: #1c1a15;
  --lt-markdown-heading-2: #9a6800;
  --lt-markdown-heading-3: #b5442f;
  --lt-markdown-heading-4: #7d5400;
  --lt-markdown-heading-5: #46671f;
  --lt-markdown-heading-6: #6e6550;
  --lt-markdown-rule: #e6ddc6;
  --lt-markdown-link: #9a6800;
  --lt-markdown-blockquote-border: #f0b400;
  --lt-markdown-blockquote-foreground: #6e6550;
  --lt-markdown-alert-note: #35529c;
  --lt-markdown-alert-tip: #46671f;
  --lt-markdown-alert-important: #9a6800;
  --lt-markdown-alert-warning: #8a6000;
  --lt-markdown-alert-caution: #b5442f;
  --lt-markdown-badge-background: #f2ead8;
  --lt-markdown-badge-foreground: #1c1a15;
  --lt-markdown-table-border: #8b8577;
  --lt-markdown-table-row-background: #efe9d8;
  --lt-markdown-thematic-break: #e6ddc6;
  --lt-markdown-math-inline-background: #f2ead8;
  --lt-markdown-keyboard-background: #fffdf7;
  --lt-markdown-keyboard-border: #cbbd98;
  --lt-editor-inline-code-background: #f2ead8;
  --lt-editor-inline-code-foreground: #1c1a15;
  --lt-editor-code-background: #f7f3e8;
  --lt-editor-code-foreground: #1c1a15;
  --lt-editor-code-border: #e6ddc6;
  --lt-editor-code-selection-background: #fbe9b0;
  --lt-editor-code-selection-foreground: #1c1a15;
  --lt-syntax-background: #f7f3e8;
  --lt-syntax-foreground: #1c1a15;
  --lt-syntax-comment: #6e6550;
  --lt-syntax-keyword: #7d5400;
  --lt-syntax-string: #46671f;
  --lt-syntax-number: #8a4a00;
  --lt-syntax-function: #35529c;
  --lt-syntax-variable: #1c1a15;
  --lt-syntax-type: #245f50;
  --lt-syntax-operator: #9a2f57;
  --lt-syntax-punctuation: #6e6550;
  --lt-syntax-inserted: #2f6b1a;
  --lt-syntax-inserted-background: #dceccd;
  --lt-syntax-deleted: #a83226;
  --lt-syntax-deleted-background: #f4ddd6;
  --lt-syntax-changed: #7d5a12;
  --lt-syntax-changed-background: #f1e6c8;
  --lt-navigation-button-hover-background: #ffca28;
  --lt-navigation-button-disabled-background: #f2ead8;
  --lt-navigation-button-disabled-foreground: #a89a78;
  --lt-navigation-recent-border: #e6ddc6;
  --lt-navigation-recent-item-foreground: #1c1a15;
  --lt-navigation-recent-item-hover-foreground: #9a6800;
  --lt-minimap-viewport-border: #f0b400;
  --lt-minimap-viewport-background: rgba(240, 180, 0, 0.16);
}
:root[data-leaf-theme="goldenrod"][data-leaf-appearance="dark"] {
  --lt-theme-source: goldenrod-dark;
  --lt-background: #131210;
  --lt-foreground: #eceae2;
  --lt-surface: #0e0d0b;
  --lt-surface-elevated: #201e18;
  --lt-surface-muted: #0e0d0b;
  --lt-surface-sunken: #090805;
  --lt-border: #2b2820;
  --lt-border-strong: #4a4536;
  --lt-muted-foreground: #a49c86;
  --lt-hover-tint: #ffc300;
  --lt-primary: #ffc300;
  --lt-primary-foreground: #131210;
  --lt-primary-ink: #ffc300;
  --lt-accent: #ffc300;
  --lt-accent-foreground: #131210;
  --lt-accent-ink: #ffc300;
  --lt-danger: #f0857a;
  --lt-danger-foreground: #131210;
  --lt-warning: #ffce5a;
  --lt-success: #b7d38a;
  --lt-success-foreground: #131210;
  --lt-done: #f0c674;
  --lt-link: #ffc300;
  --lt-link-hover: #ffd451;
  --lt-focus-ring: #ffc300;
  --lt-focus-selection-background: #3a3320;
  --lt-focus-selection-foreground: #eceae2;
  --lt-markdown-background: #131210;
  --lt-markdown-foreground: #eceae2;
  --lt-markdown-heading: #ffc300;
  --lt-markdown-heading-2: #fbf6ec;
  --lt-markdown-heading-3: #f0857a;
  --lt-markdown-heading-4: #ffce5a;
  --lt-markdown-heading-5: #b7d38a;
  --lt-markdown-heading-6: #a49c86;
  --lt-markdown-rule: #2b2820;
  --lt-markdown-link: #ffc300;
  --lt-markdown-blockquote-border: #ffc300;
  --lt-markdown-blockquote-foreground: #c9c2ae;
  --lt-markdown-alert-note: #8fb3e6;
  --lt-markdown-alert-tip: #b7d38a;
  --lt-markdown-alert-important: #ffc300;
  --lt-markdown-alert-warning: #ffce5a;
  --lt-markdown-alert-caution: #f0857a;
  --lt-markdown-badge-background: #201e18;
  --lt-markdown-badge-foreground: #eceae2;
  --lt-markdown-table-border: #636159;
  --lt-markdown-table-row-background: #090805;
  --lt-markdown-thematic-break: #2b2820;
  --lt-markdown-math-inline-background: #201e18;
  --lt-markdown-keyboard-background: #201e18;
  --lt-markdown-keyboard-border: #4a4536;
  --lt-editor-inline-code-background: #201e18;
  --lt-editor-inline-code-foreground: #eceae2;
  --lt-editor-code-background: #0e0d0b;
  --lt-editor-code-foreground: #eceae2;
  --lt-editor-code-border: #2b2820;
  --lt-editor-code-selection-background: #3a3320;
  --lt-editor-code-selection-foreground: #eceae2;
  --lt-syntax-background: #0e0d0b;
  --lt-syntax-foreground: #eceae2;
  --lt-syntax-comment: #a49c86;
  --lt-syntax-keyword: #ffc300;
  --lt-syntax-string: #b7d38a;
  --lt-syntax-number: #f0a860;
  --lt-syntax-function: #8fb3e6;
  --lt-syntax-variable: #eceae2;
  --lt-syntax-type: #ffce5a;
  --lt-syntax-operator: #f0857a;
  --lt-syntax-punctuation: #c9c2ae;
  --lt-syntax-inserted: #b7d38a;
  --lt-syntax-inserted-background: #24331e;
  --lt-syntax-deleted: #f0857a;
  --lt-syntax-deleted-background: #3a211b;
  --lt-syntax-changed: #ffce5a;
  --lt-syntax-changed-background: #3a3018;
  --lt-navigation-button-hover-background: #ffd451;
  --lt-navigation-button-disabled-background: #201e18;
  --lt-navigation-button-disabled-foreground: #6a6350;
  --lt-navigation-recent-border: #2b2820;
  --lt-navigation-recent-item-foreground: #eceae2;
  --lt-navigation-recent-item-hover-foreground: #ffc300;
  --lt-minimap-viewport-border: #ffc300;
  --lt-minimap-viewport-background: rgba(255, 195, 0, 0.16);
}
:root[data-leaf-theme="halcyon"][data-leaf-appearance="light"] {
  --lt-theme-source: halcyon-light;
  --lt-background: #ffffff;
  --lt-foreground: #222222;
  --lt-surface: #ffffff;
  --lt-surface-elevated: #ffffff;
  --lt-surface-muted: #f6f7f8;
  --lt-surface-sunken: #eef0f2;
  --lt-border: #e6e9ee;
  --lt-border-strong: #c3c9d1;
  --lt-muted-foreground: #565d66;
  --lt-hover-tint: #565d66;
  --lt-primary: #086ddd;
  --lt-primary-foreground: #ffffff;
  --lt-primary-ink: #086ddd;
  --lt-accent: #086ddd;
  --lt-accent-foreground: #ffffff;
  --lt-accent-ink: #0764cc;
  --lt-danger: #d3243a;
  --lt-danger-foreground: #ffffff;
  --lt-warning: #8a6d00;
  --lt-success: #087a34;
  --lt-success-foreground: #ffffff;
  --lt-done: #086ddd;
  --lt-link: #086ddd;
  --lt-link-hover: #0a58b0;
  --lt-focus-ring: #086ddd;
  --lt-focus-selection-background: #d9e5fb;
  --lt-focus-selection-foreground: #222222;
  --lt-markdown-background: #ffffff;
  --lt-markdown-foreground: #222222;
  --lt-markdown-heading: #11111a;
  --lt-markdown-heading-2: #11111a;
  --lt-markdown-heading-3: #086ddd;
  --lt-markdown-heading-4: #8a6d00;
  --lt-markdown-heading-5: #d3243a;
  --lt-markdown-heading-6: #565d66;
  --lt-markdown-rule: #e6e9ee;
  --lt-markdown-link: #086ddd;
  --lt-markdown-blockquote-border: #086ddd;
  --lt-markdown-blockquote-foreground: #444444;
  --lt-markdown-alert-note: #086ddd;
  --lt-markdown-alert-tip: #087a34;
  --lt-markdown-alert-important: #086ddd;
  --lt-markdown-alert-warning: #8a6d00;
  --lt-markdown-alert-caution: #d3243a;
  --lt-markdown-badge-background: #eef1f4;
  --lt-markdown-badge-foreground: #222222;
  --lt-markdown-table-border: #898a8d;
  --lt-markdown-table-row-background: #eef0f2;
  --lt-markdown-thematic-break: #e6e9ee;
  --lt-markdown-math-inline-background: #eef1f4;
  --lt-markdown-keyboard-background: #ffffff;
  --lt-markdown-keyboard-border: #ccd2da;
  --lt-editor-inline-code-background: #f1f3f5;
  --lt-editor-inline-code-foreground: #222222;
  --lt-editor-code-background: #f6f7f8;
  --lt-editor-code-foreground: #222222;
  --lt-editor-code-border: #e6e9ee;
  --lt-editor-code-selection-background: #d9e5fb;
  --lt-editor-code-selection-foreground: #222222;
  --lt-syntax-background: #f6f7f8;
  --lt-syntax-foreground: #222222;
  --lt-syntax-comment: #5c5c5c;
  --lt-syntax-keyword: #b0246a;
  --lt-syntax-string: #8a5a00;
  --lt-syntax-number: #6a30c0;
  --lt-syntax-function: #0a5fa0;
  --lt-syntax-variable: #222222;
  --lt-syntax-type: #0a5fa0;
  --lt-syntax-operator: #b0246a;
  --lt-syntax-punctuation: #4a4a4a;
  --lt-syntax-inserted: #0a6a2f;
  --lt-syntax-inserted-background: #d6f2de;
  --lt-syntax-deleted: #a01a2a;
  --lt-syntax-deleted-background: #fbdde1;
  --lt-syntax-changed: #7a5200;
  --lt-syntax-changed-background: #f7ecc9;
  --lt-navigation-button-hover-background: #2680e8;
  --lt-navigation-button-disabled-background: #eef1f4;
  --lt-navigation-button-disabled-foreground: #999999;
  --lt-navigation-recent-border: #e6e9ee;
  --lt-navigation-recent-item-foreground: #222222;
  --lt-navigation-recent-item-hover-foreground: #086ddd;
  --lt-minimap-viewport-border: #086ddd;
  --lt-minimap-viewport-background: rgba(8, 109, 221, 0.14);
}
:root[data-leaf-theme="halcyon"][data-leaf-appearance="dark"] {
  --lt-theme-source: halcyon-dark;
  --lt-background: #1c2127;
  --lt-foreground: #dadada;
  --lt-surface: #1c2127;
  --lt-surface-elevated: #282c34;
  --lt-surface-muted: #2a2f37;
  --lt-surface-sunken: #171b20;
  --lt-border: #353b44;
  --lt-border-strong: #4b525d;
  --lt-muted-foreground: #8f96a1;
  --lt-hover-tint: #8f96a1;
  --lt-primary: #4c9dff;
  --lt-primary-foreground: #1c2127;
  --lt-primary-ink: #4c9dff;
  --lt-accent: #4c9dff;
  --lt-accent-foreground: #1c2127;
  --lt-accent-ink: #4c9dff;
  --lt-danger: #fb5d62;
  --lt-danger-foreground: #1c2127;
  --lt-warning: #e0de71;
  --lt-success: #44cf6e;
  --lt-success-foreground: #1c2127;
  --lt-done: #4c9dff;
  --lt-link: #4c9dff;
  --lt-link-hover: #79a9ec;
  --lt-focus-ring: #4c9dff;
  --lt-focus-selection-background: #2f3a54;
  --lt-focus-selection-foreground: #ffffff;
  --lt-markdown-background: #1c2127;
  --lt-markdown-foreground: #dadada;
  --lt-markdown-heading: #ffffff;
  --lt-markdown-heading-2: #ffffff;
  --lt-markdown-heading-3: #4c9dff;
  --lt-markdown-heading-4: #e0de71;
  --lt-markdown-heading-5: #fb464c;
  --lt-markdown-heading-6: #8f96a1;
  --lt-markdown-rule: #353b44;
  --lt-markdown-link: #4c9dff;
  --lt-markdown-blockquote-border: #4c9dff;
  --lt-markdown-blockquote-foreground: #dadada;
  --lt-markdown-alert-note: #4c9dff;
  --lt-markdown-alert-tip: #44cf6e;
  --lt-markdown-alert-important: #4c9dff;
  --lt-markdown-alert-warning: #e0de71;
  --lt-markdown-alert-caution: #fb464c;
  --lt-markdown-badge-background: #2a2f37;
  --lt-markdown-badge-foreground: #dadada;
  --lt-markdown-table-border: #666b71;
  --lt-markdown-table-row-background: #171b20;
  --lt-markdown-thematic-break: #353b44;
  --lt-markdown-math-inline-background: #2a2f37;
  --lt-markdown-keyboard-background: #21262e;
  --lt-markdown-keyboard-border: #353b44;
  --lt-editor-inline-code-background: #2a2f37;
  --lt-editor-inline-code-foreground: #dadada;
  --lt-editor-code-background: #171b20;
  --lt-editor-code-foreground: #dadada;
  --lt-editor-code-border: #353b44;
  --lt-editor-code-selection-background: #2f3a54;
  --lt-editor-code-selection-foreground: #ffffff;
  --lt-syntax-background: #171b20;
  --lt-syntax-foreground: #dadada;
  --lt-syntax-comment: #8c8c8c;
  --lt-syntax-keyword: #fa99cd;
  --lt-syntax-string: #e0de71;
  --lt-syntax-number: #4c9dff;
  --lt-syntax-function: #44cf6e;
  --lt-syntax-variable: #dadada;
  --lt-syntax-type: #53dfdd;
  --lt-syntax-operator: #fa99cd;
  --lt-syntax-punctuation: #bababa;
  --lt-syntax-inserted: #44cf6e;
  --lt-syntax-inserted-background: #143621;
  --lt-syntax-deleted: #ff8f92;
  --lt-syntax-deleted-background: #3a1d20;
  --lt-syntax-changed: #e0de71;
  --lt-syntax-changed-background: #33301a;
  --lt-navigation-button-hover-background: #6fb1ff;
  --lt-navigation-button-disabled-background: #2a2f37;
  --lt-navigation-button-disabled-foreground: #656c77;
  --lt-navigation-recent-border: #353b44;
  --lt-navigation-recent-item-foreground: #dadada;
  --lt-navigation-recent-item-hover-foreground: #4c9dff;
  --lt-minimap-viewport-border: #4c9dff;
  --lt-minimap-viewport-background: rgba(110, 118, 129, 0.14);
}
:root[data-leaf-theme="ink"][data-leaf-appearance="light"] {
  --lt-theme-source: ink-light;
  --lt-background: #ffffff;
  --lt-foreground: #222222;
  --lt-surface: #ffffff;
  --lt-surface-elevated: #ffffff;
  --lt-surface-muted: #f6f6f6;
  --lt-surface-sunken: #f0f0f0;
  --lt-border: #e0e0e0;
  --lt-border-strong: #bdbdbd;
  --lt-muted-foreground: #575757;
  --lt-hover-tint: #575757;
  --lt-primary: #6e6e6e;
  --lt-primary-foreground: #ffffff;
  --lt-primary-ink: #6e6e6e;
  --lt-accent: #6e6e6e;
  --lt-accent-foreground: #ffffff;
  --lt-accent-ink: #5e5e5e;
  --lt-danger: #d3243a;
  --lt-danger-foreground: #ffffff;
  --lt-warning: #8a6d00;
  --lt-success: #087a34;
  --lt-success-foreground: #ffffff;
  --lt-done: #6e6e6e;
  --lt-link: #6e6e6e;
  --lt-link-hover: #4e4e4e;
  --lt-focus-ring: #8f8f8f;
  --lt-focus-selection-background: #e9e9e9;
  --lt-focus-selection-foreground: #222222;
  --lt-markdown-background: #ffffff;
  --lt-markdown-foreground: #222222;
  --lt-markdown-heading: #121212;
  --lt-markdown-heading-2: #121212;
  --lt-markdown-heading-3: #121212;
  --lt-markdown-heading-4: #121212;
  --lt-markdown-heading-5: #121212;
  --lt-markdown-heading-6: #121212;
  --lt-markdown-rule: #e0e0e0;
  --lt-markdown-link: #6e6e6e;
  --lt-markdown-blockquote-border: #8f8f8f;
  --lt-markdown-blockquote-foreground: #444444;
  --lt-markdown-alert-note: #6e6e6e;
  --lt-markdown-alert-tip: #087a34;
  --lt-markdown-alert-important: #6e6e6e;
  --lt-markdown-alert-warning: #8a6d00;
  --lt-markdown-alert-caution: #d3243a;
  --lt-markdown-badge-background: #eeeeee;
  --lt-markdown-badge-foreground: #222222;
  --lt-markdown-table-border: #8a8a8a;
  --lt-markdown-table-row-background: #f0f0f0;
  --lt-markdown-thematic-break: #e0e0e0;
  --lt-markdown-math-inline-background: #eeeeee;
  --lt-markdown-keyboard-background: #ffffff;
  --lt-markdown-keyboard-border: #d4d4d4;
  --lt-editor-inline-code-background: #f2f2f2;
  --lt-editor-inline-code-foreground: #222222;
  --lt-editor-code-background: #f6f6f6;
  --lt-editor-code-foreground: #222222;
  --lt-editor-code-border: #e0e0e0;
  --lt-editor-code-selection-background: #e4e4e4;
  --lt-editor-code-selection-foreground: #222222;
  --lt-syntax-background: #f6f6f6;
  --lt-syntax-foreground: #222222;
  --lt-syntax-comment: #5c5c5c;
  --lt-syntax-keyword: #6e6e6e;
  --lt-syntax-string: #646464;
  --lt-syntax-number: #555555;
  --lt-syntax-function: #5e5e5e;
  --lt-syntax-variable: #222222;
  --lt-syntax-type: #5e5e5e;
  --lt-syntax-operator: #6e6e6e;
  --lt-syntax-punctuation: #4a4a4a;
  --lt-syntax-inserted: #0a6a2f;
  --lt-syntax-inserted-background: #d6f2de;
  --lt-syntax-deleted: #a01a2a;
  --lt-syntax-deleted-background: #fbdde1;
  --lt-syntax-changed: #7a5200;
  --lt-syntax-changed-background: #f7ecc9;
  --lt-navigation-button-hover-background: #8c8c8c;
  --lt-navigation-button-disabled-background: #eeeeee;
  --lt-navigation-button-disabled-foreground: #999999;
  --lt-navigation-recent-border: #e0e0e0;
  --lt-navigation-recent-item-foreground: #222222;
  --lt-navigation-recent-item-hover-foreground: #6e6e6e;
  --lt-minimap-viewport-border: #6e6e6e;
  --lt-minimap-viewport-background: rgba(110, 110, 110, 0.14);
}
:root[data-leaf-theme="ink"][data-leaf-appearance="dark"] {
  --lt-theme-source: ink-dark;
  --lt-background: #1e1e1e;
  --lt-foreground: #dadada;
  --lt-surface: #1e1e1e;
  --lt-surface-elevated: #262626;
  --lt-surface-muted: #2a2a2a;
  --lt-surface-sunken: #181818;
  --lt-border: #363636;
  --lt-border-strong: #555555;
  --lt-muted-foreground: #999999;
  --lt-hover-tint: #999999;
  --lt-primary: #a2a2a2;
  --lt-primary-foreground: #1e1e1e;
  --lt-primary-ink: #a2a2a2;
  --lt-accent: #bbbbbb;
  --lt-accent-foreground: #1e1e1e;
  --lt-accent-ink: #bbbbbb;
  --lt-danger: #fb4f55;
  --lt-danger-foreground: #1e1e1e;
  --lt-warning: #e0de71;
  --lt-success: #44cf6e;
  --lt-success-foreground: #1e1e1e;
  --lt-done: #a2a2a2;
  --lt-link: #bbbbbb;
  --lt-link-hover: #c7c7c7;
  --lt-focus-ring: #a2a2a2;
  --lt-focus-selection-background: #343434;
  --lt-focus-selection-foreground: #ffffff;
  --lt-markdown-background: #1e1e1e;
  --lt-markdown-foreground: #dadada;
  --lt-markdown-heading: #ffffff;
  --lt-markdown-heading-2: #ffffff;
  --lt-markdown-heading-3: #ffffff;
  --lt-markdown-heading-4: #ffffff;
  --lt-markdown-heading-5: #ffffff;
  --lt-markdown-heading-6: #ffffff;
  --lt-markdown-rule: #363636;
  --lt-markdown-link: #bbbbbb;
  --lt-markdown-blockquote-border: #a2a2a2;
  --lt-markdown-blockquote-foreground: #dadada;
  --lt-markdown-alert-note: #bbbbbb;
  --lt-markdown-alert-tip: #44cf6e;
  --lt-markdown-alert-important: #a2a2a2;
  --lt-markdown-alert-warning: #e0de71;
  --lt-markdown-alert-caution: #fb464c;
  --lt-markdown-badge-background: #2a2a2a;
  --lt-markdown-badge-foreground: #dadada;
  --lt-markdown-table-border: #696969;
  --lt-markdown-table-row-background: #181818;
  --lt-markdown-thematic-break: #363636;
  --lt-markdown-math-inline-background: #2a2a2a;
  --lt-markdown-keyboard-background: #242424;
  --lt-markdown-keyboard-border: #363636;
  --lt-editor-inline-code-background: #2a2a2a;
  --lt-editor-inline-code-foreground: #dadada;
  --lt-editor-code-background: #181818;
  --lt-editor-code-foreground: #dadada;
  --lt-editor-code-border: #363636;
  --lt-editor-code-selection-background: #3a3a3a;
  --lt-editor-code-selection-foreground: #ffffff;
  --lt-syntax-background: #181818;
  --lt-syntax-foreground: #dadada;
  --lt-syntax-comment: #8c8c8c;
  --lt-syntax-keyword: #d0d0d0;
  --lt-syntax-string: #d9d9d9;
  --lt-syntax-number: #989898;
  --lt-syntax-function: #bbbbbb;
  --lt-syntax-variable: #dadada;
  --lt-syntax-type: #bbbbbb;
  --lt-syntax-operator: #d0d0d0;
  --lt-syntax-punctuation: #bababa;
  --lt-syntax-inserted: #44cf6e;
  --lt-syntax-inserted-background: #143621;
  --lt-syntax-deleted: #ff8f92;
  --lt-syntax-deleted-background: #3a1d20;
  --lt-syntax-changed: #e0de71;
  --lt-syntax-changed-background: #33301a;
  --lt-navigation-button-hover-background: #bbbbbb;
  --lt-navigation-button-disabled-background: #2a2a2a;
  --lt-navigation-button-disabled-foreground: #6a6a6a;
  --lt-navigation-recent-border: #363636;
  --lt-navigation-recent-item-foreground: #dadada;
  --lt-navigation-recent-item-hover-foreground: #bbbbbb;
  --lt-minimap-viewport-border: #a2a2a2;
  --lt-minimap-viewport-background: rgba(162, 162, 162, 0.14);
}
:root[data-leaf-theme="nightshade"][data-leaf-appearance="light"] {
  --lt-theme-source: nightshade-light;
  --lt-background: #f7f5ef;
  --lt-foreground: #26222e;
  --lt-surface: #f7f5ef;
  --lt-surface-elevated: #ffffff;
  --lt-surface-muted: #efe9f7;
  --lt-surface-sunken: #e8e2f0;
  --lt-border: #d8d0e6;
  --lt-border-strong: #b3a8cc;
  --lt-muted-foreground: #565070;
  --lt-hover-tint: #565070;
  --lt-primary: #7b3fe4;
  --lt-primary-foreground: #ffffff;
  --lt-primary-ink: #7b3fe4;
  --lt-accent: #0c6f8c;
  --lt-accent-foreground: #ffffff;
  --lt-accent-ink: #0c6a86;
  --lt-danger: #cf2e3f;
  --lt-danger-foreground: #ffffff;
  --lt-warning: #956600;
  --lt-success: #1c7d3f;
  --lt-success-foreground: #ffffff;
  --lt-done: #7b3fe4;
  --lt-link: #0c6f8c;
  --lt-link-hover: #7b3fe4;
  --lt-focus-ring: #7b3fe4;
  --lt-focus-selection-background: #d9cef0;
  --lt-focus-selection-foreground: #26222e;
  --lt-markdown-background: #f7f5ef;
  --lt-markdown-foreground: #26222e;
  --lt-markdown-heading: #171320;
  --lt-markdown-heading-2: #171320;
  --lt-markdown-heading-3: #171320;
  --lt-markdown-heading-4: #171320;
  --lt-markdown-heading-5: #171320;
  --lt-markdown-heading-6: #171320;
  --lt-markdown-rule: #d8d0e6;
  --lt-markdown-link: #0c6f8c;
  --lt-markdown-blockquote-border: #7b3fe4;
  --lt-markdown-blockquote-foreground: #4a4360;
  --lt-markdown-alert-note: #0c6f8c;
  --lt-markdown-alert-tip: #1c7d3f;
  --lt-markdown-alert-important: #7b3fe4;
  --lt-markdown-alert-warning: #956600;
  --lt-markdown-alert-caution: #cf2e3f;
  --lt-markdown-badge-background: #e7e0f5;
  --lt-markdown-badge-foreground: #26222e;
  --lt-markdown-table-border: #868092;
  --lt-markdown-table-row-background: #e8e2f0;
  --lt-markdown-thematic-break: #d8d0e6;
  --lt-markdown-math-inline-background: #e7e0f5;
  --lt-markdown-keyboard-background: #ffffff;
  --lt-markdown-keyboard-border: #d8d0e6;
  --lt-editor-inline-code-background: #efe9f7;
  --lt-editor-inline-code-foreground: #2b2340;
  --lt-editor-code-background: #f1ecf9;
  --lt-editor-code-foreground: #26222e;
  --lt-editor-code-border: #d8d0e6;
  --lt-editor-code-selection-background: #d9cef0;
  --lt-editor-code-selection-foreground: #26222e;
  --lt-syntax-background: #f1ecf9;
  --lt-syntax-foreground: #26222e;
  --lt-syntax-comment: #565070;
  --lt-syntax-keyword: #b0257f;
  --lt-syntax-string: #7a5a00;
  --lt-syntax-number: #6a30c0;
  --lt-syntax-function: #1c7a3d;
  --lt-syntax-variable: #26222e;
  --lt-syntax-type: #0c6f8c;
  --lt-syntax-operator: #b0257f;
  --lt-syntax-punctuation: #4a4560;
  --lt-syntax-inserted: #14632f;
  --lt-syntax-inserted-background: #d6f2df;
  --lt-syntax-deleted: #a3182a;
  --lt-syntax-deleted-background: #fbdde1;
  --lt-syntax-changed: #7a5200;
  --lt-syntax-changed-background: #f7ecc9;
  --lt-navigation-button-hover-background: #8f57ef;
  --lt-navigation-button-disabled-background: #e7e0f5;
  --lt-navigation-button-disabled-foreground: #9a90b3;
  --lt-navigation-recent-border: #d8d0e6;
  --lt-navigation-recent-item-foreground: #26222e;
  --lt-navigation-recent-item-hover-foreground: #7b3fe4;
  --lt-minimap-viewport-border: #7b3fe4;
  --lt-minimap-viewport-background: rgba(123, 63, 228, 0.14);
}
:root[data-leaf-theme="nightshade"][data-leaf-appearance="dark"] {
  --lt-theme-source: nightshade-dark;
  --lt-background: #282a36;
  --lt-foreground: #f8f8f2;
  --lt-surface: #282a36;
  --lt-surface-elevated: #343746;
  --lt-surface-muted: #3d4050;
  --lt-surface-sunken: #1e2029;
  --lt-border: #6272a4;
  --lt-border-strong: #bdc6f4;
  --lt-muted-foreground: #d6d6d0;
  --lt-hover-tint: #d6d6d0;
  --lt-primary: #bd93f9;
  --lt-primary-foreground: #1e2029;
  --lt-primary-ink: #bd93f9;
  --lt-accent: #8be9fd;
  --lt-accent-foreground: #1e2029;
  --lt-accent-ink: #8be9fd;
  --lt-danger: #ff8f8f;
  --lt-danger-foreground: #1e2029;
  --lt-warning: #f1fa8c;
  --lt-success: #50fa7b;
  --lt-success-foreground: #1e2029;
  --lt-done: #bd93f9;
  --lt-link: #8be9fd;
  --lt-link-hover: #f1fa8c;
  --lt-focus-ring: #f1fa8c;
  --lt-focus-selection-background: #44475a;
  --lt-focus-selection-foreground: #ffffff;
  --lt-markdown-background: #282a36;
  --lt-markdown-foreground: #f8f8f2;
  --lt-markdown-heading: #ffffff;
  --lt-markdown-heading-2: #ffffff;
  --lt-markdown-heading-3: #ffffff;
  --lt-markdown-heading-4: #ffffff;
  --lt-markdown-heading-5: #ffffff;
  --lt-markdown-heading-6: #ffffff;
  --lt-markdown-rule: #6272a4;
  --lt-markdown-link: #8be9fd;
  --lt-markdown-blockquote-border: #8be9fd;
  --lt-markdown-blockquote-foreground: #f8f8f2;
  --lt-markdown-alert-note: #8be9fd;
  --lt-markdown-alert-tip: #50fa7b;
  --lt-markdown-alert-important: #bd93f9;
  --lt-markdown-alert-warning: #f1fa8c;
  --lt-markdown-alert-caution: #ff8f8f;
  --lt-markdown-badge-background: #44475a;
  --lt-markdown-badge-foreground: #f8f8f2;
  --lt-markdown-table-border: #6272a4;
  --lt-markdown-table-row-background: #1e2029;
  --lt-markdown-thematic-break: #6272a4;
  --lt-markdown-math-inline-background: #44475a;
  --lt-markdown-keyboard-background: #343746;
  --lt-markdown-keyboard-border: #6272a4;
  --lt-editor-inline-code-background: #1e2029;
  --lt-editor-inline-code-foreground: #f8f8f2;
  --lt-editor-code-background: #1e2029;
  --lt-editor-code-foreground: #f8f8f2;
  --lt-editor-code-border: #6272a4;
  --lt-editor-code-selection-background: #44475a;
  --lt-editor-code-selection-foreground: #ffffff;
  --lt-syntax-background: #1e2029;
  --lt-syntax-foreground: #f8f8f2;
  --lt-syntax-comment: #d6d6d0;
  --lt-syntax-keyword: #ff79c6;
  --lt-syntax-string: #f1fa8c;
  --lt-syntax-number: #bd93f9;
  --lt-syntax-function: #50fa7b;
  --lt-syntax-variable: #f8f8f2;
  --lt-syntax-type: #8be9fd;
  --lt-syntax-operator: #ff79c6;
  --lt-syntax-punctuation: #f8f8f2;
  --lt-syntax-inserted: #50fa7b;
  --lt-syntax-inserted-background: #1e3928;
  --lt-syntax-deleted: #ff8f8f;
  --lt-syntax-deleted-background: #4a252f;
  --lt-syntax-changed: #f1fa8c;
  --lt-syntax-changed-background: #3e3f27;
  --lt-navigation-button-hover-background: #d7baff;
  --lt-navigation-button-disabled-background: #343746;
  --lt-navigation-button-disabled-foreground: #a8adcf;
  --lt-navigation-recent-border: #6272a4;
  --lt-navigation-recent-item-foreground: #f8f8f2;
  --lt-navigation-recent-item-hover-foreground: #8be9fd;
  --lt-minimap-viewport-border: #8be9fd;
  --lt-minimap-viewport-background: rgba(110, 118, 129, 0.14);
}
:root[data-leaf-theme="pippin"][data-leaf-appearance="light"] {
  --lt-theme-source: pippin-light;
  --lt-background: #ffffff;
  --lt-foreground: #1d1d1f;
  --lt-surface: #f5f5f7;
  --lt-surface-elevated: #ffffff;
  --lt-surface-muted: #f2f2f4;
  --lt-surface-sunken: #ececef;
  --lt-border: #d8d8dd;
  --lt-border-strong: #c0c0c6;
  --lt-muted-foreground: #6e6e73;
  --lt-hover-tint: #6e6e73;
  --lt-primary: #0a6fe0;
  --lt-primary-foreground: #ffffff;
  --lt-primary-ink: #0a6fe0;
  --lt-accent: #0a6fe0;
  --lt-accent-foreground: #ffffff;
  --lt-accent-ink: #085fbe;
  --lt-danger: #d70015;
  --lt-danger-foreground: #ffffff;
  --lt-warning: #a05a00;
  --lt-success: #1f7a34;
  --lt-success-foreground: #ffffff;
  --lt-done: #0a7e8c;
  --lt-link: #0a63c9;
  --lt-link-hover: #0a4fa0;
  --lt-focus-ring: #0a6fe0;
  --lt-focus-selection-background: #d3e3fd;
  --lt-focus-selection-foreground: #1d1d1f;
  --lt-markdown-background: #ffffff;
  --lt-markdown-foreground: #1d1d1f;
  --lt-markdown-heading: #1d1d1f;
  --lt-markdown-heading-2: #1d1d1f;
  --lt-markdown-heading-3: #0a63c9;
  --lt-markdown-heading-4: #8a5200;
  --lt-markdown-heading-5: #1f7a34;
  --lt-markdown-heading-6: #6e6e73;
  --lt-markdown-rule: #d8d8dd;
  --lt-markdown-link: #0a63c9;
  --lt-markdown-blockquote-border: #0a6fe0;
  --lt-markdown-blockquote-foreground: #6e6e73;
  --lt-markdown-alert-note: #0a6fe0;
  --lt-markdown-alert-tip: #1f7a34;
  --lt-markdown-alert-important: #7a3fd0;
  --lt-markdown-alert-warning: #a05a00;
  --lt-markdown-alert-caution: #d70015;
  --lt-markdown-badge-background: #ececef;
  --lt-markdown-badge-foreground: #1d1d1f;
  --lt-markdown-table-border: #87878b;
  --lt-markdown-table-row-background: #ececef;
  --lt-markdown-thematic-break: #d8d8dd;
  --lt-markdown-math-inline-background: #f2f2f4;
  --lt-markdown-keyboard-background: #ffffff;
  --lt-markdown-keyboard-border: #c0c0c6;
  --lt-editor-inline-code-background: #f2f2f4;
  --lt-editor-inline-code-foreground: #1d1d1f;
  --lt-editor-code-background: #f5f5f7;
  --lt-editor-code-foreground: #383a42;
  --lt-editor-code-border: #d8d8dd;
  --lt-editor-code-selection-background: #d3e3fd;
  --lt-editor-code-selection-foreground: #1d1d1f;
  --lt-syntax-background: #f5f5f7;
  --lt-syntax-foreground: #383a42;
  --lt-syntax-comment: #63656d;
  --lt-syntax-keyword: #c2352b;
  --lt-syntax-string: #0a6e82;
  --lt-syntax-number: #8a5200;
  --lt-syntax-function: #1a63c2;
  --lt-syntax-variable: #383a42;
  --lt-syntax-type: #7a3fd0;
  --lt-syntax-operator: #a83250;
  --lt-syntax-punctuation: #63656d;
  --lt-syntax-inserted: #0a6a2f;
  --lt-syntax-inserted-background: #d6f2de;
  --lt-syntax-deleted: #a01a2a;
  --lt-syntax-deleted-background: #fbdde1;
  --lt-syntax-changed: #7a5200;
  --lt-syntax-changed-background: #f7ecc9;
  --lt-navigation-button-hover-background: #2a86f5;
  --lt-navigation-button-disabled-background: #ececef;
  --lt-navigation-button-disabled-foreground: #a0a0a6;
  --lt-navigation-recent-border: #d8d8dd;
  --lt-navigation-recent-item-foreground: #1d1d1f;
  --lt-navigation-recent-item-hover-foreground: #0a63c9;
  --lt-minimap-viewport-border: #0a6fe0;
  --lt-minimap-viewport-background: rgba(10, 111, 224, 0.14);
}
:root[data-leaf-theme="pippin"][data-leaf-appearance="dark"] {
  --lt-theme-source: pippin-dark;
  --lt-background: #1c1c1e;
  --lt-foreground: #f5f5f7;
  --lt-surface: #2c2c2e;
  --lt-surface-elevated: #2c2c2e;
  --lt-surface-muted: #2c2c2e;
  --lt-surface-sunken: #161618;
  --lt-border: #3a3a3c;
  --lt-border-strong: #545456;
  --lt-muted-foreground: #98989d;
  --lt-hover-tint: #98989d;
  --lt-primary: #4a9eff;
  --lt-primary-foreground: #10233a;
  --lt-primary-ink: #4a9eff;
  --lt-accent: #4a9eff;
  --lt-accent-foreground: #10233a;
  --lt-accent-ink: #63acff;
  --lt-danger: #ff5c52;
  --lt-danger-foreground: #1c1c1e;
  --lt-warning: #ffb340;
  --lt-success: #32d74b;
  --lt-success-foreground: #1c1c1e;
  --lt-done: #64d2ff;
  --lt-link: #4a9eff;
  --lt-link-hover: #6fb2ff;
  --lt-focus-ring: #4a9eff;
  --lt-focus-selection-background: #14396b;
  --lt-focus-selection-foreground: #ffffff;
  --lt-markdown-background: #1c1c1e;
  --lt-markdown-foreground: #f5f5f7;
  --lt-markdown-heading: #f5f5f7;
  --lt-markdown-heading-2: #f5f5f7;
  --lt-markdown-heading-3: #4a9eff;
  --lt-markdown-heading-4: #ffb340;
  --lt-markdown-heading-5: #32d74b;
  --lt-markdown-heading-6: #98989d;
  --lt-markdown-rule: #3a3a3c;
  --lt-markdown-link: #4a9eff;
  --lt-markdown-blockquote-border: #4a9eff;
  --lt-markdown-blockquote-foreground: #b0b0b6;
  --lt-markdown-alert-note: #4a9eff;
  --lt-markdown-alert-tip: #32d74b;
  --lt-markdown-alert-important: #b39dff;
  --lt-markdown-alert-warning: #ffb340;
  --lt-markdown-alert-caution: #ff453a;
  --lt-markdown-badge-background: #2c2c2e;
  --lt-markdown-badge-foreground: #f5f5f7;
  --lt-markdown-table-border: #676769;
  --lt-markdown-table-row-background: #161618;
  --lt-markdown-thematic-break: #3a3a3c;
  --lt-markdown-math-inline-background: #2c2c2e;
  --lt-markdown-keyboard-background: #2c2c2e;
  --lt-markdown-keyboard-border: #545456;
  --lt-editor-inline-code-background: #2c2c2e;
  --lt-editor-inline-code-foreground: #c9d0dc;
  --lt-editor-code-background: #161618;
  --lt-editor-code-foreground: #abb2bf;
  --lt-editor-code-border: #3a3a3c;
  --lt-editor-code-selection-background: #14396b;
  --lt-editor-code-selection-foreground: #ffffff;
  --lt-syntax-background: #161618;
  --lt-syntax-foreground: #abb2bf;
  --lt-syntax-comment: #7f8896;
  --lt-syntax-keyword: #e16d76;
  --lt-syntax-string: #58b6c2;
  --lt-syntax-number: #d19a66;
  --lt-syntax-function: #62afef;
  --lt-syntax-variable: #abb2bf;
  --lt-syntax-type: #b39dff;
  --lt-syntax-operator: #de6793;
  --lt-syntax-punctuation: #7f8896;
  --lt-syntax-inserted: #32d74b;
  --lt-syntax-inserted-background: #12331c;
  --lt-syntax-deleted: #ff6b64;
  --lt-syntax-deleted-background: #3a1c1e;
  --lt-syntax-changed: #ffb340;
  --lt-syntax-changed-background: #33280c;
  --lt-navigation-button-hover-background: #6fb2ff;
  --lt-navigation-button-disabled-background: #2c2c2e;
  --lt-navigation-button-disabled-foreground: #6a6a6e;
  --lt-navigation-recent-border: #3a3a3c;
  --lt-navigation-recent-item-foreground: #f5f5f7;
  --lt-navigation-recent-item-hover-foreground: #4a9eff;
  --lt-minimap-viewport-border: #4a9eff;
  --lt-minimap-viewport-background: rgba(74, 158, 255, 0.16);
}
:root[data-leaf-theme="sage"][data-leaf-appearance="light"] {
  --lt-theme-source: sage-light;
  --lt-background: #f7f6f4;
  --lt-foreground: #222222;
  --lt-surface: #f7f6f4;
  --lt-surface-elevated: #ffffff;
  --lt-surface-muted: #eeece8;
  --lt-surface-sunken: #e7e5e0;
  --lt-border: #dcdad5;
  --lt-border-strong: #b3b1aa;
  --lt-muted-foreground: #575757;
  --lt-hover-tint: #575757;
  --lt-primary: #3f7aa8;
  --lt-primary-foreground: #ffffff;
  --lt-primary-ink: #3c75a1;
  --lt-accent: #3f7aa8;
  --lt-accent-foreground: #ffffff;
  --lt-accent-ink: #366890;
  --lt-danger: #d3243a;
  --lt-danger-foreground: #ffffff;
  --lt-warning: #8a6d00;
  --lt-success: #087a34;
  --lt-success-foreground: #ffffff;
  --lt-done: #3f7aa8;
  --lt-link: #3f7aa8;
  --lt-link-hover: #33648c;
  --lt-focus-ring: #3f7aa8;
  --lt-focus-selection-background: #e2e0da;
  --lt-focus-selection-foreground: #222222;
  --lt-markdown-background: #f7f6f4;
  --lt-markdown-foreground: #222222;
  --lt-markdown-heading: #11111a;
  --lt-markdown-heading-2: #11111a;
  --lt-markdown-heading-3: #11111a;
  --lt-markdown-heading-4: #11111a;
  --lt-markdown-heading-5: #11111a;
  --lt-markdown-heading-6: #11111a;
  --lt-markdown-rule: #e0e0e0;
  --lt-markdown-link: #3c75a1;
  --lt-markdown-blockquote-border: #b3b1aa;
  --lt-markdown-blockquote-foreground: #444444;
  --lt-markdown-alert-note: #3c75a1;
  --lt-markdown-alert-tip: #087a34;
  --lt-markdown-alert-important: #4a4a48;
  --lt-markdown-alert-warning: #8a6d00;
  --lt-markdown-alert-caution: #d3243a;
  --lt-markdown-badge-background: #eeece8;
  --lt-markdown-badge-foreground: #222222;
  --lt-markdown-table-border: #838383;
  --lt-markdown-table-row-background: #e7e5e0;
  --lt-markdown-thematic-break: #e0e0e0;
  --lt-markdown-math-inline-background: #eeece8;
  --lt-markdown-keyboard-background: #ffffff;
  --lt-markdown-keyboard-border: #d4d4d4;
  --lt-editor-inline-code-background: #eeece8;
  --lt-editor-inline-code-foreground: #222222;
  --lt-editor-code-background: #eeece8;
  --lt-editor-code-foreground: #222222;
  --lt-editor-code-border: #e0e0e0;
  --lt-editor-code-selection-background: #d9e5fb;
  --lt-editor-code-selection-foreground: #222222;
  --lt-syntax-background: #f2f0ec;
  --lt-syntax-foreground: #222222;
  --lt-syntax-comment: #6a6660;
  --lt-syntax-keyword: #40403e;
  --lt-syntax-string: #5f5b54;
  --lt-syntax-number: #4a4644;
  --lt-syntax-function: #4a4a48;
  --lt-syntax-variable: #222222;
  --lt-syntax-type: #4a4a48;
  --lt-syntax-operator: #57534e;
  --lt-syntax-punctuation: #57534e;
  --lt-syntax-inserted: #0a6a2f;
  --lt-syntax-inserted-background: #d6f2de;
  --lt-syntax-deleted: #a01a2a;
  --lt-syntax-deleted-background: #fbdde1;
  --lt-syntax-changed: #7a5200;
  --lt-syntax-changed-background: #f7ecc9;
  --lt-navigation-button-hover-background: #4a8ab8;
  --lt-navigation-button-disabled-background: #eeeeee;
  --lt-navigation-button-disabled-foreground: #999999;
  --lt-navigation-recent-border: #e0e0e0;
  --lt-navigation-recent-item-foreground: #222222;
  --lt-navigation-recent-item-hover-foreground: #3f7aa8;
  --lt-minimap-viewport-border: #3f7aa8;
  --lt-minimap-viewport-background: rgba(74, 74, 72, 0.14);
}
:root[data-leaf-theme="sage"][data-leaf-appearance="dark"] {
  --lt-theme-source: sage-dark;
  --lt-background: #1a1a1a;
  --lt-foreground: #d6d4d0;
  --lt-surface: #1a1a1a;
  --lt-surface-elevated: #262626;
  --lt-surface-muted: #2a2a2a;
  --lt-surface-sunken: #181818;
  --lt-border: #363636;
  --lt-border-strong: #555555;
  --lt-muted-foreground: #9a968f;
  --lt-hover-tint: #9a968f;
  --lt-primary: #82a9c9;
  --lt-primary-foreground: #1e1e1e;
  --lt-primary-ink: #82a9c9;
  --lt-accent: #82a9c9;
  --lt-accent-foreground: #1e1e1e;
  --lt-accent-ink: #82a9c9;
  --lt-danger: #fb4f55;
  --lt-danger-foreground: #1e1e1e;
  --lt-warning: #e0de71;
  --lt-success: #44cf6e;
  --lt-success-foreground: #1e1e1e;
  --lt-done: #82a9c9;
  --lt-link: #82a9c9;
  --lt-link-hover: #9bbdd8;
  --lt-focus-ring: #82a9c9;
  --lt-focus-selection-background: #33322f;
  --lt-focus-selection-foreground: #ffffff;
  --lt-markdown-background: #1a1a1a;
  --lt-markdown-foreground: #d6d4d0;
  --lt-markdown-heading: #ffffff;
  --lt-markdown-heading-2: #ffffff;
  --lt-markdown-heading-3: #ffffff;
  --lt-markdown-heading-4: #ffffff;
  --lt-markdown-heading-5: #ffffff;
  --lt-markdown-heading-6: #ffffff;
  --lt-markdown-rule: #363636;
  --lt-markdown-link: #82a9c9;
  --lt-markdown-blockquote-border: #555555;
  --lt-markdown-blockquote-foreground: #dadada;
  --lt-markdown-alert-note: #82a9c9;
  --lt-markdown-alert-tip: #44cf6e;
  --lt-markdown-alert-important: #c9c6c0;
  --lt-markdown-alert-warning: #e0de71;
  --lt-markdown-alert-caution: #fb464c;
  --lt-markdown-badge-background: #2a2a2a;
  --lt-markdown-badge-foreground: #dadada;
  --lt-markdown-table-border: #666664;
  --lt-markdown-table-row-background: #181818;
  --lt-markdown-thematic-break: #363636;
  --lt-markdown-math-inline-background: #2a2a2a;
  --lt-markdown-keyboard-background: #242424;
  --lt-markdown-keyboard-border: #363636;
  --lt-editor-inline-code-background: #2a2a2a;
  --lt-editor-inline-code-foreground: #dadada;
  --lt-editor-code-background: #141414;
  --lt-editor-code-foreground: #d6d4d0;
  --lt-editor-code-border: #363636;
  --lt-editor-code-selection-background: #2f3a54;
  --lt-editor-code-selection-foreground: #ffffff;
  --lt-syntax-background: #141414;
  --lt-syntax-foreground: #d6d4d0;
  --lt-syntax-comment: #949089;
  --lt-syntax-keyword: #c9c6c0;
  --lt-syntax-string: #b0ac9f;
  --lt-syntax-number: #c9c6c0;
  --lt-syntax-function: #b8b4ac;
  --lt-syntax-variable: #d6d4d0;
  --lt-syntax-type: #b8b4ac;
  --lt-syntax-operator: #a8a49c;
  --lt-syntax-punctuation: #bababa;
  --lt-syntax-inserted: #44cf6e;
  --lt-syntax-inserted-background: #143621;
  --lt-syntax-deleted: #ff8f92;
  --lt-syntax-deleted-background: #3a1d20;
  --lt-syntax-changed: #e0de71;
  --lt-syntax-changed-background: #33301a;
  --lt-navigation-button-hover-background: #97b8d4;
  --lt-navigation-button-disabled-background: #2a2a2a;
  --lt-navigation-button-disabled-foreground: #6a6a6a;
  --lt-navigation-recent-border: #363636;
  --lt-navigation-recent-item-foreground: #d6d4d0;
  --lt-navigation-recent-item-hover-foreground: #82a9c9;
  --lt-minimap-viewport-border: #82a9c9;
  --lt-minimap-viewport-background: rgba(110, 118, 129, 0.14);
}
:root[data-leaf-theme="verdant"][data-leaf-appearance="light"] {
  --lt-theme-source: verdant-light;
  --lt-background: #ffffff;
  --lt-foreground: #15261a;
  --lt-surface: #ffffff;
  --lt-surface-elevated: #ffffff;
  --lt-surface-muted: #f2f8f3;
  --lt-surface-sunken: #e9f3ec;
  --lt-border: #d1e5d7;
  --lt-border-strong: #9cc7a9;
  --lt-muted-foreground: #366043;
  --lt-hover-tint: #366043;
  --lt-primary: #108031;
  --lt-primary-foreground: #ffffff;
  --lt-primary-ink: #108031;
  --lt-accent: #108031;
  --lt-accent-foreground: #ffffff;
  --lt-accent-ink: #0d6d2a;
  --lt-danger: #d3243a;
  --lt-danger-foreground: #ffffff;
  --lt-warning: #8a6d00;
  --lt-success: #087a34;
  --lt-success-foreground: #ffffff;
  --lt-done: #108031;
  --lt-link: #108031;
  --lt-link-hover: #0b5a23;
  --lt-focus-ring: #14a640;
  --lt-focus-selection-background: #bbf7cd;
  --lt-focus-selection-foreground: #15261a;
  --lt-markdown-background: #ffffff;
  --lt-markdown-foreground: #15261a;
  --lt-markdown-heading: #0b140e;
  --lt-markdown-heading-2: #0b140e;
  --lt-markdown-heading-3: #0b140e;
  --lt-markdown-heading-4: #0b140e;
  --lt-markdown-heading-5: #0b140e;
  --lt-markdown-heading-6: #0b140e;
  --lt-markdown-rule: #d1e5d7;
  --lt-markdown-link: #108031;
  --lt-markdown-blockquote-border: #14a640;
  --lt-markdown-blockquote-foreground: #2a4b34;
  --lt-markdown-alert-note: #108031;
  --lt-markdown-alert-tip: #087a34;
  --lt-markdown-alert-important: #108031;
  --lt-markdown-alert-warning: #8a6d00;
  --lt-markdown-alert-caution: #d3243a;
  --lt-markdown-badge-background: #e6f1e9;
  --lt-markdown-badge-foreground: #15261a;
  --lt-markdown-table-border: #559869;
  --lt-markdown-table-row-background: #e9f3ec;
  --lt-markdown-thematic-break: #d1e5d7;
  --lt-markdown-math-inline-background: #e6f1e9;
  --lt-markdown-keyboard-background: #ffffff;
  --lt-markdown-keyboard-border: #bfdbc7;
  --lt-editor-inline-code-background: #ecf4ee;
  --lt-editor-inline-code-foreground: #15261a;
  --lt-editor-code-background: #f2f8f3;
  --lt-editor-code-foreground: #15261a;
  --lt-editor-code-border: #d1e5d7;
  --lt-editor-code-selection-background: #acf5c2;
  --lt-editor-code-selection-foreground: #15261a;
  --lt-syntax-background: #f2f8f3;
  --lt-syntax-foreground: #15261a;
  --lt-syntax-comment: #396546;
  --lt-syntax-keyword: #108031;
  --lt-syntax-string: #0e742d;
  --lt-syntax-number: #0c6226;
  --lt-syntax-function: #0d6d2a;
  --lt-syntax-variable: #15261a;
  --lt-syntax-type: #0d6d2a;
  --lt-syntax-operator: #108031;
  --lt-syntax-punctuation: #2e5239;
  --lt-syntax-inserted: #0a6a2f;
  --lt-syntax-inserted-background: #d6f2de;
  --lt-syntax-deleted: #a01a2a;
  --lt-syntax-deleted-background: #fbdde1;
  --lt-syntax-changed: #7a5200;
  --lt-syntax-changed-background: #f7ecc9;
  --lt-navigation-button-hover-background: #14a23f;
  --lt-navigation-button-disabled-background: #e6f1e9;
  --lt-navigation-button-disabled-foreground: #63a878;
  --lt-navigation-recent-border: #d1e5d7;
  --lt-navigation-recent-item-foreground: #15261a;
  --lt-navigation-recent-item-hover-foreground: #108031;
  --lt-minimap-viewport-border: #108031;
  --lt-minimap-viewport-background: rgba(16, 128, 49, 0.14);
}
:root[data-leaf-theme="verdant"][data-leaf-appearance="dark"] {
  --lt-theme-source: verdant-dark;
  --lt-background: #17201a;
  --lt-foreground: #d0ddd4;
  --lt-surface: #17201a;
  --lt-surface-elevated: #1d2921;
  --lt-surface-muted: #212d24;
  --lt-surface-sunken: #131a15;
  --lt-border: #2a3a2f;
  --lt-border-strong: #425b49;
  --lt-muted-foreground: #7ea188;
  --lt-hover-tint: #7ea188;
  --lt-primary: #17bb48;
  --lt-primary-foreground: #17201a;
  --lt-primary-ink: #17bb48;
  --lt-accent: #1bd753;
  --lt-accent-foreground: #17201a;
  --lt-accent-ink: #1bd753;
  --lt-danger: #fb4f55;
  --lt-danger-foreground: #1e1e1e;
  --lt-warning: #e0de71;
  --lt-success: #44cf6e;
  --lt-success-foreground: #1e1e1e;
  --lt-done: #17bb48;
  --lt-link: #1bd753;
  --lt-link-hover: #27e460;
  --lt-focus-ring: #17bb48;
  --lt-focus-selection-background: #083d18;
  --lt-focus-selection-foreground: #ffffff;
  --lt-markdown-background: #17201a;
  --lt-markdown-foreground: #d0ddd4;
  --lt-markdown-heading: #ffffff;
  --lt-markdown-heading-2: #ffffff;
  --lt-markdown-heading-3: #ffffff;
  --lt-markdown-heading-4: #ffffff;
  --lt-markdown-heading-5: #ffffff;
  --lt-markdown-heading-6: #ffffff;
  --lt-markdown-rule: #2a3a2f;
  --lt-markdown-link: #1bd753;
  --lt-markdown-blockquote-border: #17bb48;
  --lt-markdown-blockquote-foreground: #d0ddd4;
  --lt-markdown-alert-note: #1bd753;
  --lt-markdown-alert-tip: #44cf6e;
  --lt-markdown-alert-important: #17bb48;
  --lt-markdown-alert-warning: #e0de71;
  --lt-markdown-alert-caution: #fb464c;
  --lt-markdown-badge-background: #212d24;
  --lt-markdown-badge-foreground: #d0ddd4;
  --lt-markdown-table-border: #51705a;
  --lt-markdown-table-row-background: #131a15;
  --lt-markdown-thematic-break: #2a3a2f;
  --lt-markdown-math-inline-background: #212d24;
  --lt-markdown-keyboard-background: #1c271f;
  --lt-markdown-keyboard-border: #2a3a2f;
  --lt-editor-inline-code-background: #212d24;
  --lt-editor-inline-code-foreground: #d0ddd4;
  --lt-editor-code-background: #131a15;
  --lt-editor-code-foreground: #d0ddd4;
  --lt-editor-code-border: #2a3a2f;
  --lt-editor-code-selection-background: #08441a;
  --lt-editor-code-selection-foreground: #ffffff;
  --lt-syntax-background: #131a15;
  --lt-syntax-foreground: #d0ddd4;
  --lt-syntax-comment: #6d9579;
  --lt-syntax-keyword: #5ceb87;
  --lt-syntax-string: #81efa2;
  --lt-syntax-number: #16b044;
  --lt-syntax-function: #1bd753;
  --lt-syntax-variable: #d0ddd4;
  --lt-syntax-type: #1bd753;
  --lt-syntax-operator: #5ceb87;
  --lt-syntax-punctuation: #a8c0af;
  --lt-syntax-inserted: #44cf6e;
  --lt-syntax-inserted-background: #143621;
  --lt-syntax-deleted: #ff8f92;
  --lt-syntax-deleted-background: #3a1d20;
  --lt-syntax-changed: #e0de71;
  --lt-syntax-changed-background: #33301a;
  --lt-navigation-button-hover-background: #1bd753;
  --lt-navigation-button-disabled-background: #212d24;
  --lt-navigation-button-disabled-foreground: #52715b;
  --lt-navigation-recent-border: #2a3a2f;
  --lt-navigation-recent-item-foreground: #d0ddd4;
  --lt-navigation-recent-item-hover-foreground: #1bd753;
  --lt-minimap-viewport-border: #17bb48;
  --lt-minimap-viewport-background: rgba(23, 187, 72, 0.14);
}
:root[data-leaf-theme="vermilion"][data-leaf-appearance="light"] {
  --lt-theme-source: vermilion-light;
  --lt-background: #ffffff;
  --lt-foreground: #301e1b;
  --lt-surface: #ffffff;
  --lt-surface-elevated: #ffffff;
  --lt-surface-muted: #f9f5f5;
  --lt-surface-sunken: #f5efee;
  --lt-border: #ebdddb;
  --lt-border-strong: #d4b7b2;
  --lt-muted-foreground: #794b44;
  --lt-hover-tint: #794b44;
  --lt-primary: #cf321a;
  --lt-primary-foreground: #ffffff;
  --lt-primary-ink: #cf321a;
  --lt-accent: #cf321a;
  --lt-accent-foreground: #ffffff;
  --lt-accent-ink: #b22b16;
  --lt-danger: #d3243a;
  --lt-danger-foreground: #ffffff;
  --lt-warning: #8a6d00;
  --lt-success: #087a34;
  --lt-success-foreground: #ffffff;
  --lt-done: #cf321a;
  --lt-link: #cf321a;
  --lt-link-hover: #942412;
  --lt-focus-ring: #ea6752;
  --lt-focus-selection-background: #fbe4e0;
  --lt-focus-selection-foreground: #301e1b;
  --lt-markdown-background: #ffffff;
  --lt-markdown-foreground: #301e1b;
  --lt-markdown-heading: #19100e;
  --lt-markdown-heading-2: #19100e;
  --lt-markdown-heading-3: #19100e;
  --lt-markdown-heading-4: #19100e;
  --lt-markdown-heading-5: #19100e;
  --lt-markdown-heading-6: #19100e;
  --lt-markdown-rule: #ebdddb;
  --lt-markdown-link: #cf321a;
  --lt-markdown-blockquote-border: #ea6752;
  --lt-markdown-blockquote-foreground: #5f3b35;
  --lt-markdown-alert-note: #cf321a;
  --lt-markdown-alert-tip: #087a34;
  --lt-markdown-alert-important: #cf321a;
  --lt-markdown-alert-warning: #8a6d00;
  --lt-markdown-alert-caution: #d3243a;
  --lt-markdown-badge-background: #f4eceb;
  --lt-markdown-badge-foreground: #301e1b;
  --lt-markdown-table-border: #b17d75;
  --lt-markdown-table-row-background: #f5efee;
  --lt-markdown-thematic-break: #ebdddb;
  --lt-markdown-math-inline-background: #f4eceb;
  --lt-markdown-keyboard-background: #ffffff;
  --lt-markdown-keyboard-border: #e3d0cd;
  --lt-editor-inline-code-background: #f7f1f0;
  --lt-editor-inline-code-foreground: #301e1b;
  --lt-editor-code-background: #f9f5f5;
  --lt-editor-code-foreground: #301e1b;
  --lt-editor-code-border: #ebdddb;
  --lt-editor-code-selection-background: #fadeda;
  --lt-editor-code-selection-foreground: #301e1b;
  --lt-syntax-background: #f9f5f5;
  --lt-syntax-foreground: #301e1b;
  --lt-syntax-comment: #804f48;
  --lt-syntax-keyword: #cf321a;
  --lt-syntax-string: #bc2d17;
  --lt-syntax-number: #a02714;
  --lt-syntax-function: #b12b16;
  --lt-syntax-variable: #301e1b;
  --lt-syntax-type: #b12b16;
  --lt-syntax-operator: #cf321a;
  --lt-syntax-punctuation: #67403a;
  --lt-syntax-inserted: #0a6a2f;
  --lt-syntax-inserted-background: #d6f2de;
  --lt-syntax-deleted: #a01a2a;
  --lt-syntax-deleted-background: #fbdde1;
  --lt-syntax-changed: #7a5200;
  --lt-syntax-changed-background: #f7ecc9;
  --lt-navigation-button-hover-background: #e9614c;
  --lt-navigation-button-disabled-background: #f4eceb;
  --lt-navigation-button-disabled-foreground: #bc8e87;
  --lt-navigation-recent-border: #ebdddb;
  --lt-navigation-recent-item-foreground: #301e1b;
  --lt-navigation-recent-item-hover-foreground: #cf321a;
  --lt-minimap-viewport-border: #cf321a;
  --lt-minimap-viewport-background: rgba(207, 50, 26, 0.14);
}
:root[data-leaf-theme="vermilion"][data-leaf-appearance="dark"] {
  --lt-theme-source: vermilion-dark;
  --lt-background: #251c1b;
  --lt-foreground: #e2d8d7;
  --lt-surface: #251c1b;
  --lt-surface-elevated: #2f2322;
  --lt-surface-muted: #332725;
  --lt-surface-sunken: #1d1615;
  --lt-border: #423230;
  --lt-border-strong: #684f4b;
  --lt-muted-foreground: #ae938f;
  --lt-hover-tint: #ae938f;
  --lt-primary: #ee8575;
  --lt-primary-foreground: #251c1b;
  --lt-primary-ink: #ee8575;
  --lt-accent: #f3a89d;
  --lt-accent-foreground: #251c1b;
  --lt-accent-ink: #f3a89d;
  --lt-danger: #fb4f55;
  --lt-danger-foreground: #1e1e1e;
  --lt-warning: #e0de71;
  --lt-success: #44cf6e;
  --lt-success-foreground: #1e1e1e;
  --lt-done: #ee8575;
  --lt-link: #f3a89d;
  --lt-link-hover: #f5b8af;
  --lt-focus-ring: #ee8575;
  --lt-focus-selection-background: #65180c;
  --lt-focus-selection-foreground: #ffffff;
  --lt-markdown-background: #251c1b;
  --lt-markdown-foreground: #e2d8d7;
  --lt-markdown-heading: #ffffff;
  --lt-markdown-heading-2: #ffffff;
  --lt-markdown-heading-3: #ffffff;
  --lt-markdown-heading-4: #ffffff;
  --lt-markdown-heading-5: #ffffff;
  --lt-markdown-heading-6: #ffffff;
  --lt-markdown-rule: #423230;
  --lt-markdown-link: #f3a89d;
  --lt-markdown-blockquote-border: #ee8575;
  --lt-markdown-blockquote-foreground: #e2d8d7;
  --lt-markdown-alert-note: #f3a89d;
  --lt-markdown-alert-tip: #44cf6e;
  --lt-markdown-alert-important: #ee8575;
  --lt-markdown-alert-warning: #e0de71;
  --lt-markdown-alert-caution: #fb464c;
  --lt-markdown-badge-background: #332725;
  --lt-markdown-badge-foreground: #e2d8d7;
  --lt-markdown-table-border: #81625d;
  --lt-markdown-table-row-background: #1d1615;
  --lt-markdown-thematic-break: #423230;
  --lt-markdown-math-inline-background: #332725;
  --lt-markdown-keyboard-background: #2c2220;
  --lt-markdown-keyboard-border: #423230;
  --lt-editor-inline-code-background: #332725;
  --lt-editor-inline-code-foreground: #e2d8d7;
  --lt-editor-code-background: #1d1615;
  --lt-editor-code-foreground: #e2d8d7;
  --lt-editor-code-border: #423230;
  --lt-editor-code-selection-background: #701b0e;
  --lt-editor-code-selection-foreground: #ffffff;
  --lt-syntax-background: #1d1615;
  --lt-syntax-foreground: #e2d8d7;
  --lt-syntax-comment: #a38581;
  --lt-syntax-keyword: #f7c5bd;
  --lt-syntax-string: #f8d0ca;
  --lt-syntax-number: #ec7563;
  --lt-syntax-function: #f3a89d;
  --lt-syntax-variable: #e2d8d7;
  --lt-syntax-type: #f3a89d;
  --lt-syntax-operator: #f7c5bd;
  --lt-syntax-punctuation: #c8b6b3;
  --lt-syntax-inserted: #44cf6e;
  --lt-syntax-inserted-background: #143621;
  --lt-syntax-deleted: #ff8f92;
  --lt-syntax-deleted-background: #3a1d20;
  --lt-syntax-changed: #e0de71;
  --lt-syntax-changed-background: #33301a;
  --lt-navigation-button-hover-background: #f3a89d;
  --lt-navigation-button-disabled-background: #332725;
  --lt-navigation-button-disabled-foreground: #82635e;
  --lt-navigation-recent-border: #423230;
  --lt-navigation-recent-item-foreground: #e2d8d7;
  --lt-navigation-recent-item-hover-foreground: #f3a89d;
  --lt-minimap-viewport-border: #ee8575;
  --lt-minimap-viewport-background: rgba(238, 133, 117, 0.14);
}
:root[data-leaf-theme="violet"][data-leaf-appearance="light"] {
  --lt-theme-source: violet-light;
  --lt-background: #ffffff;
  --lt-foreground: #281d34;
  --lt-surface: #ffffff;
  --lt-surface-elevated: #ffffff;
  --lt-surface-muted: #f7f5fa;
  --lt-surface-sunken: #f2eff6;
  --lt-border: #e4ddec;
  --lt-border-strong: #c6b7d7;
  --lt-muted-foreground: #664b85;
  --lt-hover-tint: #664b85;
  --lt-primary: #9043e8;
  --lt-primary-foreground: #ffffff;
  --lt-primary-ink: #9043e8;
  --lt-accent: #9043e8;
  --lt-accent-foreground: #ffffff;
  --lt-accent-ink: #7d23e4;
  --lt-danger: #d3243a;
  --lt-danger-foreground: #ffffff;
  --lt-warning: #8a6d00;
  --lt-success: #087a34;
  --lt-success-foreground: #ffffff;
  --lt-done: #9043e8;
  --lt-link: #9043e8;
  --lt-link-hover: #6818c3;
  --lt-focus-ring: #ad74ee;
  --lt-focus-selection-background: #efe5fc;
  --lt-focus-selection-foreground: #281d34;
  --lt-markdown-background: #ffffff;
  --lt-markdown-foreground: #281d34;
  --lt-markdown-heading: #150f1b;
  --lt-markdown-heading-2: #150f1b;
  --lt-markdown-heading-3: #150f1b;
  --lt-markdown-heading-4: #150f1b;
  --lt-markdown-heading-5: #150f1b;
  --lt-markdown-heading-6: #150f1b;
  --lt-markdown-rule: #e4ddec;
  --lt-markdown-link: #9043e8;
  --lt-markdown-blockquote-border: #ad74ee;
  --lt-markdown-blockquote-foreground: #503b68;
  --lt-markdown-alert-note: #9043e8;
  --lt-markdown-alert-tip: #087a34;
  --lt-markdown-alert-important: #9043e8;
  --lt-markdown-alert-warning: #8a6d00;
  --lt-markdown-alert-caution: #d3243a;
  --lt-markdown-badge-background: #f0edf5;
  --lt-markdown-badge-foreground: #281d34;
  --lt-markdown-table-border: #997fb7;
  --lt-markdown-table-row-background: #f2eff6;
  --lt-markdown-thematic-break: #e4ddec;
  --lt-markdown-math-inline-background: #f0edf5;
  --lt-markdown-keyboard-background: #ffffff;
  --lt-markdown-keyboard-border: #dad0e5;
  --lt-editor-inline-code-background: #f4f1f7;
  --lt-editor-inline-code-foreground: #281d34;
  --lt-editor-code-background: #f7f5fa;
  --lt-editor-code-foreground: #281d34;
  --lt-editor-code-border: #e4ddec;
  --lt-editor-code-selection-background: #ecdffb;
  --lt-editor-code-selection-foreground: #281d34;
  --lt-syntax-background: #f7f5fa;
  --lt-syntax-foreground: #281d34;
  --lt-syntax-comment: #6c4f8d;
  --lt-syntax-keyword: #9043e8;
  --lt-syntax-string: #8430e5;
  --lt-syntax-number: #711ad4;
  --lt-syntax-function: #7d23e4;
  --lt-syntax-variable: #281d34;
  --lt-syntax-type: #7d23e4;
  --lt-syntax-operator: #9043e8;
  --lt-syntax-punctuation: #574071;
  --lt-syntax-inserted: #0a6a2f;
  --lt-syntax-inserted-background: #d6f2de;
  --lt-syntax-deleted: #a01a2a;
  --lt-syntax-deleted-background: #fbdde1;
  --lt-syntax-changed: #7a5200;
  --lt-syntax-changed-background: #f7ecc9;
  --lt-navigation-button-hover-background: #ab70ed;
  --lt-navigation-button-disabled-background: #f0edf5;
  --lt-navigation-button-disabled-foreground: #a690c0;
  --lt-navigation-recent-border: #e4ddec;
  --lt-navigation-recent-item-foreground: #281d34;
  --lt-navigation-recent-item-hover-foreground: #9043e8;
  --lt-minimap-viewport-border: #9043e8;
  --lt-minimap-viewport-background: rgba(144, 67, 232, 0.14);
}
:root[data-leaf-theme="violet"][data-leaf-appearance="dark"] {
  --lt-theme-source: violet-dark;
  --lt-background: #211c27;
  --lt-foreground: #ddd8e3;
  --lt-surface: #211c27;
  --lt-surface-elevated: #2a2331;
  --lt-surface-muted: #2e2736;
  --lt-surface-sunken: #1a161f;
  --lt-border: #3b3246;
  --lt-border-strong: #5d4f6d;
  --lt-muted-foreground: #a194b1;
  --lt-hover-tint: #a194b1;
  --lt-primary: #bc8ef1;
  --lt-primary-foreground: #211c27;
  --lt-primary-ink: #bc8ef1;
  --lt-accent: #ceadf5;
  --lt-accent-foreground: #211c27;
  --lt-accent-ink: #ceadf5;
  --lt-danger: #fb4f55;
  --lt-danger-foreground: #1e1e1e;
  --lt-warning: #e0de71;
  --lt-success: #44cf6e;
  --lt-success-foreground: #1e1e1e;
  --lt-done: #bc8ef1;
  --lt-link: #ceadf5;
  --lt-link-hover: #d7bcf7;
  --lt-focus-ring: #bc8ef1;
  --lt-focus-selection-background: #471186;
  --lt-focus-selection-foreground: #ffffff;
  --lt-markdown-background: #211c27;
  --lt-markdown-foreground: #ddd8e3;
  --lt-markdown-heading: #ffffff;
  --lt-markdown-heading-2: #ffffff;
  --lt-markdown-heading-3: #ffffff;
  --lt-markdown-heading-4: #ffffff;
  --lt-markdown-heading-5: #ffffff;
  --lt-markdown-heading-6: #ffffff;
  --lt-markdown-rule: #3b3246;
  --lt-markdown-link: #ceadf5;
  --lt-markdown-blockquote-border: #bc8ef1;
  --lt-markdown-blockquote-foreground: #ddd8e3;
  --lt-markdown-alert-note: #ceadf5;
  --lt-markdown-alert-tip: #44cf6e;
  --lt-markdown-alert-important: #bc8ef1;
  --lt-markdown-alert-warning: #e0de71;
  --lt-markdown-alert-caution: #fb464c;
  --lt-markdown-badge-background: #2e2736;
  --lt-markdown-badge-foreground: #ddd8e3;
  --lt-markdown-table-border: #736287;
  --lt-markdown-table-row-background: #1a161f;
  --lt-markdown-thematic-break: #3b3246;
  --lt-markdown-math-inline-background: #2e2736;
  --lt-markdown-keyboard-background: #28222e;
  --lt-markdown-keyboard-border: #3b3246;
  --lt-editor-inline-code-background: #2e2736;
  --lt-editor-inline-code-foreground: #ddd8e3;
  --lt-editor-code-background: #1a161f;
  --lt-editor-code-foreground: #ddd8e3;
  --lt-editor-code-border: #3b3246;
  --lt-editor-code-selection-background: #4f1295;
  --lt-editor-code-selection-foreground: #ffffff;
  --lt-syntax-background: #1a161f;
  --lt-syntax-foreground: #ddd8e3;
  --lt-syntax-comment: #9586a7;
  --lt-syntax-keyword: #dec7f8;
  --lt-syntax-string: #e4d2f9;
  --lt-syntax-number: #b480ef;
  --lt-syntax-function: #ceadf5;
  --lt-syntax-variable: #ddd8e3;
  --lt-syntax-type: #ceadf5;
  --lt-syntax-operator: #dec7f8;
  --lt-syntax-punctuation: #c0b6ca;
  --lt-syntax-inserted: #44cf6e;
  --lt-syntax-inserted-background: #143621;
  --lt-syntax-deleted: #ff8f92;
  --lt-syntax-deleted-background: #3a1d20;
  --lt-syntax-changed: #e0de71;
  --lt-syntax-changed-background: #33301a;
  --lt-navigation-button-hover-background: #ceadf5;
  --lt-navigation-button-disabled-background: #2e2736;
  --lt-navigation-button-disabled-foreground: #746388;
  --lt-navigation-recent-border: #3b3246;
  --lt-navigation-recent-item-foreground: #ddd8e3;
  --lt-navigation-recent-item-hover-foreground: #ceadf5;
  --lt-minimap-viewport-border: #bc8ef1;
  --lt-minimap-viewport-background: rgba(188, 142, 241, 0.14);
}
:root[data-leaf-theme="amaranth"] {
  --heading-font: "Source Serif 4", Georgia, Cambria, "Times New Roman", serif;
  --reading-font: "Source Sans 3", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --app-font: "Source Sans 3", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --code-font: "Source Code Pro", ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;
}
:root[data-leaf-theme="amber"] {
  --heading-font: "Libre Franklin", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --reading-font: "Libre Franklin", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --app-font: "Libre Franklin", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --code-font: "Noto Sans Mono", ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;
}
:root[data-leaf-theme="arabica"] {
  --heading-font: "Rubik", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
  --reading-font: "Rubik", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --app-font: "Rubik", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --code-font: "JetBrains Mono", ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;
}
:root[data-leaf-theme="bloodleaf"] {
  --heading-font: "Archivo", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
  --reading-font: "Archivo", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --app-font: "Archivo", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --code-font: "Roboto Mono", ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;
}
:root[data-leaf-theme="cobalt"] {
  --heading-font: "Manrope", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --reading-font: "Manrope", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --app-font: "Manrope", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --code-font: "Noto Sans Mono", ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;
}
:root[data-leaf-theme="fern"] {
  --heading-font: "Noto Serif", Georgia, Cambria, "Times New Roman", serif;
  --reading-font: "Noto Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --app-font: "Noto Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --code-font: "Noto Sans Mono", ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;
}
:root[data-leaf-theme="ginger"] {
  --heading-font: "Nunito", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
  --reading-font: "Nunito", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --app-font: "Nunito", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --code-font: "Inconsolata", ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;
}
:root[data-leaf-theme="github"] {
  --heading-font: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --reading-font: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --app-font: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --code-font: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
}
:root[data-leaf-theme="goldenrod"] {
  --heading-font: "Space Grotesk", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
  --reading-font: "Space Grotesk", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --app-font: "Space Grotesk", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --code-font: "Space Mono", ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;
}
:root[data-leaf-theme="halcyon"] {
  --heading-font: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
  --reading-font: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --app-font: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --code-font: "IBM Plex Mono", ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;
}
:root[data-leaf-theme="ink"] {
  --heading-font: "Public Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --reading-font: "Public Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --app-font: "Public Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --code-font: "Noto Sans Mono", ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;
}
:root[data-leaf-theme="nightshade"] {
  --heading-font: "Fraunces", Georgia, Cambria, "Times New Roman", serif;
  --reading-font: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --app-font: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --code-font: "Fira Code", ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;
}
:root[data-leaf-theme="pippin"] {
  --heading-font: "DM Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
  --reading-font: "DM Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --app-font: "DM Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --code-font: "DM Mono", ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;
}
:root[data-leaf-theme="sage"] {
  --heading-font: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
  --reading-font: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --app-font: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --code-font: "JetBrains Mono", ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;
}
:root[data-leaf-theme="verdant"] {
  --heading-font: "Figtree", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --reading-font: "Figtree", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --app-font: "Figtree", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --code-font: "Noto Sans Mono", ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;
}
:root[data-leaf-theme="vermilion"] {
  --heading-font: "Karla", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --reading-font: "Karla", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --app-font: "Karla", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --code-font: "Noto Sans Mono", ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;
}
:root[data-leaf-theme="violet"] {
  --heading-font: "Outfit", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --reading-font: "Outfit", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --app-font: "Outfit", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --code-font: "Noto Sans Mono", ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;
}

/* Generated from design/tokens.md by `just bundle-tokens`. Do not edit. */
:root {
  /* Corners */
  --lt-radius-xs: 2px;
  --lt-radius-sm: 4px;
  --lt-radius-md: 6px;
  --lt-radius-lg: 8px;
  --lt-radius-xl: 10px;
  --lt-radius-2xl: 14px;
  --lt-radius-pill: 999px;
  --lt-radius-full: 50%;
  --lt-radius-window: 20px;
  --lt-radius-window-inner: 12px;
  /* Document type */
  --type-base: max(0.875rem, calc(1rem + (100vw - 1280px) / 140));
  --type-measure-body: 75ch;
  --type-spacing: calc(var(--type-base) * 1.5);
  --type-spacing-sm: var(--type-base);
  --type-body-size: var(--type-base);
  --type-display-size: calc(var(--type-base) * 3.2);
  --type-h1-size: calc(var(--type-base) * 2.2);
  --type-h2-size: calc(var(--type-base) * 2);
  --type-h3-size: calc(var(--type-base) * 1.8);
  --type-h4-size: calc(var(--type-base) * 1.6);
  --type-h5-size: calc(var(--type-base) * 1.4);
  --type-h6-size: calc(var(--type-base) * 1.2);
  --type-caption-size: calc(var(--type-base) * 0.8125);
  --type-display-line: 1.2;
  --type-h1-line: 1.25;
  --type-h2-line: 1.25;
  --type-h3-line: 1.25;
  --type-h4-line: 1.25;
  --type-body-line: 1.6;
  --type-caption-line: 1.6;
  --type-display-weight: 900;
  --type-h1-weight: 850;
  --type-h2-weight: 800;
  --type-h3-weight: 750;
  --type-h4-weight: 700;
  --type-h5-weight: 650;
  --type-h6-weight: 600;
  /* Interface text */
  --lt-text-9: 9px;
  --lt-text-10: 10px;
  --lt-text-10-5: 10.5px;
  --lt-text-11: 11px;
  --lt-text-11-5: 11.5px;
  --lt-text-12: 12px;
  --lt-text-12-5: 12.5px;
  --lt-text-13: 13px;
  --lt-text-13-5: 13.5px;
  --lt-text-14: 14px;
  --lt-text-15: 15px;
  --lt-text-16: 16px;
  --lt-text-18: 18px;
  /* Interface weight */
  --lt-weight-400: 400;
  --lt-weight-500: 500;
  --lt-weight-600: 600;
  --lt-weight-700: 700;
  --lt-weight-800: 800;
  /* Stroke */
  --lt-stroke-1: 1px;
  --lt-stroke-1-5: 1.5px;
  --lt-stroke-2: 2px;
  --lt-stroke-3: 3px;
  --lt-stroke-4: 4px;
  --lt-stroke-6: 6px;
  /* Line height */
  --lt-leading-1: 1;
  --lt-leading-1-04: 1.04;
  --lt-leading-1-2: 1.2;
  --lt-leading-1-25: 1.25;
  --lt-leading-1-3: 1.3;
  --lt-leading-1-35: 1.35;
  --lt-leading-1-4: 1.4;
  --lt-leading-1-45: 1.45;
  --lt-leading-1-5: 1.5;
  --lt-leading-1-55: 1.55;
  --lt-leading-1-6: 1.6;
  /* Letter spacing */
  --lt-tracking-020: 0.02em;
  --lt-tracking-040: 0.04em;
  --lt-tracking-060: 0.06em;
  --lt-tracking-120: 0.12em;
  --lt-tracking-tight-005: -0.005em;
  --lt-tracking-tight-01: -0.01em;
  /* Opacity */
  --lt-opacity-35: 0.35;
  --lt-opacity-38: 0.38;
  --lt-opacity-40: 0.4;
  --lt-opacity-45: 0.45;
  --lt-opacity-46: 0.46;
  --lt-opacity-50: 0.5;
  --lt-opacity-55: 0.55;
  --lt-opacity-60: 0.6;
  --lt-opacity-75: 0.75;
  --lt-opacity-78: 0.78;
  --lt-opacity-85: 0.85;
  --lt-opacity-92: 0.92;
  /* Spacing */
  --lt-space-1: 1px;
  --lt-space-2: 2px;
  --lt-space-4: 4px;
  --lt-space-6: 6px;
  --lt-space-8: 8px;
  --lt-space-10: 10px;
  --lt-space-12: 12px;
  --lt-space-14: 14px;
  --lt-space-16: 16px;
  --lt-space-20: 20px;
  --lt-space-24: 24px;
  --lt-space-32: 32px;
  --lt-space-48: 48px;
  /* Duration */
  --lt-duration-0: 0ms;
  --lt-duration-100: 100ms;
  --lt-duration-120: 120ms;
  --lt-duration-140: 140ms;
  --lt-duration-150: 150ms;
  --lt-duration-160: 160ms;
  --lt-duration-200: 200ms;
  --lt-duration-220: 220ms;
  --lt-duration-260: 260ms;
  --lt-duration-280: 280ms;
  --lt-duration-300: 300ms;
  --lt-duration-400: 400ms;
  --lt-duration-700: 700ms;
  --lt-duration-800: 800ms;
  --lt-duration-1100: 1100ms;
  --lt-duration-1250: 1250ms;
  --lt-duration-1600: 1600ms;
  --lt-duration-2400: 2400ms;
  /* Easing */
  --lt-ease: ease;
  --lt-ease-linear: linear;
  --lt-ease-in-out: ease-in-out;
  --lt-ease-emphasized: cubic-bezier(0.2, 0, 0, 1);
  --lt-ease-decelerate: cubic-bezier(0.05, 0.7, 0.1, 1);
  --lt-ease-accelerate: cubic-bezier(0.3, 0, 0.8, 0.15);
  --lt-ease-sheet: cubic-bezier(0.32, 0.72, 0, 1);
  --lt-ease-overshoot: cubic-bezier(0.34, 1.56, 0.64, 1);
  /* Hover reveal */
  --lt-transition-hover-reveal-arrive: opacity var(--lt-duration-120) var(--lt-ease-decelerate);
  --lt-transition-hover-reveal-leave: opacity var(--lt-duration-100) var(--lt-ease-accelerate) var(--lt-duration-300);
  /* Inactive window */
  --lt-active-saturation: 1;
  --lt-active-contrast: 1;
  --lt-inactive-saturation: 0.5;
  --lt-inactive-contrast: 0.9;
  /* Layers */
  --lt-z-below: -1;
  --lt-z-20: 20;
  --lt-z-30: 30;
  --lt-z-40: 40;
  --lt-z-41: 41;
  --lt-z-42: 42;
  --lt-z-43: 43;
  --lt-z-44: 44;
  --lt-z-45: 45;
  --lt-z-50: 50;
  --lt-z-51: 51;
  /* Shadow band geometry */
  --lt-shadow-spread: 12px;
  --lt-shadow-host-border: var(--lt-stroke-1);
  /* Strokes, rings and one recess */
  --lt-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.35);
  --lt-shadow-hairline: inset 0 0 0 1px color-mix(in srgb, var(--lt-foreground) 12%, transparent);
  --lt-shadow-hairline-strong: inset 0 0 0 1px color-mix(in srgb, var(--lt-foreground) 26%, transparent);
  --lt-shadow-focus: 0 0 0 2px color-mix(in srgb, var(--lt-link) 30%, transparent);
  --lt-shadow-ring: 0 0 0 2px var(--lt-surface);
  /* Grain */
  --lt-grain-light: rgba(0, 0, 0, 0.1);
  --lt-grain-heavy: rgba(0, 0, 0, 0.3);
  --lt-grain-dark: rgba(0, 0, 0, 0.35);
  --lt-grain-dark-heavy: rgba(0, 0, 0, 0.72);
  --lt-grain-lift: rgba(255, 255, 255, 0.07);
  --lt-grain-hover: rgba(0, 0, 0, 0.55);
  --lt-grain-shadow-base: #ffffff;
  --lt-grain-shadow-blob: #000000;
  --lt-grain-shadow-rim: rgba(255, 255, 255, 0.6);
  --lt-grain-shadow-mid: rgba(255, 255, 255, 0.365);
  --lt-grain-shadow-curve: url(#lt-shadow-halftone);
  --lt-grain-shadow-opacity: 1;
  --lt-grain-shadow-opacity-inside: 1;
  --lt-grain-shadow-opacity-inside-light: 0.2;
  /* Fixed colors */
  --lt-mask-opaque: #000;
  --lt-white: #ffffff;
  --lt-window-close: #e81123;
  --lt-window-close-foreground: #ffffff;
  --lt-checkbox-accent: #6e7681;
  /* Fixed tints */
  --lt-tint-recess: rgba(0, 0, 0, 0.16);
  --lt-tint-backdrop: rgba(0, 0, 0, 0.45);
  --lt-grain-dot-strong: rgba(0, 0, 0, 0.55);
  /* The hover wash */
  --lt-wash-hover: color-mix(in srgb, var(--lt-hover-tint) 16%, transparent);
  --lt-hover-lift: 1.08;
  /* Inset edges */
  --lt-shadow-edge-strong: inset 0 0 0 1px var(--lt-border-strong);
  --lt-shadow-edge-accent: inset 0 0 0 2px var(--lt-accent);
  --lt-shadow-edge-link: inset 0 0 0 1px var(--lt-link);
}

/* Generated from design/icons.md by `just bundle-icons`. Do not edit. */
/* One class per icon, drawn as a mask so the control it sits in colors it. */
.lt-icon {
  display: inline-block;
  flex: none;
  width: 16px;
  height: 16px;
  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;
}
/* Every drawing, declared once, so a theme family can redeclare the ones its pack covers. */
:root {
  --lt-icon-back-long: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6.75 15.75 3 12m0 0 3.75-3.75M3 12h18' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-forward-long: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M17.25 8.25 21 12m0 0-3.75 3.75M21 12H3' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-settings: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6 13.5V3.75m0 9.75a1.5 1.5 0 0 1 0 3m0-3a1.5 1.5 0 0 0 0 3m0 3.75V16.5m12-3V3.75m0 9.75a1.5 1.5 0 0 1 0 3m0-3a1.5 1.5 0 0 0 0 3m0 3.75V16.5m-6-9V3.75m0 3.75a1.5 1.5 0 0 1 0 3m0-3a1.5 1.5 0 0 0 0 3m0 9.75V10.5' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-update: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M10.268 21a2 2 0 0 0 3.464 0' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-open-library: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Crect x='3' y='3' width='18' height='18' rx='4' ry='4' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='M8 7v10' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-open: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M3.75 9.776c.112-.017.227-.026.344-.026h15.812c.117 0 .232.009.344.026m-16.5 0a2.25 2.25 0 0 0-1.883 2.542l.857 6a2.25 2.25 0 0 0 2.227 1.932H19.05a2.25 2.25 0 0 0 2.227-1.932l.857-6a2.25 2.25 0 0 0-1.883-2.542m-16.5 0V6A2.25 2.25 0 0 1 6 3.75h3.879a1.5 1.5 0 0 1 1.06.44l2.122 2.12a1.5 1.5 0 0 0 1.06.44H18A2.25 2.25 0 0 1 20.25 9v.776' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-new: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 4.5v15m7.5-7.5h-15' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-code-view: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M17.25 6.75 22.5 12l-5.25 5.25m-10.5 0L1.5 12l5.25-5.25m7.5-3-4.5 16.5' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-document: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-graph: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' aria-hidden='true'%3E%3Ccircle cx='12' cy='12' r='4' fill='%23000'/%3E%3Ccircle cx='7' cy='6' r='2' fill='%23000'/%3E%3Ccircle cx='19' cy='5' r='3' fill='%23000'/%3E%3Ccircle cx='13' cy='20' r='2' fill='%23000'/%3E%3Ccircle cx='4' cy='11' r='2' fill='%23000'/%3E%3Cline x1='12' y1='12' x2='7' y2='6' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-miterlimit='10'/%3E%3Cline x1='19' y1='5' x2='12' y2='12' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-miterlimit='10'/%3E%3Cline x1='12' y1='12' x2='13' y2='20' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-miterlimit='10'/%3E%3Cline x1='12' y1='12' x2='4' y2='11' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-miterlimit='10'/%3E%3C/svg%3E");
  --lt-icon-sync: url("data:image/svg+xml,%3Csvg class='library-folder-icon' aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0 3.181 3.183a8.25 8.25 0 0 0 13.803-3.7M4.031 9.865a8.25 8.25 0 0 1 13.803-3.7l3.181 3.182m0-4.991v4.99' /%3E%3C/svg%3E");
  --lt-icon-refresh: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8'/%3E%3Cpath d='M3 3v5h5'/%3E%3C/svg%3E");
  --lt-icon-lock-closed: url("data:image/svg+xml,%3Csvg class='reader-tool-icon' aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M16.5 10.5V6.75a4.5 4.5 0 1 0-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 0 0 2.25-2.25v-6.75a2.25 2.25 0 0 0-2.25-2.25H6.75a2.25 2.25 0 0 0-2.25 2.25v6.75a2.25 2.25 0 0 0 2.25 2.25Z' /%3E%3C/svg%3E");
  --lt-icon-lock-open: url("data:image/svg+xml,%3Csvg class='reader-tool-icon' aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='2.25' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M13.5 10.5V6.75a4.5 4.5 0 1 1 9 0v3.75M3.75 21.75h10.5a2.25 2.25 0 0 0 2.25-2.25v-6.75a2.25 2.25 0 0 0-2.25-2.25H3.75a2.25 2.25 0 0 0-2.25 2.25v6.75a2.25 2.25 0 0 0 2.25 2.25Z' /%3E%3C/svg%3E");
  --lt-icon-speed-reader-on: url("data:image/svg+xml,%3Csvg class='reader-tool-icon' aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m12 14 4-4'/%3E%3Cpath d='M3.34 19a10 10 0 1 1 17.32 0'/%3E%3C/svg%3E");
  --lt-icon-speed-reader-off: url("data:image/svg+xml,%3Csvg class='reader-tool-icon' aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m12 14 4-4'/%3E%3Cpath d='M3.34 19a10 10 0 1 1 17.32 0'/%3E%3C/svg%3E");
  --lt-icon-wand: url("data:image/svg+xml,%3Csvg class='reader-tool-icon' aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M15 4V2'/%3E%3Cpath d='M15 16v-2'/%3E%3Cpath d='M8 9h2'/%3E%3Cpath d='M20 9h2'/%3E%3Cpath d='M17.8 11.8 19 13'/%3E%3Cpath d='M15 9h.01'/%3E%3Cpath d='M17.8 6.2 19 5'/%3E%3Cpath d='m3 21 9-9'/%3E%3Cpath d='M12.2 6.2 11 5'/%3E%3C/svg%3E");
  --lt-icon-cloud: url("data:image/svg+xml,%3Csvg class='library-folder-icon' aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z'/%3E%3C/svg%3E");
  --lt-icon-export: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 13v8l-4-4'/%3E%3Cpath d='m12 21 4-4'/%3E%3Cpath d='M4.393 15.269A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.436 8.284'/%3E%3C/svg%3E");
  --lt-icon-computer: url("data:image/svg+xml,%3Csvg class='library-folder-icon' aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9 17.25v1.007a3 3 0 0 1-.879 2.122L7.5 21h9l-.621-.621A3 3 0 0 1 15 18.257V17.25m6-12V15a2.25 2.25 0 0 1-2.25 2.25H5.25A2.25 2.25 0 0 1 3 15V5.25m18 0A2.25 2.25 0 0 0 18.75 3H5.25A2.25 2.25 0 0 0 3 5.25m18 0V12a2.25 2.25 0 0 1-2.25 2.25H5.25A2.25 2.25 0 0 1 3 12V5.25'/%3E%3C/svg%3E");
  --lt-icon-package-open: url("data:image/svg+xml,%3Csvg class='library-folder-icon' aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 22v-9'/%3E%3Cpath d='M15.17 2.21a1.67 1.67 0 0 1 1.63 0L21 4.57a1.93 1.93 0 0 1 0 3.36L8.82 14.79a1.655 1.655 0 0 1-1.64 0L3 12.43a1.93 1.93 0 0 1 0-3.36z'/%3E%3Cpath d='M20 13v3.87a2.06 2.06 0 0 1-1.11 1.83l-6 3.08a1.93 1.93 0 0 1-1.78 0l-6-3.08A2.06 2.06 0 0 1 4 16.87V13'/%3E%3Cpath d='M21 12.43a1.93 1.93 0 0 0 0-3.36L8.83 2.2a1.64 1.64 0 0 0-1.63 0L3 4.57a1.93 1.93 0 0 0 0 3.36l12.18 6.86a1.636 1.636 0 0 0 1.63 0z'/%3E%3C/svg%3E");
  --lt-icon-package: url("data:image/svg+xml,%3Csvg class='library-folder-icon' aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z'/%3E%3Cpath d='M12 22V12'/%3E%3Cpolyline points='3.29 7 12 12 20.71 7'/%3E%3Cpath d='m7.5 4.27 9 5.15'/%3E%3C/svg%3E");
  --lt-icon-folder: url("data:image/svg+xml,%3Csvg class='library-folder-icon' aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M2.25 12.75V12A2.25 2.25 0 0 1 4.5 9.75h15A2.25 2.25 0 0 1 21.75 12v.75m-8.69-6.44-2.12-2.12a1.5 1.5 0 0 0-1.061-.44H4.5A2.25 2.25 0 0 0 2.25 6v12a2.25 2.25 0 0 0 2.25 2.25h15A2.25 2.25 0 0 0 21.75 18V9a2.25 2.25 0 0 0-2.25-2.25h-5.379a1.5 1.5 0 0 1-1.06-.44Z' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-grip: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='9' cy='5' r='1.4' fill='%23000'/%3E%3Ccircle cx='9' cy='12' r='1.4' fill='%23000'/%3E%3Ccircle cx='9' cy='19' r='1.4' fill='%23000'/%3E%3Ccircle cx='15' cy='5' r='1.4' fill='%23000'/%3E%3Ccircle cx='15' cy='12' r='1.4' fill='%23000'/%3E%3Ccircle cx='15' cy='19' r='1.4' fill='%23000'/%3E%3C/svg%3E");
  --lt-icon-close: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6 18 18 6M6 6l12 12' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-text: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5 6.5V5h14v1.5M12 5v14M9.5 19h5' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-heading: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6 12h12M6 20V4M18 20V4' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-list: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M8.25 6.75h12M8.25 12h12m-12 5.25h12' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Ccircle cx='3.75' cy='6.75' r='1.1' fill='%23000'/%3E%3Ccircle cx='3.75' cy='12' r='1.1' fill='%23000'/%3E%3Ccircle cx='3.75' cy='17.25' r='1.1' fill='%23000'/%3E%3C/svg%3E");
  --lt-icon-quote: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M17 6H3m18 6H8m13 6H8M3 12v6' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-table: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Crect x='3' y='3' width='18' height='18' rx='2' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='M12 3v18M3 12h18' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-image: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='m2.25 15.75 5.159-5.159a2.25 2.25 0 0 1 3.182 0l5.159 5.159m-1.5-1.5 1.409-1.409a2.25 2.25 0 0 1 3.182 0l2.909 2.909m-18 3.75h16.5a1.5 1.5 0 0 0 1.5-1.5V6a1.5 1.5 0 0 0-1.5-1.5H3.75A1.5 1.5 0 0 0 2.25 6v12a1.5 1.5 0 0 0 1.5 1.5Zm10.5-11.25h.008v.008h-.008V8.25Zm.375 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Z' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-divider: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-cards: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Crect x='3' y='5' width='8' height='14' rx='2' ry='2' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Crect x='13' y='5' width='8' height='9' rx='2' ry='2' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-note-frame: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Crect x='3' y='3' width='18' height='18' rx='4' ry='4' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='M3 8h18' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='M3 17h18' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-tag: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z'/%3E%3Ccircle cx='7.5' cy='7.5' r='.5' fill='%23000'/%3E%3C/svg%3E");
  --lt-icon-chart-bar: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 3v16a2 2 0 0 0 2 2h16'/%3E%3Cpath d='M7 16h8'/%3E%3Cpath d='M7 11h12'/%3E%3Cpath d='M7 6h3'/%3E%3C/svg%3E");
  --lt-icon-comment: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-workflow: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Crect x='3' y='3' width='8' height='8' rx='2' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='M7 11v4a2 2 0 0 0 2 2h4' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Crect x='13' y='13' width='8' height='8' rx='2' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-zoom-in: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='M21 21l-4.35-4.35M8 11h6M11 8v6' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-zoom-out: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='M21 21l-4.35-4.35M8 11h6' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-fit: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M3 7V5a2 2 0 0 1 2-2h2M17 3h2a2 2 0 0 1 2 2v2M21 17v2a2 2 0 0 1-2 2h-2M7 21H5a2 2 0 0 1-2-2v-2' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Crect x='7' y='8' width='10' height='8' rx='1' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-expand: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M3.75 8.25v-4.5h4.5M3.75 3.75 9 9M3.75 15.75v4.5h4.5M3.75 20.25 9 15M20.25 8.25v-4.5h-4.5M20.25 3.75 15 9M20.25 15.75v4.5h-4.5M20.25 20.25 15 15' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-bold: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6 12h8a4 4 0 0 1 0 8H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h6a4 4 0 0 1 0 8' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-italic: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M19 4h-9M14 20H5M15 4L9 20' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-strikethrough: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M16 5H10a3 3 0 0 0-2.4 4.8M13.5 12A3.5 3.5 0 0 1 14 19H7M4 12h16' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-link: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-undo: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9 15 3 9m0 0 6-6M3 9h12a6 6 0 0 1 0 12h-3' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-missing-image: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6.3,22.1c-1.1,0-2-.9-2-2V4.1c0-1.1.9-2,2-2h8c.6,0,1.3.3,1.7.7l3.6,3.6c.5.5.7,1.1.7,1.7v12c0,1.1-.9,2-2,2H6.3Z' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='M14.3,2.1v5c0,.6.4,1,1,1h5' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='M16.3,16.1s-1.5-2-4-2-4,2-4,2' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cline x1='9.3' y1='9.1' x2='9.3' y2='9.1' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-chevron-down: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='m19.5 8.25-7.5 7.5-7.5-7.5' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-replace: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 4a1 1 0 0 1 1-1'/%3E%3Cpath d='M15 10a1 1 0 0 1-1-1'/%3E%3Cpath d='M21 4a1 1 0 0 0-1-1'/%3E%3Cpath d='M21 9a1 1 0 0 1-1 1'/%3E%3Cpath d='m3 7 3 3 3-3'/%3E%3Cpath d='M6 10V5a2 2 0 0 1 2-2h2'/%3E%3Crect x='3' y='14' width='7' height='7' rx='1'/%3E%3C/svg%3E");
  --lt-icon-select-all: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M4 4h6M7 4v11M4 15h6M14 9h6M17 9v11M14 20h6' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-theme: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 21a9 9 0 0 1 0 -18c4.97 0 9 3.582 9 8c0 1.06 -.474 2.078 -1.318 2.828c-.844 .75 -1.989 1.172 -3.182 1.172h-2.5a2 2 0 0 0 -1 3.75a1.3 1.3 0 0 1 -1 2.25' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='M7.5 10.5a1 1 0 1 0 2 0a1 1 0 1 0 -2 0' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='M11.5 7.5a1 1 0 1 0 2 0a1 1 0 1 0 -2 0' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='M15.5 10.5a1 1 0 1 0 2 0a1 1 0 1 0 -2 0' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-redo: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='m15 15 6-6m0 0-6-6m6 6H9a6 6 0 0 0 0 12h3' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-window-minimize: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cline x1='2.5' y1='6.5' x2='9.5' y2='6.5' stroke='%23000' stroke-width='1'/%3E%3C/svg%3E");
  --lt-icon-window-maximize: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Crect x='3' y='3' width='6' height='6' rx='1' fill='none' stroke='%23000' stroke-width='1'/%3E%3C/svg%3E");
  --lt-icon-window-restore: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Crect x='1.5' y='4.5' width='6' height='6' rx='1' fill='none' stroke='%23000' stroke-width='1'/%3E%3Cpath d='M4.5 4.5V1.5H10.5V7.5H7.5' fill='none' stroke='%23000' stroke-width='1' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  --lt-icon-window-close: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M3 3l6 6M9 3l-6 6' fill='none' stroke='%23000' stroke-width='1' stroke-linecap='round'/%3E%3C/svg%3E");
  --lt-icon-check: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='m4.5 12.75 6 6 9-13.5' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-check-circle: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9 12.75 11.25 15 15 9.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-tab-close: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M18 6 6 18' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='2.25'/%3E%3Cpath d='m6 6 12 12' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='2.25'/%3E%3C/svg%3E");
  --lt-icon-favorite-off: url("data:image/svg+xml,%3Csvg class='reader-tool-icon' aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M21 8.25c0-2.485-2.099-4.5-4.688-4.5-1.935 0-3.597 1.126-4.312 2.733-.715-1.607-2.377-2.733-4.313-2.733C5.1 3.75 3 5.765 3 8.25c0 7.22 9 12 9 12s9-4.78 9-12Z' /%3E%3C/svg%3E");
  --lt-icon-favorite-on: url("data:image/svg+xml,%3Csvg class='reader-tool-icon' aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23000' d='M11.645 20.91a.75.75 0 0 0 .71 0c1.2-.65 9.145-5.16 9.145-12.66 0-2.485-2.099-4.5-4.688-4.5-1.935 0-3.597 1.126-4.312 2.733-.715-1.607-2.377-2.733-4.313-2.733C5.1 3.75 3 5.765 3 8.25c0 7.5 7.945 12.01 9.145 12.66Z'/%3E%3C/svg%3E");
  --lt-icon-recent: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-search: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-calendar: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 0 1 2.25-2.25h13.5A2.25 2.25 0 0 1 21 7.5v11.25m-18 0A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75m-18 0v-7.5A2.25 2.25 0 0 1 5.25 9h13.5A2.25 2.25 0 0 1 21 11.25v7.5' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-back: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M10.5 19.5 3 12m0 0 7.5-7.5M3 12h18' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-align-left: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M4 6h16' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='M4 10h9' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='M4 14h16' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='M4 18h9' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-align-center: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M4 6h16' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='M7.5 10h9' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='M4 14h16' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='M7.5 18h9' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-align-right: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M4 6h16' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='M11 10h9' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='M4 14h16' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='M11 18h9' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-sort-ascending: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M4 7h7' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='M4 12h11' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='M4 17h15' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-sort-descending: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M4 7h15' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='M4 12h11' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='M4 17h7' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-trash: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-copy: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M15.75 17.25v3.375c0 .621-.504 1.125-1.125 1.125h-9.75a1.125 1.125 0 0 1-1.125-1.125V7.875c0-.621.504-1.125 1.125-1.125H6.75a9.06 9.06 0 0 1 1.5.124m7.5 10.376h3.375c.621 0 1.125-.504 1.125-1.125V11.25c0-4.46-3.243-8.161-7.5-8.876a9.06 9.06 0 0 0-1.5-.124H9.375c-.621 0-1.125.504-1.125 1.125v3.5m7.5 10.375H9.375a1.125 1.125 0 0 1-1.125-1.125v-9.25m12 6.625v-1.875a3.375 3.375 0 0 0-3.375-3.375h-1.5a1.125 1.125 0 0 1-1.125-1.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H9.75' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-highlighter: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='m9 11-6 6v3h9l3-3' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='m22 12-4.6 4.6a2 2 0 0 1-2.8 0l-5.2-5.2a2 2 0 0 1 0-2.8L14 4' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-footnote: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 6v12' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='M17.196 9 6.804 15' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3Cpath d='m6.804 9 10.392 6' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'/%3E%3C/svg%3E");
  --lt-icon-leaf: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Cpath d='M59.7,60.1c-7.9-20.9-22.3-20.7-32.6-24.8-10.3-4.1-15.9-11.9-15.9-11.9,0,0,7.1,6.9,15.9,9.7,8.9,2.7,23,1.1,31.4,18.6-2.4-10.1-5.7-28.3-27-29.9C10.3,20.2,4.4,3.9,4.4,3.9c0,0-1.5,23.4,7.6,36.5,9,13.1,17,19,41.1,17.3,0,0,5.5-.4,6.7,2.5h0Z' fill='%23000'/%3E%3C/svg%3E");
  --lt-icon-windows: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23000' d='M2 2h9.2v9.2H2zM12.8 2H22v9.2h-9.2zM2 12.8h9.2V22H2zM12.8 12.8H22V22h-9.2z'/%3E%3C/svg%3E");
  --lt-icon-apple: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23000' d='M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701'/%3E%3C/svg%3E");
  /* The bolder drawing an active control swaps to. */
  --lt-icon-code-view-heavy: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M17.25 6.75 22.5 12l-5.25 5.25m-10.5 0L1.5 12l5.25-5.25m7.5-3-4.5 16.5' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='2.25'/%3E%3C/svg%3E");
  --lt-icon-document-heavy: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z' fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='2.25'/%3E%3C/svg%3E");
  --lt-icon-graph-heavy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' aria-hidden='true'%3E%3Ccircle cx='12' cy='12' r='4' fill='%23000'/%3E%3Ccircle cx='7' cy='6' r='2' fill='%23000'/%3E%3Ccircle cx='19' cy='5' r='3' fill='%23000'/%3E%3Ccircle cx='13' cy='20' r='2' fill='%23000'/%3E%3Ccircle cx='4' cy='11' r='2' fill='%23000'/%3E%3Cline x1='12' y1='12' x2='7' y2='6' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-miterlimit='10'/%3E%3Cline x1='19' y1='5' x2='12' y2='12' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-miterlimit='10'/%3E%3Cline x1='12' y1='12' x2='13' y2='20' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-miterlimit='10'/%3E%3Cline x1='12' y1='12' x2='4' y2='11' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-miterlimit='10'/%3E%3C/svg%3E");
  /* The window's own marks, each held to the pixel grid of a size the title bar wears it at. */
  --lt-icon-window-minimize-chip: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cline x1='2.5' y1='6.5' x2='9.5' y2='6.5' stroke='%23000' stroke-width='1'/%3E%3C/svg%3E");
  --lt-icon-window-minimize-dot: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 -0.25 12 12'%3E%3Cline x1='2.5' y1='6.5' x2='9.5' y2='6.5' stroke='%23000' stroke-width='1'/%3E%3C/svg%3E");
  --lt-icon-window-maximize-chip: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='-0.5 -0.5 12 12'%3E%3Crect x='3' y='3' width='6' height='6' rx='1' fill='none' stroke='%23000' stroke-width='1'/%3E%3C/svg%3E");
  --lt-icon-window-maximize-dot: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='-0.75 -0.75 12 12'%3E%3Crect x='3' y='3' width='6' height='6' rx='1' fill='none' stroke='%23000' stroke-width='1'/%3E%3C/svg%3E");
  --lt-icon-window-restore-chip: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Crect x='1.5' y='4.5' width='6' height='6' rx='1' fill='none' stroke='%23000' stroke-width='1'/%3E%3Cpath d='M4.5 4.5V1.5H10.5V7.5H7.5' fill='none' stroke='%23000' stroke-width='1' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  --lt-icon-window-restore-dot: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='-0.75 -0.75 12 12'%3E%3Crect x='1.5' y='4.5' width='6' height='6' rx='1' fill='none' stroke='%23000' stroke-width='1'/%3E%3Cpath d='M4.5 4.5V1.5H10.5V7.5H7.5' fill='none' stroke='%23000' stroke-width='1' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  --lt-icon-window-close-chip: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M3 3l6 6M9 3l-6 6' fill='none' stroke='%23000' stroke-width='1' stroke-linecap='round'/%3E%3C/svg%3E");
  --lt-icon-window-close-dot: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M3 3l6 6M9 3l-6 6' fill='none' stroke='%23000' stroke-width='1' stroke-linecap='round'/%3E%3C/svg%3E");
}
/* The feather pack, worn by cobalt, github. Every drawing it does not cover keeps the one above. */
:root[data-leaf-theme="cobalt"],
:root[data-leaf-theme="github"],
[data-leaf-pack="feather"] {
  --lt-icon-back-long: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-arrow-left'%3E%3Cline x1='19' y1='12' x2='5' y2='12'%3E%3C/line%3E%3Cpolyline points='12 19 5 12 12 5'%3E%3C/polyline%3E%3C/svg%3E");
  --lt-icon-forward-long: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-arrow-right'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3Cpolyline points='12 5 19 12 12 19'%3E%3C/polyline%3E%3C/svg%3E");
  --lt-icon-settings: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-sliders'%3E%3Cline x1='4' y1='21' x2='4' y2='14'%3E%3C/line%3E%3Cline x1='4' y1='10' x2='4' y2='3'%3E%3C/line%3E%3Cline x1='12' y1='21' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='3'%3E%3C/line%3E%3Cline x1='20' y1='21' x2='20' y2='16'%3E%3C/line%3E%3Cline x1='20' y1='12' x2='20' y2='3'%3E%3C/line%3E%3Cline x1='1' y1='14' x2='7' y2='14'%3E%3C/line%3E%3Cline x1='9' y1='8' x2='15' y2='8'%3E%3C/line%3E%3Cline x1='17' y1='16' x2='23' y2='16'%3E%3C/line%3E%3C/svg%3E");
  --lt-icon-update: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-bell'%3E%3Cpath d='M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9'%3E%3C/path%3E%3Cpath d='M13.73 21a2 2 0 0 1-3.46 0'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-open-library: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-sidebar'%3E%3Crect x='3' y='3' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='9' y1='3' x2='9' y2='21'%3E%3C/line%3E%3C/svg%3E");
  --lt-icon-open: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-folder'%3E%3Cpath d='M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-new: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-plus'%3E%3Cline x1='12' y1='5' x2='12' y2='19'%3E%3C/line%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E");
  --lt-icon-code-view: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-code'%3E%3Cpolyline points='16 18 22 12 16 6'%3E%3C/polyline%3E%3Cpolyline points='8 6 2 12 8 18'%3E%3C/polyline%3E%3C/svg%3E");
  --lt-icon-code-view-heavy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round' class='feather feather-code'%3E%3Cpolyline points='16 18 22 12 16 6'%3E%3C/polyline%3E%3Cpolyline points='8 6 2 12 8 18'%3E%3C/polyline%3E%3C/svg%3E");
  --lt-icon-document: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-file-text'%3E%3Cpath d='M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z'%3E%3C/path%3E%3Cpolyline points='14 2 14 8 20 8'%3E%3C/polyline%3E%3Cline x1='16' y1='13' x2='8' y2='13'%3E%3C/line%3E%3Cline x1='16' y1='17' x2='8' y2='17'%3E%3C/line%3E%3Cpolyline points='10 9 9 9 8 9'%3E%3C/polyline%3E%3C/svg%3E");
  --lt-icon-document-heavy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round' class='feather feather-file-text'%3E%3Cpath d='M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z'%3E%3C/path%3E%3Cpolyline points='14 2 14 8 20 8'%3E%3C/polyline%3E%3Cline x1='16' y1='13' x2='8' y2='13'%3E%3C/line%3E%3Cline x1='16' y1='17' x2='8' y2='17'%3E%3C/line%3E%3Cpolyline points='10 9 9 9 8 9'%3E%3C/polyline%3E%3C/svg%3E");
  --lt-icon-sync: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-refresh-cw'%3E%3Cpolyline points='23 4 23 10 17 10'%3E%3C/polyline%3E%3Cpolyline points='1 20 1 14 7 14'%3E%3C/polyline%3E%3Cpath d='M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-lock-closed: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-lock'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-lock-open: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round' class='feather feather-unlock'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 9.9-1'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-cloud: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-cloud'%3E%3Cpath d='M18 10h-1.26A8 8 0 1 0 9 20h9a5 5 0 0 0 0-10z'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-export: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-download-cloud'%3E%3Cpolyline points='8 17 12 21 16 17'%3E%3C/polyline%3E%3Cline x1='12' y1='12' x2='12' y2='21'%3E%3C/line%3E%3Cpath d='M20.88 18.09A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.29'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-computer: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-monitor'%3E%3Crect x='2' y='3' width='20' height='14' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='8' y1='21' x2='16' y2='21'%3E%3C/line%3E%3Cline x1='12' y1='17' x2='12' y2='21'%3E%3C/line%3E%3C/svg%3E");
  --lt-icon-package: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-package'%3E%3Cline x1='16.5' y1='9.4' x2='7.5' y2='4.21'%3E%3C/line%3E%3Cpath d='M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z'%3E%3C/path%3E%3Cpolyline points='3.27 6.96 12 12.01 20.73 6.96'%3E%3C/polyline%3E%3Cline x1='12' y1='22.08' x2='12' y2='12'%3E%3C/line%3E%3C/svg%3E");
  --lt-icon-folder: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-folder'%3E%3Cpath d='M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-x'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E");
  --lt-icon-text: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-type'%3E%3Cpolyline points='4 7 4 4 20 4 20 7'%3E%3C/polyline%3E%3Cline x1='9' y1='20' x2='15' y2='20'%3E%3C/line%3E%3Cline x1='12' y1='4' x2='12' y2='20'%3E%3C/line%3E%3C/svg%3E");
  --lt-icon-list: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-list'%3E%3Cline x1='8' y1='6' x2='21' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='12' x2='21' y2='12'%3E%3C/line%3E%3Cline x1='8' y1='18' x2='21' y2='18'%3E%3C/line%3E%3Cline x1='3' y1='6' x2='3.01' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='12' x2='3.01' y2='12'%3E%3C/line%3E%3Cline x1='3' y1='18' x2='3.01' y2='18'%3E%3C/line%3E%3C/svg%3E");
  --lt-icon-quote: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4.58341 17.3211C3.55316 16.2274 3 15 3 13.0103C3 9.51086 5.45651 6.37366 9.03059 4.82318L9.92328 6.20079C6.58804 8.00539 5.93618 10.346 5.67564 11.822C6.21263 11.5443 6.91558 11.4466 7.60471 11.5105C9.40908 11.6778 10.8312 13.159 10.8312 15C10.8312 16.933 9.26416 18.5 7.33116 18.5C6.2581 18.5 5.23196 18.0095 4.58341 17.3211ZM14.5834 17.3211C13.5532 16.2274 13 15 13 13.0103C13 9.51086 15.4565 6.37366 19.0306 4.82318L19.9233 6.20079C16.588 8.00539 15.9362 10.346 15.6756 11.822C16.2126 11.5443 16.9156 11.4466 17.6047 11.5105C19.4091 11.6778 20.8312 13.159 20.8312 15C20.8312 16.933 19.2642 18.5 17.3312 18.5C16.2581 18.5 15.232 18.0095 14.5834 17.3211Z'/%3E%3C/svg%3E");
  --lt-icon-table: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-table'%3E%3Cpath d='M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-image'%3E%3Crect x='3' y='3' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Ccircle cx='8.5' cy='8.5' r='1.5'%3E%3C/circle%3E%3Cpolyline points='21 15 16 10 5 21'%3E%3C/polyline%3E%3C/svg%3E");
  --lt-icon-divider: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-minus'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E");
  --lt-icon-comment: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-message-square'%3E%3Cpath d='M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-workflow: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M245.66,74.34l-32-32a8,8,0,0,0-11.32,11.32L220.69,72H208c-49.33,0-61.05,28.12-71.38,52.92-9.38,22.51-16.92,40.59-49.48,42.84a40,40,0,1,0,.1,16c43.26-2.65,54.34-29.15,64.14-52.69C161.41,107,169.33,88,208,88h12.69l-18.35,18.34a8,8,0,0,0,11.32,11.32l32-32A8,8,0,0,0,245.66,74.34ZM48,200a24,24,0,1,1,24-24A24,24,0,0,1,48,200Z'/%3E%3C/svg%3E");
  --lt-icon-zoom-in: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-zoom-in'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3Cline x1='11' y1='8' x2='11' y2='14'%3E%3C/line%3E%3Cline x1='8' y1='11' x2='14' y2='11'%3E%3C/line%3E%3C/svg%3E");
  --lt-icon-zoom-out: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-zoom-out'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3Cline x1='8' y1='11' x2='14' y2='11'%3E%3C/line%3E%3C/svg%3E");
  --lt-icon-fit: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-minimize-2'%3E%3Cpolyline points='4 14 10 14 10 20'%3E%3C/polyline%3E%3Cpolyline points='20 10 14 10 14 4'%3E%3C/polyline%3E%3Cline x1='14' y1='10' x2='21' y2='3'%3E%3C/line%3E%3Cline x1='3' y1='21' x2='10' y2='14'%3E%3C/line%3E%3C/svg%3E");
  --lt-icon-expand: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-maximize-2'%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cpolyline points='9 21 3 21 3 15'%3E%3C/polyline%3E%3Cline x1='21' y1='3' x2='14' y2='10'%3E%3C/line%3E%3Cline x1='3' y1='21' x2='10' y2='14'%3E%3C/line%3E%3C/svg%3E");
  --lt-icon-bold: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-bold'%3E%3Cpath d='M6 4h8a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z'%3E%3C/path%3E%3Cpath d='M6 12h9a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-italic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-italic'%3E%3Cline x1='19' y1='4' x2='10' y2='4'%3E%3C/line%3E%3Cline x1='14' y1='20' x2='5' y2='20'%3E%3C/line%3E%3Cline x1='15' y1='4' x2='9' y2='20'%3E%3C/line%3E%3C/svg%3E");
  --lt-icon-link: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-link'%3E%3Cpath d='M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71'%3E%3C/path%3E%3Cpath d='M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-chevron-down: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-chevron-down'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
  --lt-icon-select-all: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-text-select' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M14 21h1' /%3E%3Cpath d='M14 3h1' /%3E%3Cpath d='M19 3a2 2 0 0 1 2 2' /%3E%3Cpath d='M21 14v1' /%3E%3Cpath d='M21 19a2 2 0 0 1-2 2' /%3E%3Cpath d='M21 9v1' /%3E%3Cpath d='M3 14v1' /%3E%3Cpath d='M3 9v1' /%3E%3Cpath d='M5 21a2 2 0 0 1-2-2' /%3E%3Cpath d='M5 3a2 2 0 0 0-2 2' /%3E%3Cpath d='M7 12h10' /%3E%3Cpath d='M7 16h6' /%3E%3Cpath d='M7 8h8' /%3E%3Cpath d='M9 21h1' /%3E%3Cpath d='M9 3h1' /%3E%3C/svg%3E");
  --lt-icon-window-minimize: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-minus'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E");
  --lt-icon-window-minimize-chip: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 -1 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-minus'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E");
  --lt-icon-window-minimize-dot: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 -1.5 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-minus'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E");
  --lt-icon-window-maximize: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-square'%3E%3Crect x='3' y='3' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3C/svg%3E");
  --lt-icon-window-maximize-chip: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-square'%3E%3Crect x='3' y='3' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3C/svg%3E");
  --lt-icon-window-maximize-dot: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='-1.5 -1.5 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-square'%3E%3Crect x='3' y='3' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3C/svg%3E");
  --lt-icon-window-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-x'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E");
  --lt-icon-window-close-chip: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-x'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E");
  --lt-icon-window-close-dot: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-x'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E");
  --lt-icon-check: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-check'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");
  --lt-icon-check-circle: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-check-circle'%3E%3Cpath d='M22 11.08V12a10 10 0 1 1-5.93-9.14'%3E%3C/path%3E%3Cpolyline points='22 4 12 14.01 9 11.01'%3E%3C/polyline%3E%3C/svg%3E");
  --lt-icon-tab-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round' class='feather feather-x'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E");
  --lt-icon-favorite-off: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-heart'%3E%3Cpath d='M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-favorite-on: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='black' stroke='none' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-heart'%3E%3Cpath d='M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-recent: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-clock'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E");
  --lt-icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-search'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");
  --lt-icon-calendar: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-calendar'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E");
  --lt-icon-back: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-arrow-left'%3E%3Cline x1='19' y1='12' x2='5' y2='12'%3E%3C/line%3E%3Cpolyline points='12 19 5 12 12 5'%3E%3C/polyline%3E%3C/svg%3E");
  --lt-icon-trash: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-trash-2'%3E%3Cpolyline points='3 6 5 6 21 6'%3E%3C/polyline%3E%3Cpath d='M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2'%3E%3C/path%3E%3Cline x1='10' y1='11' x2='10' y2='17'%3E%3C/line%3E%3Cline x1='14' y1='11' x2='14' y2='17'%3E%3C/line%3E%3C/svg%3E");
  --lt-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-copy'%3E%3Crect x='9' y='9' width='13' height='13' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1'%3E%3C/path%3E%3C/svg%3E");
}
/* The lucide pack, worn by amber, goldenrod, pippin. Every drawing it does not cover keeps the one above. */
:root[data-leaf-theme="amber"],
:root[data-leaf-theme="goldenrod"],
:root[data-leaf-theme="pippin"],
[data-leaf-pack="lucide"] {
  --lt-icon-back-long: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-move-left' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M6 8L2 12L6 16' /%3E%3Cpath d='M2 12H22' /%3E%3C/svg%3E");
  --lt-icon-forward-long: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-move-right' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M18 8L22 12L18 16' /%3E%3Cpath d='M2 12H22' /%3E%3C/svg%3E");
  --lt-icon-settings: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-sliders-horizontal' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M10 5H3' /%3E%3Cpath d='M12 19H3' /%3E%3Cpath d='M14 3v4' /%3E%3Cpath d='M16 17v4' /%3E%3Cpath d='M21 12h-9' /%3E%3Cpath d='M21 19h-5' /%3E%3Cpath d='M21 5h-7' /%3E%3Cpath d='M8 10v4' /%3E%3Cpath d='M8 12H3' /%3E%3C/svg%3E");
  --lt-icon-update: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-bell' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M10.268 21a2 2 0 0 0 3.464 0' /%3E%3Cpath d='M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326' /%3E%3C/svg%3E");
  --lt-icon-open-library: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-panel-left' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Crect width='18' height='18' x='3' y='3' rx='2' /%3E%3Cpath d='M9 3v18' /%3E%3C/svg%3E");
  --lt-icon-open: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-folder-open' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2' /%3E%3C/svg%3E");
  --lt-icon-new: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-plus' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M5 12h14' /%3E%3Cpath d='M12 5v14' /%3E%3C/svg%3E");
  --lt-icon-code-view: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-code-2' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='m18 16 4-4-4-4' /%3E%3Cpath d='m6 8-4 4 4 4' /%3E%3Cpath d='m14.5 4-5 16' /%3E%3C/svg%3E");
  --lt-icon-code-view-heavy: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-code-2' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='m18 16 4-4-4-4' /%3E%3Cpath d='m6 8-4 4 4 4' /%3E%3Cpath d='m14.5 4-5 16' /%3E%3C/svg%3E");
  --lt-icon-document: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-file-text' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z' /%3E%3Cpath d='M14 2v5a1 1 0 0 0 1 1h5' /%3E%3Cpath d='M10 9H8' /%3E%3Cpath d='M16 13H8' /%3E%3Cpath d='M16 17H8' /%3E%3C/svg%3E");
  --lt-icon-document-heavy: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-file-text' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z' /%3E%3Cpath d='M14 2v5a1 1 0 0 0 1 1h5' /%3E%3Cpath d='M10 9H8' /%3E%3Cpath d='M16 13H8' /%3E%3Cpath d='M16 17H8' /%3E%3C/svg%3E");
  --lt-icon-sync: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-refresh-cw' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8' /%3E%3Cpath d='M21 3v5h-5' /%3E%3Cpath d='M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16' /%3E%3Cpath d='M8 16H3v5' /%3E%3C/svg%3E");
  --lt-icon-refresh: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8'/%3E%3Cpath d='M3 3v5h5'/%3E%3C/svg%3E");
  --lt-icon-lock-closed: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-lock' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Crect width='18' height='11' x='3' y='11' rx='2' ry='2' /%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4' /%3E%3C/svg%3E");
  --lt-icon-lock-open: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-lock-open' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round' %3E%3Crect width='18' height='11' x='3' y='11' rx='2' ry='2' /%3E%3Cpath d='M7 11V7a5 5 0 0 1 9.9-1' /%3E%3C/svg%3E");
  --lt-icon-speed-reader-on: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-gauge' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='m12 14 4-4' /%3E%3Cpath d='M3.34 19a10 10 0 1 1 17.32 0' /%3E%3C/svg%3E");
  --lt-icon-speed-reader-off: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-gauge' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='m12 14 4-4' /%3E%3Cpath d='M3.34 19a10 10 0 1 1 17.32 0' /%3E%3C/svg%3E");
  --lt-icon-wand: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-wand-sparkles' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72' /%3E%3Cpath d='m14 7 3 3' /%3E%3Cpath d='M5 6v4' /%3E%3Cpath d='M19 14v4' /%3E%3Cpath d='M10 2v2' /%3E%3Cpath d='M7 8H3' /%3E%3Cpath d='M21 16h-4' /%3E%3Cpath d='M11 3H9' /%3E%3C/svg%3E");
  --lt-icon-cloud: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-cloud' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z' /%3E%3C/svg%3E");
  --lt-icon-export: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-cloud-download' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M12 13v8l-4-4' /%3E%3Cpath d='m12 21 4-4' /%3E%3Cpath d='M4.393 15.269A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.436 8.284' /%3E%3C/svg%3E");
  --lt-icon-computer: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-monitor' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Crect width='20' height='14' x='2' y='3' rx='2' /%3E%3Cline x1='8' x2='16' y1='21' y2='21' /%3E%3Cline x1='12' x2='12' y1='17' y2='21' /%3E%3C/svg%3E");
  --lt-icon-package-open: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-package-open' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M12 22v-9' /%3E%3Cpath d='M15.17 2.21a1.67 1.67 0 0 1 1.63 0L21 4.57a1.93 1.93 0 0 1 0 3.36L8.82 14.79a1.655 1.655 0 0 1-1.64 0L3 12.43a1.93 1.93 0 0 1 0-3.36z' /%3E%3Cpath d='M20 13v3.87a2.06 2.06 0 0 1-1.11 1.83l-6 3.08a1.93 1.93 0 0 1-1.78 0l-6-3.08A2.06 2.06 0 0 1 4 16.87V13' /%3E%3Cpath d='M21 12.43a1.93 1.93 0 0 0 0-3.36L8.83 2.2a1.64 1.64 0 0 0-1.63 0L3 4.57a1.93 1.93 0 0 0 0 3.36l12.18 6.86a1.636 1.636 0 0 0 1.63 0z' /%3E%3C/svg%3E");
  --lt-icon-package: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-package' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z' /%3E%3Cpath d='M12 22V12' /%3E%3Cpolyline points='3.29 7 12 12 20.71 7' /%3E%3Cpath d='m7.5 4.27 9 5.15' /%3E%3C/svg%3E");
  --lt-icon-folder: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-folder' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z' /%3E%3C/svg%3E");
  --lt-icon-grip: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-grip-vertical' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' %3E%3Ccircle cx='9' cy='12' r='1' /%3E%3Ccircle cx='9' cy='5' r='1' /%3E%3Ccircle cx='9' cy='19' r='1' /%3E%3Ccircle cx='15' cy='12' r='1' /%3E%3Ccircle cx='15' cy='5' r='1' /%3E%3Ccircle cx='15' cy='19' r='1' /%3E%3C/svg%3E");
  --lt-icon-close: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-x' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M18 6 6 18' /%3E%3Cpath d='m6 6 12 12' /%3E%3C/svg%3E");
  --lt-icon-text: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-type' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M12 4v16' /%3E%3Cpath d='M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2' /%3E%3Cpath d='M9 20h6' /%3E%3C/svg%3E");
  --lt-icon-heading: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-heading-1' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M4 12h8' /%3E%3Cpath d='M4 18V6' /%3E%3Cpath d='M12 18V6' /%3E%3Cpath d='m17 12 3-2v8' /%3E%3C/svg%3E");
  --lt-icon-list: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-list' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M3 5h.01' /%3E%3Cpath d='M3 12h.01' /%3E%3Cpath d='M3 19h.01' /%3E%3Cpath d='M8 5h13' /%3E%3Cpath d='M8 12h13' /%3E%3Cpath d='M8 19h13' /%3E%3C/svg%3E");
  --lt-icon-quote: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4.58341 17.3211C3.55316 16.2274 3 15 3 13.0103C3 9.51086 5.45651 6.37366 9.03059 4.82318L9.92328 6.20079C6.58804 8.00539 5.93618 10.346 5.67564 11.822C6.21263 11.5443 6.91558 11.4466 7.60471 11.5105C9.40908 11.6778 10.8312 13.159 10.8312 15C10.8312 16.933 9.26416 18.5 7.33116 18.5C6.2581 18.5 5.23196 18.0095 4.58341 17.3211ZM14.5834 17.3211C13.5532 16.2274 13 15 13 13.0103C13 9.51086 15.4565 6.37366 19.0306 4.82318L19.9233 6.20079C16.588 8.00539 15.9362 10.346 15.6756 11.822C16.2126 11.5443 16.9156 11.4466 17.6047 11.5105C19.4091 11.6778 20.8312 13.159 20.8312 15C20.8312 16.933 19.2642 18.5 17.3312 18.5C16.2581 18.5 15.232 18.0095 14.5834 17.3211Z'/%3E%3C/svg%3E");
  --lt-icon-table: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-table-2' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18' /%3E%3C/svg%3E");
  --lt-icon-image: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-image' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Crect width='18' height='18' x='3' y='3' rx='2' ry='2' /%3E%3Ccircle cx='9' cy='9' r='2' /%3E%3Cpath d='m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21' /%3E%3C/svg%3E");
  --lt-icon-divider: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-minus' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M5 12h14' /%3E%3C/svg%3E");
  --lt-icon-tag: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z'/%3E%3Ccircle cx='7.5' cy='7.5' r='.5' fill='%23000'/%3E%3C/svg%3E");
  --lt-icon-chart-bar: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 3v16a2 2 0 0 0 2 2h16'/%3E%3Cpath d='M7 16h8'/%3E%3Cpath d='M7 11h12'/%3E%3Cpath d='M7 6h3'/%3E%3C/svg%3E");
  --lt-icon-comment: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-message-square' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z' /%3E%3C/svg%3E");
  --lt-icon-workflow: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-workflow' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Crect width='8' height='8' x='3' y='3' rx='2' /%3E%3Cpath d='M7 11v4a2 2 0 0 0 2 2h4' /%3E%3Crect width='8' height='8' x='13' y='13' rx='2' /%3E%3C/svg%3E");
  --lt-icon-zoom-in: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-zoom-in' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Ccircle cx='11' cy='11' r='8' /%3E%3Cline x1='21' x2='16.65' y1='21' y2='16.65' /%3E%3Cline x1='11' x2='11' y1='8' y2='14' /%3E%3Cline x1='8' x2='14' y1='11' y2='11' /%3E%3C/svg%3E");
  --lt-icon-zoom-out: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-zoom-out' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Ccircle cx='11' cy='11' r='8' /%3E%3Cline x1='21' x2='16.65' y1='21' y2='16.65' /%3E%3Cline x1='8' x2='14' y1='11' y2='11' /%3E%3C/svg%3E");
  --lt-icon-fit: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-minimize-2' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='m14 10 7-7' /%3E%3Cpath d='M20 10h-6V4' /%3E%3Cpath d='m3 21 7-7' /%3E%3Cpath d='M4 14h6v6' /%3E%3C/svg%3E");
  --lt-icon-expand: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-maximize-2' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M15 3h6v6' /%3E%3Cpath d='m21 3-7 7' /%3E%3Cpath d='m3 21 7-7' /%3E%3Cpath d='M9 21H3v-6' /%3E%3C/svg%3E");
  --lt-icon-bold: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-bold' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M6 12h9a4 4 0 0 1 0 8H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h7a4 4 0 0 1 0 8' /%3E%3C/svg%3E");
  --lt-icon-italic: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-italic' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cline x1='19' x2='10' y1='4' y2='4' /%3E%3Cline x1='14' x2='5' y1='20' y2='20' /%3E%3Cline x1='15' x2='9' y1='4' y2='20' /%3E%3C/svg%3E");
  --lt-icon-strikethrough: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-strikethrough' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M16 4H9a3 3 0 0 0-2.83 4' /%3E%3Cpath d='M14 12a4 4 0 0 1 0 8H6' /%3E%3Cline x1='4' x2='20' y1='12' y2='12' /%3E%3C/svg%3E");
  --lt-icon-link: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-link' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71' /%3E%3Cpath d='M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71' /%3E%3C/svg%3E");
  --lt-icon-undo: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-undo-2' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M9 14 4 9l5-5' /%3E%3Cpath d='M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11' /%3E%3C/svg%3E");
  --lt-icon-missing-image: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-image-off' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cline x1='2' x2='22' y1='2' y2='22' /%3E%3Cpath d='M10.41 10.41a2 2 0 1 1-2.83-2.83' /%3E%3Cline x1='13.5' x2='6' y1='13.5' y2='21' /%3E%3Cline x1='18' x2='21' y1='12' y2='15' /%3E%3Cpath d='M3.59 3.59A1.99 1.99 0 0 0 3 5v14a2 2 0 0 0 2 2h14c.55 0 1.052-.22 1.41-.59' /%3E%3Cpath d='M21 15V5a2 2 0 0 0-2-2H9' /%3E%3C/svg%3E");
  --lt-icon-chevron-down: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-chevron-down' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='m6 9 6 6 6-6' /%3E%3C/svg%3E");
  --lt-icon-replace: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-replace' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M14 4a1 1 0 0 1 1-1' /%3E%3Cpath d='M15 10a1 1 0 0 1-1-1' /%3E%3Cpath d='M21 4a1 1 0 0 0-1-1' /%3E%3Cpath d='M21 9a1 1 0 0 1-1 1' /%3E%3Cpath d='m3 7 3 3 3-3' /%3E%3Cpath d='M6 10V5a2 2 0 0 1 2-2h2' /%3E%3Crect x='3' y='14' width='7' height='7' rx='1' /%3E%3C/svg%3E");
  --lt-icon-select-all: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-text-select' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M14 21h1' /%3E%3Cpath d='M14 3h1' /%3E%3Cpath d='M19 3a2 2 0 0 1 2 2' /%3E%3Cpath d='M21 14v1' /%3E%3Cpath d='M21 19a2 2 0 0 1-2 2' /%3E%3Cpath d='M21 9v1' /%3E%3Cpath d='M3 14v1' /%3E%3Cpath d='M3 9v1' /%3E%3Cpath d='M5 21a2 2 0 0 1-2-2' /%3E%3Cpath d='M5 3a2 2 0 0 0-2 2' /%3E%3Cpath d='M7 12h10' /%3E%3Cpath d='M7 16h6' /%3E%3Cpath d='M7 8h8' /%3E%3Cpath d='M9 21h1' /%3E%3Cpath d='M9 3h1' /%3E%3C/svg%3E");
  --lt-icon-theme: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-palette' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z' /%3E%3Ccircle cx='13.5' cy='6.5' r='.5' fill='%23000' /%3E%3Ccircle cx='17.5' cy='10.5' r='.5' fill='%23000' /%3E%3Ccircle cx='6.5' cy='12.5' r='.5' fill='%23000' /%3E%3Ccircle cx='8.5' cy='7.5' r='.5' fill='%23000' /%3E%3C/svg%3E");
  --lt-icon-redo: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-redo-2' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='m15 14 5-5-5-5' /%3E%3Cpath d='M20 9H9.5A5.5 5.5 0 0 0 4 14.5A5.5 5.5 0 0 0 9.5 20H13' /%3E%3C/svg%3E");
  --lt-icon-window-minimize: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-minus' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M5 12h14' /%3E%3C/svg%3E");
  --lt-icon-window-minimize-chip: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-minus' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 -1 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M5 12h14' /%3E%3C/svg%3E");
  --lt-icon-window-minimize-dot: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-minus' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 -1.5 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M5 12h14' /%3E%3C/svg%3E");
  --lt-icon-window-maximize: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-square' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' %3E%3Crect width='18' height='18' x='3' y='3' rx='2' /%3E%3C/svg%3E");
  --lt-icon-window-maximize-chip: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-square' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' %3E%3Crect width='18' height='18' x='3' y='3' rx='2' /%3E%3C/svg%3E");
  --lt-icon-window-maximize-dot: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-square' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='-1.5 -1.5 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' %3E%3Crect width='18' height='18' x='3' y='3' rx='2' /%3E%3C/svg%3E");
  --lt-icon-window-close: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-x' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M18 6 6 18' /%3E%3Cpath d='m6 6 12 12' /%3E%3C/svg%3E");
  --lt-icon-window-close-chip: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-x' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M18 6 6 18' /%3E%3Cpath d='m6 6 12 12' /%3E%3C/svg%3E");
  --lt-icon-window-close-dot: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-x' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M18 6 6 18' /%3E%3Cpath d='m6 6 12 12' /%3E%3C/svg%3E");
  --lt-icon-check: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-check' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M20 6 9 17l-5-5' /%3E%3C/svg%3E");
  --lt-icon-check-circle: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-check-circle' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M21.801 10A10 10 0 1 1 17 3.335' /%3E%3Cpath d='m9 11 3 3L22 4' /%3E%3C/svg%3E");
  --lt-icon-tab-close: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-x' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M18 6 6 18' /%3E%3Cpath d='m6 6 12 12' /%3E%3C/svg%3E");
  --lt-icon-favorite-off: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-heart' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5' /%3E%3C/svg%3E");
  --lt-icon-favorite-on: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-heart' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='black' stroke='none' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5' /%3E%3C/svg%3E");
  --lt-icon-recent: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-history' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8' /%3E%3Cpath d='M3 3v5h5' /%3E%3Cpath d='M12 7v5l4 2' /%3E%3C/svg%3E");
  --lt-icon-search: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-search' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='m21 21-4.34-4.34' /%3E%3Ccircle cx='11' cy='11' r='8' /%3E%3C/svg%3E");
  --lt-icon-calendar: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-calendar' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M8 2v3' /%3E%3Cpath d='M16 2v3' /%3E%3Crect x='3' y='3' width='18' height='18' rx='2' /%3E%3Cpath d='M3 9h18' /%3E%3C/svg%3E");
  --lt-icon-back: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-arrow-left' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='m12 19-7-7 7-7' /%3E%3Cpath d='M19 12H5' /%3E%3C/svg%3E");
  --lt-icon-trash: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-trash-2' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M10 11v6' /%3E%3Cpath d='M14 11v6' /%3E%3Cpath d='M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6' /%3E%3Cpath d='M3 6h18' /%3E%3Cpath d='M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2' /%3E%3C/svg%3E");
  --lt-icon-copy: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-copy' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Crect width='14' height='14' x='8' y='8' rx='2' ry='2' /%3E%3Cpath d='M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2' /%3E%3C/svg%3E");
}
/* The tabler pack, worn by fern, ginger, ink, violet. Every drawing it does not cover keeps the one above. */
:root[data-leaf-theme="fern"],
:root[data-leaf-theme="ginger"],
:root[data-leaf-theme="ink"],
:root[data-leaf-theme="violet"],
[data-leaf-pack="tabler"] {
  --lt-icon-back-long: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-arrow-narrow-left' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M5 12l14 0' /%3E%3Cpath d='M5 12l4 4' /%3E%3Cpath d='M5 12l4 -4' /%3E%3C/svg%3E");
  --lt-icon-forward-long: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-arrow-narrow-right' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M5 12l14 0' /%3E%3Cpath d='M15 16l4 -4' /%3E%3Cpath d='M15 8l4 4' /%3E%3C/svg%3E");
  --lt-icon-settings: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-adjustments-horizontal' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M12 6a2 2 0 1 0 4 0a2 2 0 1 0 -4 0' /%3E%3Cpath d='M4 6l8 0' /%3E%3Cpath d='M16 6l4 0' /%3E%3Cpath d='M6 12a2 2 0 1 0 4 0a2 2 0 1 0 -4 0' /%3E%3Cpath d='M4 12l2 0' /%3E%3Cpath d='M10 12l10 0' /%3E%3Cpath d='M15 18a2 2 0 1 0 4 0a2 2 0 1 0 -4 0' /%3E%3Cpath d='M4 18l11 0' /%3E%3Cpath d='M19 18l1 0' /%3E%3C/svg%3E");
  --lt-icon-update: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-bell' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M10 5a2 2 0 1 1 4 0a7 7 0 0 1 4 6v3a4 4 0 0 0 2 3h-16a4 4 0 0 0 2 -3v-3a7 7 0 0 1 4 -6' /%3E%3Cpath d='M9 17v1a3 3 0 0 0 6 0v-1' /%3E%3C/svg%3E");
  --lt-icon-open-library: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-layout-sidebar' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M4 6a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2l0 -12' /%3E%3Cpath d='M9 4l0 16' /%3E%3C/svg%3E");
  --lt-icon-open: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-folder-open' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M5 19l2.757 -7.351a1 1 0 0 1 .936 -.649h12.307a1 1 0 0 1 .986 1.164l-.996 5.211a2 2 0 0 1 -1.964 1.625h-14.026a2 2 0 0 1 -2 -2v-11a2 2 0 0 1 2 -2h4l3 3h7a2 2 0 0 1 2 2v2' /%3E%3C/svg%3E");
  --lt-icon-new: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-plus' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M12 5l0 14' /%3E%3Cpath d='M5 12l14 0' /%3E%3C/svg%3E");
  --lt-icon-code-view: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-code' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M7 8l-4 4l4 4' /%3E%3Cpath d='M17 8l4 4l-4 4' /%3E%3Cpath d='M14 4l-4 16' /%3E%3C/svg%3E");
  --lt-icon-code-view-heavy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-code' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M7 8l-4 4l4 4' /%3E%3Cpath d='M17 8l4 4l-4 4' /%3E%3Cpath d='M14 4l-4 16' /%3E%3C/svg%3E");
  --lt-icon-document: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-file-text' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M14 3v4a1 1 0 0 0 1 1h4' /%3E%3Cpath d='M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2' /%3E%3Cpath d='M9 9l1 0' /%3E%3Cpath d='M9 13l6 0' /%3E%3Cpath d='M9 17l6 0' /%3E%3C/svg%3E");
  --lt-icon-document-heavy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-file-text' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M14 3v4a1 1 0 0 0 1 1h4' /%3E%3Cpath d='M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2' /%3E%3Cpath d='M9 9l1 0' /%3E%3Cpath d='M9 13l6 0' /%3E%3Cpath d='M9 17l6 0' /%3E%3C/svg%3E");
  --lt-icon-sync: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-refresh' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4' /%3E%3Cpath d='M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4' /%3E%3C/svg%3E");
  --lt-icon-lock-closed: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-lock' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M5 13a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v6a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-6' /%3E%3Cpath d='M11 16a1 1 0 1 0 2 0a1 1 0 0 0 -2 0' /%3E%3Cpath d='M8 11v-4a4 4 0 1 1 8 0v4' /%3E%3C/svg%3E");
  --lt-icon-lock-open: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-lock-open' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M5 13a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v6a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2l0 -6' /%3E%3Cpath d='M11 16a1 1 0 1 0 2 0a1 1 0 1 0 -2 0' /%3E%3Cpath d='M8 11v-5a4 4 0 0 1 8 0' /%3E%3C/svg%3E");
  --lt-icon-speed-reader-on: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-gauge' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M3 12a9 9 0 1 0 18 0a9 9 0 1 0 -18 0' /%3E%3Cpath d='M11 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0' /%3E%3Cpath d='M13.41 10.59l2.59 -2.59' /%3E%3Cpath d='M7 12a5 5 0 0 1 5 -5' /%3E%3C/svg%3E");
  --lt-icon-speed-reader-off: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-gauge' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M3 12a9 9 0 1 0 18 0a9 9 0 1 0 -18 0' /%3E%3Cpath d='M11 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0' /%3E%3Cpath d='M13.41 10.59l2.59 -2.59' /%3E%3Cpath d='M7 12a5 5 0 0 1 5 -5' /%3E%3C/svg%3E");
  --lt-icon-wand: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-wand' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M6 21l15 -15l-3 -3l-15 15l3 3' /%3E%3Cpath d='M15 6l3 3' /%3E%3Cpath d='M9 3a2 2 0 0 0 2 2a2 2 0 0 0 -2 2a2 2 0 0 0 -2 -2a2 2 0 0 0 2 -2' /%3E%3Cpath d='M19 13a2 2 0 0 0 2 2a2 2 0 0 0 -2 2a2 2 0 0 0 -2 -2a2 2 0 0 0 2 -2' /%3E%3C/svg%3E");
  --lt-icon-cloud: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-cloud' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M6.657 18c-2.572 0 -4.657 -2.007 -4.657 -4.483c0 -2.475 2.085 -4.482 4.657 -4.482c.393 -1.762 1.794 -3.2 3.675 -3.773c1.88 -.572 3.956 -.193 5.444 1c1.488 1.19 2.162 3.007 1.77 4.769h.99c1.913 0 3.464 1.56 3.464 3.486c0 1.927 -1.551 3.487 -3.465 3.487h-11.878' /%3E%3C/svg%3E");
  --lt-icon-export: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-cloud-download' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M19 18a3.5 3.5 0 0 0 0 -7h-1a5 4.5 0 0 0 -11 -2a4.6 4.4 0 0 0 -2.1 8.4' /%3E%3Cpath d='M12 13l0 9' /%3E%3Cpath d='M9 19l3 3l3 -3' /%3E%3C/svg%3E");
  --lt-icon-computer: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-device-desktop' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M3 5a1 1 0 0 1 1 -1h16a1 1 0 0 1 1 1v10a1 1 0 0 1 -1 1h-16a1 1 0 0 1 -1 -1v-10' /%3E%3Cpath d='M7 20h10' /%3E%3Cpath d='M9 16v4' /%3E%3Cpath d='M15 16v4' /%3E%3C/svg%3E");
  --lt-icon-package: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-package' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M12 3l8 4.5l0 9l-8 4.5l-8 -4.5l0 -9l8 -4.5' /%3E%3Cpath d='M12 12l8 -4.5' /%3E%3Cpath d='M12 12l0 9' /%3E%3Cpath d='M12 12l-8 -4.5' /%3E%3Cpath d='M16 5.25l-8 4.5' /%3E%3C/svg%3E");
  --lt-icon-folder: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-folder' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M5 4h4l3 3h7a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-11a2 2 0 0 1 2 -2' /%3E%3C/svg%3E");
  --lt-icon-grip: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-grip-vertical' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M8 5a1 1 0 1 0 2 0a1 1 0 1 0 -2 0' /%3E%3Cpath d='M8 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0' /%3E%3Cpath d='M8 19a1 1 0 1 0 2 0a1 1 0 1 0 -2 0' /%3E%3Cpath d='M14 5a1 1 0 1 0 2 0a1 1 0 1 0 -2 0' /%3E%3Cpath d='M14 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0' /%3E%3Cpath d='M14 19a1 1 0 1 0 2 0a1 1 0 1 0 -2 0' /%3E%3C/svg%3E");
  --lt-icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-x' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M18 6l-12 12' /%3E%3Cpath d='M6 6l12 12' /%3E%3C/svg%3E");
  --lt-icon-text: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-letter-t' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M6 4l12 0' /%3E%3Cpath d='M12 4l0 16' /%3E%3C/svg%3E");
  --lt-icon-heading: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-heading' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M7 12h10' /%3E%3Cpath d='M7 5v14' /%3E%3Cpath d='M17 5v14' /%3E%3Cpath d='M15 19h4' /%3E%3Cpath d='M15 5h4' /%3E%3Cpath d='M5 19h4' /%3E%3Cpath d='M5 5h4' /%3E%3C/svg%3E");
  --lt-icon-list: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-list' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M9 6l11 0' /%3E%3Cpath d='M9 12l11 0' /%3E%3Cpath d='M9 18l11 0' /%3E%3Cpath d='M5 6l0 .01' /%3E%3Cpath d='M5 12l0 .01' /%3E%3Cpath d='M5 18l0 .01' /%3E%3C/svg%3E");
  --lt-icon-quote: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-blockquote' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M6 15h15' /%3E%3Cpath d='M21 19h-15' /%3E%3Cpath d='M15 11h6' /%3E%3Cpath d='M21 7h-6' /%3E%3Cpath d='M9 9h1a1 1 0 1 1 -1 1v-2.5a2 2 0 0 1 2 -2' /%3E%3Cpath d='M3 9h1a1 1 0 1 1 -1 1v-2.5a2 2 0 0 1 2 -2' /%3E%3C/svg%3E");
  --lt-icon-table: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-table' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M3 5a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-14' /%3E%3Cpath d='M3 10h18' /%3E%3Cpath d='M10 3v18' /%3E%3C/svg%3E");
  --lt-icon-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-photo' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M15 8h.01' /%3E%3Cpath d='M3 6a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3v-12' /%3E%3Cpath d='M3 16l5 -5c.928 -.893 2.072 -.893 3 0l5 5' /%3E%3Cpath d='M14 14l1 -1c.928 -.893 2.072 -.893 3 0l3 3' /%3E%3C/svg%3E");
  --lt-icon-divider: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-minus' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M5 12l14 0' /%3E%3C/svg%3E");
  --lt-icon-comment: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-message' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M8 9h8' /%3E%3Cpath d='M8 13h6' /%3E%3Cpath d='M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-5l-5 3v-3h-2a3 3 0 0 1 -3 -3v-8a3 3 0 0 1 3 -3h12' /%3E%3C/svg%3E");
  --lt-icon-workflow: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-hierarchy-2' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M10 3h4v4h-4l0 -4' /%3E%3Cpath d='M3 17h4v4h-4l0 -4' /%3E%3Cpath d='M17 17h4v4h-4l0 -4' /%3E%3Cpath d='M7 17l5 -4l5 4' /%3E%3Cpath d='M12 7l0 6' /%3E%3C/svg%3E");
  --lt-icon-zoom-in: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-zoom-in' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M3 10a7 7 0 1 0 14 0a7 7 0 1 0 -14 0' /%3E%3Cpath d='M7 10l6 0' /%3E%3Cpath d='M10 7l0 6' /%3E%3Cpath d='M21 21l-6 -6' /%3E%3C/svg%3E");
  --lt-icon-zoom-out: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-zoom-out' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M3 10a7 7 0 1 0 14 0a7 7 0 1 0 -14 0' /%3E%3Cpath d='M7 10l6 0' /%3E%3Cpath d='M21 21l-6 -6' /%3E%3C/svg%3E");
  --lt-icon-fit: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-arrows-minimize' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M5 9l4 0l0 -4' /%3E%3Cpath d='M3 3l6 6' /%3E%3Cpath d='M5 15l4 0l0 4' /%3E%3Cpath d='M3 21l6 -6' /%3E%3Cpath d='M19 9l-4 0l0 -4' /%3E%3Cpath d='M15 9l6 -6' /%3E%3Cpath d='M19 15l-4 0l0 4' /%3E%3Cpath d='M15 15l6 6' /%3E%3C/svg%3E");
  --lt-icon-expand: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-arrows-maximize' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M16 4l4 0l0 4' /%3E%3Cpath d='M14 10l6 -6' /%3E%3Cpath d='M8 20l-4 0l0 -4' /%3E%3Cpath d='M4 20l6 -6' /%3E%3Cpath d='M16 20l4 0l0 -4' /%3E%3Cpath d='M14 14l6 6' /%3E%3Cpath d='M8 4l-4 0l0 4' /%3E%3Cpath d='M4 4l6 6' /%3E%3C/svg%3E");
  --lt-icon-bold: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-bold' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M7 5h6a3.5 3.5 0 0 1 0 7h-6l0 -7' /%3E%3Cpath d='M13 12h1a3.5 3.5 0 0 1 0 7h-7v-7' /%3E%3C/svg%3E");
  --lt-icon-italic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-italic' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M11 5l6 0' /%3E%3Cpath d='M7 19l6 0' /%3E%3Cpath d='M14 5l-4 14' /%3E%3C/svg%3E");
  --lt-icon-strikethrough: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-strikethrough' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M5 12l14 0' /%3E%3Cpath d='M16 6.5a4 2 0 0 0 -4 -1.5h-1a3.5 3.5 0 0 0 0 7h2a3.5 3.5 0 0 1 0 7h-1.5a4 2 0 0 1 -4 -1.5' /%3E%3C/svg%3E");
  --lt-icon-link: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-link' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M9 15l6 -6' /%3E%3Cpath d='M11 6l.463 -.536a5 5 0 0 1 7.071 7.072l-.534 .464' /%3E%3Cpath d='M13 18l-.397 .534a5.068 5.068 0 0 1 -7.127 0a4.972 4.972 0 0 1 0 -7.071l.524 -.463' /%3E%3C/svg%3E");
  --lt-icon-undo: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-arrow-back-up' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M9 14l-4 -4l4 -4' /%3E%3Cpath d='M5 10h11a4 4 0 1 1 0 8h-1' /%3E%3C/svg%3E");
  --lt-icon-missing-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-photo-off' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M15 8h.01' /%3E%3Cpath d='M7 3h11a3 3 0 0 1 3 3v11m-.856 3.099a2.991 2.991 0 0 1 -2.144 .901h-12a3 3 0 0 1 -3 -3v-12c0 -.845 .349 -1.608 .91 -2.153' /%3E%3Cpath d='M3 16l5 -5c.928 -.893 2.072 -.893 3 0l5 5' /%3E%3Cpath d='M16.33 12.338c.574 -.054 1.155 .166 1.67 .662l3 3' /%3E%3Cpath d='M3 3l18 18' /%3E%3C/svg%3E");
  --lt-icon-chevron-down: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-chevron-down' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M6 9l6 6l6 -6' /%3E%3C/svg%3E");
  --lt-icon-replace: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-replace' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M3 4a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4' /%3E%3Cpath d='M15 16a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4' /%3E%3Cpath d='M21 11v-3a2 2 0 0 0 -2 -2h-6l3 3m0 -6l-3 3' /%3E%3Cpath d='M3 13v3a2 2 0 0 0 2 2h6l-3 -3m0 6l3 -3' /%3E%3C/svg%3E");
  --lt-icon-select-all: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-select-all' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M8 9a1 1 0 0 1 1 -1h6a1 1 0 0 1 1 1v6a1 1 0 0 1 -1 1h-6a1 1 0 0 1 -1 -1l0 -6' /%3E%3Cpath d='M12 20v.01' /%3E%3Cpath d='M16 20v.01' /%3E%3Cpath d='M8 20v.01' /%3E%3Cpath d='M4 20v.01' /%3E%3Cpath d='M4 16v.01' /%3E%3Cpath d='M4 12v.01' /%3E%3Cpath d='M4 8v.01' /%3E%3Cpath d='M4 4v.01' /%3E%3Cpath d='M8 4v.01' /%3E%3Cpath d='M12 4v.01' /%3E%3Cpath d='M16 4v.01' /%3E%3Cpath d='M20 4v.01' /%3E%3Cpath d='M20 8v.01' /%3E%3Cpath d='M20 12v.01' /%3E%3Cpath d='M20 16v.01' /%3E%3Cpath d='M20 20v.01' /%3E%3C/svg%3E");
  --lt-icon-theme: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-palette' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M12 21a9 9 0 0 1 0 -18c4.97 0 9 3.582 9 8c0 1.06 -.474 2.078 -1.318 2.828c-.844 .75 -1.989 1.172 -3.182 1.172h-2.5a2 2 0 0 0 -1 3.75a1.3 1.3 0 0 1 -1 2.25' /%3E%3Cpath d='M7.5 10.5a1 1 0 1 0 2 0a1 1 0 1 0 -2 0' /%3E%3Cpath d='M11.5 7.5a1 1 0 1 0 2 0a1 1 0 1 0 -2 0' /%3E%3Cpath d='M15.5 10.5a1 1 0 1 0 2 0a1 1 0 1 0 -2 0' /%3E%3C/svg%3E");
  --lt-icon-redo: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-arrow-forward-up' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M15 14l4 -4l-4 -4' /%3E%3Cpath d='M19 10h-11a4 4 0 1 0 0 8h1' /%3E%3C/svg%3E");
  --lt-icon-window-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-x' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M18 6l-12 12' /%3E%3Cpath d='M6 6l12 12' /%3E%3C/svg%3E");
  --lt-icon-window-close-chip: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-x' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M18 6l-12 12' /%3E%3Cpath d='M6 6l12 12' /%3E%3C/svg%3E");
  --lt-icon-window-close-dot: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-x' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M18 6l-12 12' /%3E%3Cpath d='M6 6l12 12' /%3E%3C/svg%3E");
  --lt-icon-check: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-check' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M5 12l5 5l10 -10' /%3E%3C/svg%3E");
  --lt-icon-check-circle: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-circle-check' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M3 12a9 9 0 1 0 18 0a9 9 0 1 0 -18 0' /%3E%3Cpath d='M9 12l2 2l4 -4' /%3E%3C/svg%3E");
  --lt-icon-tab-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-x' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M18 6l-12 12' /%3E%3Cpath d='M6 6l12 12' /%3E%3C/svg%3E");
  --lt-icon-favorite-off: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-heart' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M19.5 12.572l-7.5 7.428l-7.5 -7.428a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572' /%3E%3C/svg%3E");
  --lt-icon-favorite-on: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='%23000' class='icon icon-tabler icons-tabler-filled icon-tabler-heart' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M6.979 3.074a6 6 0 0 1 4.988 1.425l.037 .033l.034 -.03a6 6 0 0 1 4.733 -1.44l.246 .036a6 6 0 0 1 3.364 10.008l-.18 .185l-.048 .041l-7.45 7.379a1 1 0 0 1 -1.313 .082l-.094 -.082l-7.493 -7.422a6 6 0 0 1 3.176 -10.215z' /%3E%3C/svg%3E");
  --lt-icon-recent: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-history' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M12 8l0 4l2 2' /%3E%3Cpath d='M3.05 11a9 9 0 1 1 .5 4m-.5 5v-5h5' /%3E%3C/svg%3E");
  --lt-icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-search' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M3 10a7 7 0 1 0 14 0a7 7 0 1 0 -14 0' /%3E%3Cpath d='M21 21l-6 -6' /%3E%3C/svg%3E");
  --lt-icon-calendar: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-calendar' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M4 7a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12' /%3E%3Cpath d='M16 3v4' /%3E%3Cpath d='M8 3v4' /%3E%3Cpath d='M4 11h16' /%3E%3Cpath d='M11 15h1' /%3E%3Cpath d='M12 15v3' /%3E%3C/svg%3E");
  --lt-icon-back: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-arrow-left' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M5 12l14 0' /%3E%3Cpath d='M5 12l6 6' /%3E%3Cpath d='M5 12l6 -6' /%3E%3C/svg%3E");
  --lt-icon-trash: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-trash' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M4 7l16 0' /%3E%3Cpath d='M10 11l0 6' /%3E%3Cpath d='M14 11l0 6' /%3E%3Cpath d='M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12' /%3E%3Cpath d='M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3' /%3E%3C/svg%3E");
  --lt-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='icon icon-tabler icons-tabler-outline icon-tabler-copy' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none' /%3E%3Cpath d='M7 9.667a2.667 2.667 0 0 1 2.667 -2.667h8.666a2.667 2.667 0 0 1 2.667 2.667v8.666a2.667 2.667 0 0 1 -2.667 2.667h-8.666a2.667 2.667 0 0 1 -2.667 -2.667l0 -8.666' /%3E%3Cpath d='M4.012 16.737a2.005 2.005 0 0 1 -1.012 -1.737v-10c0 -1.1 .9 -2 2 -2h10c.75 0 1.158 .385 1.5 1' /%3E%3C/svg%3E");
}
/* The remix pack, worn by arabica, bloodleaf. Every drawing it does not cover keeps the one above. */
:root[data-leaf-theme="arabica"],
:root[data-leaf-theme="bloodleaf"],
[data-leaf-pack="remix"] {
  --lt-icon-back-long: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M22.0003 13.0001L22.0004 11.0002L5.82845 11.0002L9.77817 7.05044L8.36396 5.63623L2 12.0002L8.36396 18.3642L9.77817 16.9499L5.8284 13.0002L22.0003 13.0001Z'/%3E%3C/svg%3E");
  --lt-icon-forward-long: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1.99974 13.0001L1.9996 11.0002L18.1715 11.0002L14.2218 7.05044L15.636 5.63623L22 12.0002L15.636 18.3642L14.2218 16.9499L18.1716 13.0002L1.99974 13.0001Z'/%3E%3C/svg%3E");
  --lt-icon-settings: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6.17071 18C6.58254 16.8348 7.69378 16 9 16C10.3062 16 11.4175 16.8348 11.8293 18H22V20H11.8293C11.4175 21.1652 10.3062 22 9 22C7.69378 22 6.58254 21.1652 6.17071 20H2V18H6.17071ZM12.1707 11C12.5825 9.83481 13.6938 9 15 9C16.3062 9 17.4175 9.83481 17.8293 11H22V13H17.8293C17.4175 14.1652 16.3062 15 15 15C13.6938 15 12.5825 14.1652 12.1707 13H2V11H12.1707ZM6.17071 4C6.58254 2.83481 7.69378 2 9 2C10.3062 2 11.4175 2.83481 11.8293 4H22V6H11.8293C11.4175 7.16519 10.3062 8 9 8C7.69378 8 6.58254 7.16519 6.17071 6H2V4H6.17071ZM9 6C9.55228 6 10 5.55228 10 5C10 4.44772 9.55228 4 9 4C8.44772 4 8 4.44772 8 5C8 5.55228 8.44772 6 9 6ZM15 13C15.5523 13 16 12.5523 16 12C16 11.4477 15.5523 11 15 11C14.4477 11 14 11.4477 14 12C14 12.5523 14.4477 13 15 13ZM9 20C9.55228 20 10 19.5523 10 19C10 18.4477 9.55228 18 9 18C8.44772 18 8 18.4477 8 19C8 19.5523 8.44772 20 9 20Z'/%3E%3C/svg%3E");
  --lt-icon-update: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 17H22V19H2V17H4V10C4 5.58172 7.58172 2 12 2C16.4183 2 20 5.58172 20 10V17ZM18 17V10C18 6.68629 15.3137 4 12 4C8.68629 4 6 6.68629 6 10V17H18ZM9 21H15V23H9V21Z'/%3E%3C/svg%3E");
  --lt-icon-open-library: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21 3C21.5523 3 22 3.44772 22 4V20C22 20.5523 21.5523 21 21 21H3C2.44772 21 2 20.5523 2 20V4C2 3.44772 2.44772 3 3 3H21ZM20 5H4V19H20V5ZM8 7V17H6V7H8Z'/%3E%3C/svg%3E");
  --lt-icon-open: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3 21C2.44772 21 2 20.5523 2 20V4C2 3.44772 2.44772 3 3 3H10.4142L12.4142 5H20C20.5523 5 21 5.44772 21 6V9H19V7H11.5858L9.58579 5H4V16.998L5.5 11H22.5L20.1894 20.2425C20.0781 20.6877 19.6781 21 19.2192 21H3ZM19.9384 13H7.06155L5.56155 19H18.4384L19.9384 13Z'/%3E%3C/svg%3E");
  --lt-icon-new: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 11V5H13V11H19V13H13V19H11V13H5V11H11Z'/%3E%3C/svg%3E");
  --lt-icon-code-view: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24 12L18.3431 17.6569L16.9289 16.2426L21.1716 12L16.9289 7.75736L18.3431 6.34315L24 12ZM2.82843 12L7.07107 16.2426L5.65685 17.6569L0 12L5.65685 6.34315L7.07107 7.75736L2.82843 12ZM9.78845 21H7.66009L14.2116 3H16.3399L9.78845 21Z'/%3E%3C/svg%3E");
  --lt-icon-code-view-heavy: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24 12L18.3431 17.6569L16.9289 16.2426L21.1716 12L16.9289 7.75736L18.3431 6.34315L24 12ZM2.82843 12L7.07107 16.2426L5.65685 17.6569L0 12L5.65685 6.34315L7.07107 7.75736L2.82843 12ZM9.78845 21H7.66009L14.2116 3H16.3399L9.78845 21Z'/%3E%3C/svg%3E");
  --lt-icon-document: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21 8V20.9932C21 21.5501 20.5552 22 20.0066 22H3.9934C3.44495 22 3 21.556 3 21.0082V2.9918C3 2.45531 3.4487 2 4.00221 2H14.9968L21 8ZM19 9H14V4H5V20H19V9ZM8 7H11V9H8V7ZM8 11H16V13H8V11ZM8 15H16V17H8V15Z'/%3E%3C/svg%3E");
  --lt-icon-document-heavy: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21 8V20.9932C21 21.5501 20.5552 22 20.0066 22H3.9934C3.44495 22 3 21.556 3 21.0082V2.9918C3 2.45531 3.4487 2 4.00221 2H14.9968L21 8ZM19 9H14V4H5V20H19V9ZM8 7H11V9H8V7ZM8 11H16V13H8V11ZM8 15H16V17H8V15Z'/%3E%3C/svg%3E");
  --lt-icon-sync: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.46257 4.43262C7.21556 2.91688 9.5007 2 12 2C17.5228 2 22 6.47715 22 12C22 14.1361 21.3302 16.1158 20.1892 17.7406L17 12H20C20 7.58172 16.4183 4 12 4C9.84982 4 7.89777 4.84827 6.46023 6.22842L5.46257 4.43262ZM18.5374 19.5674C16.7844 21.0831 14.4993 22 12 22C6.47715 22 2 17.5228 2 12C2 9.86386 2.66979 7.88416 3.8108 6.25944L7 12H4C4 16.4183 7.58172 20 12 20C14.1502 20 16.1022 19.1517 17.5398 17.7716L18.5374 19.5674Z'/%3E%3C/svg%3E");
  --lt-icon-lock-closed: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M19 10H20C20.5523 10 21 10.4477 21 11V21C21 21.5523 20.5523 22 20 22H4C3.44772 22 3 21.5523 3 21V11C3 10.4477 3.44772 10 4 10H5V9C5 5.13401 8.13401 2 12 2C15.866 2 19 5.13401 19 9V10ZM5 12V20H19V12H5ZM11 14H13V18H11V14ZM17 10V9C17 6.23858 14.7614 4 12 4C9.23858 4 7 6.23858 7 9V10H17Z'/%3E%3C/svg%3E");
  --lt-icon-lock-open: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M7 10H20C20.5523 10 21 10.4477 21 11V21C21 21.5523 20.5523 22 20 22H4C3.44772 22 3 21.5523 3 21V11C3 10.4477 3.44772 10 4 10H5V9C5 5.13401 8.13401 2 12 2C14.7405 2 17.1131 3.5748 18.2624 5.86882L16.4731 6.76344C15.6522 5.12486 13.9575 4 12 4C9.23858 4 7 6.23858 7 9V10ZM5 12V20H19V12H5ZM10 15H14V17H10V15Z'/%3E%3C/svg%3E");
  --lt-icon-speed-reader-on: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2ZM12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4ZM12 5C13.018 5 13.9852 5.21731 14.8579 5.60806L13.2954 7.16944C12.8822 7.05892 12.448 7 12 7C9.23858 7 7 9.23858 7 12C7 13.3807 7.55964 14.6307 8.46447 15.5355L7.05025 16.9497L6.89445 16.7889C5.71957 15.5368 5 13.8525 5 12C5 8.13401 8.13401 5 12 5ZM18.3924 9.14312C18.7829 10.0155 19 10.9824 19 12C19 13.933 18.2165 15.683 16.9497 16.9497L15.5355 15.5355C16.4404 14.6307 17 13.3807 17 12C17 11.552 16.9411 11.1178 16.8306 10.7046L18.3924 9.14312ZM16.2426 6.34315L17.6569 7.75736L13.9325 11.483C13.9765 11.6479 14 11.8212 14 12C14 13.1046 13.1046 14 12 14C10.8954 14 10 13.1046 10 12C10 10.8954 10.8954 10 12 10C12.1788 10 12.3521 10.0235 12.517 10.0675L16.2426 6.34315Z'/%3E%3C/svg%3E");
  --lt-icon-speed-reader-off: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2ZM12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4ZM12 5C13.018 5 13.9852 5.21731 14.8579 5.60806L13.2954 7.16944C12.8822 7.05892 12.448 7 12 7C9.23858 7 7 9.23858 7 12C7 13.3807 7.55964 14.6307 8.46447 15.5355L7.05025 16.9497L6.89445 16.7889C5.71957 15.5368 5 13.8525 5 12C5 8.13401 8.13401 5 12 5ZM18.3924 9.14312C18.7829 10.0155 19 10.9824 19 12C19 13.933 18.2165 15.683 16.9497 16.9497L15.5355 15.5355C16.4404 14.6307 17 13.3807 17 12C17 11.552 16.9411 11.1178 16.8306 10.7046L18.3924 9.14312ZM16.2426 6.34315L17.6569 7.75736L13.9325 11.483C13.9765 11.6479 14 11.8212 14 12C14 13.1046 13.1046 14 12 14C10.8954 14 10 13.1046 10 12C10 10.8954 10.8954 10 12 10C12.1788 10 12.3521 10.0235 12.517 10.0675L16.2426 6.34315Z'/%3E%3C/svg%3E");
  --lt-icon-wand: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M15.1986 9.94447C14.7649 9.5337 14.4859 8.98613 14.4085 8.39384L14.0056 5.31138L11.275 6.79724C10.7503 7.08274 10.1433 7.17888 9.55608 7.06948L6.49998 6.50015L7.06931 9.55625C7.17871 10.1435 7.08257 10.7505 6.79707 11.2751L5.31121 14.0057L8.39367 14.4086C8.98596 14.4861 9.53353 14.7651 9.94431 15.1987L12.0821 17.4557L13.4178 14.6486C13.6745 14.1092 14.109 13.6747 14.6484 13.418L17.4555 12.0823L15.1986 9.94447ZM15.2238 15.5079L13.0111 20.1581C12.8687 20.4573 12.5107 20.5844 12.2115 20.442C12.1448 20.4103 12.0845 20.3665 12.0337 20.3129L8.49229 16.5741C8.39749 16.474 8.27113 16.4096 8.13445 16.3918L3.02816 15.7243C2.69958 15.6814 2.46804 15.3802 2.51099 15.0516C2.52056 14.9784 2.54359 14.9075 2.5789 14.8426L5.04031 10.3192C5.1062 10.1981 5.12839 10.058 5.10314 9.92253L4.16 4.85991C4.09931 4.53414 4.3142 4.22086 4.63997 4.16017C4.7126 4.14664 4.78711 4.14664 4.85974 4.16017L9.92237 5.10331C10.0579 5.12855 10.198 5.10637 10.319 5.04048L14.8424 2.57907C15.1335 2.42068 15.4979 2.52825 15.6562 2.81931C15.6916 2.88421 15.7146 2.95507 15.7241 3.02833L16.3916 8.13462C16.4095 8.2713 16.4739 8.39766 16.5739 8.49245L20.3127 12.0338C20.5533 12.2617 20.5636 12.6415 20.3357 12.8821C20.2849 12.9357 20.2246 12.9795 20.1579 13.0112L15.5078 15.224C15.3833 15.2832 15.283 15.3835 15.2238 15.5079ZM16.0206 17.435L17.4348 16.0208L21.6775 20.2634L20.2633 21.6776L16.0206 17.435Z'/%3E%3C/svg%3E");
  --lt-icon-cloud: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 2C15.866 2 19 5.13401 19 9C19 9.11351 18.9973 9.22639 18.992 9.33857C21.3265 10.16 23 12.3846 23 15C23 18.3137 20.3137 21 17 21H7C3.68629 21 1 18.3137 1 15C1 12.3846 2.67346 10.16 5.00804 9.33857C5.0027 9.22639 5 9.11351 5 9C5 5.13401 8.13401 2 12 2ZM12 4C9.23858 4 7 6.23858 7 9C7 9.08147 7.00193 9.16263 7.00578 9.24344L7.07662 10.7309L5.67183 11.2252C4.0844 11.7837 3 13.2889 3 15C3 17.2091 4.79086 19 7 19H17C19.2091 19 21 17.2091 21 15C21 12.79 19.21 11 17 11C15.233 11 13.7337 12.1457 13.2042 13.7347L11.3064 13.1021C12.1005 10.7185 14.35 9 17 9C17 6.23858 14.7614 4 12 4Z'/%3E%3C/svg%3E");
  --lt-icon-export: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 14.5C1 12.1716 2.22429 10.1291 4.06426 8.9812C4.56469 5.044 7.92686 2 12 2C16.0731 2 19.4353 5.044 19.9357 8.9812C21.7757 10.1291 23 12.1716 23 14.5C23 17.9216 20.3562 20.7257 17 20.9811L7 21C3.64378 20.7257 1 17.9216 1 14.5ZM16.8483 18.9868C19.1817 18.8093 21 16.8561 21 14.5C21 12.927 20.1884 11.4962 18.8771 10.6781L18.0714 10.1754L17.9517 9.23338C17.5735 6.25803 15.0288 4 12 4C8.97116 4 6.42647 6.25803 6.0483 9.23338L5.92856 10.1754L5.12288 10.6781C3.81156 11.4962 3 12.927 3 14.5C3 16.8561 4.81833 18.8093 7.1517 18.9868L7.325 19H16.675L16.8483 18.9868ZM13 12H16L12 17L8 12H11V8H13V12Z'/%3E%3C/svg%3E");
  --lt-icon-computer: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 16H20V5H4V16ZM13 18V20H17V22H7V20H11V18H2.9918C2.44405 18 2 17.5511 2 16.9925V4.00748C2 3.45107 2.45531 3 2.9918 3H21.0082C21.556 3 22 3.44892 22 4.00748V16.9925C22 17.5489 21.5447 18 21.0082 18H13Z'/%3E%3C/svg%3E");
  --lt-icon-package: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 1L21.5 6.5V17.5L12 23L2.5 17.5V6.5L12 1ZM5.49388 7.0777L12.0001 10.8444L18.5062 7.07774L12 3.311L5.49388 7.0777ZM4.5 8.81329V16.3469L11.0001 20.1101V12.5765L4.5 8.81329ZM13.0001 20.11L19.5 16.3469V8.81337L13.0001 12.5765V20.11Z'/%3E%3C/svg%3E");
  --lt-icon-folder: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 5V19H20V7H11.5858L9.58579 5H4ZM12.4142 5H21C21.5523 5 22 5.44772 22 6V20C22 20.5523 21.5523 21 21 21H3C2.44772 21 2 20.5523 2 20V4C2 3.44772 2.44772 3 3 3H10.4142L12.4142 5Z'/%3E%3C/svg%3E");
  --lt-icon-grip: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8.5 7C9.32843 7 10 6.32843 10 5.5C10 4.67157 9.32843 4 8.5 4C7.67157 4 7 4.67157 7 5.5C7 6.32843 7.67157 7 8.5 7ZM8.5 13.5C9.32843 13.5 10 12.8284 10 12C10 11.1716 9.32843 10.5 8.5 10.5C7.67157 10.5 7 11.1716 7 12C7 12.8284 7.67157 13.5 8.5 13.5ZM10 18.5C10 19.3284 9.32843 20 8.5 20C7.67157 20 7 19.3284 7 18.5C7 17.6716 7.67157 17 8.5 17C9.32843 17 10 17.6716 10 18.5ZM15.5 7C16.3284 7 17 6.32843 17 5.5C17 4.67157 16.3284 4 15.5 4C14.6716 4 14 4.67157 14 5.5C14 6.32843 14.6716 7 15.5 7ZM17 12C17 12.8284 16.3284 13.5 15.5 13.5C14.6716 13.5 14 12.8284 14 12C14 11.1716 14.6716 10.5 15.5 10.5C16.3284 10.5 17 11.1716 17 12ZM15.5 20C16.3284 20 17 19.3284 17 18.5C17 17.6716 16.3284 17 15.5 17C14.6716 17 14 17.6716 14 18.5C14 19.3284 14.6716 20 15.5 20Z'/%3E%3C/svg%3E");
  --lt-icon-close: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.9997 10.5865L16.9495 5.63672L18.3637 7.05093L13.4139 12.0007L18.3637 16.9504L16.9495 18.3646L11.9997 13.4149L7.04996 18.3646L5.63574 16.9504L10.5855 12.0007L5.63574 7.05093L7.04996 5.63672L11.9997 10.5865Z'/%3E%3C/svg%3E");
  --lt-icon-text: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' class='feather feather-type'%3E%3Cpolyline points='4 7 4 4 20 4 20 7'%3E%3C/polyline%3E%3Cline x1='9' y1='20' x2='15' y2='20'%3E%3C/line%3E%3Cline x1='12' y1='4' x2='12' y2='20'%3E%3C/line%3E%3C/svg%3E");
  --lt-icon-heading: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M17 11V4H19V21H17V13H7V21H5V4H7V11H17Z'/%3E%3C/svg%3E");
  --lt-icon-list: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8 4H21V6H8V4ZM4.5 6.5C3.67157 6.5 3 5.82843 3 5C3 4.17157 3.67157 3.5 4.5 3.5C5.32843 3.5 6 4.17157 6 5C6 5.82843 5.32843 6.5 4.5 6.5ZM4.5 13.5C3.67157 13.5 3 12.8284 3 12C3 11.1716 3.67157 10.5 4.5 10.5C5.32843 10.5 6 11.1716 6 12C6 12.8284 5.32843 13.5 4.5 13.5ZM4.5 20.4C3.67157 20.4 3 19.7284 3 18.9C3 18.0716 3.67157 17.4 4.5 17.4C5.32843 17.4 6 18.0716 6 18.9C6 19.7284 5.32843 20.4 4.5 20.4ZM8 11H21V13H8V11ZM8 18H21V20H8V18Z'/%3E%3C/svg%3E");
  --lt-icon-quote: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4.58341 17.3211C3.55316 16.2274 3 15 3 13.0103C3 9.51086 5.45651 6.37366 9.03059 4.82318L9.92328 6.20079C6.58804 8.00539 5.93618 10.346 5.67564 11.822C6.21263 11.5443 6.91558 11.4466 7.60471 11.5105C9.40908 11.6778 10.8312 13.159 10.8312 15C10.8312 16.933 9.26416 18.5 7.33116 18.5C6.2581 18.5 5.23196 18.0095 4.58341 17.3211ZM14.5834 17.3211C13.5532 16.2274 13 15 13 13.0103C13 9.51086 15.4565 6.37366 19.0306 4.82318L19.9233 6.20079C16.588 8.00539 15.9362 10.346 15.6756 11.822C16.2126 11.5443 16.9156 11.4466 17.6047 11.5105C19.4091 11.6778 20.8312 13.159 20.8312 15C20.8312 16.933 19.2642 18.5 17.3312 18.5C16.2581 18.5 15.232 18.0095 14.5834 17.3211Z'/%3E%3C/svg%3E");
  --lt-icon-table: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 8H20V5H4V8ZM14 19V10H10V19H14ZM16 19H20V10H16V19ZM8 19V10H4V19H8ZM3 3H21C21.5523 3 22 3.44772 22 4V20C22 20.5523 21.5523 21 21 21H3C2.44772 21 2 20.5523 2 20V4C2 3.44772 2.44772 3 3 3Z'/%3E%3C/svg%3E");
  --lt-icon-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M2.9918 21C2.44405 21 2 20.5551 2 20.0066V3.9934C2 3.44476 2.45531 3 2.9918 3H21.0082C21.556 3 22 3.44495 22 3.9934V20.0066C22 20.5552 21.5447 21 21.0082 21H2.9918ZM20 15V5H4V19L14 9L20 15ZM20 17.8284L14 11.8284L6.82843 19H20V17.8284ZM8 11C6.89543 11 6 10.1046 6 9C6 7.89543 6.89543 7 8 7C9.10457 7 10 7.89543 10 9C10 10.1046 9.10457 11 8 11Z'/%3E%3C/svg%3E");
  --lt-icon-divider: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5 11V13H19V11H5Z'/%3E%3C/svg%3E");
  --lt-icon-comment: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M7.29117 20.8242L2 22L3.17581 16.7088C2.42544 15.3056 2 13.7025 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22C10.2975 22 8.6944 21.5746 7.29117 20.8242ZM7.58075 18.711L8.23428 19.0605C9.38248 19.6745 10.6655 20 12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 13.3345 4.32549 14.6175 4.93949 15.7657L5.28896 16.4192L4.63416 19.3658L7.58075 18.711Z'/%3E%3C/svg%3E");
  --lt-icon-workflow: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6 21.5C4.067 21.5 2.5 19.933 2.5 18C2.5 16.067 4.067 14.5 6 14.5C7.5852 14.5 8.92427 15.5539 9.35481 16.9992L15 16.9994V15L17 14.9994V9.24339L14.757 6.99938H9V9.00003H3V3.00003H9V4.99939H14.757L18 1.75739L22.2426 6.00003L19 9.24139V14.9994L21 15V21H15V18.9994L9.35499 19.0003C8.92464 20.4459 7.58543 21.5 6 21.5ZM6 16.5C5.17157 16.5 4.5 17.1716 4.5 18C4.5 18.8285 5.17157 19.5 6 19.5C6.82843 19.5 7.5 18.8285 7.5 18C7.5 17.1716 6.82843 16.5 6 16.5ZM19 17H17V19H19V17ZM18 4.58581L16.5858 6.00003L18 7.41424L19.4142 6.00003L18 4.58581ZM7 5.00003H5V7.00003H7V5.00003Z'/%3E%3C/svg%3E");
  --lt-icon-zoom-in: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M18.031 16.6168L22.3137 20.8995L20.8995 22.3137L16.6168 18.031C15.0769 19.263 13.124 20 11 20C6.032 20 2 15.968 2 11C2 6.032 6.032 2 11 2C15.968 2 20 6.032 20 11C20 13.124 19.263 15.0769 18.031 16.6168ZM16.0247 15.8748C17.2475 14.6146 18 12.8956 18 11C18 7.1325 14.8675 4 11 4C7.1325 4 4 7.1325 4 11C4 14.8675 7.1325 18 11 18C12.8956 18 14.6146 17.2475 15.8748 16.0247L16.0247 15.8748ZM10 10V7H12V10H15V12H12V15H10V12H7V10H10Z'/%3E%3C/svg%3E");
  --lt-icon-zoom-out: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M18.031 16.6168L22.3137 20.8995L20.8995 22.3137L16.6168 18.031C15.0769 19.263 13.124 20 11 20C6.032 20 2 15.968 2 11C2 6.032 6.032 2 11 2C15.968 2 20 6.032 20 11C20 13.124 19.263 15.0769 18.031 16.6168ZM16.0247 15.8748C17.2475 14.6146 18 12.8956 18 11C18 7.1325 14.8675 4 11 4C7.1325 4 4 7.1325 4 11C4 14.8675 7.1325 18 11 18C12.8956 18 14.6146 17.2475 15.8748 16.0247L16.0247 15.8748ZM7 10H15V12H7V10Z'/%3E%3C/svg%3E");
  --lt-icon-fit: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M9.00008 4.00008H11.0001V11.0001H4.00008V9.00008H7.58586L3.29297 4.70718L4.70718 3.29297L9.00008 7.58586V4.00008ZM20 15H16.4142L20.7071 19.2929L19.2929 20.7071L15 16.4142V20H13V13H20V15Z'/%3E%3C/svg%3E");
  --lt-icon-expand: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M17.5858 5H14V3H21V10H19V6.41421L14.7071 10.7071L13.2929 9.29289L17.5858 5ZM3 14H5V17.5858L9.29289 13.2929L10.7071 14.7071L6.41421 19H10V21H3V14Z'/%3E%3C/svg%3E");
  --lt-icon-bold: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8 11H12.5C13.8807 11 15 9.88071 15 8.5C15 7.11929 13.8807 6 12.5 6H8V11ZM18 15.5C18 17.9853 15.9853 20 13.5 20H6V4H12.5C14.9853 4 17 6.01472 17 8.5C17 9.70431 16.5269 10.7981 15.7564 11.6058C17.0979 12.3847 18 13.837 18 15.5ZM8 13V18H13.5C14.8807 18 16 16.8807 16 15.5C16 14.1193 14.8807 13 13.5 13H8Z'/%3E%3C/svg%3E");
  --lt-icon-italic: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M15 20H7V18H9.92661L12.0425 6H9V4H17V6H14.0734L11.9575 18H15V20Z'/%3E%3C/svg%3E");
  --lt-icon-strikethrough: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M17.1538 14C17.3846 14.5161 17.5 15.0893 17.5 15.7196C17.5 17.0625 16.9762 18.1116 15.9286 18.867C14.8809 19.6223 13.4335 20 11.5862 20C9.94674 20 8.32335 19.6185 6.71592 18.8555V16.6009C8.23538 17.4783 9.7908 17.917 11.3822 17.917C13.9333 17.917 15.2128 17.1846 15.2208 15.7196C15.2208 15.0939 15.0049 14.5598 14.5731 14.1173C14.5339 14.0772 14.4939 14.0381 14.4531 14H3V12H21V14H17.1538ZM13.076 11H7.62908C7.4566 10.8433 7.29616 10.6692 7.14776 10.4778C6.71592 9.92084 6.5 9.24559 6.5 8.45207C6.5 7.21602 6.96583 6.165 7.89749 5.299C8.82916 4.43299 10.2706 4 12.2219 4C13.6934 4 15.1009 4.32808 16.4444 4.98426V7.13591C15.2448 6.44921 13.9293 6.10587 12.4978 6.10587C10.0187 6.10587 8.77917 6.88793 8.77917 8.45207C8.77917 8.87172 8.99709 9.23796 9.43293 9.55079C9.86878 9.86362 10.4066 10.1135 11.0463 10.3004C11.6665 10.4816 12.3431 10.7148 13.076 11H13.076Z'/%3E%3C/svg%3E");
  --lt-icon-link: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M18.3638 15.5355L16.9496 14.1213L18.3638 12.7071C20.3164 10.7545 20.3164 7.58866 18.3638 5.63604C16.4112 3.68341 13.2453 3.68341 11.2927 5.63604L9.87849 7.05025L8.46428 5.63604L9.87849 4.22182C12.6122 1.48815 17.0443 1.48815 19.778 4.22182C22.5117 6.95549 22.5117 11.3876 19.778 14.1213L18.3638 15.5355ZM15.5353 18.364L14.1211 19.7782C11.3875 22.5118 6.95531 22.5118 4.22164 19.7782C1.48797 17.0445 1.48797 12.6123 4.22164 9.87868L5.63585 8.46446L7.05007 9.87868L5.63585 11.2929C3.68323 13.2455 3.68323 16.4113 5.63585 18.364C7.58847 20.3166 10.7543 20.3166 12.7069 18.364L14.1211 16.9497L15.5353 18.364ZM14.8282 7.75736L16.2425 9.17157L9.17139 16.2426L7.75717 14.8284L14.8282 7.75736Z'/%3E%3C/svg%3E");
  --lt-icon-undo: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.82843 6.99955L8.36396 9.53509L6.94975 10.9493L2 5.99955L6.94975 1.0498L8.36396 2.46402L5.82843 4.99955H13C17.4183 4.99955 21 8.58127 21 12.9996C21 17.4178 17.4183 20.9996 13 20.9996H4V18.9996H13C16.3137 18.9996 19 16.3133 19 12.9996C19 9.68584 16.3137 6.99955 13 6.99955H5.82843Z'/%3E%3C/svg%3E");
  --lt-icon-chevron-down: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.9999 13.1714L16.9497 8.22168L18.3639 9.63589L11.9999 15.9999L5.63599 9.63589L7.0502 8.22168L11.9999 13.1714Z'/%3E%3C/svg%3E");
  --lt-icon-replace: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M18.0326 16.6184L22.3137 20.8995L20.8995 22.3137L16.6184 18.0326C15.0789 19.2639 13.1258 20 11 20C7.46456 20 4.40684 17.964 2.93475 15H6H9L7.69597 17.1734C8.67997 17.7009 9.80489 18 11 18C12.8956 18 14.6146 17.2475 15.8748 16.0247L16.0247 15.8748C17.2475 14.6146 18 12.8956 18 11C18 10.305 17.8988 9.63365 17.7104 9H19.7772C19.923 9.64318 20 10.3126 20 11C20 13.1258 19.2639 15.0789 18.0326 16.6184ZM19.0652 7H13L14.304 4.82662C13.32 4.29912 12.1951 4 11 4C7.1325 4 4 7.1325 4 11C4 11.695 4.10117 12.3663 4.2896 13H2.22279C2.07698 12.3568 2 11.6874 2 11C2 6.0275 6.0275 2 11 2C14.5354 2 17.5932 4.03597 19.0652 7Z'/%3E%3C/svg%3E");
  --lt-icon-select-all: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-text-select' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M14 21h1' /%3E%3Cpath d='M14 3h1' /%3E%3Cpath d='M19 3a2 2 0 0 1 2 2' /%3E%3Cpath d='M21 14v1' /%3E%3Cpath d='M21 19a2 2 0 0 1-2 2' /%3E%3Cpath d='M21 9v1' /%3E%3Cpath d='M3 14v1' /%3E%3Cpath d='M3 9v1' /%3E%3Cpath d='M5 21a2 2 0 0 1-2-2' /%3E%3Cpath d='M5 3a2 2 0 0 0-2 2' /%3E%3Cpath d='M7 12h10' /%3E%3Cpath d='M7 16h6' /%3E%3Cpath d='M7 8h8' /%3E%3Cpath d='M9 21h1' /%3E%3Cpath d='M9 3h1' /%3E%3C/svg%3E");
  --lt-icon-theme: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 2C17.5222 2 22 5.97778 22 10.8889C22 13.9556 19.5111 16.4444 16.4444 16.4444H14.4778C13.5556 16.4444 12.8111 17.1889 12.8111 18.1111C12.8111 18.5333 12.9778 18.9222 13.2333 19.2111C13.5 19.5111 13.6667 19.9 13.6667 20.3333C13.6667 21.2556 12.9 22 12 22C6.47778 22 2 17.5222 2 12C2 6.47778 6.47778 2 12 2ZM10.8111 18.1111C10.8111 16.0843 12.451 14.4444 14.4778 14.4444H16.4444C18.4065 14.4444 20 12.851 20 10.8889C20 7.1392 16.4677 4 12 4C7.58235 4 4 7.58235 4 12C4 16.19 7.2226 19.6285 11.324 19.9718C10.9948 19.4168 10.8111 18.7761 10.8111 18.1111ZM7.5 12C6.67157 12 6 11.3284 6 10.5C6 9.67157 6.67157 9 7.5 9C8.32843 9 9 9.67157 9 10.5C9 11.3284 8.32843 12 7.5 12ZM16.5 12C15.6716 12 15 11.3284 15 10.5C15 9.67157 15.6716 9 16.5 9C17.3284 9 18 9.67157 18 10.5C18 11.3284 17.3284 12 16.5 12ZM12 9C11.1716 9 10.5 8.32843 10.5 7.5C10.5 6.67157 11.1716 6 12 6C12.8284 6 13.5 6.67157 13.5 7.5C13.5 8.32843 12.8284 9 12 9Z'/%3E%3C/svg%3E");
  --lt-icon-redo: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M18.1716 6.99955H11C7.68629 6.99955 5 9.68584 5 12.9996C5 16.3133 7.68629 18.9996 11 18.9996H20V20.9996H11C6.58172 20.9996 3 17.4178 3 12.9996C3 8.58127 6.58172 4.99955 11 4.99955H18.1716L15.636 2.46402L17.0503 1.0498L22 5.99955L17.0503 10.9493L15.636 9.53509L18.1716 6.99955Z'/%3E%3C/svg%3E");
  --lt-icon-window-minimize: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5 11V13H19V11H5Z'/%3E%3C/svg%3E");
  --lt-icon-window-minimize-chip: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5 11V13H19V11H5Z'/%3E%3C/svg%3E");
  --lt-icon-window-minimize-dot: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5 11V13H19V11H5Z'/%3E%3C/svg%3E");
  --lt-icon-window-maximize: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 3H20C20.5523 3 21 3.44772 21 4V20C21 20.5523 20.5523 21 20 21H4C3.44772 21 3 20.5523 3 20V4C3 3.44772 3.44772 3 4 3ZM5 5V19H19V5H5Z'/%3E%3C/svg%3E");
  --lt-icon-window-maximize-chip: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 3H20C20.5523 3 21 3.44772 21 4V20C21 20.5523 20.5523 21 20 21H4C3.44772 21 3 20.5523 3 20V4C3 3.44772 3.44772 3 4 3ZM5 5V19H19V5H5Z'/%3E%3C/svg%3E");
  --lt-icon-window-maximize-dot: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 3H20C20.5523 3 21 3.44772 21 4V20C21 20.5523 20.5523 21 20 21H4C3.44772 21 3 20.5523 3 20V4C3 3.44772 3.44772 3 4 3ZM5 5V19H19V5H5Z'/%3E%3C/svg%3E");
  --lt-icon-window-close: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.9997 10.5865L16.9495 5.63672L18.3637 7.05093L13.4139 12.0007L18.3637 16.9504L16.9495 18.3646L11.9997 13.4149L7.04996 18.3646L5.63574 16.9504L10.5855 12.0007L5.63574 7.05093L7.04996 5.63672L11.9997 10.5865Z'/%3E%3C/svg%3E");
  --lt-icon-window-close-chip: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.9997 10.5865L16.9495 5.63672L18.3637 7.05093L13.4139 12.0007L18.3637 16.9504L16.9495 18.3646L11.9997 13.4149L7.04996 18.3646L5.63574 16.9504L10.5855 12.0007L5.63574 7.05093L7.04996 5.63672L11.9997 10.5865Z'/%3E%3C/svg%3E");
  --lt-icon-window-close-dot: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.9997 10.5865L16.9495 5.63672L18.3637 7.05093L13.4139 12.0007L18.3637 16.9504L16.9495 18.3646L11.9997 13.4149L7.04996 18.3646L5.63574 16.9504L10.5855 12.0007L5.63574 7.05093L7.04996 5.63672L11.9997 10.5865Z'/%3E%3C/svg%3E");
  --lt-icon-check: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M9.9997 15.1709L19.1921 5.97852L20.6063 7.39273L9.9997 17.9993L3.63574 11.6354L5.04996 10.2212L9.9997 15.1709Z'/%3E%3C/svg%3E");
  --lt-icon-check-circle: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 12C4 7.58172 7.58172 4 12 4C16.4183 4 20 7.58172 20 12C20 16.4183 16.4183 20 12 20C7.58172 20 4 16.4183 4 12ZM12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2ZM17.4571 9.45711L16.0429 8.04289L11 13.0858L8.20711 10.2929L6.79289 11.7071L11 15.9142L17.4571 9.45711Z'/%3E%3C/svg%3E");
  --lt-icon-tab-close: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.9997 10.5865L16.9495 5.63672L18.3637 7.05093L13.4139 12.0007L18.3637 16.9504L16.9495 18.3646L11.9997 13.4149L7.04996 18.3646L5.63574 16.9504L10.5855 12.0007L5.63574 7.05093L7.04996 5.63672L11.9997 10.5865Z'/%3E%3C/svg%3E");
  --lt-icon-favorite-off: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.001 4.52853C14.35 2.42 17.98 2.49 20.2426 4.75736C22.5053 7.02472 22.583 10.637 20.4786 12.993L11.9999 21.485L3.52138 12.993C1.41705 10.637 1.49571 7.01901 3.75736 4.75736C6.02157 2.49315 9.64519 2.41687 12.001 4.52853ZM18.827 6.1701C17.3279 4.66794 14.9076 4.60701 13.337 6.01687L12.0019 7.21524L10.6661 6.01781C9.09098 4.60597 6.67506 4.66808 5.17157 6.17157C3.68183 7.66131 3.60704 10.0473 4.97993 11.6232L11.9999 18.6543L19.0201 11.6232C20.3935 10.0467 20.319 7.66525 18.827 6.1701Z'/%3E%3C/svg%3E");
  --lt-icon-favorite-on: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.001 4.52853C14.35 2.42 17.98 2.49 20.2426 4.75736C22.5053 7.02472 22.583 10.637 20.4786 12.993L11.9999 21.485L3.52138 12.993C1.41705 10.637 1.49571 7.01901 3.75736 4.75736C6.02157 2.49315 9.64519 2.41687 12.001 4.52853Z'/%3E%3C/svg%3E");
  --lt-icon-recent: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12H4C4 16.4183 7.58172 20 12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C9.25022 4 6.82447 5.38734 5.38451 7.50024L8 7.5V9.5H2V3.5H4L3.99989 5.99918C5.82434 3.57075 8.72873 2 12 2ZM13 7L12.9998 11.585L16.2426 14.8284L14.8284 16.2426L10.9998 12.413L11 7H13Z'/%3E%3C/svg%3E");
  --lt-icon-search: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M18.031 16.6168L22.3137 20.8995L20.8995 22.3137L16.6168 18.031C15.0769 19.263 13.124 20 11 20C6.032 20 2 15.968 2 11C2 6.032 6.032 2 11 2C15.968 2 20 6.032 20 11C20 13.124 19.263 15.0769 18.031 16.6168ZM16.0247 15.8748C17.2475 14.6146 18 12.8956 18 11C18 7.1325 14.8675 4 11 4C7.1325 4 4 7.1325 4 11C4 14.8675 7.1325 18 11 18C12.8956 18 14.6146 17.2475 15.8748 16.0247L16.0247 15.8748Z'/%3E%3C/svg%3E");
  --lt-icon-calendar: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M9 1V3H15V1H17V3H21C21.5523 3 22 3.44772 22 4V20C22 20.5523 21.5523 21 21 21H3C2.44772 21 2 20.5523 2 20V4C2 3.44772 2.44772 3 3 3H7V1H9ZM20 11H4V19H20V11ZM7 5H4V9H20V5H17V7H15V5H9V7H7V5Z'/%3E%3C/svg%3E");
  --lt-icon-back: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M7.82843 10.9999H20V12.9999H7.82843L13.1924 18.3638L11.7782 19.778L4 11.9999L11.7782 4.22168L13.1924 5.63589L7.82843 10.9999Z'/%3E%3C/svg%3E");
  --lt-icon-trash: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M17 6H22V8H20V21C20 21.5523 19.5523 22 19 22H5C4.44772 22 4 21.5523 4 21V8H2V6H7V3C7 2.44772 7.44772 2 8 2H16C16.5523 2 17 2.44772 17 3V6ZM18 8H6V20H18V8ZM9 11H11V17H9V11ZM13 11H15V17H13V11ZM9 4V6H15V4H9Z'/%3E%3C/svg%3E");
  --lt-icon-copy: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6.9998 6V3C6.9998 2.44772 7.44752 2 7.9998 2H19.9998C20.5521 2 20.9998 2.44772 20.9998 3V17C20.9998 17.5523 20.5521 18 19.9998 18H16.9998V20.9991C16.9998 21.5519 16.5499 22 15.993 22H4.00666C3.45059 22 3 21.5554 3 20.9991L3.0026 7.00087C3.0027 6.44811 3.45264 6 4.00942 6H6.9998ZM5.00242 8L5.00019 20H14.9998V8H5.00242ZM8.9998 6H16.9998V16H18.9998V4H8.9998V6Z'/%3E%3C/svg%3E");
}
/* The phosphor pack, worn by nightshade, verdant. Every drawing it does not cover keeps the one above. */
:root[data-leaf-theme="nightshade"],
:root[data-leaf-theme="verdant"],
[data-leaf-pack="phosphor"] {
  --lt-icon-back-long: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M224,128a8,8,0,0,1-8,8H59.31l58.35,58.34a8,8,0,0,1-11.32,11.32l-72-72a8,8,0,0,1,0-11.32l72-72a8,8,0,0,1,11.32,11.32L59.31,120H216A8,8,0,0,1,224,128Z'/%3E%3C/svg%3E");
  --lt-icon-forward-long: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M221.66,133.66l-72,72a8,8,0,0,1-11.32-11.32L196.69,136H40a8,8,0,0,1,0-16H196.69L138.34,61.66a8,8,0,0,1,11.32-11.32l72,72A8,8,0,0,1,221.66,133.66Z'/%3E%3C/svg%3E");
  --lt-icon-settings: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M40,88H73a32,32,0,0,0,62,0h81a8,8,0,0,0,0-16H135a32,32,0,0,0-62,0H40a8,8,0,0,0,0,16Zm64-24A16,16,0,1,1,88,80,16,16,0,0,1,104,64ZM216,168H199a32,32,0,0,0-62,0H40a8,8,0,0,0,0,16h97a32,32,0,0,0,62,0h17a8,8,0,0,0,0-16Zm-48,24a16,16,0,1,1,16-16A16,16,0,0,1,168,192Z'/%3E%3C/svg%3E");
  --lt-icon-update: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M221.8,175.94C216.25,166.38,208,139.33,208,104a80,80,0,1,0-160,0c0,35.34-8.26,62.38-13.81,71.94A16,16,0,0,0,48,200H88.81a40,40,0,0,0,78.38,0H208a16,16,0,0,0,13.8-24.06ZM128,216a24,24,0,0,1-22.62-16h45.24A24,24,0,0,1,128,216ZM48,184c7.7-13.24,16-43.92,16-80a64,64,0,1,1,128,0c0,36.05,8.28,66.73,16,80Z'/%3E%3C/svg%3E");
  --lt-icon-open-library: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40ZM40,56H80V200H40ZM216,200H96V56H216V200Z'/%3E%3C/svg%3E");
  --lt-icon-open: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M245,110.64A16,16,0,0,0,232,104H216V88a16,16,0,0,0-16-16H130.67L102.94,51.2a16.14,16.14,0,0,0-9.6-3.2H40A16,16,0,0,0,24,64V208h0a8,8,0,0,0,8,8H211.1a8,8,0,0,0,7.59-5.47l28.49-85.47A16.05,16.05,0,0,0,245,110.64ZM93.34,64,123.2,86.4A8,8,0,0,0,128,88h72v16H69.77a16,16,0,0,0-15.18,10.94L40,158.7V64Zm112,136H43.1l26.67-80H232Z'/%3E%3C/svg%3E");
  --lt-icon-new: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M224,128a8,8,0,0,1-8,8H136v80a8,8,0,0,1-16,0V136H40a8,8,0,0,1,0-16h80V40a8,8,0,0,1,16,0v80h80A8,8,0,0,1,224,128Z'/%3E%3C/svg%3E");
  --lt-icon-code-view: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M69.12,94.15,28.5,128l40.62,33.85a8,8,0,1,1-10.24,12.29l-48-40a8,8,0,0,1,0-12.29l48-40a8,8,0,0,1,10.24,12.3Zm176,27.7-48-40a8,8,0,1,0-10.24,12.3L227.5,128l-40.62,33.85a8,8,0,1,0,10.24,12.29l48-40a8,8,0,0,0,0-12.29ZM162.73,32.48a8,8,0,0,0-10.25,4.79l-64,176a8,8,0,0,0,4.79,10.26A8.14,8.14,0,0,0,96,224a8,8,0,0,0,7.52-5.27l64-176A8,8,0,0,0,162.73,32.48Z'/%3E%3C/svg%3E");
  --lt-icon-code-view-heavy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M69.12,94.15,28.5,128l40.62,33.85a8,8,0,1,1-10.24,12.29l-48-40a8,8,0,0,1,0-12.29l48-40a8,8,0,0,1,10.24,12.3Zm176,27.7-48-40a8,8,0,1,0-10.24,12.3L227.5,128l-40.62,33.85a8,8,0,1,0,10.24,12.29l48-40a8,8,0,0,0,0-12.29ZM162.73,32.48a8,8,0,0,0-10.25,4.79l-64,176a8,8,0,0,0,4.79,10.26A8.14,8.14,0,0,0,96,224a8,8,0,0,0,7.52-5.27l64-176A8,8,0,0,0,162.73,32.48Z'/%3E%3C/svg%3E");
  --lt-icon-document: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M213.66,82.34l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V88A8,8,0,0,0,213.66,82.34ZM160,51.31,188.69,80H160ZM200,216H56V40h88V88a8,8,0,0,0,8,8h48V216Zm-32-80a8,8,0,0,1-8,8H96a8,8,0,0,1,0-16h64A8,8,0,0,1,168,136Zm0,32a8,8,0,0,1-8,8H96a8,8,0,0,1,0-16h64A8,8,0,0,1,168,168Z'/%3E%3C/svg%3E");
  --lt-icon-document-heavy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M213.66,82.34l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V88A8,8,0,0,0,213.66,82.34ZM160,51.31,188.69,80H160ZM200,216H56V40h88V88a8,8,0,0,0,8,8h48V216Zm-32-80a8,8,0,0,1-8,8H96a8,8,0,0,1,0-16h64A8,8,0,0,1,168,136Zm0,32a8,8,0,0,1-8,8H96a8,8,0,0,1,0-16h64A8,8,0,0,1,168,168Z'/%3E%3C/svg%3E");
  --lt-icon-sync: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M224,48V96a8,8,0,0,1-8,8H168a8,8,0,0,1,0-16h28.69L182.06,73.37a79.56,79.56,0,0,0-56.13-23.43h-.45A79.52,79.52,0,0,0,69.59,72.71,8,8,0,0,1,58.41,61.27a96,96,0,0,1,135,.79L208,76.69V48a8,8,0,0,1,16,0ZM186.41,183.29a80,80,0,0,1-112.47-.66L59.31,168H88a8,8,0,0,0,0-16H40a8,8,0,0,0-8,8v48a8,8,0,0,0,16,0V179.31l14.63,14.63A95.43,95.43,0,0,0,130,222.06h.53a95.36,95.36,0,0,0,67.07-27.33,8,8,0,0,0-11.18-11.44Z'/%3E%3C/svg%3E");
  --lt-icon-lock-closed: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M208,80H176V56a48,48,0,0,0-96,0V80H48A16,16,0,0,0,32,96V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V96A16,16,0,0,0,208,80ZM96,56a32,32,0,0,1,64,0V80H96ZM208,208H48V96H208V208Zm-68-56a12,12,0,1,1-12-12A12,12,0,0,1,140,152Z'/%3E%3C/svg%3E");
  --lt-icon-lock-open: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M208,80H96V56a32,32,0,0,1,32-32c15.37,0,29.2,11,32.16,25.59a8,8,0,0,0,15.68-3.18C171.32,24.15,151.2,8,128,8A48.05,48.05,0,0,0,80,56V80H48A16,16,0,0,0,32,96V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V96A16,16,0,0,0,208,80Zm0,128H48V96H208V208Zm-68-56a12,12,0,1,1-12-12A12,12,0,0,1,140,152Z'/%3E%3C/svg%3E");
  --lt-icon-speed-reader-on: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M207.06,72.67A111.24,111.24,0,0,0,128,40h-.4C66.07,40.21,16,91,16,153.13V176a16,16,0,0,0,16,16H224a16,16,0,0,0,16-16V152A111.25,111.25,0,0,0,207.06,72.67ZM224,176H119.71l54.76-75.3a8,8,0,0,0-12.94-9.42L99.92,176H32V153.13c0-3.08.15-6.12.43-9.13H56a8,8,0,0,0,0-16H35.27c10.32-38.86,44-68.24,84.73-71.66V80a8,8,0,0,0,16,0V56.33A96.14,96.14,0,0,1,221,128H200a8,8,0,0,0,0,16h23.67c.21,2.65.33,5.31.33,8Z'/%3E%3C/svg%3E");
  --lt-icon-speed-reader-off: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M207.06,72.67A111.24,111.24,0,0,0,128,40h-.4C66.07,40.21,16,91,16,153.13V176a16,16,0,0,0,16,16H224a16,16,0,0,0,16-16V152A111.25,111.25,0,0,0,207.06,72.67ZM224,176H119.71l54.76-75.3a8,8,0,0,0-12.94-9.42L99.92,176H32V153.13c0-3.08.15-6.12.43-9.13H56a8,8,0,0,0,0-16H35.27c10.32-38.86,44-68.24,84.73-71.66V80a8,8,0,0,0,16,0V56.33A96.14,96.14,0,0,1,221,128H200a8,8,0,0,0,0,16h23.67c.21,2.65.33,5.31.33,8Z'/%3E%3C/svg%3E");
  --lt-icon-wand: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M48,64a8,8,0,0,1,8-8H72V40a8,8,0,0,1,16,0V56h16a8,8,0,0,1,0,16H88V88a8,8,0,0,1-16,0V72H56A8,8,0,0,1,48,64ZM184,192h-8v-8a8,8,0,0,0-16,0v8h-8a8,8,0,0,0,0,16h8v8a8,8,0,0,0,16,0v-8h8a8,8,0,0,0,0-16Zm56-48H224V128a8,8,0,0,0-16,0v16H192a8,8,0,0,0,0,16h16v16a8,8,0,0,0,16,0V160h16a8,8,0,0,0,0-16ZM219.31,80,80,219.31a16,16,0,0,1-22.62,0L36.68,198.63a16,16,0,0,1,0-22.63L176,36.69a16,16,0,0,1,22.63,0l20.68,20.68A16,16,0,0,1,219.31,80Zm-54.63,32L144,91.31l-96,96L68.68,208ZM208,68.69,187.31,48l-32,32L176,100.69Z'/%3E%3C/svg%3E");
  --lt-icon-cloud: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M160,40A88.09,88.09,0,0,0,81.29,88.67,64,64,0,1,0,72,216h88a88,88,0,0,0,0-176Zm0,160H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.29.11A88,88,0,0,0,72,128a8,8,0,0,0,16,0,72,72,0,1,1,72,72Z'/%3E%3C/svg%3E");
  --lt-icon-export: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M248,128a87.34,87.34,0,0,1-17.6,52.81,8,8,0,1,1-12.8-9.62A71.34,71.34,0,0,0,232,128a72,72,0,0,0-144,0,8,8,0,0,1-16,0,88,88,0,0,1,3.29-23.88C74.2,104,73.1,104,72,104a48,48,0,0,0,0,96H96a8,8,0,0,1,0,16H72A64,64,0,1,1,81.29,88.68,88,88,0,0,1,248,128Zm-69.66,42.34L160,188.69V128a8,8,0,0,0-16,0v60.69l-18.34-18.35a8,8,0,0,0-11.32,11.32l32,32a8,8,0,0,0,11.32,0l32-32a8,8,0,0,0-11.32-11.32Z'/%3E%3C/svg%3E");
  --lt-icon-computer: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M208,40H48A24,24,0,0,0,24,64V176a24,24,0,0,0,24,24H208a24,24,0,0,0,24-24V64A24,24,0,0,0,208,40Zm8,136a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V64a8,8,0,0,1,8-8H208a8,8,0,0,1,8,8Zm-48,48a8,8,0,0,1-8,8H96a8,8,0,0,1,0-16h64A8,8,0,0,1,168,224Z'/%3E%3C/svg%3E");
  --lt-icon-package: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M223.68,66.15,135.68,18a15.88,15.88,0,0,0-15.36,0l-88,48.17a16,16,0,0,0-8.32,14v95.64a16,16,0,0,0,8.32,14l88,48.17a15.88,15.88,0,0,0,15.36,0l88-48.17a16,16,0,0,0,8.32-14V80.18A16,16,0,0,0,223.68,66.15ZM128,32l80.34,44-29.77,16.3-80.35-44ZM128,120,47.66,76l33.9-18.56,80.34,44ZM40,90l80,43.78v85.79L40,175.82Zm176,85.78h0l-80,43.79V133.82l32-17.51V152a8,8,0,0,0,16,0V107.55L216,90v85.77Z'/%3E%3C/svg%3E");
  --lt-icon-folder: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M216,72H131.31L104,44.69A15.86,15.86,0,0,0,92.69,40H40A16,16,0,0,0,24,56V200.62A15.4,15.4,0,0,0,39.38,216H216.89A15.13,15.13,0,0,0,232,200.89V88A16,16,0,0,0,216,72ZM40,56H92.69l16,16H40ZM216,200H40V88H216Z'/%3E%3C/svg%3E");
  --lt-icon-grip: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M104,60A12,12,0,1,1,92,48,12,12,0,0,1,104,60Zm60,12a12,12,0,1,0-12-12A12,12,0,0,0,164,72ZM92,116a12,12,0,1,0,12,12A12,12,0,0,0,92,116Zm72,0a12,12,0,1,0,12,12A12,12,0,0,0,164,116ZM92,184a12,12,0,1,0,12,12A12,12,0,0,0,92,184Zm72,0a12,12,0,1,0,12,12A12,12,0,0,0,164,184Z'/%3E%3C/svg%3E");
  --lt-icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z'/%3E%3C/svg%3E");
  --lt-icon-text: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M208,56V88a8,8,0,0,1-16,0V64H136V192h24a8,8,0,0,1,0,16H96a8,8,0,0,1,0-16h24V64H64V88a8,8,0,0,1-16,0V56a8,8,0,0,1,8-8H200A8,8,0,0,1,208,56Z'/%3E%3C/svg%3E");
  --lt-icon-heading: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M152,56V176a8,8,0,0,1-16,0V124H48v52a8,8,0,0,1-16,0V56a8,8,0,0,1,16,0v52h88V56a8,8,0,0,1,16,0Zm75.77,49a8,8,0,0,0-8.21.39l-24,16a8,8,0,1,0,8.88,13.32L216,127V208a8,8,0,0,0,16,0V112A8,8,0,0,0,227.77,105Z'/%3E%3C/svg%3E");
  --lt-icon-list: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M80,64a8,8,0,0,1,8-8H216a8,8,0,0,1,0,16H88A8,8,0,0,1,80,64Zm136,56H88a8,8,0,0,0,0,16H216a8,8,0,0,0,0-16Zm0,64H88a8,8,0,0,0,0,16H216a8,8,0,0,0,0-16ZM44,52A12,12,0,1,0,56,64,12,12,0,0,0,44,52Zm0,64a12,12,0,1,0,12,12A12,12,0,0,0,44,116Zm0,64a12,12,0,1,0,12,12A12,12,0,0,0,44,180Z'/%3E%3C/svg%3E");
  --lt-icon-quote: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M100,56H40A16,16,0,0,0,24,72v64a16,16,0,0,0,16,16h60v8a32,32,0,0,1-32,32,8,8,0,0,0,0,16,48.05,48.05,0,0,0,48-48V72A16,16,0,0,0,100,56Zm0,80H40V72h60ZM216,56H156a16,16,0,0,0-16,16v64a16,16,0,0,0,16,16h60v8a32,32,0,0,1-32,32,8,8,0,0,0,0,16,48.05,48.05,0,0,0,48-48V72A16,16,0,0,0,216,56Zm0,80H156V72h60Z'/%3E%3C/svg%3E");
  --lt-icon-table: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M224,48H32a8,8,0,0,0-8,8V192a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A8,8,0,0,0,224,48ZM40,112H80v32H40Zm56,0H216v32H96ZM216,64V96H40V64ZM40,160H80v32H40Zm176,32H96V160H216v32Z'/%3E%3C/svg%3E");
  --lt-icon-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40Zm0,16V158.75l-26.07-26.06a16,16,0,0,0-22.63,0l-20,20-44-44a16,16,0,0,0-22.62,0L40,149.37V56ZM40,172l52-52,80,80H40Zm176,28H194.63l-36-36,20-20L216,181.38V200ZM144,100a12,12,0,1,1,12,12A12,12,0,0,1,144,100Z'/%3E%3C/svg%3E");
  --lt-icon-divider: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M224,128a8,8,0,0,1-8,8H40a8,8,0,0,1,0-16H216A8,8,0,0,1,224,128Z'/%3E%3C/svg%3E");
  --lt-icon-comment: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M216,48H40A16,16,0,0,0,24,64V224a15.85,15.85,0,0,0,9.24,14.5A16.13,16.13,0,0,0,40,240a15.89,15.89,0,0,0,10.25-3.78l.09-.07L83,208H216a16,16,0,0,0,16-16V64A16,16,0,0,0,216,48ZM40,224h0ZM216,192H80a8,8,0,0,0-5.23,1.95L40,224V64H216ZM88,112a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H96A8,8,0,0,1,88,112Zm0,32a8,8,0,0,1,8-8h64a8,8,0,1,1,0,16H96A8,8,0,0,1,88,144Z'/%3E%3C/svg%3E");
  --lt-icon-workflow: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M245.66,74.34l-32-32a8,8,0,0,0-11.32,11.32L220.69,72H208c-49.33,0-61.05,28.12-71.38,52.92-9.38,22.51-16.92,40.59-49.48,42.84a40,40,0,1,0,.1,16c43.26-2.65,54.34-29.15,64.14-52.69C161.41,107,169.33,88,208,88h12.69l-18.35,18.34a8,8,0,0,0,11.32,11.32l32-32A8,8,0,0,0,245.66,74.34ZM48,200a24,24,0,1,1,24-24A24,24,0,0,1,48,200Z'/%3E%3C/svg%3E");
  --lt-icon-zoom-in: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M152,112a8,8,0,0,1-8,8H120v24a8,8,0,0,1-16,0V120H80a8,8,0,0,1,0-16h24V80a8,8,0,0,1,16,0v24h24A8,8,0,0,1,152,112Zm77.66,117.66a8,8,0,0,1-11.32,0l-50.06-50.07a88.11,88.11,0,1,1,11.31-11.31l50.07,50.06A8,8,0,0,1,229.66,229.66ZM112,184a72,72,0,1,0-72-72A72.08,72.08,0,0,0,112,184Z'/%3E%3C/svg%3E");
  --lt-icon-zoom-out: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M152,112a8,8,0,0,1-8,8H80a8,8,0,0,1,0-16h64A8,8,0,0,1,152,112Zm77.66,117.66a8,8,0,0,1-11.32,0l-50.06-50.07a88.11,88.11,0,1,1,11.31-11.31l50.07,50.06A8,8,0,0,1,229.66,229.66ZM112,184a72,72,0,1,0-72-72A72.08,72.08,0,0,0,112,184Z'/%3E%3C/svg%3E");
  --lt-icon-fit: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M144,104V64a8,8,0,0,1,16,0V84.69l42.34-42.35a8,8,0,0,1,11.32,11.32L171.31,96H192a8,8,0,0,1,0,16H152A8,8,0,0,1,144,104Zm-40,40H64a8,8,0,0,0,0,16H84.69L42.34,202.34a8,8,0,0,0,11.32,11.32L96,171.31V192a8,8,0,0,0,16,0V152A8,8,0,0,0,104,144Zm67.31,16H192a8,8,0,0,0,0-16H152a8,8,0,0,0-8,8v40a8,8,0,0,0,16,0V171.31l42.34,42.35a8,8,0,0,0,11.32-11.32ZM104,56a8,8,0,0,0-8,8V84.69L53.66,42.34A8,8,0,0,0,42.34,53.66L84.69,96H64a8,8,0,0,0,0,16h40a8,8,0,0,0,8-8V64A8,8,0,0,0,104,56Z'/%3E%3C/svg%3E");
  --lt-icon-expand: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M216,48V96a8,8,0,0,1-16,0V67.31l-42.34,42.35a8,8,0,0,1-11.32-11.32L188.69,56H160a8,8,0,0,1,0-16h48A8,8,0,0,1,216,48ZM98.34,146.34,56,188.69V160a8,8,0,0,0-16,0v48a8,8,0,0,0,8,8H96a8,8,0,0,0,0-16H67.31l42.35-42.34a8,8,0,0,0-11.32-11.32ZM208,152a8,8,0,0,0-8,8v28.69l-42.34-42.35a8,8,0,0,0-11.32,11.32L188.69,200H160a8,8,0,0,0,0,16h48a8,8,0,0,0,8-8V160A8,8,0,0,0,208,152ZM67.31,56H96a8,8,0,0,0,0-16H48a8,8,0,0,0-8,8V96a8,8,0,0,0,16,0V67.31l42.34,42.35a8,8,0,0,0,11.32-11.32Z'/%3E%3C/svg%3E");
  --lt-icon-bold: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M178.48,115.7A44,44,0,0,0,148,40H80a8,8,0,0,0-8,8V200a8,8,0,0,0,8,8h80a48,48,0,0,0,18.48-92.3ZM88,56h60a28,28,0,0,1,0,56H88Zm72,136H88V128h72a32,32,0,0,1,0,64Z'/%3E%3C/svg%3E");
  --lt-icon-italic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M200,56a8,8,0,0,1-8,8H157.77L115.1,192H144a8,8,0,0,1,0,16H64a8,8,0,0,1,0-16H98.23L140.9,64H112a8,8,0,0,1,0-16h80A8,8,0,0,1,200,56Z'/%3E%3C/svg%3E");
  --lt-icon-strikethrough: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M224,128a8,8,0,0,1-8,8H175.93c9.19,7.11,16.07,17.2,16.07,32,0,13.34-7,25.7-19.75,34.79C160.33,211.31,144.61,216,128,216s-32.33-4.69-44.25-13.21C71,193.7,64,181.34,64,168a8,8,0,0,1,16,0c0,17.35,22,32,48,32s48-14.65,48-32c0-14.85-10.54-23.58-38.77-32H40a8,8,0,0,1,0-16H216A8,8,0,0,1,224,128ZM76.33,104a8,8,0,0,0,7.61-10.49A17.3,17.3,0,0,1,83.11,88c0-18.24,19.3-32,44.89-32,18.84,0,34.16,7.42,41,19.85a8,8,0,0,0,14-7.7C173.33,50.52,152.77,40,128,40,93.29,40,67.11,60.63,67.11,88a33.73,33.73,0,0,0,1.62,10.49A8,8,0,0,0,76.33,104Z'/%3E%3C/svg%3E");
  --lt-icon-link: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M240,88.23a54.43,54.43,0,0,1-16,37L189.25,160a54.27,54.27,0,0,1-38.63,16h-.05A54.63,54.63,0,0,1,96,119.84a8,8,0,0,1,16,.45A38.62,38.62,0,0,0,150.58,160h0a38.39,38.39,0,0,0,27.31-11.31l34.75-34.75a38.63,38.63,0,0,0-54.63-54.63l-11,11A8,8,0,0,1,135.7,59l11-11A54.65,54.65,0,0,1,224,48,54.86,54.86,0,0,1,240,88.23ZM109,185.66l-11,11A38.41,38.41,0,0,1,70.6,208h0a38.63,38.63,0,0,1-27.29-65.94L78,107.31A38.63,38.63,0,0,1,144,135.71a8,8,0,0,0,16,.45A54.86,54.86,0,0,0,144,96a54.65,54.65,0,0,0-77.27,0L32,130.75A54.62,54.62,0,0,0,70.56,224h0a54.28,54.28,0,0,0,38.64-16l11-11A8,8,0,0,0,109,185.66Z'/%3E%3C/svg%3E");
  --lt-icon-undo: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M224,128a96,96,0,0,1-94.71,96H128A95.38,95.38,0,0,1,62.1,197.8a8,8,0,0,1,11-11.63A80,80,0,1,0,71.43,71.39a3.07,3.07,0,0,1-.26.25L44.59,96H72a8,8,0,0,1,0,16H24a8,8,0,0,1-8-8V56a8,8,0,0,1,16,0V85.8L60.25,60A96,96,0,0,1,224,128Z'/%3E%3C/svg%3E");
  --lt-icon-missing-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16h64a8,8,0,0,0,7.59-5.47l14.83-44.48L163,151.43a8.07,8.07,0,0,0,4.46-4.46l14.62-36.55,44.48-14.83A8,8,0,0,0,232,88V56A16,16,0,0,0,216,40ZM112.41,157.47,98.23,200H40V172l52-52,30.42,30.42L117,152.57A8,8,0,0,0,112.41,157.47ZM216,82.23,173.47,96.41a8,8,0,0,0-4.9,4.62l-14.72,36.82L138.58,144l-35.27-35.27a16,16,0,0,0-22.62,0L40,149.37V56H216Zm12.68,33a8,8,0,0,0-7.21-1.1l-23.8,7.94a8,8,0,0,0-4.9,4.61l-14.31,35.77-35.77,14.31a8,8,0,0,0-4.61,4.9l-7.94,23.8A8,8,0,0,0,137.73,216H216a16,16,0,0,0,16-16V121.73A8,8,0,0,0,228.68,115.24ZM216,200H148.83l3.25-9.75,35.51-14.2a8.07,8.07,0,0,0,4.46-4.46l14.2-35.51,9.75-3.25Z'/%3E%3C/svg%3E");
  --lt-icon-chevron-down: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,53.66,90.34L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z'/%3E%3C/svg%3E");
  --lt-icon-select-all: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M104,40a8,8,0,0,1,8-8h32a8,8,0,0,1,0,16H112A8,8,0,0,1,104,40Zm40,168H112a8,8,0,0,0,0,16h32a8,8,0,0,0,0-16ZM208,32H184a8,8,0,0,0,0,16h24V72a8,8,0,0,0,16,0V48A16,16,0,0,0,208,32Zm8,72a8,8,0,0,0-8,8v32a8,8,0,0,0,16,0V112A8,8,0,0,0,216,104Zm0,72a8,8,0,0,0-8,8v24H184a8,8,0,0,0,0,16h24a16,16,0,0,0,16-16V184A8,8,0,0,0,216,176ZM40,152a8,8,0,0,0,8-8V112a8,8,0,0,0-16,0v32A8,8,0,0,0,40,152Zm32,56H48V184a8,8,0,0,0-16,0v24a16,16,0,0,0,16,16H72a8,8,0,0,0,0-16ZM40,80a8,8,0,0,0,8-8V48H72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,48V72A8,8,0,0,0,40,80ZM176,184H80a8,8,0,0,1-8-8V80a8,8,0,0,1,8-8h96a8,8,0,0,1,8,8v96A8,8,0,0,1,176,184Zm-8-96H88v80h80Z'/%3E%3C/svg%3E");
  --lt-icon-theme: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M200.77,53.89A103.27,103.27,0,0,0,128,24h-1.07A104,104,0,0,0,24,128c0,43,26.58,79.06,69.36,94.17A32,32,0,0,0,136,192a16,16,0,0,1,16-16h46.21a31.81,31.81,0,0,0,31.2-24.88,104.43,104.43,0,0,0,2.59-24A103.28,103.28,0,0,0,200.77,53.89Zm13,93.71A15.89,15.89,0,0,1,198.21,160H152a32,32,0,0,0-32,32,16,16,0,0,1-21.31,15.07C62.49,194.3,40,164,40,128a88,88,0,0,1,87.09-88h.9a88.35,88.35,0,0,1,88,87.25A88.86,88.86,0,0,1,213.81,147.6ZM140,76a12,12,0,1,1-12-12A12,12,0,0,1,140,76ZM96,100A12,12,0,1,1,84,88,12,12,0,0,1,96,100Zm0,56a12,12,0,1,1-12-12A12,12,0,0,1,96,156Zm88-56a12,12,0,1,1-12-12A12,12,0,0,1,184,100Z'/%3E%3C/svg%3E");
  --lt-icon-redo: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M240,56v48a8,8,0,0,1-8,8H184a8,8,0,0,1,0-16H211.4L184.81,71.64l-.25-.24a80,80,0,1,0-1.67,114.78,8,8,0,0,1,11,11.63A95.44,95.44,0,0,1,128,224h-1.32A96,96,0,1,1,195.75,60L224,85.8V56a8,8,0,1,1,16,0Z'/%3E%3C/svg%3E");
  --lt-icon-check: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M229.66,77.66l-128,128a8,8,0,0,1-11.32,0l-56-56a8,8,0,0,1,11.32-11.32L96,188.69,218.34,66.34a8,8,0,0,1,11.32,11.32Z'/%3E%3C/svg%3E");
  --lt-icon-check-circle: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M173.66,98.34a8,8,0,0,1,0,11.32l-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35A8,8,0,0,1,173.66,98.34ZM232,128A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z'/%3E%3C/svg%3E");
  --lt-icon-tab-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z'/%3E%3C/svg%3E");
  --lt-icon-favorite-off: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M178,40c-20.65,0-38.73,8.88-50,23.89C116.73,48.88,98.65,40,78,40a62.07,62.07,0,0,0-62,62c0,70,103.79,126.66,108.21,129a8,8,0,0,0,7.58,0C136.21,228.66,240,172,240,102A62.07,62.07,0,0,0,178,40ZM128,214.8C109.74,204.16,32,155.69,32,102A46.06,46.06,0,0,1,78,56c19.45,0,35.78,10.36,42.6,27a8,8,0,0,0,14.8,0c6.82-16.67,23.15-27,42.6-27a46.06,46.06,0,0,1,46,46C224,155.61,146.24,204.15,128,214.8Z'/%3E%3C/svg%3E");
  --lt-icon-favorite-on: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M240,102c0,70-103.79,126.66-108.21,129a8,8,0,0,1-7.58,0C119.79,228.66,16,172,16,102A62.07,62.07,0,0,1,78,40c20.65,0,38.73,8.88,50,23.89C139.27,48.88,157.35,40,178,40A62.07,62.07,0,0,1,240,102Z'/%3E%3C/svg%3E");
  --lt-icon-recent: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M136,80v43.47l36.12,21.67a8,8,0,0,1-8.24,13.72l-40-24A8,8,0,0,1,120,128V80a8,8,0,0,1,16,0Zm-8-48A95.44,95.44,0,0,0,60.08,60.15C52.81,67.51,46.35,74.59,40,82V64a8,8,0,0,0-16,0v40a8,8,0,0,0,8,8H72a8,8,0,0,0,0-16H49c7.15-8.42,14.27-16.35,22.39-24.57a80,80,0,1,1,1.66,114.75,8,8,0,1,0-11,11.64A96,96,0,1,0,128,32Z'/%3E%3C/svg%3E");
  --lt-icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M229.66,218.34l-50.07-50.06a88.11,88.11,0,1,0-11.31,11.31l50.06,50.07a8,8,0,0,0,11.32-11.32ZM40,112a72,72,0,1,1,72,72A72.08,72.08,0,0,1,40,112Z'/%3E%3C/svg%3E");
  --lt-icon-calendar: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M208,32H184V24a8,8,0,0,0-16,0v8H88V24a8,8,0,0,0-16,0v8H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM72,48v8a8,8,0,0,0,16,0V48h80v8a8,8,0,0,0,16,0V48h24V80H48V48ZM208,208H48V96H208V208Z'/%3E%3C/svg%3E");
  --lt-icon-back: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M224,128a8,8,0,0,1-8,8H59.31l58.35,58.34a8,8,0,0,1-11.32,11.32l-72-72a8,8,0,0,1,0-11.32l72-72a8,8,0,0,1,11.32,11.32L59.31,120H216A8,8,0,0,1,224,128Z'/%3E%3C/svg%3E");
  --lt-icon-trash: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M216,48H176V40a24,24,0,0,0-24-24H104A24,24,0,0,0,80,40v8H40a8,8,0,0,0,0,16h8V208a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V64h8a8,8,0,0,0,0-16ZM96,40a8,8,0,0,1,8-8h48a8,8,0,0,1,8,8v8H96Zm96,168H64V64H192ZM112,104v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm48,0v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Z'/%3E%3C/svg%3E");
  --lt-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z'/%3E%3C/svg%3E");
}
/* The heroicons pack, worn by amaranth, halcyon, vermilion. Every drawing it does not cover keeps the one above. */
:root[data-leaf-theme="amaranth"],
:root[data-leaf-theme="halcyon"],
:root[data-leaf-theme="vermilion"],
[data-leaf-pack="heroicons"] {
  --lt-icon-back-long: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M6.75 15.75 3 12m0 0 3.75-3.75M3 12h18'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-forward-long: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M17.25 8.25 21 12m0 0-3.75 3.75M21 12H3'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-settings: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10.5 6h9.75M10.5 6a1.5 1.5 0 1 1-3 0m3 0a1.5 1.5 0 1 0-3 0M3.75 6H7.5m3 12h9.75m-9.75 0a1.5 1.5 0 0 1-3 0m3 0a1.5 1.5 0 0 0-3 0m-3.75 0H7.5m9-6h3.75m-3.75 0a1.5 1.5 0 0 1-3 0m3 0a1.5 1.5 0 0 0-3 0m-9.75 0h9.75'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-update: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M14.857 17.082a23.848 23.848 0 0 0 5.454-1.31A8.967 8.967 0 0 1 18 9.75V9A6 6 0 0 0 6 9v.75a8.967 8.967 0 0 1-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 0 1-5.714 0m5.714 0a3 3 0 1 1-5.714 0'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-open: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3.75 9.776c.112-.017.227-.026.344-.026h15.812c.117 0 .232.009.344.026m-16.5 0a2.25 2.25 0 0 0-1.883 2.542l.857 6a2.25 2.25 0 0 0 2.227 1.932H19.05a2.25 2.25 0 0 0 2.227-1.932l.857-6a2.25 2.25 0 0 0-1.883-2.542m-16.5 0V6A2.25 2.25 0 0 1 6 3.75h3.879a1.5 1.5 0 0 1 1.06.44l2.122 2.12a1.5 1.5 0 0 0 1.06.44H18A2.25 2.25 0 0 1 20.25 9v.776'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-new: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M12 4.5v15m7.5-7.5h-15'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-code-view: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M17.25 6.75 22.5 12l-5.25 5.25m-10.5 0L1.5 12l5.25-5.25m7.5-3-4.5 16.5'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-code-view-heavy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='2.25' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M17.25 6.75 22.5 12l-5.25 5.25m-10.5 0L1.5 12l5.25-5.25m7.5-3-4.5 16.5'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-document: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-document-heavy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='2.25' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-sync: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0 3.181 3.183a8.25 8.25 0 0 0 13.803-3.7M4.031 9.865a8.25 8.25 0 0 1 13.803-3.7l3.181 3.182m0-4.991v4.99'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-lock-closed: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M16.5 10.5V6.75a4.5 4.5 0 1 0-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 0 0 2.25-2.25v-6.75a2.25 2.25 0 0 0-2.25-2.25H6.75a2.25 2.25 0 0 0-2.25 2.25v6.75a2.25 2.25 0 0 0 2.25 2.25Z'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-lock-open: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='2.25' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M13.5 10.5V6.75a4.5 4.5 0 1 1 9 0v3.75M3.75 21.75h10.5a2.25 2.25 0 0 0 2.25-2.25v-6.75a2.25 2.25 0 0 0-2.25-2.25H3.75a2.25 2.25 0 0 0-2.25 2.25v6.75a2.25 2.25 0 0 0 2.25 2.25Z'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-cloud: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M2.25 15a4.5 4.5 0 0 0 4.5 4.5H18a3.75 3.75 0 0 0 1.332-7.257 3 3 0 0 0-3.758-3.848 5.25 5.25 0 0 0-10.233 2.33A4.502 4.502 0 0 0 2.25 15Z'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-export: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M12 9.75v6.75m0 0-3-3m3 3 3-3m-8.25 6a4.5 4.5 0 0 1-1.41-8.775 5.25 5.25 0 0 1 10.233-2.33 3 3 0 0 1 3.758 3.848A3.752 3.752 0 0 1 18 19.5H6.75Z'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-computer: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 17.25v1.007a3 3 0 0 1-.879 2.122L7.5 21h9l-.621-.621A3 3 0 0 1 15 18.257V17.25m6-12V15a2.25 2.25 0 0 1-2.25 2.25H5.25A2.25 2.25 0 0 1 3 15V5.25m18 0A2.25 2.25 0 0 0 18.75 3H5.25A2.25 2.25 0 0 0 3 5.25m18 0V12a2.25 2.25 0 0 1-2.25 2.25H5.25A2.25 2.25 0 0 1 3 12V5.25'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-package: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='m21 7.5-9-5.25L3 7.5m18 0-9 5.25m9-5.25v9l-9 5.25M3 7.5l9 5.25M3 7.5v9l9 5.25m0-9v9'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-folder: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M2.25 12.75V12A2.25 2.25 0 0 1 4.5 9.75h15A2.25 2.25 0 0 1 21.75 12v.75m-8.69-6.44-2.12-2.12a1.5 1.5 0 0 0-1.061-.44H4.5A2.25 2.25 0 0 0 2.25 6v12a2.25 2.25 0 0 0 2.25 2.25h15A2.25 2.25 0 0 0 21.75 18V9a2.25 2.25 0 0 0-2.25-2.25h-5.379a1.5 1.5 0 0 1-1.06-.44Z'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M6 18 18 6M6 6l12 12'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-heading: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M2.243 4.493v7.5m0 0v7.502m0-7.501h10.5m0-7.5v7.5m0 0v7.501m4.501-8.627 2.25-1.5v10.126m0 0h-2.25m2.25 0h2.25'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-list: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M8.25 6.75h12M8.25 12h12m-12 5.25h12M3.75 6.75h.007v.008H3.75V6.75Zm.375 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0ZM3.75 12h.007v.008H3.75V12Zm.375 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Zm-.375 5.25h.007v.008H3.75v-.008Zm.375 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Z'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-quote: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='%23000' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4.58341 17.3211C3.55316 16.2274 3 15 3 13.0103C3 9.51086 5.45651 6.37366 9.03059 4.82318L9.92328 6.20079C6.58804 8.00539 5.93618 10.346 5.67564 11.822C6.21263 11.5443 6.91558 11.4466 7.60471 11.5105C9.40908 11.6778 10.8312 13.159 10.8312 15C10.8312 16.933 9.26416 18.5 7.33116 18.5C6.2581 18.5 5.23196 18.0095 4.58341 17.3211ZM14.5834 17.3211C13.5532 16.2274 13 15 13 13.0103C13 9.51086 15.4565 6.37366 19.0306 4.82318L19.9233 6.20079C16.588 8.00539 15.9362 10.346 15.6756 11.822C16.2126 11.5443 16.9156 11.4466 17.6047 11.5105C19.4091 11.6778 20.8312 13.159 20.8312 15C20.8312 16.933 19.2642 18.5 17.3312 18.5C16.2581 18.5 15.232 18.0095 14.5834 17.3211Z'/%3E%3C/svg%3E");
  --lt-icon-table: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3.375 19.5h17.25m-17.25 0a1.125 1.125 0 0 1-1.125-1.125M3.375 19.5h7.5c.621 0 1.125-.504 1.125-1.125m-9.75 0V5.625m0 12.75v-1.5c0-.621.504-1.125 1.125-1.125m18.375 2.625V5.625m0 12.75c0 .621-.504 1.125-1.125 1.125m1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125m0 3.75h-7.5A1.125 1.125 0 0 1 12 18.375m9.75-12.75c0-.621-.504-1.125-1.125-1.125H3.375c-.621 0-1.125.504-1.125 1.125m19.5 0v1.5c0 .621-.504 1.125-1.125 1.125M2.25 5.625v1.5c0 .621.504 1.125 1.125 1.125m0 0h17.25m-17.25 0h7.5c.621 0 1.125.504 1.125 1.125M3.375 8.25c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125m17.25-3.75h-7.5c-.621 0-1.125.504-1.125 1.125m8.625-1.125c.621 0 1.125.504 1.125 1.125v1.5c0 .621-.504 1.125-1.125 1.125m-17.25 0h7.5m-7.5 0c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125M12 10.875v-1.5m0 1.5c0 .621-.504 1.125-1.125 1.125M12 10.875c0 .621.504 1.125 1.125 1.125m-2.25 0c.621 0 1.125.504 1.125 1.125M13.125 12h7.5m-7.5 0c-.621 0-1.125.504-1.125 1.125M20.625 12c.621 0 1.125.504 1.125 1.125v1.5c0 .621-.504 1.125-1.125 1.125m-17.25 0h7.5M12 14.625v-1.5m0 1.5c0 .621-.504 1.125-1.125 1.125M12 14.625c0 .621.504 1.125 1.125 1.125m-2.25 0c.621 0 1.125.504 1.125 1.125m0 1.5v-1.5m0 0c0-.621.504-1.125 1.125-1.125m0 0h7.5'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='m2.25 15.75 5.159-5.159a2.25 2.25 0 0 1 3.182 0l5.159 5.159m-1.5-1.5 1.409-1.409a2.25 2.25 0 0 1 3.182 0l2.909 2.909m-18 3.75h16.5a1.5 1.5 0 0 0 1.5-1.5V6a1.5 1.5 0 0 0-1.5-1.5H3.75A1.5 1.5 0 0 0 2.25 6v12a1.5 1.5 0 0 0 1.5 1.5Zm10.5-11.25h.008v.008h-.008V8.25Zm.375 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Z'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-divider: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M5 12h14'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-comment: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M2.25 12.76c0 1.6 1.123 2.994 2.707 3.227 1.087.16 2.185.283 3.293.369V21l4.076-4.076a1.526 1.526 0 0 1 1.037-.443 48.282 48.282 0 0 0 5.68-.494c1.584-.233 2.707-1.626 2.707-3.228V6.741c0-1.602-1.123-2.995-2.707-3.228A48.394 48.394 0 0 0 12 3c-2.392 0-4.744.175-7.043.513C3.373 3.746 2.25 5.14 2.25 6.741v6.018Z'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-workflow: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'%3E%3Cpath d='M245.66,74.34l-32-32a8,8,0,0,0-11.32,11.32L220.69,72H208c-49.33,0-61.05,28.12-71.38,52.92-9.38,22.51-16.92,40.59-49.48,42.84a40,40,0,1,0,.1,16c43.26-2.65,54.34-29.15,64.14-52.69C161.41,107,169.33,88,208,88h12.69l-18.35,18.34a8,8,0,0,0,11.32,11.32l32-32A8,8,0,0,0,245.66,74.34ZM48,200a24,24,0,1,1,24-24A24,24,0,0,1,48,200Z'/%3E%3C/svg%3E");
  --lt-icon-zoom-in: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607ZM10.5 7.5v6m3-3h-6'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-zoom-out: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607ZM13.5 10.5h-6'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-fit: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 9V4.5M9 9H4.5M9 9 3.75 3.75M9 15v4.5M9 15H4.5M9 15l-5.25 5.25M15 9h4.5M15 9V4.5M15 9l5.25-5.25M15 15h4.5M15 15v4.5m0-4.5 5.25 5.25'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-expand: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3.75 3.75v4.5m0-4.5h4.5m-4.5 0L9 9M3.75 20.25v-4.5m0 4.5h4.5m-4.5 0L9 15M20.25 3.75h-4.5m4.5 0v4.5m0-4.5L15 9m5.25 11.25h-4.5m4.5 0v-4.5m0 4.5L15 15'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-bold: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linejoin='round' d='M6.75 3.744h-.753v8.25h7.125a4.125 4.125 0 0 0 0-8.25H6.75Zm0 0v.38m0 16.122h6.747a4.5 4.5 0 0 0 0-9.001h-7.5v9h.753Zm0 0v-.37m0-15.751h6a3.75 3.75 0 1 1 0 7.5h-6m0-7.5v7.5m0 0v8.25m0-8.25h6.375a4.125 4.125 0 0 1 0 8.25H6.75m.747-15.38h4.875a3.375 3.375 0 0 1 0 6.75H7.497v-6.75Zm0 7.5h5.25a3.75 3.75 0 0 1 0 7.5h-5.25v-7.5Z'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-italic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M5.248 20.246H9.05m0 0h3.696m-3.696 0 5.893-16.502m0 0h-3.697m3.697 0h3.803'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-strikethrough: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M12 12a8.912 8.912 0 0 1-.318-.079c-1.585-.424-2.904-1.247-3.76-2.236-.873-1.009-1.265-2.19-.968-3.301.59-2.2 3.663-3.29 6.863-2.432A8.186 8.186 0 0 1 16.5 5.21M6.42 17.81c.857.99 2.176 1.812 3.761 2.237 3.2.858 6.274-.23 6.863-2.431.233-.868.044-1.779-.465-2.617M3.75 12h16.5'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-link: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622 1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-undo: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 15 3 9m0 0 6-6M3 9h12a6 6 0 0 1 0 12h-3'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-chevron-down: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='m19.5 8.25-7.5 7.5-7.5-7.5'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-select-all: url("data:image/svg+xml,%3C!-- @license lucide-static v1.37.0 - ISC --%3E%3Csvg class='lucide lucide-text-select' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M14 21h1' /%3E%3Cpath d='M14 3h1' /%3E%3Cpath d='M19 3a2 2 0 0 1 2 2' /%3E%3Cpath d='M21 14v1' /%3E%3Cpath d='M21 19a2 2 0 0 1-2 2' /%3E%3Cpath d='M21 9v1' /%3E%3Cpath d='M3 14v1' /%3E%3Cpath d='M3 9v1' /%3E%3Cpath d='M5 21a2 2 0 0 1-2-2' /%3E%3Cpath d='M5 3a2 2 0 0 0-2 2' /%3E%3Cpath d='M7 12h10' /%3E%3Cpath d='M7 16h6' /%3E%3Cpath d='M7 8h8' /%3E%3Cpath d='M9 21h1' /%3E%3Cpath d='M9 3h1' /%3E%3C/svg%3E");
  --lt-icon-redo: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='m15 15 6-6m0 0-6-6m6 6H9a6 6 0 0 0 0 12h3'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-window-minimize: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='2' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M5 12h14'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-window-minimize-chip: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 -1 24 24' stroke-width='2' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M5 12h14'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-window-minimize-dot: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 -1.5 24 24' stroke-width='2' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M5 12h14'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-window-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='2' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M6 18 18 6M6 6l12 12'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-window-close-chip: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='2' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M6 18 18 6M6 6l12 12'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-window-close-dot: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='2' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M6 18 18 6M6 6l12 12'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-check: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='m4.5 12.75 6 6 9-13.5'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-check-circle: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 12.75 11.25 15 15 9.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-tab-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='2.25' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M6 18 18 6M6 6l12 12'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-favorite-off: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M21 8.25c0-2.485-2.099-4.5-4.688-4.5-1.935 0-3.597 1.126-4.312 2.733-.715-1.607-2.377-2.733-4.313-2.733C5.1 3.75 3 5.765 3 8.25c0 7.22 9 12 9 12s9-4.78 9-12Z'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-favorite-on: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23000'%3E%3Cpath d='m11.645 20.91-.007-.003-.022-.012a15.247 15.247 0 0 1-.383-.218 25.18 25.18 0 0 1-4.244-3.17C4.688 15.36 2.25 12.174 2.25 8.25 2.25 5.322 4.714 3 7.688 3A5.5 5.5 0 0 1 12 5.052 5.5 5.5 0 0 1 16.313 3c2.973 0 5.437 2.322 5.437 5.25 0 3.925-2.438 7.111-4.739 9.256a25.175 25.175 0 0 1-4.244 3.17 15.247 15.247 0 0 1-.383.219l-.022.012-.007.004-.003.001a.752.752 0 0 1-.704 0l-.003-.001Z'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-recent: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-calendar: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000' aria-hidden='true' data-slot='icon'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 0 1 2.25-2.25h13.5A2.25 2.25 0 0 1 21 7.5v11.25m-18 0A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75m-18 0v-7.5A2.25 2.25 0 0 1 5.25 9h13.5A2.25 2.25 0 0 1 21 11.25v7.5'/%3E%3C/svg%3E");
  --lt-icon-back: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10.5 19.5 3 12m0 0 7.5-7.5M3 12h18'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-trash: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0'%3E%3C/path%3E%3C/svg%3E");
  --lt-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M16.5 8.25V6a2.25 2.25 0 0 0-2.25-2.25H6A2.25 2.25 0 0 0 3.75 6v8.25A2.25 2.25 0 0 0 6 16.5h2.25m8.25-8.25H18a2.25 2.25 0 0 1 2.25 2.25V18A2.25 2.25 0 0 1 18 20.25h-7.5A2.25 2.25 0 0 1 8.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 0 0-2.25 2.25v6'%3E%3C/path%3E%3C/svg%3E");
}
.lt-icon-back-long {
  -webkit-mask-image: var(--lt-icon-back-long);
  mask-image: var(--lt-icon-back-long);
}
.lt-icon-forward-long {
  -webkit-mask-image: var(--lt-icon-forward-long);
  mask-image: var(--lt-icon-forward-long);
}
.lt-icon-settings {
  -webkit-mask-image: var(--lt-icon-settings);
  mask-image: var(--lt-icon-settings);
}
.lt-icon-update {
  -webkit-mask-image: var(--lt-icon-update);
  mask-image: var(--lt-icon-update);
}
.lt-icon-open-library {
  -webkit-mask-image: var(--lt-icon-open-library);
  mask-image: var(--lt-icon-open-library);
}
.lt-icon-open {
  -webkit-mask-image: var(--lt-icon-open);
  mask-image: var(--lt-icon-open);
}
.lt-icon-new {
  -webkit-mask-image: var(--lt-icon-new);
  mask-image: var(--lt-icon-new);
}
.lt-icon-code-view {
  -webkit-mask-image: var(--lt-icon-code-view);
  mask-image: var(--lt-icon-code-view);
}
.lt-icon-document {
  -webkit-mask-image: var(--lt-icon-document);
  mask-image: var(--lt-icon-document);
}
.lt-icon-graph {
  -webkit-mask-image: var(--lt-icon-graph);
  mask-image: var(--lt-icon-graph);
}
.lt-icon-sync {
  -webkit-mask-image: var(--lt-icon-sync);
  mask-image: var(--lt-icon-sync);
}
.lt-icon-refresh {
  -webkit-mask-image: var(--lt-icon-refresh);
  mask-image: var(--lt-icon-refresh);
}
.lt-icon-lock-closed {
  -webkit-mask-image: var(--lt-icon-lock-closed);
  mask-image: var(--lt-icon-lock-closed);
}
.lt-icon-lock-open {
  -webkit-mask-image: var(--lt-icon-lock-open);
  mask-image: var(--lt-icon-lock-open);
}
.lt-icon-speed-reader-on {
  -webkit-mask-image: var(--lt-icon-speed-reader-on);
  mask-image: var(--lt-icon-speed-reader-on);
}
.lt-icon-speed-reader-off {
  -webkit-mask-image: var(--lt-icon-speed-reader-off);
  mask-image: var(--lt-icon-speed-reader-off);
}
.lt-icon-wand {
  -webkit-mask-image: var(--lt-icon-wand);
  mask-image: var(--lt-icon-wand);
}
.lt-icon-cloud {
  -webkit-mask-image: var(--lt-icon-cloud);
  mask-image: var(--lt-icon-cloud);
}
.lt-icon-export {
  -webkit-mask-image: var(--lt-icon-export);
  mask-image: var(--lt-icon-export);
}
.lt-icon-computer {
  -webkit-mask-image: var(--lt-icon-computer);
  mask-image: var(--lt-icon-computer);
}
.lt-icon-package-open {
  -webkit-mask-image: var(--lt-icon-package-open);
  mask-image: var(--lt-icon-package-open);
}
.lt-icon-package {
  -webkit-mask-image: var(--lt-icon-package);
  mask-image: var(--lt-icon-package);
}
.lt-icon-folder {
  -webkit-mask-image: var(--lt-icon-folder);
  mask-image: var(--lt-icon-folder);
}
.lt-icon-grip {
  -webkit-mask-image: var(--lt-icon-grip);
  mask-image: var(--lt-icon-grip);
}
.lt-icon-close {
  -webkit-mask-image: var(--lt-icon-close);
  mask-image: var(--lt-icon-close);
}
.lt-icon-text {
  -webkit-mask-image: var(--lt-icon-text);
  mask-image: var(--lt-icon-text);
}
.lt-icon-heading {
  -webkit-mask-image: var(--lt-icon-heading);
  mask-image: var(--lt-icon-heading);
}
.lt-icon-list {
  -webkit-mask-image: var(--lt-icon-list);
  mask-image: var(--lt-icon-list);
}
.lt-icon-quote {
  -webkit-mask-image: var(--lt-icon-quote);
  mask-image: var(--lt-icon-quote);
}
.lt-icon-table {
  -webkit-mask-image: var(--lt-icon-table);
  mask-image: var(--lt-icon-table);
}
.lt-icon-image {
  -webkit-mask-image: var(--lt-icon-image);
  mask-image: var(--lt-icon-image);
}
.lt-icon-divider {
  -webkit-mask-image: var(--lt-icon-divider);
  mask-image: var(--lt-icon-divider);
}
.lt-icon-cards {
  -webkit-mask-image: var(--lt-icon-cards);
  mask-image: var(--lt-icon-cards);
}
.lt-icon-note-frame {
  -webkit-mask-image: var(--lt-icon-note-frame);
  mask-image: var(--lt-icon-note-frame);
}
.lt-icon-tag {
  -webkit-mask-image: var(--lt-icon-tag);
  mask-image: var(--lt-icon-tag);
}
.lt-icon-chart-bar {
  -webkit-mask-image: var(--lt-icon-chart-bar);
  mask-image: var(--lt-icon-chart-bar);
}
.lt-icon-comment {
  -webkit-mask-image: var(--lt-icon-comment);
  mask-image: var(--lt-icon-comment);
}
.lt-icon-workflow {
  -webkit-mask-image: var(--lt-icon-workflow);
  mask-image: var(--lt-icon-workflow);
}
.lt-icon-zoom-in {
  -webkit-mask-image: var(--lt-icon-zoom-in);
  mask-image: var(--lt-icon-zoom-in);
}
.lt-icon-zoom-out {
  -webkit-mask-image: var(--lt-icon-zoom-out);
  mask-image: var(--lt-icon-zoom-out);
}
.lt-icon-fit {
  -webkit-mask-image: var(--lt-icon-fit);
  mask-image: var(--lt-icon-fit);
}
.lt-icon-expand {
  -webkit-mask-image: var(--lt-icon-expand);
  mask-image: var(--lt-icon-expand);
}
.lt-icon-bold {
  -webkit-mask-image: var(--lt-icon-bold);
  mask-image: var(--lt-icon-bold);
}
.lt-icon-italic {
  -webkit-mask-image: var(--lt-icon-italic);
  mask-image: var(--lt-icon-italic);
}
.lt-icon-strikethrough {
  -webkit-mask-image: var(--lt-icon-strikethrough);
  mask-image: var(--lt-icon-strikethrough);
}
.lt-icon-link {
  -webkit-mask-image: var(--lt-icon-link);
  mask-image: var(--lt-icon-link);
}
.lt-icon-undo {
  -webkit-mask-image: var(--lt-icon-undo);
  mask-image: var(--lt-icon-undo);
}
.lt-icon-missing-image {
  -webkit-mask-image: var(--lt-icon-missing-image);
  mask-image: var(--lt-icon-missing-image);
}
.lt-icon-chevron-down {
  -webkit-mask-image: var(--lt-icon-chevron-down);
  mask-image: var(--lt-icon-chevron-down);
}
.lt-icon-replace {
  -webkit-mask-image: var(--lt-icon-replace);
  mask-image: var(--lt-icon-replace);
}
.lt-icon-select-all {
  -webkit-mask-image: var(--lt-icon-select-all);
  mask-image: var(--lt-icon-select-all);
}
.lt-icon-theme {
  -webkit-mask-image: var(--lt-icon-theme);
  mask-image: var(--lt-icon-theme);
}
.lt-icon-redo {
  -webkit-mask-image: var(--lt-icon-redo);
  mask-image: var(--lt-icon-redo);
}
.lt-icon-window-minimize {
  -webkit-mask-image: var(--lt-icon-window-minimize);
  mask-image: var(--lt-icon-window-minimize);
}
.lt-icon-window-maximize {
  -webkit-mask-image: var(--lt-icon-window-maximize);
  mask-image: var(--lt-icon-window-maximize);
}
.lt-icon-window-restore {
  -webkit-mask-image: var(--lt-icon-window-restore);
  mask-image: var(--lt-icon-window-restore);
}
.lt-icon-window-close {
  -webkit-mask-image: var(--lt-icon-window-close);
  mask-image: var(--lt-icon-window-close);
}
.lt-icon-check {
  -webkit-mask-image: var(--lt-icon-check);
  mask-image: var(--lt-icon-check);
}
.lt-icon-check-circle {
  -webkit-mask-image: var(--lt-icon-check-circle);
  mask-image: var(--lt-icon-check-circle);
}
.lt-icon-tab-close {
  -webkit-mask-image: var(--lt-icon-tab-close);
  mask-image: var(--lt-icon-tab-close);
}
.lt-icon-favorite-off {
  -webkit-mask-image: var(--lt-icon-favorite-off);
  mask-image: var(--lt-icon-favorite-off);
}
.lt-icon-favorite-on {
  -webkit-mask-image: var(--lt-icon-favorite-on);
  mask-image: var(--lt-icon-favorite-on);
}
.lt-icon-recent {
  -webkit-mask-image: var(--lt-icon-recent);
  mask-image: var(--lt-icon-recent);
}
.lt-icon-search {
  -webkit-mask-image: var(--lt-icon-search);
  mask-image: var(--lt-icon-search);
}
.lt-icon-calendar {
  -webkit-mask-image: var(--lt-icon-calendar);
  mask-image: var(--lt-icon-calendar);
}
.lt-icon-back {
  -webkit-mask-image: var(--lt-icon-back);
  mask-image: var(--lt-icon-back);
}
.lt-icon-align-left {
  -webkit-mask-image: var(--lt-icon-align-left);
  mask-image: var(--lt-icon-align-left);
}
.lt-icon-align-center {
  -webkit-mask-image: var(--lt-icon-align-center);
  mask-image: var(--lt-icon-align-center);
}
.lt-icon-align-right {
  -webkit-mask-image: var(--lt-icon-align-right);
  mask-image: var(--lt-icon-align-right);
}
.lt-icon-sort-ascending {
  -webkit-mask-image: var(--lt-icon-sort-ascending);
  mask-image: var(--lt-icon-sort-ascending);
}
.lt-icon-sort-descending {
  -webkit-mask-image: var(--lt-icon-sort-descending);
  mask-image: var(--lt-icon-sort-descending);
}
.lt-icon-trash {
  -webkit-mask-image: var(--lt-icon-trash);
  mask-image: var(--lt-icon-trash);
}
.lt-icon-copy {
  -webkit-mask-image: var(--lt-icon-copy);
  mask-image: var(--lt-icon-copy);
}
.lt-icon-highlighter {
  -webkit-mask-image: var(--lt-icon-highlighter);
  mask-image: var(--lt-icon-highlighter);
}
.lt-icon-footnote {
  -webkit-mask-image: var(--lt-icon-footnote);
  mask-image: var(--lt-icon-footnote);
}
.lt-icon-leaf {
  -webkit-mask-image: var(--lt-icon-leaf);
  mask-image: var(--lt-icon-leaf);
}
.lt-icon-windows {
  -webkit-mask-image: var(--lt-icon-windows);
  mask-image: var(--lt-icon-windows);
}
.lt-icon-apple {
  -webkit-mask-image: var(--lt-icon-apple);
  mask-image: var(--lt-icon-apple);
}

:root {
  color-scheme: light dark;
  /* App bar height, shared by the bar itself and everything that offsets content below the fixed bar (document padding, library pane, minimap). */
  --app-bar-height: 40px;
  --reader-content-pad: 32px;
  /* The strip anything widened past the measure keeps clear either side — a table, a picture, the start screen's lists: the block handle and plus, so it is BLOCK_TOOLS_WIDTH in block-controls.js and not a spacing choice. check-shell.mjs holds the two copies to one number. */
  --reader-lane-inset: 62px;
  /* How deep an edge fade reaches — one number for the dot screen and the wash under it, which have to end together. Given half the depth the wash stopped where the screen carried on, and the break in slope read as a bright edge at the halfway mark; the eye catches a change of gradient far more readily than a gradient. At :root because a widened table's own ends use it too, and every edge in the app is one profile. */
  --reader-edge-fade-depth: 36px;
  /* One row in a start-screen list, exactly: two lines that never wrap, plus its own padding. Every cap on those lists is a whole number of these, so one never ends part-way down a row. At :root because the sheet draws the same rows outside the grid that holds them on the screen. */
  --home-row-height: calc(
    var(--lt-text-14) * var(--lt-leading-1-4) + var(--lt-text-12) * var(--lt-leading-1-4) + var(--lt-space-8) * 2
  );
  /* How long a fade holds at full before going, so the cut is crossed solid. Shared for the same reason as the depth: one profile, not two. */
  --reader-edge-fade-hold: 2px;
  /* Where a document's first line opens, from the reader shell's own top edge (so the app bar's height is inside it). Has to clear --reader-edge-fade-depth or the line starts half dissolved, and to equal READER_CONTENT_TOP_GAP in the shell script, which is how the reading view reaches it. */
  --reader-content-top-gap: 88px;
  /* Cassette-style grain dot shared by the app bar and library surfaces: a faint dark speckle on the light surface, overridden heavier for dark themes. */
  --app-bar-grain: var(--lt-grain-light);
  /* A heavier grain for inactive tabs, so one reads as a darker dotted cell set apart from its neighbors without any outline. Overridden darker still for dark themes. */
  --library-header-grain: var(--lt-grain-heavy);
  /* The reading view's tinted surfaces — the outline, a diagram's cell, a code block, a table head — take the chrome's grain rather than one of their own. Screen them lighter and they read as a second texture, brighter than the pane beside them, which is what the dots are there to prevent. */
  --reader-surface-grain: var(--app-bar-grain);
  /* The ink the dot lattice is drawn in, and the only part of it that is a variable: each rule writes the circles into its own `background-image`. Never hold the whole gradient in a custom property — its `var()` is substituted where the property is declared and descendants inherit the finished string, so one declared here silently paints every surface below in this ink whatever `--lt-grain-dot` they set. */
  --lt-grain-dot: var(--app-bar-grain);
  /* The dot lattice's geometry: how far the dot is solid, where its antialiasing ramp ends, and the tile it repeats in. A length is safe in a custom property where the whole gradient is not — it carries no ink, so a surface below still gets the `--lt-grain-dot` it sets. Said once because the resolution branch below is the only thing that changes them. */
  --lt-grain-radius: 0.6px;
  --lt-grain-edge: 0.7px;
  /* The shadow band's own tile, and how far its blob reaches inside one -- half the tile, so full-sized dots just touch. It is the chrome's own pitch: the band sits beside the pane, the tab strip and a tinted row, and a coarser lattice there reads as a second texture rather than as the same paper in shadow. The blob is soft the whole way rather than solid to a radius, because the curve cuts the dot at whatever coverage the edge ramps have left and a hard-edged blob has only one width to give. */
  --lt-grain-shadow-tile: var(--lt-grain-tile);
  --lt-grain-blob: 1px;
  --lt-grain-tile: 2px;
  /* The window band's dot, row by row, and the one every row past the spread draws. The band is the app's one halftone that runs no filter, because it does not need one: the alpha curve it used to run is linear in a pixel's distance from its tile's center, so a circle stopped hard at two radii is the same dot that curve cut. These seven are that arithmetic at each row's own depth — the four edge ramps lift coverage off the blob, and what is left of it clears the curve's floor at the first radius and its ceiling at the second — so they are what --lt-grain-shadow-rim and --lt-grain-shadow-mid mean, written out. Move either of those and move all seven. The 100% branch below re-reads them because a coarser tile puts the rows at different depths, and its last two are the full-size dot: past the spread there is no ramp left to narrow one. */
  --lt-grain-shadow-dot-0: 0.0138px;
  --lt-grain-shadow-dot-1: 0.1631px;
  --lt-grain-shadow-dot-2: 0.2731px;
  --lt-grain-shadow-dot-3: 0.3776px;
  --lt-grain-shadow-dot-4: 0.4702px;
  --lt-grain-shadow-dot-5: 0.5388px;
  --lt-grain-shadow-dot-full: 0.5669px;
  /* Where each of those dots stops being solid ink and starts fading out. Written as the dot's own radius rather than beside it: both radii are the same straight line through the same coverage, so the far one is an affine function of the near one and the pair can never drift apart. */
  --lt-grain-shadow-edge-0: calc(var(--lt-grain-blob) * 0.513084 + var(--lt-grain-shadow-dot-0) * 0.486916);
  --lt-grain-shadow-edge-1: calc(var(--lt-grain-blob) * 0.513084 + var(--lt-grain-shadow-dot-1) * 0.486916);
  --lt-grain-shadow-edge-2: calc(var(--lt-grain-blob) * 0.513084 + var(--lt-grain-shadow-dot-2) * 0.486916);
  --lt-grain-shadow-edge-3: calc(var(--lt-grain-blob) * 0.513084 + var(--lt-grain-shadow-dot-3) * 0.486916);
  --lt-grain-shadow-edge-4: calc(var(--lt-grain-blob) * 0.513084 + var(--lt-grain-shadow-dot-4) * 0.486916);
  --lt-grain-shadow-edge-5: calc(var(--lt-grain-blob) * 0.513084 + var(--lt-grain-shadow-dot-5) * 0.486916);
  --lt-grain-shadow-edge-full: calc(var(--lt-grain-blob) * 0.513084 + var(--lt-grain-shadow-dot-full) * 0.486916);
  /* The untinted table rows — the ones carrying no fill, so the grain above has nothing to speckle. Dark themes only: on a light theme these are the near-white rows, where a dot dark enough to see reads as a gray screen-door mesh laid over the whole table. Light themes leave them plain. */
  --reader-row-grain: transparent;
  /* How far the reading surface is held off the window frame. The chrome shows through the gap, so the page reads as a card floating on the bar's texture rather than something bleeding off the edge of the glass. */
  --reader-gutter: 8px;
  /* The gutter the reader's scrollbar occupies, for overlays that must keep off it. Repeats ::-webkit-scrollbar's width rather than feeding it: that rule stays class-driven because Chromium won't re-resolve a scrollbar pseudo when a relational match flips. */
  --reader-scrollbar: 14px;
  /* The minimap rail's metrics. Global because the rail sits outside the page now: the shell sizes its column from them, and the rail itself reads them from the other side of that boundary. */
  --minimap-padding-inline: 8px;
  --minimap-preview-width: 68px;
  --minimap-width: calc(var(--minimap-preview-width) + (var(--minimap-padding-inline) * 2));
  /* What separates the page's right border from the rail. The rail's far side keeps --reader-gutter, so it is held off the frame exactly as the page is. */
  --reader-minimap-gap: 4px;
  /* The code view's version of that gap: how far the page frame's right border — which is also the rail's divider — stands off Monaco's minimap. Said once because three things have to land on it: the frame, the app bar's divider, and the top-right corner arc, all measured from the window's right edge. */
  --cv-minimap-standoff: 4px;
  /* How far the code view's line numbers stand off the page frame's left border. Said here because the pinned heading rows draw their own gutter and have to land on the same column. */
  --cv-line-number-pad: 8px;
  /* How much width the rail takes out of the page's column. Zero until a document actually has a minimap, or turning it off would leave a dead band. Set from `body` (below) rather than the shell: the app bar's divider and corner have to stop at the same place, and they sit outside the shell. */
  --reader-minimap-column: 0px;
  --heading-font: "Noto Serif", Georgia, Cambria, "Times New Roman", serif;
  --app-font: "Noto Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --reading-font: "Noto Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --code-font: "Noto Sans Mono", ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;
}
/* The published sites name families in data-theme, so the shared light-page strength follows the appearance they all name alike. */
:root[data-leaf-appearance="light"] {
  --lt-grain-shadow-opacity-inside: var(--lt-grain-shadow-opacity-inside-light);
}
/* The shadow's blob is in here too, because its tile is the chrome's and follows it up. A display at 100% is the only one the shipped lattice comes back flat at. The tile is 2 device pixels there and all four of them sit 0.7071px from the dot's center, just outside its 0.7px edge, so not one is ever painted and a code block, a table head and the outline read as flat washes. A bigger dot in the same tile cannot help — all four pixels are equidistant, so the dot either misses every one or covers every one. These are the shipped numbers multiplied by 1.5, which makes a 100% display draw the device-pixel pattern a 150% display draws today. 1.05dppx already dithers, so the condition is exactly 1dppx and there is no band of weak scales below it. */
@media (resolution <= 1dppx) {
  :root {
    --lt-grain-radius: 0.9px;
    --lt-grain-edge: 1.05px;
    --lt-grain-blob: 1.5px;
    --lt-grain-tile: 3px;
    --lt-grain-shadow-dot-0: 0.0838px;
    --lt-grain-shadow-dot-1: 0.3726px;
    --lt-grain-shadow-dot-2: 0.6055px;
    --lt-grain-shadow-dot-3: 0.7851px;
    --lt-grain-shadow-dot-4: 0.8503px;
    --lt-grain-shadow-dot-5: 0.8503px;
    --lt-grain-shadow-dot-full: 0.8503px;
  }
}
* {
  box-sizing: border-box;
}
html,
body {
  margin: 0;
  min-height: 100%;
  color: var(--lt-foreground);
  font-family: var(--reading-font);
}
/* The app's own page and nothing else. Every declaration here is the window's, and the whole file is what a browser is handed — so a bare `body` rule reaches leaftext.com and empty.guru too, and a browser takes the viewport's overflow from `body` where the root element's is `visible`. v1.5.0 shipped both sites with no scrollport at all, unscrollable on every device. */
body.leaf-app {
  overflow: hidden;
  /* Nothing paints the whole window: past the app's own edge the window is where the shadow falls, and a page color there would be the app painting its own halo out to the frame. The app surface below carries the color. */
  background: transparent;
  /* How far the app is held off the window, which is how much room the shadow band has to fall in — the same spread every floating surface inside the app throws, so the app has one shadow size rather than two, and the same on all four sides, which is what a light hung overhead and centered gives. Zero here: a window with no frame of its own has nothing outside it to cast onto, and a browser has no window at all. The two classes below turn it on. */
  --app-shadow-spread: 0px;
  /* The window's corner, decided here and nowhere else: the three rules below set this rather than writing a corner of their own, so there is one place to read the number from in every state the window has. 8px is Windows' own figure for a top-level app window and what a browser starts from. It sits on the body rather than on the surface because the shadow band's four strips are siblings of the surface and their height is this plus the spread — a rule on the surface is one they cannot read at all. */
  --app-window-radius: var(--lt-radius-lg);
}
/* Where the app owns its own frame, so the shadow is the app's to draw. One class covers both platforms: a Mac carries this as well as `mac-frame`, because both kinds draw the app bar as the title bar. */
body.frameless {
  --app-shadow-spread: var(--lt-shadow-spread);
}
/* Nothing behind a window filling the screen for a shadow to fall on, and a band there would show the desktop through a frame inside the screen edge. Filling the screen means maximized on Windows or full screen on either platform — never a Mac's maximized, which is a zoomed window that still floats over what is behind it and still casts a shadow. Hence `:not(.mac-frame)`: both platforms report maximized, and only one of them means this by it. */
body.frameless:not(.mac-frame).is-maximized,
body.frameless.is-fullscreen {
  --app-shadow-spread: 0px;
}
/* One box that means "the app", holding everything the page has. `contain: paint` is the whole point of it: it makes this element what a `position: fixed` child is measured from and what one is clipped to, so the fourteen rules below that place an overlay against the window place it against the app instead. The two are the same rectangle until the inset above turns on, and part company after it. Fixed rather than a block, so its height is definite for the two grids that fill it. */
.app-surface {
  position: fixed;
  inset: var(--app-shadow-spread);
  contain: paint;
  /* The page color and the app's own edge, both the app's to draw: with the client area running out to the window's own edge there is no frame left for the platform to draw a line in. */
  background: var(--lt-background);
  border: var(--lt-stroke-1) solid var(--lt-border);
  /* The reading card's two bottom corners, decided here rather than in the six rules that draw them. It travels down to them as a variable because the card's corner and the window's have to move together — a card left at 6px inside a deeper window pinches the band between the two arcs. It stays on this box where the window's own has gone up to the page: only what the shadow band's strips read has to be reachable from outside the surface, and every consumer of this one is inside it. */
  --reader-card-radius: var(--lt-radius-md);
  border-radius: var(--app-window-radius);
  /* Both directions of the inactive fade, written on the element rather than inside the state's own rule so leaving and returning each animate, and so the Reduce Motion blanket at the foot of this file zeroes both by existing. */
  transition: filter var(--lt-duration-200) var(--lt-ease);
}
/* Held at both functions' identity so WebKit never builds or unmakes the filtered layer across a fade. The pair has to be the inactive rule's two functions in the same order, or the two filters do not interpolate and the fade steps. Windows stays unfiltered: there is no stall there to remove, and a permanent filter takes subpixel antialiasing off 80,174 of the window's pixels per channel at rest. */
body.mac-frame .app-surface {
  filter: saturate(var(--lt-active-saturation)) contrast(var(--lt-active-contrast));
}
/* macOS rounds a window far harder than Windows does, and the app draws the only corner there is on that side: the window is transparent and the app is held 20px inside it, so the system's own mask falls on a strip nothing paints. The card follows the window in, at the window's number less the 8px gutter between them, which strikes both arcs from one center. Both values are plain rows in design/tokens.md — move one and move the other. On the body rather than on the surface, beside the two it overrides. Above the flush rule below so a browser, which ties this on specificity, still wins. */
body.mac-frame {
  --app-window-radius: var(--lt-radius-window);
}
body.mac-frame .app-surface {
  --reader-card-radius: var(--lt-radius-window-inner);
}
/* Maximized, and in a browser: the app is the whole window, so it draws neither an edge nor a corner — both would be a frame inside the screen edge. The corner goes by setting the variable the surface reads, not by writing a `border-radius` here, so the window's number stays decided in one place. The corner is zeroed on the body beside the other two that set it and the edge is taken off the surface that draws it. */
body:not(.frameless),
body.frameless.is-fullscreen,
body.frameless:not(.mac-frame).is-maximized {
  --app-window-radius: 0px;
}
body:not(.frameless) .app-surface,
body.frameless:not(.mac-frame).is-maximized .app-surface,
body.frameless.is-fullscreen .app-surface {
  border: 0;
}
/* Narrow straight strips and four corner pieces keep WebKit from filtering a full-window layer. Windows draws each corner's nested rings live; a Mac reads the same rings from one precomposed mask at each lattice size. */
.window-band {
  position: fixed;
  z-index: var(--lt-z-below);
  pointer-events: none;
  opacity: var(--lt-grain-shadow-opacity);
  background-size: var(--lt-grain-shadow-tile) var(--lt-grain-shadow-tile), var(--lt-grain-shadow-tile) var(--lt-grain-shadow-tile), var(--lt-grain-shadow-tile) var(--lt-grain-shadow-tile), var(--lt-grain-shadow-tile) var(--lt-grain-shadow-tile), var(--lt-grain-shadow-tile) var(--lt-grain-shadow-tile), var(--lt-grain-shadow-tile) var(--lt-grain-shadow-tile), var(--lt-grain-shadow-tile) var(--lt-grain-shadow-tile);
}
.window-band-corner {
  --window-band-reach: calc(var(--app-shadow-spread) + var(--app-window-radius));
  --window-band-corner-at: 100% 100%;
  width: var(--window-band-reach);
  height: var(--window-band-reach);
  background-color: var(--window-band-corner-background, transparent);
  -webkit-mask-image: var(--window-band-corner-mask, radial-gradient(circle at var(--window-band-corner-at), var(--lt-mask-opaque) var(--app-window-radius), transparent var(--window-band-reach)));
  -webkit-mask-size: 100% 100%;
  -webkit-mask-position: 0 0;
  -webkit-mask-repeat: no-repeat;
  mask-image: var(--window-band-corner-mask, radial-gradient(circle at var(--window-band-corner-at), var(--lt-mask-opaque) var(--app-window-radius), transparent var(--window-band-reach)));
  mask-size: 100% 100%;
  mask-position: 0 0;
  mask-repeat: no-repeat;
}
.window-band-top-left {
  --window-band-corner-at: 100% 100%;
  left: 0;
  top: 0;
}
.window-band-top-right {
  --window-band-corner-at: 0% 100%;
  right: 0;
  top: 0;
  transform: var(--window-band-top-right-transform, none);
}
.window-band-bottom-left {
  --window-band-corner-at: 100% 0%;
  left: 0;
  bottom: 0;
  transform: var(--window-band-bottom-left-transform, none);
}
.window-band-bottom-right {
  --window-band-corner-at: 0% 0%;
  right: 0;
  bottom: 0;
  transform: var(--window-band-bottom-right-transform, none);
}
.window-band-ring {
  position: absolute;
  display: var(--window-band-ring-display, block);
  background-size: var(--lt-grain-shadow-tile) var(--lt-grain-shadow-tile);
  background-repeat: repeat;
}
.window-band-ring-top-left {
  right: 0;
  bottom: 0;
  border-radius: 100% 0 0 0;
  background-position: left 0 top 0;
}
.window-band-ring-top-right {
  left: 0;
  bottom: 0;
  border-radius: 0 100% 0 0;
  background-position: left 0 top 0;
}
.window-band-ring-bottom-left {
  right: 0;
  top: 0;
  border-radius: 0 0 0 100%;
  background-position: left 0 bottom 0;
}
.window-band-ring-bottom-right {
  left: 0;
  top: 0;
  border-radius: 0 0 100% 0;
  background-position: left 0 bottom 0;
}
.window-band-ring-0 {
  width: var(--window-band-reach);
  height: var(--window-band-reach);
  background-image: radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-0), transparent var(--lt-grain-shadow-edge-0));
  background-attachment: fixed;
}
.window-band-ring-1 {
  width: calc(var(--window-band-reach) - var(--lt-grain-shadow-tile) * 1);
  height: calc(var(--window-band-reach) - var(--lt-grain-shadow-tile) * 1);
  background-image: radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-1), transparent var(--lt-grain-shadow-edge-1));
  background-attachment: fixed;
}
.window-band-ring-2 {
  width: calc(var(--window-band-reach) - var(--lt-grain-shadow-tile) * 2);
  height: calc(var(--window-band-reach) - var(--lt-grain-shadow-tile) * 2);
  background-image: radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-2), transparent var(--lt-grain-shadow-edge-2));
  background-attachment: fixed;
}
.window-band-ring-3 {
  width: calc(var(--window-band-reach) - var(--lt-grain-shadow-tile) * 3);
  height: calc(var(--window-band-reach) - var(--lt-grain-shadow-tile) * 3);
  background-image: radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-3), transparent var(--lt-grain-shadow-edge-3));
  background-attachment: fixed;
}
.window-band-ring-4 {
  width: calc(var(--window-band-reach) - var(--lt-grain-shadow-tile) * 4);
  height: calc(var(--window-band-reach) - var(--lt-grain-shadow-tile) * 4);
  background-image: radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-4), transparent var(--lt-grain-shadow-edge-4));
  background-attachment: fixed;
}
.window-band-ring-5 {
  width: calc(var(--window-band-reach) - var(--lt-grain-shadow-tile) * 5);
  height: calc(var(--window-band-reach) - var(--lt-grain-shadow-tile) * 5);
  background-image: radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-5), transparent var(--lt-grain-shadow-edge-5));
  background-attachment: fixed;
}
.window-band-ring-6 {
  width: calc(var(--window-band-reach) - var(--lt-grain-shadow-tile) * 6);
  height: calc(var(--window-band-reach) - var(--lt-grain-shadow-tile) * 6);
  background-image: radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-full), transparent var(--lt-grain-shadow-edge-full));
  background-attachment: fixed;
}
body.mac-frame {
  --window-band-corner-mask: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20viewBox%3D%220%200%2032%2032%22%3E%3Cdefs%3E%3CradialGradient%20id%3D%22g0%22%20gradientUnits%3D%22userSpaceOnUse%22%20cx%3D%221%22%20cy%3D%221%22%20r%3D%220.519803%22%3E%3Cstop%20offset%3D%220.026548%22%20stop-color%3D%22white%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22transparent%22%2F%3E%3C%2FradialGradient%3E%3Cpattern%20id%3D%22p0%22%20width%3D%222%22%20height%3D%222%22%20patternUnits%3D%22userSpaceOnUse%22%3E%3Crect%20width%3D%222%22%20height%3D%222%22%20fill%3D%22url(%23g0)%22%2F%3E%3C%2Fpattern%3E%3CradialGradient%20id%3D%22g1%22%20gradientUnits%3D%22userSpaceOnUse%22%20cx%3D%221%22%20cy%3D%221%22%20r%3D%220.5925%22%3E%3Cstop%20offset%3D%220.275274%22%20stop-color%3D%22white%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22transparent%22%2F%3E%3C%2FradialGradient%3E%3Cpattern%20id%3D%22p1%22%20width%3D%222%22%20height%3D%222%22%20patternUnits%3D%22userSpaceOnUse%22%3E%3Crect%20width%3D%222%22%20height%3D%222%22%20fill%3D%22url(%23g1)%22%2F%3E%3C%2Fpattern%3E%3CradialGradient%20id%3D%22g2%22%20gradientUnits%3D%22userSpaceOnUse%22%20cx%3D%221%22%20cy%3D%221%22%20r%3D%220.646061%22%3E%3Cstop%20offset%3D%220.422716%22%20stop-color%3D%22white%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22transparent%22%2F%3E%3C%2FradialGradient%3E%3Cpattern%20id%3D%22p2%22%20width%3D%222%22%20height%3D%222%22%20patternUnits%3D%22userSpaceOnUse%22%3E%3Crect%20width%3D%222%22%20height%3D%222%22%20fill%3D%22url(%23g2)%22%2F%3E%3C%2Fpattern%3E%3CradialGradient%20id%3D%22g3%22%20gradientUnits%3D%22userSpaceOnUse%22%20cx%3D%221%22%20cy%3D%221%22%20r%3D%220.696943%22%3E%3Cstop%20offset%3D%220.541794%22%20stop-color%3D%22white%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22transparent%22%2F%3E%3C%2FradialGradient%3E%3Cpattern%20id%3D%22p3%22%20width%3D%222%22%20height%3D%222%22%20patternUnits%3D%22userSpaceOnUse%22%3E%3Crect%20width%3D%222%22%20height%3D%222%22%20fill%3D%22url(%23g3)%22%2F%3E%3C%2Fpattern%3E%3CradialGradient%20id%3D%22g4%22%20gradientUnits%3D%22userSpaceOnUse%22%20cx%3D%221%22%20cy%3D%221%22%20r%3D%220.742032%22%3E%3Cstop%20offset%3D%220.633665%22%20stop-color%3D%22white%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22transparent%22%2F%3E%3C%2FradialGradient%3E%3Cpattern%20id%3D%22p4%22%20width%3D%222%22%20height%3D%222%22%20patternUnits%3D%22userSpaceOnUse%22%3E%3Crect%20width%3D%222%22%20height%3D%222%22%20fill%3D%22url(%23g4)%22%2F%3E%3C%2Fpattern%3E%3CradialGradient%20id%3D%22g5%22%20gradientUnits%3D%22userSpaceOnUse%22%20cx%3D%221%22%20cy%3D%221%22%20r%3D%220.775434%22%3E%3Cstop%20offset%3D%220.694836%22%20stop-color%3D%22white%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22transparent%22%2F%3E%3C%2FradialGradient%3E%3Cpattern%20id%3D%22p5%22%20width%3D%222%22%20height%3D%222%22%20patternUnits%3D%22userSpaceOnUse%22%3E%3Crect%20width%3D%222%22%20height%3D%222%22%20fill%3D%22url(%23g5)%22%2F%3E%3C%2Fpattern%3E%3CradialGradient%20id%3D%22g6%22%20gradientUnits%3D%22userSpaceOnUse%22%20cx%3D%221%22%20cy%3D%221%22%20r%3D%220.789117%22%3E%3Cstop%20offset%3D%220.718398%22%20stop-color%3D%22white%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22transparent%22%2F%3E%3C%2FradialGradient%3E%3Cpattern%20id%3D%22p6%22%20width%3D%222%22%20height%3D%222%22%20patternUnits%3D%22userSpaceOnUse%22%3E%3Crect%20width%3D%222%22%20height%3D%222%22%20fill%3D%22url(%23g6)%22%2F%3E%3C%2Fpattern%3E%3CradialGradient%20id%3D%22f%22%20gradientUnits%3D%22userSpaceOnUse%22%20cx%3D%2232%22%20cy%3D%2232%22%20r%3D%2232%22%3E%3Cstop%20offset%3D%220.625%22%20stop-color%3D%22white%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22black%22%2F%3E%3C%2FradialGradient%3E%3Cmask%20id%3D%22m%22%3E%3Crect%20width%3D%2232%22%20height%3D%2232%22%20fill%3D%22url(%23f)%22%2F%3E%3C%2Fmask%3E%3C%2Fdefs%3E%3Cg%20mask%3D%22url(%23m)%22%3E%3Ccircle%20cx%3D%2232%22%20cy%3D%2232%22%20r%3D%2231%22%20fill%3D%22none%22%20stroke%3D%22url(%23p0)%22%20stroke-width%3D%222%22%2F%3E%3Ccircle%20cx%3D%2232%22%20cy%3D%2232%22%20r%3D%2229%22%20fill%3D%22none%22%20stroke%3D%22url(%23p1)%22%20stroke-width%3D%222%22%2F%3E%3Ccircle%20cx%3D%2232%22%20cy%3D%2232%22%20r%3D%2227%22%20fill%3D%22none%22%20stroke%3D%22url(%23p2)%22%20stroke-width%3D%222%22%2F%3E%3Ccircle%20cx%3D%2232%22%20cy%3D%2232%22%20r%3D%2225%22%20fill%3D%22none%22%20stroke%3D%22url(%23p3)%22%20stroke-width%3D%222%22%2F%3E%3Ccircle%20cx%3D%2232%22%20cy%3D%2232%22%20r%3D%2223%22%20fill%3D%22none%22%20stroke%3D%22url(%23p4)%22%20stroke-width%3D%222%22%2F%3E%3Ccircle%20cx%3D%2232%22%20cy%3D%2232%22%20r%3D%2221%22%20fill%3D%22none%22%20stroke%3D%22url(%23p5)%22%20stroke-width%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
}
body.mac-frame {
  --window-band-corner-background: var(--lt-grain-shadow-blob);
  --window-band-ring-display: none;
  --window-band-top-right-transform: scaleX(-1);
  --window-band-bottom-left-transform: scaleY(-1);
  --window-band-bottom-right-transform: scale(-1);
}
@media (resolution <= 1dppx) {
  body.mac-frame {
  --window-band-corner-mask: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20viewBox%3D%220%200%2032%2032%22%3E%3Cdefs%3E%3CradialGradient%20id%3D%22g0%22%20gradientUnits%3D%22userSpaceOnUse%22%20cx%3D%221.5%22%20cy%3D%221.5%22%20r%3D%220.81043%22%3E%3Cstop%20offset%3D%220.103402%22%20stop-color%3D%22white%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22transparent%22%2F%3E%3C%2FradialGradient%3E%3Cpattern%20id%3D%22p0%22%20width%3D%223%22%20height%3D%223%22%20patternUnits%3D%22userSpaceOnUse%22%3E%3Crect%20width%3D%223%22%20height%3D%223%22%20fill%3D%22url(%23g0)%22%2F%3E%3C%2Fpattern%3E%3CradialGradient%20id%3D%22g1%22%20gradientUnits%3D%22userSpaceOnUse%22%20cx%3D%221.5%22%20cy%3D%221.5%22%20r%3D%220.951051%22%3E%3Cstop%20offset%3D%220.391777%22%20stop-color%3D%22white%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22transparent%22%2F%3E%3C%2FradialGradient%3E%3Cpattern%20id%3D%22p1%22%20width%3D%223%22%20height%3D%223%22%20patternUnits%3D%22userSpaceOnUse%22%3E%3Crect%20width%3D%223%22%20height%3D%223%22%20fill%3D%22url(%23g1)%22%2F%3E%3C%2Fpattern%3E%3CradialGradient%20id%3D%22g2%22%20gradientUnits%3D%22userSpaceOnUse%22%20cx%3D%221.5%22%20cy%3D%221.5%22%20r%3D%221.064454%22%3E%3Cstop%20offset%3D%220.568836%22%20stop-color%3D%22white%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22transparent%22%2F%3E%3C%2FradialGradient%3E%3Cpattern%20id%3D%22p2%22%20width%3D%223%22%20height%3D%223%22%20patternUnits%3D%22userSpaceOnUse%22%3E%3Crect%20width%3D%223%22%20height%3D%223%22%20fill%3D%22url(%23g2)%22%2F%3E%3C%2Fpattern%3E%3CradialGradient%20id%3D%22g3%22%20gradientUnits%3D%22userSpaceOnUse%22%20cx%3D%221.5%22%20cy%3D%221.5%22%20r%3D%221.151904%22%3E%3Cstop%20offset%3D%220.681567%22%20stop-color%3D%22white%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22transparent%22%2F%3E%3C%2FradialGradient%3E%3Cpattern%20id%3D%22p3%22%20width%3D%223%22%20height%3D%223%22%20patternUnits%3D%22userSpaceOnUse%22%3E%3Crect%20width%3D%223%22%20height%3D%223%22%20fill%3D%22url(%23g3)%22%2F%3E%3C%2Fpattern%3E%3CradialGradient%20id%3D%22g4%22%20gradientUnits%3D%22userSpaceOnUse%22%20cx%3D%221.5%22%20cy%3D%221.5%22%20r%3D%221.183651%22%3E%3Cstop%20offset%3D%220.718371%22%20stop-color%3D%22white%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22transparent%22%2F%3E%3C%2FradialGradient%3E%3Cpattern%20id%3D%22p4%22%20width%3D%223%22%20height%3D%223%22%20patternUnits%3D%22userSpaceOnUse%22%3E%3Crect%20width%3D%223%22%20height%3D%223%22%20fill%3D%22url(%23g4)%22%2F%3E%3C%2Fpattern%3E%3CradialGradient%20id%3D%22g5%22%20gradientUnits%3D%22userSpaceOnUse%22%20cx%3D%221.5%22%20cy%3D%221.5%22%20r%3D%221.183651%22%3E%3Cstop%20offset%3D%220.718371%22%20stop-color%3D%22white%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22transparent%22%2F%3E%3C%2FradialGradient%3E%3Cpattern%20id%3D%22p5%22%20width%3D%223%22%20height%3D%223%22%20patternUnits%3D%22userSpaceOnUse%22%3E%3Crect%20width%3D%223%22%20height%3D%223%22%20fill%3D%22url(%23g5)%22%2F%3E%3C%2Fpattern%3E%3CradialGradient%20id%3D%22g6%22%20gradientUnits%3D%22userSpaceOnUse%22%20cx%3D%221.5%22%20cy%3D%221.5%22%20r%3D%221.183651%22%3E%3Cstop%20offset%3D%220.718371%22%20stop-color%3D%22white%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22transparent%22%2F%3E%3C%2FradialGradient%3E%3Cpattern%20id%3D%22p6%22%20width%3D%223%22%20height%3D%223%22%20patternUnits%3D%22userSpaceOnUse%22%3E%3Crect%20width%3D%223%22%20height%3D%223%22%20fill%3D%22url(%23g6)%22%2F%3E%3C%2Fpattern%3E%3CradialGradient%20id%3D%22f%22%20gradientUnits%3D%22userSpaceOnUse%22%20cx%3D%2232%22%20cy%3D%2232%22%20r%3D%2232%22%3E%3Cstop%20offset%3D%220.625%22%20stop-color%3D%22white%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22black%22%2F%3E%3C%2FradialGradient%3E%3Cmask%20id%3D%22m%22%3E%3Crect%20width%3D%2232%22%20height%3D%2232%22%20fill%3D%22url(%23f)%22%2F%3E%3C%2Fmask%3E%3C%2Fdefs%3E%3Cg%20mask%3D%22url(%23m)%22%3E%3Ccircle%20cx%3D%2232%22%20cy%3D%2232%22%20r%3D%2230.5%22%20fill%3D%22none%22%20stroke%3D%22url(%23p0)%22%20stroke-width%3D%223%22%2F%3E%3Ccircle%20cx%3D%2232%22%20cy%3D%2232%22%20r%3D%2227.5%22%20fill%3D%22none%22%20stroke%3D%22url(%23p1)%22%20stroke-width%3D%223%22%2F%3E%3Ccircle%20cx%3D%2232%22%20cy%3D%2232%22%20r%3D%2224.5%22%20fill%3D%22none%22%20stroke%3D%22url(%23p2)%22%20stroke-width%3D%223%22%2F%3E%3Ccircle%20cx%3D%2232%22%20cy%3D%2232%22%20r%3D%2221.5%22%20fill%3D%22none%22%20stroke%3D%22url(%23p3)%22%20stroke-width%3D%223%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
  }
}
/* Each straight strip carries the one edge ramp it touches and six dot rows. The corners are separate pieces, so no strip crosses an arc or overlaps another piece. */
.window-band-top {
  left: calc(var(--app-shadow-spread) + var(--app-window-radius));
  right: calc(var(--app-shadow-spread) + var(--app-window-radius));
  top: 0;
  height: var(--app-shadow-spread);
  background-attachment: fixed;
  background-image: radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-0), transparent var(--lt-grain-shadow-edge-0)),
    radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-1), transparent var(--lt-grain-shadow-edge-1)),
    radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-2), transparent var(--lt-grain-shadow-edge-2)),
    radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-3), transparent var(--lt-grain-shadow-edge-3)),
    radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-4), transparent var(--lt-grain-shadow-edge-4)),
    radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-5), transparent var(--lt-grain-shadow-edge-5));
  background-position: left 0px top 0px, left 0px top calc(var(--lt-grain-shadow-tile) * 1), left 0px top calc(var(--lt-grain-shadow-tile) * 2), left 0px top calc(var(--lt-grain-shadow-tile) * 3), left 0px top calc(var(--lt-grain-shadow-tile) * 4), left 0px top calc(var(--lt-grain-shadow-tile) * 5);
  background-repeat: repeat-x, repeat-x, repeat-x, repeat-x, repeat-x, repeat-x;
  -webkit-mask-image: linear-gradient(to bottom, transparent 0, var(--lt-mask-opaque) var(--app-shadow-spread));
  mask-image: linear-gradient(to bottom, transparent 0, var(--lt-mask-opaque) var(--app-shadow-spread));
}
.window-band-bottom {
  left: calc(var(--app-shadow-spread) + var(--app-window-radius));
  right: calc(var(--app-shadow-spread) + var(--app-window-radius));
  bottom: 0;
  height: var(--app-shadow-spread);
  background-attachment: fixed;
  background-image: radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-0), transparent var(--lt-grain-shadow-edge-0)),
    radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-1), transparent var(--lt-grain-shadow-edge-1)),
    radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-2), transparent var(--lt-grain-shadow-edge-2)),
    radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-3), transparent var(--lt-grain-shadow-edge-3)),
    radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-4), transparent var(--lt-grain-shadow-edge-4)),
    radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-5), transparent var(--lt-grain-shadow-edge-5));
  background-position: left 0px bottom 0px, left 0px bottom calc(var(--lt-grain-shadow-tile) * 1), left 0px bottom calc(var(--lt-grain-shadow-tile) * 2), left 0px bottom calc(var(--lt-grain-shadow-tile) * 3), left 0px bottom calc(var(--lt-grain-shadow-tile) * 4), left 0px bottom calc(var(--lt-grain-shadow-tile) * 5);
  background-repeat: repeat-x, repeat-x, repeat-x, repeat-x, repeat-x, repeat-x;
  -webkit-mask-image: linear-gradient(to top, transparent 0, var(--lt-mask-opaque) var(--app-shadow-spread));
  mask-image: linear-gradient(to top, transparent 0, var(--lt-mask-opaque) var(--app-shadow-spread));
}
/* The side strips stop at the corner pieces, so no pixel is painted twice. */
.window-band-left {
  left: 0;
  top: calc(var(--app-shadow-spread) + var(--app-window-radius));
  bottom: calc(var(--app-shadow-spread) + var(--app-window-radius));
  width: var(--app-shadow-spread);
  background-attachment: fixed;
  background-image: radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-0), transparent var(--lt-grain-shadow-edge-0)),
    radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-1), transparent var(--lt-grain-shadow-edge-1)),
    radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-2), transparent var(--lt-grain-shadow-edge-2)),
    radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-3), transparent var(--lt-grain-shadow-edge-3)),
    radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-4), transparent var(--lt-grain-shadow-edge-4)),
    radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-5), transparent var(--lt-grain-shadow-edge-5));
  background-position: left 0px top 0px, left calc(var(--lt-grain-shadow-tile) * 1) top 0px, left calc(var(--lt-grain-shadow-tile) * 2) top 0px, left calc(var(--lt-grain-shadow-tile) * 3) top 0px, left calc(var(--lt-grain-shadow-tile) * 4) top 0px, left calc(var(--lt-grain-shadow-tile) * 5) top 0px;
  background-repeat: repeat-y, repeat-y, repeat-y, repeat-y, repeat-y, repeat-y;
  -webkit-mask-image: linear-gradient(to right, transparent 0, var(--lt-mask-opaque) var(--app-shadow-spread));
  mask-image: linear-gradient(to right, transparent 0, var(--lt-mask-opaque) var(--app-shadow-spread));
}
.window-band-right {
  right: 0;
  top: calc(var(--app-shadow-spread) + var(--app-window-radius));
  bottom: calc(var(--app-shadow-spread) + var(--app-window-radius));
  width: var(--app-shadow-spread);
  background-attachment: fixed;
  background-image: radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-0), transparent var(--lt-grain-shadow-edge-0)),
    radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-1), transparent var(--lt-grain-shadow-edge-1)),
    radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-2), transparent var(--lt-grain-shadow-edge-2)),
    radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-3), transparent var(--lt-grain-shadow-edge-3)),
    radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-4), transparent var(--lt-grain-shadow-edge-4)),
    radial-gradient(circle, var(--lt-grain-shadow-blob) 0, var(--lt-grain-shadow-blob) var(--lt-grain-shadow-dot-5), transparent var(--lt-grain-shadow-edge-5));
  background-position: right 0px top 0px, right calc(var(--lt-grain-shadow-tile) * 1) top 0px, right calc(var(--lt-grain-shadow-tile) * 2) top 0px, right calc(var(--lt-grain-shadow-tile) * 3) top 0px, right calc(var(--lt-grain-shadow-tile) * 4) top 0px, right calc(var(--lt-grain-shadow-tile) * 5) top 0px;
  background-repeat: repeat-y, repeat-y, repeat-y, repeat-y, repeat-y, repeat-y;
  -webkit-mask-image: linear-gradient(to left, transparent 0, var(--lt-mask-opaque) var(--app-shadow-spread));
  mask-image: linear-gradient(to left, transparent 0, var(--lt-mask-opaque) var(--app-shadow-spread));
}
/* No frame of its own, maximized, or in full screen: no band at all rather than one masked away to nothing. A browser carries neither frame class, so this is also what takes it off a published page. */
body:not(.frameless) .window-band,
body.frameless:not(.mac-frame).is-maximized .window-band,
body.frameless.is-fullscreen .window-band {
  display: none;
}
/* Another app has the window: everything the app draws steps back together, by one amount, in one paint. Every visible part of the page is inside `.app-surface` — the chrome and its leaf, the document, the source view, a Mermaid diagram, a raster picture, the sheets and the rail's miniature — so a filter here is the only treatment that reaches all of them at once, which is the whole of what stops the leaf and the rail reading as two different effects. It is a filter rather than a list of re-pointed color tokens because only one of the two can fade: a custom property is not an animatable type, and with a transition on it the ink was watched answering its new value at every frame from the first, where the filter was watched interpolating frame by frame over the same window. A filter also reaches a raster picture inside the document, which no token can. Neither `opacity` nor `grayscale` may come back: `opacity` composites the bar's own shade with the page behind it, so the top of the window read as see-through and every tab edge, divider and panel seam that shade had been covering came out as a line; `grayscale` takes a tinted family's shade off the bar and leaves the card beside it tinted, which is a seam of the same kind. This makes no new paint group — the surface is already `position: fixed` with `contain: paint`, so it is already a stacking context and already the fixed containing block for the overlays inside it. The three paper classes cancel the rule, because `.diagram-print` and `.picture-print` are children of this same surface and a printed or exported page rendered through them would otherwise bake an inactive window into a file somebody keeps. The two amounts, and the 3:1 floor they were chosen against, are rows in design/tokens.md. */
body.is-window-inactive:not(.leaf-paper):not(.leaf-paper-diagram):not(.leaf-paper-picture) .app-surface {
  filter: saturate(var(--lt-inactive-saturation)) contrast(var(--lt-inactive-contrast));
}
::selection {
  background: var(--lt-focus-selection-background);
  color: var(--lt-focus-selection-foreground);
}
:root[data-leaf-appearance="dark"] {
  /* Dark appearances use a darker grain so the surface reads as speckled darker, not lighter — needs a heavier alpha than light mode to show against the already-dark surface. */
  --app-bar-grain: var(--lt-grain-dark);
  --library-header-grain: var(--lt-grain-dark-heavy);
  /* Light, not dark — the one grain in the app that goes the other way. This row is the darkest surface there is, so darkening it has nowhere to go: black at any alpha shifts `#0d1117` by ~10 and `#2a2d3d` by ~32, faint and uneven across families. Lifting instead moves every dark theme by a steady ~15. */
  --reader-row-grain: var(--lt-grain-lift);
}
/* Reduce Motion for the whole file, so a new transition is covered by existing: a block per component left fifteen of the eighteen moving ones answering it nowhere. `!important` is not optional — `*` has no specificity, so every class rule below outranks it and the block does nothing on screen. Never the `animation` shorthand: it sets `animation-name: none`, and two rules reach their resting state through an animation rather than despite one. Never `animation-iteration-count`: pinned to 1 it stops every spinner after a single turn, and a still spinner reads as a hang. Whatever must keep moving wins this back by name below, with its reason. */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    transition-duration: var(--lt-duration-0) !important;
    animation-duration: var(--lt-duration-0) !important;
  }
}
/* Pointing at a control lights it up over a beat instead of between two frames, said once for the whole file so a hover rule written later fades by existing rather than by somebody remembering. `:where()` carries no specificity, so anything with a `transition` of its own keeps it outright rather than fighting this — which is why those elements name these colors by hand instead. One duration and one curve in both directions, because a hover has no direction to say. Only the three properties a hover changes: a `box-shadow` here would time one chip at the cost of every button in the app, and `text-decoration` is not a color. A theme swap cross-fades whatever this covers, which is measured and kept — both ends of every fade are the same token in two palettes, so it settles rather than arriving late. The Reduce Motion blanket above zeroes all of it. */
:where(a, button, summary, .library-crumb, .home-row-name, .code-sticky-row, .flow-ring, .github-mention) {
  transition: background-color var(--lt-duration-120) var(--lt-ease), border-color var(--lt-duration-120) var(--lt-ease),
    color var(--lt-duration-120) var(--lt-ease);
}
/* Anything that folds open travels to its new height instead of the page arriving at one, said once for the whole file so a folding block written later slides by existing rather than by somebody remembering. Two halves, because there are two kinds: the `folds` mark for an ordinary box the app shows and hides, and a `details` inside the document for the front matter, the outline and whatever an author folded for themselves. That half is scoped to the document body on purpose — the update menu is a `details` too, and its panel hangs over the page rather than sitting in it, so nothing under it moves and it must not take this; every other popover is out for the same reason. Opening is an arrival and closing a departure, shorter, the way the rest of the file reads a direction. Never the overshoot curve here, however much a fold wants a spring: it runs a tenth of the whole travel past the mark, and a fold's travel is however tall its contents are — measured at 533px past on a long front matter and 133px on a forty-entry outline, which is a lurch rather than a rubberband. The sheet refused the same curve for the same reason over a full-height rise. `interpolate-size` is the whole reason a height nobody set can be animated at all, so everything sits behind it: an engine without it gets no rule rather than half of one, and the block simply appears. `clip` rather than `hidden` — clipping is not a scroll container, so a sticky code header inside a folded block still sticks to the page. The Reduce Motion blanket above zeroes all of it. */
@supports (interpolate-size: allow-keywords) {
  .folds,
  .document-body details {
    interpolate-size: allow-keywords;
  }
  .folds {
    overflow: clip;
    height: auto;
    /* A flex item will not go below its own contents unless it is told it may, and without this the find bar's Replace row stays at full height for the whole travel — exactly the jump this replaces. */
    min-height: 0;
    transition: height var(--lt-duration-260) var(--lt-ease-decelerate),
      display var(--lt-duration-260) var(--lt-ease-decelerate) allow-discrete;
  }
  @starting-style {
    .folds {
      height: 0;
    }
  }
  .folds[hidden] {
    display: none;
    height: 0;
    transition: height var(--lt-duration-220) var(--lt-ease-accelerate),
      display var(--lt-duration-220) var(--lt-ease-accelerate) allow-discrete;
  }
  .document-body details::details-content {
    overflow: clip;
    block-size: 0;
    transition: block-size var(--lt-duration-220) var(--lt-ease-accelerate),
      content-visibility var(--lt-duration-220) var(--lt-ease-accelerate) allow-discrete;
  }
  .document-body details[open]::details-content {
    block-size: auto;
    transition: block-size var(--lt-duration-260) var(--lt-ease-decelerate),
      content-visibility var(--lt-duration-260) var(--lt-ease-decelerate) allow-discrete;
  }
}
/* The launch state, drawn before the app is: the leaf over a turning ring over the app's name, centered in the small window a launch puts up. It is the app surface's own color rather than a wash, because there is nothing underneath it a reader would want to see through — the reader, the bar and the tabs are all still being built. Held over every layer the app has for as long as it stands, and taken off whole rather than faded: the same step that removes it resizes the window, and a fade would run against a layout still finding its new width. */
.startup-card {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--lt-space-16);
  background: var(--lt-background);
  /* Over the bar, the sheets and their scrim alike: while this stands it is the whole of what the window shows, and every press meant for a control the page has not finished building stops here. */
  z-index: var(--lt-z-51);
}
/* The UA sheet's own `[hidden]` rule cannot beat the display above, so the card would stay on screen with the attribute set. */
.startup-card[hidden] {
  display: none;
}
/* Large enough to read as the app's mark rather than as a toolbar icon, which is the whole job it has here. */
.startup-card-mark {
  width: 56px;
  height: 56px;
  color: var(--lt-primary-ink);
}
/* Smaller than the reader's own loading ring: under the mark it is the second thing in the box, not the subject of it. */
.startup-card-spinner {
  width: 20px;
  height: 20px;
  border-color: color-mix(in srgb, var(--lt-foreground) 22%, transparent);
  border-top-color: var(--lt-accent);
}
.startup-card-name {
  font-family: var(--app-font);
  font-size: var(--lt-text-14);
  font-weight: var(--lt-weight-600);
  letter-spacing: var(--lt-tracking-040);
  color: var(--lt-muted-foreground);
}
/* Every piece of app chrome — this bar, the library pane, its two bands, the search field — takes `--lt-surface` itself. No per-surface tint or mix: any variant shows up as a tone seam where two of them meet. */
.app-bar {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 10;
  display: grid;
  /* Zones: a left lead sized to the library rail (so tabs begin at the library's right edge and get pushed when it resizes), the tab strip, and the trailing group (actions + window controls, which fold into an overflow dropdown when the bar is too narrow to show them inline). */
  grid-template-columns: auto minmax(0, 1fr) auto;
  gap: 0;
  align-items: center;
  height: var(--app-bar-height);
  padding: 0;
  /* The chrome shade under a fine dithered dot grid, for a rough old-cassette texture. Flat and opaque, never translucent: a translucent bar takes its tone from whatever sits behind it, so it can never match the pane it meets. */
  background-color: var(--lt-surface);
  background-image: radial-gradient(circle, var(--lt-grain-dot) 0 var(--lt-grain-radius), transparent var(--lt-grain-edge));
  background-size: var(--lt-grain-tile) var(--lt-grain-tile);
  background-repeat: repeat;
  /* Tile the grain from the window, not this element's box, so every grained surface shares one lattice. Box-anchored grids fall out of phase wherever two meet — a 1px border is enough — and the seam reads as a faint hairline. */
  background-attachment: fixed;
  /* Hairline top divider in the window's outer border color, separating the reader from the native title bar above it. The bottom divider is drawn by ::after (not border-bottom) so the active tab can paint over it and appear connected to the page below. */
  border-top: var(--lt-stroke-1) solid var(--lt-border);
  font-family: var(--app-font);
}
.frameless .app-bar {
  /* On frameless Windows the app bar IS the title bar, so the OS already draws the window's top edge. Our own border-top would stack on that native frame and read as a double-thick (~2px) stroke at the top only, while the other three sides show a single 1px frame. Drop it so all four edges match. */
  border-top: 0;
}
.app-bar::after {
  /* The reader divider. Sits behind the tabs (z-index 0); the active tab, which is page-colored and z-index 1, covers this line so it reads as joined to the document, while inactive tabs meet it with their own bottom border. */
  content: "";
  position: absolute;
  /* Only as wide as the card below it, then a radius shorter again at each end: .reader-corner-tl / -tr arc from there down into the card's side borders. A pixel of overlap with each arc's tangent, so a rounding difference between the boxes can't open a gap. On the right that also clears the rail's column (0 wide when there is no rail), which is chrome the line must not cross. */
  /* The left end starts past the library rail — one unbroken surface the line must not cut — and spends the same number the grid track does, so their transitions interpolate the same span and the line stays on the pane's corner arc every frame; a gutter floor here is what detached them. */
  left: calc(var(--library-rail-width, 0px) + var(--lt-radius-md) - 1px);
  right: calc(var(--reader-gutter) + var(--reader-minimap-column) + var(--lt-radius-md) - 1px);
  bottom: 0;
  height: 1px;
  background: var(--lt-border);
  z-index: 0;
}
.app-bar:not(.has-rail)::after {
  /* No rail: the line starts at the reader's gutter. This lands in the same layout pass as the pane's own closed corner rule, so the line and the arc jump to their resting closed places together. */
  left: calc(var(--reader-gutter) + var(--lt-radius-md) - 1px);
}
.app-bar-lead {
  /* The header's left zone, sized to the library rail so the tab strip begins at the library's right edge and is pushed when the pane is resized. No right border: the top bar reads as one continuous surface, with only the library pane below carrying the rail's vertical stroke. */
  display: flex;
  align-items: center;
  /* The bar runs on one gap from the leaf through the trailing actions, so the row reads as one sequence rather than as clusters. The window buttons close up below: they are one control set, not another stop along the row. */
  gap: var(--lt-space-16);
  align-self: stretch;
  box-sizing: border-box;
  width: var(--library-rail-width, 240px);
  /* Never let the rail clip the brand + history controls: floor the zone at their natural width. The front end writes that width here as a plain number as soon as it has measured it, because the keyword below is the one thing in this rule that is not a value — a Mac reads it as no floor at all and squeezes the library button out under the tab strip. */
  min-width: fit-content;
  /* Left inset matches the library header's 12px so the logo lines up with the GRAPH/search controls directly below it. No right inset: the strip's own gap is the whole space before the first tab. */
  padding: 0 0 0 var(--lt-space-12);
}
/* No rail: size the zone from the buttons it holds, so it shrinks behind any that fold away and never squeezes the ones that stay. It lands after the close motion's transitions have come off, so the flip is never animated. */
.app-bar:not(.has-rail) .app-bar-lead {
  width: auto;
}
.brand-button > .lt-icon {
  width: 22px;
  height: 22px;
  display: block;
  flex-shrink: 0;
  /* The logomark is an inline SVG filled with currentColor, so it takes the theme's primary color and recolors whenever the theme changes. */
  color: var(--lt-primary-ink);
  transition: color var(--lt-duration-120) var(--lt-ease);
}
.brand-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  padding: var(--lt-space-4);
  /* The leaf is a 22px mark in a 32px box, so the row's 16px gap lands beside a painted edge 4px short of it and the first space reads wider than every other one. Handing that inset back moves the controls after it and leaves this button's own 32px hit area where it is. */
  margin-right: calc(-1 * var(--lt-space-4));
  border: var(--lt-stroke-1) solid transparent;
  border-radius: var(--lt-radius-lg);
  background: transparent;
}
/* It navigates home, so it has to answer the pointer — as the logomark, not as another toolbar chip. Full contrast against the bar: white on the dark themes, darkest ink on the light ones, where a literal white would vanish. */
.brand-button:hover {
  background: transparent;
  border-color: transparent;
}
.brand-button:hover > .lt-icon {
  color: var(--lt-foreground);
}
.tab-bar {
  display: flex;
  /* Tighter than the bar's 16px on purpose: a strip of open documents is one list, not a run of unrelated controls. The active tab adds a 12px margin of its own on top of this, so 4px here plus 12px there is the 16px of daylight that keeps it from reading as fused to the tab beside it. Move the two together. */
  gap: var(--lt-space-4);
  min-width: 0;
  /* Full header height, but the tabs hang from the bar's bottom edge (where the active one covers the reader divider) under a shoulder of chrome — which is what gives their top corners room to round. */
  align-self: stretch;
  align-items: stretch;
  overflow-x: auto;
  scrollbar-width: none;
  /* The side insets stay at the bar's own 16px while the gap above closes, so the space beside the first and last tab matches every other space in the row — which is why a selected tab at an end drops its own margin rather than adding to this. They also cap --tab-flare: this box scrolls, so a flare wider than the inset is clipped flat and the first tab's corner draws as a straight run. No bottom inset — the tabs have to reach the divider. */
  padding: var(--lt-space-4) var(--lt-space-16) 0;
}
.tab-bar::-webkit-scrollbar {
  height: 0;
}
/* A published site carries the folder trail in this box rather than a strip of tabs. A tab hangs off the bar's bottom edge so its top corners have room to round; a trail is a line of text, so it sits in the middle of the band instead, and it takes the whole box because it shrinks itself to whatever room it is given. */
.tab-bar > .library-crumb-trail {
  align-self: center;
}
.tab {
  display: inline-flex;
  align-items: center;
  gap: var(--lt-space-1);
  flex: 0 0 auto;
  max-width: 132px;
  /* Even, so the gap after the name mirrors the gap before it. Neither corner button is in flow, so neither buys room of its own; what the name trails off into is the label's own padding and this. */
  padding: 0 var(--lt-space-4);
  /* A cell hanging off the reader divider (z-index 1) so the active tab can cover it, top corners rounded to the page's radius. The transparent strokes reserve the space the active tab's frame paints in, keeping every tab the same size. */
  position: relative;
  z-index: 1;
  border-top: var(--lt-stroke-1) solid transparent;
  border-left: var(--lt-stroke-1) solid transparent;
  border-right: var(--lt-stroke-1) solid transparent;
  border-bottom: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-md) var(--lt-radius-md) 0 0;
  /* An inactive tab reads as a darker cell by tiling the header's cassette grain at its heavier weight — denser ink, no outline needed. */
  --lt-grain-dot: var(--library-header-grain);
  background-image: radial-gradient(circle, var(--lt-grain-dot) 0 var(--lt-grain-radius), transparent var(--lt-grain-edge));
  background-size: var(--lt-grain-tile) var(--lt-grain-tile);
  background-repeat: repeat;
  user-select: none;
  /* Emphasized: a tab neither arrives nor leaves, the strip rearranges around it. */
  transition: max-width var(--lt-duration-120) var(--lt-ease-emphasized), transform var(--lt-duration-120) var(--lt-ease-emphasized), margin var(--lt-duration-120) var(--lt-ease-emphasized);
}
.tab-active {
  max-width: none;
  /* Daylight beside the selected tab: 12px on top of the strip's 4px gap, bought only beside another tab and only by the selected one, so it stands clear of its neighbors. It is the strip's own spacing, not room the small flare below asks for. It is in the transition above, or every tab to the right jumps when the selection moves. */
  margin: 0 var(--lt-space-12);
}
/* At an end of the strip there is no neighbor to stand clear of, and the strip's own 16px inset is already the widest space in the row, so the margin here would only push the tab past it. A one-tab strip is both ends and drops both. */
.tab-active:first-child {
  margin-left: 0;
}
.tab-active:last-child {
  margin-right: 0;
}
.tab-dragging .tab-label {
  cursor: grabbing;
}
.tab-dragging {
  position: relative;
  z-index: 2;
  opacity: var(--lt-opacity-85);
  cursor: grabbing;
  transition: none;
}
.tab-bar.tabs-settling .tab {
  transition: none;
}
.tab-active {
  /* Drop the bottom stroke so the page-colored fill flows over the reader divider and the tab looks joined to the document below. The other three strokes are the selection cue — only the active tab frames itself. The fill is a variable because the flares below have to match it. */
  --tab-fill: var(--tab-page-fill, var(--lt-background));
  --tab-label-ink: var(--tab-page-ink, var(--lt-foreground));
  --tab-corner-fill: var(--tab-page-fill, var(--lt-surface));
  --tab-corner-ink: var(--tab-page-ink, var(--lt-muted-foreground));
  --tab-corner-marked-ink: var(--tab-page-ink, var(--lt-foreground));
  /* These carry the fill out over the divider rather than just turning a stroke. A small turn, read against the tab's own 6px top corners rather than against the room beside it: a wide one draws as a scoop instead of a join. The strip scrolls, so a flare wider than its 16px side inset would be clipped flat, and this is well inside that. */
  --tab-flare: var(--lt-radius-sm);
  background: var(--tab-fill);
  border-top-color: var(--lt-border);
  border-left-color: var(--lt-border);
  border-right-color: var(--lt-border);
  border-bottom-color: transparent;
}
:root[data-code-view="true"] .tab-active {
  /* In code view the page below is the code surface, not the reading background; match it so the active tab still reads as joined to the document. */
  --tab-fill: var(--lt-editor-code-background, var(--lt-markdown-background));
}
/* Inverse corners where the active tab meets the reader divider: the fill flares out at each bottom corner and the frame arcs with it, so the tab joins the page on a curve rather than a hard T. Drawn as a gradient because a concave arc needs its stroke on the outer side of the curve, which border-radius — always painting inward — can't give. Centered on the element's outer top corner, which lands the arc tangent to the side stroke above and to the divider below. */
.tab-active::before,
.tab-active::after {
  content: "";
  position: absolute;
  /* The tab's transparent bottom border leaves its padding box a pixel short of the divider these have to reach. */
  bottom: -1px;
  width: var(--tab-flare);
  height: var(--tab-flare);
  pointer-events: none;
  /* Shared stop list; only the center differs. The 0.6px ramps are the antialiasing: a gradient is rasterized per pixel, so a hard stop stairs a curve this size. */
  --tab-flare-arc:
    transparent 0 calc(var(--tab-flare) - 1.3px),
    var(--lt-border) calc(var(--tab-flare) - 0.7px) calc(var(--tab-flare) - 0.3px),
    var(--tab-fill) calc(var(--tab-flare) + 0.3px);
}
.tab-active::before {
  left: calc(-1 * var(--tab-flare));
  background: radial-gradient(circle at 0 0, var(--tab-flare-arc));
}
.tab-active::after {
  right: calc(-1 * var(--tab-flare));
  background: radial-gradient(circle at 100% 0, var(--tab-flare-arc));
}
/* The whole tab drags by its name; the mark and the close beside it are presses and take the hand. */
.tab-label {
  flex: 1;
  min-width: 0;
  max-width: 124px;
  overflow: hidden;
  white-space: nowrap;
  border: var(--lt-stroke-1) solid transparent;
  background: transparent;
  color: var(--lt-muted-foreground);
  font-family: var(--app-font);
  font-size: var(--lt-text-13);
  font-weight: var(--lt-weight-600);
  line-height: var(--lt-leading-1-2);
  padding: var(--lt-space-6) var(--lt-space-14);
  text-align: left;
  -webkit-mask-image: linear-gradient(to right, var(--lt-mask-opaque) calc(100% - 33px), transparent calc(100% - 15px));
  mask-image: linear-gradient(to right, var(--lt-mask-opaque) calc(100% - 33px), transparent calc(100% - 15px));
}
.tab-active .tab-label {
  /* Full-strength ink so the selected name stays readable on the surface it joins. */
  color: var(--tab-label-ink, var(--lt-foreground));
  max-width: none;
  -webkit-mask-image: none;
  mask-image: none;
}
.tab-label:hover {
  background: transparent;
  border-color: transparent;
}
.tab:hover .tab-label {
  /* Text-only hover so the inactive grain and the active frame both stay put. */
  color: var(--tab-label-ink, var(--lt-foreground));
}
.tab-close {
  /* Tucked into the tab's top-right corner, out of the label's flow, close enough that its hover chip clears both strokes by about 2px and no more. It covers the last letters of the name on purpose; the wash is what keeps it readable over them. */
  position: absolute;
  /* Above the masked label, so the corner control remains clickable. */
  z-index: 1;
  top: 2px;
  right: 2px;
  display: grid;
  place-items: center;
  width: 18px;
  height: 18px;
  min-width: 18px;
  padding: 0;
  border: var(--lt-stroke-1) solid transparent;
  border-radius: var(--lt-radius-sm);
  background: var(--tab-corner-fill, var(--lt-surface));
  color: var(--tab-corner-ink, var(--lt-muted-foreground));
  /* Its own reveal, so the shared hover fade at the top of the file never reaches it: the colors are named here instead. */
  transition: var(--lt-transition-hover-reveal-arrive), background-color var(--lt-duration-120) var(--lt-ease),
    border-color var(--lt-duration-120) var(--lt-ease), color var(--lt-duration-120) var(--lt-ease);
}
.tab-close .lt-icon {
  width: 12px;
  height: 12px;
  pointer-events: none;
}
/* Never there at rest, so a strip of tabs is a row of names and the cross costs the tab no room. Focus counts as reaching, so the keyboard still gets to it. Leaving waits a beat, so crossing the strip does not strobe, and is quicker than the arrival — the heart opposite goes the same way. The pointed state is the strip saying the hand is still on this tab across a redraw that replaced it: a control that vanishes the instant it is pressed reads as a press that did nothing. */
.tab:not(:hover):not(:focus-within):not(.is-pointed) .tab-close {
  opacity: 0;
  transition: var(--lt-transition-hover-reveal-leave);
}
.tab-close:hover {
  background: var(--lt-navigation-button-hover-background);
  border-color: transparent;
  /* The contrast color that pairs with the action background — white icons on a light accent (Fern green, Amaranth lavender) are unreadable. */
  color: var(--lt-primary-foreground);
}
/* The heart, in the corner opposite the close button and out of the label's flow the same way, so the tab keeps its width and its padding. It covers the first letters of the name on purpose; the wash is what keeps it readable over them. */
.tab-favorite {
  position: absolute;
  /* Above the label, for the reason written on the close button. */
  z-index: 1;
  top: 2px;
  left: 2px;
  display: grid;
  place-items: center;
  width: 18px;
  height: 18px;
  min-width: 18px;
  padding: 0;
  border: var(--lt-stroke-1) solid transparent;
  border-radius: var(--lt-radius-sm);
  background: var(--tab-corner-fill, var(--lt-surface));
  color: var(--tab-corner-ink, var(--lt-muted-foreground));
  /* Never there at rest, marked or not, so a strip of tabs carries nothing extra to read. Leaving waits a beat, so crossing the strip does not strobe, and is quicker than the arrival that matched it. The colors ride along for the reason written on the close button. */
  opacity: 0;
  transition: var(--lt-transition-hover-reveal-leave), background-color var(--lt-duration-120) var(--lt-ease),
    border-color var(--lt-duration-120) var(--lt-ease), color var(--lt-duration-120) var(--lt-ease);
}
.tab-favorite .lt-icon {
  width: 12px;
  height: 12px;
  pointer-events: none;
}
/* The shorthand replaces the one above, and this is the only state the heart can be pointed at in, so the colors are named here too or the hover is instant on the one control that shows. */
.tab:hover .tab-favorite,
.tab:focus-within .tab-favorite,
.tab.is-pointed .tab-favorite {
  opacity: 1;
  transition: var(--lt-transition-hover-reveal-arrive), background-color var(--lt-duration-120) var(--lt-ease),
    border-color var(--lt-duration-120) var(--lt-ease), color var(--lt-duration-120) var(--lt-ease);
}
/* A hollow heart is an offer; a filled one is a fact, so it is drawn in full ink. */
.tab-favorite.is-on {
  color: var(--tab-corner-marked-ink, var(--lt-foreground));
}
.tab-favorite:hover {
  background: var(--lt-navigation-button-hover-background);
  border-color: transparent;
  color: var(--lt-primary-foreground);
}
/* In the trail the heart is a crumb rather than a corner mark, so it drops out of the tab's absolute placing and into the row's own flow, and carries no plate of its own against the band behind it. */
.library-crumb-trail > .tab-favorite {
  position: static;
  flex: none;
  background: transparent;
}
/* The trail is the row that reveals it, the way the tab is on a tab; the colors are named again for the same reason the tab's are. */
.library-crumb-trail:hover > .tab-favorite,
.library-crumb-trail:focus-within > .tab-favorite {
  opacity: 1;
  transition: var(--lt-transition-hover-reveal-arrive), background-color var(--lt-duration-120) var(--lt-ease),
    border-color var(--lt-duration-120) var(--lt-ease), color var(--lt-duration-120) var(--lt-ease);
}
/* Back and forward are one paired control, so they sit at the tight gap the window buttons use rather than the bar's 16px between groups. */
.history-actions {
  display: flex;
  gap: var(--lt-space-4);
  align-items: center;
}
/* Once the fold has taken both arrows into the chevron menu, the strip is a zero-wide box the bar's left zone still spends a 16px gap on — at the one moment there is no room, so it can cost a further button. Not `:empty`: the markup writes the strip over eight lines, so three whitespace text nodes stay behind when the buttons leave. The fold marks the empty group after moving its drawn children. */
.history-actions.no-drawn-actions {
  display: none;
}
/* The trailing group: the action buttons plus the window controls. Anchors the collapsed overflow dropdown; padded off the window edge (frameless windows let the flush window controls own that edge instead — see below). */
.app-trailing {
  display: flex;
  align-items: center;
  align-self: stretch;
  position: relative;
  /* No left inset, matching the lead zone's right one, so each end of the strip is the strip's own gap and a tab comes no closer to the actions than the first one comes to the history buttons. */
  padding-left: 0;
  padding-right: var(--lt-space-24);
}
.app-trailing-items {
  display: flex;
  align-items: center;
  align-self: stretch;
  gap: var(--lt-space-16);
}
/* A run of buttons is 4px and a gap between groups is 16px, and this is a run: the theme switch, the folder, the plus and the page export are one set of things to press rather than four unrelated stops along the row. It was the only run on the bar still spaced like a gap — the history pair, the tabs and the window buttons were already here — which is what made three actions read as three separate stops and would have cost the bar a further 48px for a fourth. `.app-trailing-items` above keeps its 16px: that is the gap out to the window buttons, and it is a gap between groups. */
.app-actions-items {
  display: flex;
  gap: var(--lt-space-4);
  align-items: center;
}
/* Once the fold has taken the theme, open and new buttons into the chevron menu, the group is a zero-wide box the trailing zone still spends a 16px gap on — at the one moment there is no room, so it can cost a further button. The update bell stays in the group hidden, so the fold marks whether any drawn child remains. */
.app-actions-items.no-drawn-actions {
  display: none;
}
/* Overflow chevron, on the bar and at the library's foot: rests muted, greens on hover like the other toolbar icons. */
.overflow-toggle {
  border-color: transparent;
  background: transparent;
  color: var(--lt-muted-foreground);
}
/* The bar's is hidden inline (the `.app-trailing` prefix outranks the later `.icon-button { display: inline-grid }`) and shown only once something has actually folded. */
.app-trailing .overflow-toggle {
  display: none;
}
.overflow-toggle:hover {
  background: var(--lt-navigation-button-hover-background);
  border-color: var(--lt-navigation-button-hover-background);
  color: var(--lt-primary-foreground);
}
.app-trailing.has-overflow .overflow-toggle {
  display: inline-grid;
}
/* Where folded items go, one at a time, as the tab strip runs out of room. Measured from the chevron's right edge — `100%` is the trailing group's box, 32px the chevron's width — so it grows inward, the way the update bell's panel hangs off the bell rather than off a group. Measured from the group's left it grows the other way: fully folded, that edge is the app's last 32px, and the surface's paint containment cuts the menu off flat. */
.app-overflow-panel {
  position: absolute;
  top: calc(100% + 4px);
  left: auto;
  right: calc(100% - 32px);
  display: none;
  flex-direction: column;
  gap: var(--lt-space-4);
  padding: var(--lt-space-6);
  border: var(--lt-stroke-1) solid var(--lt-border);
  /* The shadow reads this too, and adds the spread to it, so the ring outside the corner is struck from the corner’s own center. */
  --lt-shadow-host-radius: var(--lt-radius-lg);
  border-radius: var(--lt-shadow-host-radius);
  background: var(--lt-surface-elevated);
  z-index: var(--lt-z-30);
}
.app-trailing.overflow-open .app-overflow-panel {
  display: flex;
}
/* Folded as a group, but stacked once inside: everything else in the menu is one button per line, and a three-across row would make the whole menu three times its own width for one item. */
.app-overflow-panel .window-controls {
  flex-direction: column;
  gap: var(--lt-space-4);
  margin-left: 0;
}
/* Custom window controls for frameless windows (Windows). Hidden until the frontend reveals them; they act as the native minimize/maximize/close buttons, since there's no OS title bar. Tight against each other rather than on the bar's gap, so the three read as one set. */
.window-controls {
  display: flex;
  align-items: center;
  gap: var(--lt-space-4);
  margin-left: 0;
}
/* The same chip as every other toolbar icon button: three square full-height fills in a row read as a different control set from the icons beside them. */
.window-control {
  /* The window's own frame rather than anything the document offers, so the pointer stays an arrow. Beats the shared hand by being one class. */
  cursor: default;
  width: 32px;
  height: 32px;
  min-width: 32px;
  display: grid;
  place-items: center;
  padding: 0;
  border-color: transparent;
  border-radius: var(--lt-radius-lg);
  background: transparent;
  color: var(--lt-muted-foreground);
}
.window-control .lt-icon {
  width: 12px;
  height: 12px;
}
/* The four window marks take the mask `bundle-icons` held to this size's pixel grid, in place of the one every other control wears. A one-pixel line centered on a pixel boundary draws at half its ink in each of two rows, which is what made these read paler than the palette and folder beside them. The held mask is handed to the icon's own value rather than to `mask-image`, so the class the markup names is still the one drawing it, and a theme family wearing an outside pack redeclares the held value the same way it redeclares the ordinary one. */
.window-control .lt-icon-window-minimize {
  --lt-icon-window-minimize: var(--lt-icon-window-minimize-chip);
}
.window-control .lt-icon-window-maximize {
  --lt-icon-window-maximize: var(--lt-icon-window-maximize-chip);
}
.window-control .lt-icon-window-restore {
  --lt-icon-window-restore: var(--lt-icon-window-restore-chip);
}
.window-control .lt-icon-window-close {
  --lt-icon-window-close: var(--lt-icon-window-close-chip);
}
/* Maximize shows a single square; when the window is maximized the restore-down glyph (two offset squares) takes its place. Exactly one is ever displayed, so the grid button keeps a single centered child. */
.window-control .wc-restore {
  display: none;
}
body.is-maximized #winMaximize .wc-maximize {
  display: none;
}
body.is-maximized #winMaximize .wc-restore {
  display: inline-block;
}
/* The shared toolbar hover chip, so these match the open/code-view/settings icons beside them. Close keeps the red every desktop uses for it. */
.window-control:hover {
  background: var(--lt-navigation-button-hover-background);
  border-color: var(--lt-navigation-button-hover-background);
  color: var(--lt-primary-foreground);
}
.window-control-close:hover {
  background: var(--lt-window-close);
  border-color: var(--lt-window-close);
  color: var(--lt-window-close-foreground);
}
/* A Mac's three, at the bar's left end. Ours rather than Apple's because a native view is pinned to the window and cannot fold into the chevron menu, which meant the bar reserving room for them whether it had any or not. Centered by the zone's own rule instead of inset into the top corner. Twice the Windows gap because the dot is a quarter of the button: the same 4px is an eighth of a 32px button and a third of a 12px dot, and three dots that close read as one blob. */
.mac-frame .window-controls {
  gap: var(--lt-space-8);
  margin-left: 0;
}
/* The theme's stop, careful and good, rather than three fixed hex values — Apple's dots ignoring the theme was the one real complaint against them. Minimize takes the middle one here; the two either side name their own below. */
.mac-frame .window-control {
  width: 12px;
  height: 12px;
  min-width: 12px;
  border: none;
  border-radius: 50%;
  background: var(--lt-warning);
  /* No mark at rest, the way a Mac's has none. The icon is still there, painted in nothing, so hover only has to change a color. */
  color: transparent;
}
/* Apple's order, from markup that runs minimize, maximize, close: only the close has to move. */
.mac-frame .window-control-close {
  order: -1;
  background: var(--lt-danger);
}
/* Folded into the menu the same three stack, so they take the row's gap rather than the shared column's 4px, which is the Windows squares'. Said outright because the row's rule and the shared column's weigh the same, so which of them lands here is only their order. */
.mac-frame .app-overflow-panel .window-controls {
  gap: var(--lt-space-8);
}
/* Stacked in the menu the three read top to bottom, so the row's order is upside down there: zoom at the top, close at the foot and farthest from the pointer that opened it. */
.mac-frame .app-overflow-panel #winMaximize {
  order: -1;
}
.mac-frame .app-overflow-panel .window-control-close {
  order: 1;
}
.mac-frame #winMaximize {
  background: var(--lt-success);
}
.mac-frame .window-control .lt-icon {
  width: 8px;
  height: 8px;
}
/* The dot wears the same drawing two thirds of the size, which is a different grid, so it takes the mask held to that one. */
.mac-frame .window-control .lt-icon-window-minimize {
  --lt-icon-window-minimize: var(--lt-icon-window-minimize-dot);
}
.mac-frame .window-control .lt-icon-window-maximize {
  --lt-icon-window-maximize: var(--lt-icon-window-maximize-dot);
}
.mac-frame .window-control .lt-icon-window-restore {
  --lt-icon-window-restore: var(--lt-icon-window-restore-dot);
}
.mac-frame .window-control .lt-icon-window-close {
  --lt-icon-window-close: var(--lt-icon-window-close-dot);
}
/* Hover shows the mark, punched out of the dot in the bar's own color. Each dot keeps its color, so all three are said again here rather than letting the toolbar chip below take them. */
.mac-frame .window-control:hover {
  background: var(--lt-warning);
  border-color: transparent;
  color: var(--lt-surface);
}
.mac-frame .window-control-close:hover {
  background: var(--lt-danger);
  border-color: transparent;
  color: var(--lt-surface);
}
.mac-frame #winMaximize:hover {
  background: var(--lt-success);
}
/* Frameless: the close chip is in the window's corner, so its inset matches the 4px the chip leaves above it — the default trailing inset reads lopsided. Not on a Mac, where the dots are at the other end and this end is an ordinary toolbar. */
.frameless:not(.mac-frame) .app-trailing {
  padding-right: var(--lt-space-4);
}
/* Only frameless windows carry the in-app window controls; hide them otherwise so no empty gap shows where they'd sit. */
.window-controls[hidden] {
  display: none;
}
/* The mark bought in the Grove: a thin circle around the brand leaf. */
.brand-button.has-mark {
  position: relative;
}
.brand-button.has-mark::after {
  content: "";
  position: absolute;
  inset: 1px;
  border: var(--lt-stroke-1-5) solid var(--lt-primary-ink);
  border-radius: var(--lt-radius-full);
  pointer-events: none;
}
.context-menu {
  position: fixed;
  z-index: var(--lt-z-50);
  min-width: 168px;
  padding: var(--lt-space-4);
  border: var(--lt-stroke-1) solid var(--lt-border);
  /* The shadow reads this too, and adds the spread to it, so the ring outside the corner is struck from the corner’s own center. */
  --lt-shadow-host-radius: var(--lt-radius-lg);
  border-radius: var(--lt-shadow-host-radius);
  background: var(--lt-surface-elevated);
  font-family: var(--app-font);
}
.context-menu[hidden] {
  display: none;
}
.context-menu-item {
  /* A menu row acts here without going anywhere, so the pointer stays an arrow. */
  cursor: default;
  display: block;
  width: 100%;
  padding: var(--lt-space-8) var(--lt-space-12);
  border: 0;
  border-radius: var(--lt-radius-sm);
  background: transparent;
  color: var(--lt-foreground);
  font-family: var(--app-font);
  font-size: var(--lt-text-13);
  font-weight: var(--lt-weight-600);
  line-height: var(--lt-leading-1-2);
  text-align: left;
}
.context-menu-item:hover,
.context-menu-item:focus-visible {
  background: var(--lt-wash-hover);
  outline: none;
}
/* A dangerous row is plain until it is pointed at. Its drawing says what it does, and red on every open menu spends the one color that means stop. */
.context-menu-item.is-danger:hover,
.context-menu-item.is-danger:focus-visible {
  background: var(--lt-danger);
  color: var(--lt-danger-foreground);
}
/* A mask is painted by its row's color, so without this the glyph keeps the muted tone and sits gray on the red while the label beside it does not. */
.context-menu-item.is-danger:hover .lt-icon,
.context-menu-item.is-danger:focus-visible .lt-icon {
  color: inherit;
}
/* A row that writes a date says at its right which day that is, so Next Monday is read before it is pressed. */
.task-date-when {
  float: right;
  margin-left: var(--lt-space-12);
  color: var(--lt-muted-foreground);
}
.context-menu-separator {
  height: 1px;
  margin: var(--lt-space-4) var(--lt-space-6);
  background: var(--lt-border);
}
.rename-box {
  position: fixed;
  z-index: var(--lt-z-51);
  width: 232px;
  padding: var(--lt-space-4);
  border: var(--lt-stroke-1) solid var(--lt-border);
  /* The shadow reads this too, and adds the spread to it, so the ring outside the corner is struck from the corner’s own center. */
  --lt-shadow-host-radius: var(--lt-radius-lg);
  border-radius: var(--lt-shadow-host-radius);
  background: var(--lt-surface-elevated);
}
.rename-box[hidden] {
  display: none;
}
.rename-input {
  width: 100%;
  box-sizing: border-box;
  padding: var(--lt-space-6) var(--lt-space-8);
  border: var(--lt-stroke-1) solid var(--lt-accent);
  border-radius: var(--lt-radius-sm);
  background: var(--lt-surface);
  color: var(--lt-foreground);
  font-family: var(--app-font);
  font-size: var(--lt-text-13);
  font-weight: var(--lt-weight-600);
  line-height: var(--lt-leading-1-2);
}
.rename-input:focus {
  outline: none;
}
/* The update bell and the one button under it. Absent from the bar unless the updater has something to install, so nothing here is ever the resting state. */
.update-menu {
  position: relative;
  font-family: var(--app-font);
}
.update-menu[hidden] {
  display: none;
}
.update-menu summary {
  /* Box size, radius, and icon come from .icon-button (which this also carries) so every toolbar icon button matches; only the summary-specific bits and the rest colors live here. `position: relative` anchors the update-alert dot. */
  border: var(--lt-stroke-1) solid transparent;
  background: transparent;
  color: var(--lt-muted-foreground);
  font-family: var(--app-font);
  font-size: var(--lt-text-13);
  font-weight: var(--lt-weight-700);
  line-height: var(--lt-leading-1-2);
  list-style: none;
  position: relative;
}
.update-menu summary::-webkit-details-marker {
  display: none;
}
.update-menu summary:hover {
  background: var(--lt-navigation-button-hover-background);
  border-color: transparent;
  color: var(--lt-primary-foreground);
}
/* The mark on the bell, the whole of what the updater says with the panel shut. The ring keeps it legible on the bar's textured/hover fill. Green means a restart would install a new version; while bytes are moving it becomes a spinning ring instead. Nothing else raises it. */
.update-alert-dot {
  position: absolute;
  top: 4px;
  right: 4px;
  width: 8px;
  height: 8px;
  box-sizing: border-box;
  border-radius: var(--lt-radius-full);
  background: var(--lt-success);
  box-shadow: var(--lt-shadow-ring);
}
.update-alert-dot.is-downloading {
  width: 10px;
  height: 10px;
  background: transparent;
  border: var(--lt-stroke-2) solid color-mix(in srgb, var(--lt-success) 30%, transparent);
  border-top-color: var(--lt-success);
  box-shadow: none;
  animation: lt-spin var(--lt-duration-800) var(--lt-ease-linear) infinite;
}
/* Its own answer: the dot is not an .lt-spinner, and a download in flight is the one thing it says. */
@media (prefers-reduced-motion: reduce) {
  .update-alert-dot.is-downloading {
    animation-duration: var(--lt-duration-1600) !important;
  }
}
.update-panel {
  position: absolute;
  right: 0;
  top: calc(100% + 8px);
  z-index: var(--lt-z-30);
  display: grid;
  gap: var(--lt-space-14);
  width: min(290px, calc(100vw - 28px));
  border: var(--lt-stroke-1) solid var(--lt-border);
  /* The shadow reads this too, and adds the spread to it, so the ring outside the corner is struck from the corner’s own center. */
  --lt-shadow-host-radius: var(--lt-radius-lg);
  border-radius: var(--lt-shadow-host-radius);
  background: var(--lt-surface-elevated);
  padding: var(--lt-space-14);
}
/* The panel's one sentence: which version is out and why this copy cannot install it. Quieter than the button, which is the way out where this is the reason, and set on the two-line leading because it wraps. */
.update-note {
  margin: 0;
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-13);
  font-weight: var(--lt-weight-600);
  line-height: var(--lt-leading-1-4);
}
.update-note[hidden] {
  display: none;
}
/* Green "restart to update" call-to-action. Takes the primary-action fill; spans it. `position: relative` anchors the download progress fill. */
.update-button {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--lt-space-8);
  width: 100%;
  overflow: hidden;
  font-weight: var(--lt-weight-700);
}
.update-button[hidden] {
  display: none;
}
/* Opening a page is not installing one, so the button that does it reads as an offer rather than the thing to press. A control that clears its own fill has to say what the pointer paints, or the app-wide `button:hover` lands primary purple under this one's quiet ink. */
.update-button.is-quiet {
  border-color: var(--lt-border);
  background: transparent;
  color: var(--lt-foreground);
}
.update-button.is-quiet:hover {
  border-color: var(--lt-border);
  background: var(--lt-wash-hover);
}
/* Progress behind the label, left to right. Zero width at rest, so the staged button — no percent — shows nothing. */
.update-button-fill {
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 0;
  background: color-mix(in srgb, var(--lt-primary-foreground) 26%, transparent);
  transition: width var(--lt-duration-120) var(--lt-ease-linear);
  pointer-events: none;
}
.update-button-label {
  position: relative;
}
.update-button-spinner {
  width: 12px;
  height: 12px;
  min-width: 12px;
  border-color: color-mix(in srgb, currentColor 28%, transparent);
  border-top-color: currentColor;
}
.update-button-spinner[hidden] {
  display: none;
}
/* Every floating surface shares one halftone: four edge ramps screen coverage off a tiled blob before the curve turns what survives into one ink, and a five-layer mask fades the band to nothing at its rim and punches the host's own face out. */
.app-overflow-panel::before,
.context-menu::before,
.rename-box::before,
.update-panel::before,
.app-toast::before,
.flow-menu::before,
.link-hover-tip::before,
.block-drag-ghost::before,
.home-row-ghost::before,
.find-bar::before,
.confirm-dialog::before,
.reader-toolbar::before,
.reader-tool-tray::before,
.selection-toolbar::before,
.filter-menu::before,
.table-lens-menu::before,
.hint-bubble::before,
.document-body .docs-pager a::before {
  content: '';
  position: absolute;
  z-index: var(--lt-z-below);
  /* Absolute children start from the host's padding box, so the punch is cut one stroke inside the outline and the innermost dot row prints on the border. The stroke comes off the padding rather than being added to the inset, which lands the content box on the border box while leaving the band's outer edge exactly where it was: the lattice is anchored to the window rather than to this box, so an edge moved one pixel re-phases every dot row against it, and at 100% — where a tile is three device pixels and the band holds four rows — that costs the faintest row at the rim. The pixel the band gives up is the one that was being drawn under an opaque border. */
  inset: calc(-1 * var(--lt-shadow-spread));
  padding: calc(var(--lt-shadow-spread) - var(--lt-shadow-host-border));
  /* The outside corner is the surface's own plus the spread, which strikes both arcs from one center; each host declares the one number its own border already reads. */
  border-radius: calc(var(--lt-shadow-host-radius) + var(--lt-shadow-spread));
  pointer-events: none;
  background-color: var(--lt-grain-shadow-base);
  /* The four edge ramps are background layers rather than mask layers, and the blob is the bottom one, because an element is filtered before it is masked: a fade left in the mask runs after the curve, so the curve sees one full-strength lattice, cuts one dot width everywhere, and the ramps then fade its ink — which is a band of same-sized dots ending on a ruled line. Here they run in front of it, so what the curve reads is already weaker at the rim and the dot it cuts there is smaller. Screen against the white ground, never multiply: multiply can only darken, and white is its identity, so ramps written that way lift nothing at all. */
  background-image: linear-gradient(to right, var(--lt-grain-shadow-rim) 0, var(--lt-grain-shadow-mid) calc(var(--lt-shadow-spread) / 2), transparent var(--lt-shadow-spread)),
    linear-gradient(to left, var(--lt-grain-shadow-rim) 0, var(--lt-grain-shadow-mid) calc(var(--lt-shadow-spread) / 2), transparent var(--lt-shadow-spread)),
    linear-gradient(to bottom, var(--lt-grain-shadow-rim) 0, var(--lt-grain-shadow-mid) calc(var(--lt-shadow-spread) / 2), transparent var(--lt-shadow-spread)),
    linear-gradient(to top, var(--lt-grain-shadow-rim) 0, var(--lt-grain-shadow-mid) calc(var(--lt-shadow-spread) / 2), transparent var(--lt-shadow-spread)),
    radial-gradient(circle, var(--lt-grain-shadow-blob) 0, transparent var(--lt-grain-blob));
  background-size: 100% 100%, 100% 100%, 100% 100%, 100% 100%, var(--lt-grain-shadow-tile) var(--lt-grain-shadow-tile);
  background-repeat: repeat;
  /* Only the lattice is anchored to the window, so the app keeps one grid across every grained surface. The ramps take the layer's own box, or `fixed` sizes their 100% to the viewport and all four run from the window's edges instead of the band's — which lifts nothing anywhere near a panel and leaves every dot the same width again. */
  background-attachment: scroll, scroll, scroll, scroll, fixed;
  background-blend-mode: screen, screen, screen, screen, multiply;
  filter: var(--lt-grain-shadow-curve);
  opacity: var(--lt-grain-shadow-opacity-inside);
  /* The punch that takes the host's own face out, over four ramps that take the band's ink from full against that face to nothing at the rim. The ramps run here as well as in the background stack because the two do different things: the background pair shrinks the dot, and these fade what is left, so the band reaches true zero at its outer edge rather than stopping on the faintest row it still draws. The punch is the top layer and subtracts; the four below it intersect, which multiplies their alpha the way a corner needs. */
  -webkit-mask-image: linear-gradient(var(--lt-mask-opaque), var(--lt-mask-opaque)),
    linear-gradient(to right, transparent 0, var(--lt-mask-opaque) var(--lt-shadow-spread)),
    linear-gradient(to left, transparent 0, var(--lt-mask-opaque) var(--lt-shadow-spread)),
    linear-gradient(to bottom, transparent 0, var(--lt-mask-opaque) var(--lt-shadow-spread)),
    linear-gradient(to top, transparent 0, var(--lt-mask-opaque) var(--lt-shadow-spread));
  -webkit-mask-origin: content-box, border-box, border-box, border-box, border-box;
  -webkit-mask-clip: content-box, border-box, border-box, border-box, border-box;
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-composite: source-out, intersect, intersect, intersect, add;
  mask-image: linear-gradient(var(--lt-mask-opaque), var(--lt-mask-opaque)),
    linear-gradient(to right, transparent 0, var(--lt-mask-opaque) var(--lt-shadow-spread)),
    linear-gradient(to left, transparent 0, var(--lt-mask-opaque) var(--lt-shadow-spread)),
    linear-gradient(to bottom, transparent 0, var(--lt-mask-opaque) var(--lt-shadow-spread)),
    linear-gradient(to top, transparent 0, var(--lt-mask-opaque) var(--lt-shadow-spread));
  mask-origin: content-box, border-box, border-box, border-box, border-box;
  mask-clip: content-box, border-box, border-box, border-box, border-box;
  mask-repeat: no-repeat;
  mask-composite: subtract, intersect, intersect, intersect, add;
}
/* The one host on that list sitting inside the document rather than over it, which makes one line of the shared rule wrong for it: `--lt-z-below` drops the layer behind `.reader-shell` and `.library-shell`, both opaque and neither opening a stacking context, so it lands at `.app-surface` and never draws at all. The mask's punch layer still takes the card's own face out, which is what keeps a dot off the words. */
.document-body .docs-pager a::before {
  z-index: 0;
  /* Drawn at rest and revealed, never written under `:hover`: the lattice gate refuses a background image inside a hovered rule in any ink but the hover ink, and this one is the shadow ink. It takes the reveal recipes every control drawn at nothing spends, so the ring waits with the rest of them rather than snapping over a fill that is still fading. */
  opacity: 0;
  transition: var(--lt-transition-hover-reveal-leave);
}
.document-body .docs-pager a:hover::before,
.document-body .docs-pager a:focus-visible::before {
  opacity: var(--lt-grain-shadow-opacity-inside);
  transition: var(--lt-transition-hover-reveal-arrive);
}
/* Every spinner in the app: a ring with one lit edge, turning. The shape and the turn are here; a site keeps only its own size and colors, because those are what differ — a 12px ring in a settings row, a 34px one on an empty reader. */
.lt-spinner {
  box-sizing: border-box;
  border-radius: var(--lt-radius-full);
  border-style: solid;
  border-width: var(--lt-stroke-2);
  animation: lt-spin var(--lt-duration-800) var(--lt-ease-linear) infinite;
}
@keyframes lt-spin {
  to {
    transform: rotate(360deg);
  }
}
/* Slowed under Reduce Motion, never stopped: the app is still working, and a still spinner reads as a hang. On the shared class rather than on each spinner's own — five elements carry .lt-spinner, two of them with no rule of their own, and the blanket rule above stops anything it does not reach here. */
@media (prefers-reduced-motion: reduce) {
  .lt-spinner {
    animation-duration: var(--lt-duration-1600) !important;
  }
}
/* Every skeleton in the app: a bar the color of a quiet hairline, breathing, standing where a line of real content is about to land. The fill, the rounded ends and the pulse are here; a site keeps only its own geometry, because that is what differs — a 72px kicker under the pager, a heading bar over the reader, a result row in the library. */
.lt-skeleton {
  display: block;
  border-radius: var(--lt-radius-pill);
  background: var(--lt-border);
  animation: lt-skeleton-pulse var(--lt-duration-1250) var(--lt-ease-in-out) infinite;
}
@keyframes lt-skeleton-pulse {
  0%,
  100% {
    opacity: var(--lt-opacity-38);
  }
  50% {
    opacity: var(--lt-opacity-78);
  }
}
/* Stopped under Reduce Motion, and parked at an opacity of its own: the bars carry none otherwise, so a skeleton stopped at full strength reads as content that has already arrived. The shorthand takes the name away too, rather than leaving the pulse parked on whichever keyframe it ended at. */
@media (prefers-reduced-motion: reduce) {
  .lt-skeleton {
    animation: none;
    opacity: var(--lt-opacity-55);
  }
}
button {
  /* The hand, on the element rather than on each control's own rule, so a button added later says it can be pressed without anybody remembering to write it. Weak on purpose: a single-class rule still wins, which is what leaves a control whose gesture is a drag or a draw wearing its own shape. */
  cursor: pointer;
  border: var(--lt-stroke-1) solid var(--lt-primary);
  border-radius: var(--lt-radius-md);
  background: var(--lt-primary);
  color: var(--lt-primary-foreground);
  font-family: var(--app-font);
  font-size: var(--lt-text-14);
  font-weight: var(--lt-weight-600);
  line-height: var(--lt-leading-1-2);
  padding: var(--lt-space-8) var(--lt-space-14);
}
/* The one true toolbar icon button: every square icon control in the app bar (history, code view, settings, open) shares this box, radius, and icon size so their hover chips are identical. The floating library-open button matches it too. */
.icon-button {
  display: inline-grid;
  place-items: center;
  width: 32px;
  height: 32px;
  min-width: 32px;
  border-radius: var(--lt-radius-lg);
  padding: 0;
}
/* A `display` of our own beats the browser's own `[hidden] { display: none }`, so an icon button told to hide has to be told again here. Said on the component rather than on each button that comes and goes, because the next one added would ship drawn and nothing but a reader would see it. */
.icon-button[hidden] {
  display: none;
}
.icon-button .lt-icon {
  width: 16px;
  height: 16px;
  pointer-events: none;
}
/* Open, New, Export and the library foot's launchers — the theme palette among them — are the same button over and over: muted at rest, greening on hover like the other secondary toolbar icons. Said once, so they cannot drift apart — and none of them is ever the filled primary button, which is how the bar says which view you are in. A button added to this run without its name here rests filled, which reads as the one action already pressed. */
.open-button,
.new-button,
.export-button,
.library-foot-button {
  /* The app's own furniture, not something the document offers, so the pointer stays an arrow across the run. Beats the shared hand by being one class. */
  cursor: default;
  border-color: transparent;
  background: transparent;
  color: var(--lt-muted-foreground);
}
/* The chip keeps its 8px corner: a pill on a 32px square is a circle, which reads as a different control rather than as an emphasis. */
.open-button:hover,
.new-button:hover,
.export-button:hover,
.library-foot-button:hover {
  background: var(--lt-navigation-button-hover-background);
  border-color: var(--lt-navigation-button-hover-background);
  color: var(--lt-primary-foreground);
}
/* Unsaved-edits dot on a tab, sharing the close button's corner. In the row it is 13px of content that vanishes on the tab's own hover, so a modified tab shrinks and its label jumps the moment you point at it. */
.tab-dirty-dot {
  display: none;
  position: absolute;
  /* Centered in the close button's 18px box (top/right 2px). */
  top: 7px;
  right: 7px;
  width: 8px;
  height: 8px;
  /* The button underneath stays the click target. */
  pointer-events: none;
  border-radius: var(--lt-radius-full);
  background: var(--lt-accent);
}
.tab-modified .tab-dirty-dot {
  display: block;
}
/* One corner, one occupant: the dot says "unsaved", and reaching for the tab hands the corner back to the button — which every tab, modified or not, hides until then. */
.tab-modified:hover .tab-dirty-dot,
.tab-modified:focus-within .tab-dirty-dot {
  display: none;
}
button:hover {
  background: var(--lt-navigation-button-hover-background);
  border-color: var(--lt-navigation-button-hover-background);
}
button:disabled {
  border-color: var(--lt-navigation-button-disabled-background);
  background: var(--lt-navigation-button-disabled-background);
  color: var(--lt-navigation-button-disabled-foreground);
  cursor: default;
}
button:disabled:hover {
  border-color: var(--lt-navigation-button-disabled-background);
  background: var(--lt-navigation-button-disabled-background);
}
.history-button {
  border-color: transparent;
  background: var(--lt-surface-elevated);
  color: var(--lt-foreground);
}
#refreshButton {
  color: var(--lt-muted-foreground);
}
/* Chrome, so it lights up like the four chrome buttons above rather than washing to see-through and letting the app bar's own grain show through it. The arrow is a mask, so the inverted color paints it. */
.history-button:hover:not(:disabled) {
  border-color: var(--lt-navigation-button-hover-background);
  background: var(--lt-navigation-button-hover-background);
  color: var(--lt-primary-foreground);
}
#refreshButton:hover:not(:disabled) {
  color: var(--lt-primary-foreground);
}
.history-button:disabled,
.history-button:disabled:hover {
  border-color: transparent;
  background: var(--lt-surface-elevated);
  color: var(--lt-muted-foreground);
  opacity: var(--lt-opacity-46);
}
button:focus-visible,
select:focus-visible,
input:focus-visible,
a:focus-visible,
summary:focus-visible {
  outline: var(--lt-stroke-3) solid var(--lt-focus-ring);
  outline-offset: var(--lt-space-2);
}
/* The ring is the keyboard's. The engine judges a dropdown as keyboard-driven on a mouse press, so the app answers it instead: dom.js marks the root while the mouse is driving. A second rule that only ever subtracts, never a guard on the rule above — guarding it would raise it over the twelve rules that put their own ring out and light ten of them up. A page that never runs the app's script never carries the mark, so both websites keep every ring. */
:root[data-pointer-driving="true"] :is(button, select, input, a, summary):focus-visible {
  outline: none;
}
/* A launcher whose list is standing in the pane — the calendar square while a day is picked. */
.library-foot-button.is-active {
  background: color-mix(in srgb, var(--lt-accent) 22%, transparent);
  color: var(--lt-primary-ink);
}
/* The minimap is chrome, not page: it gets its own column outside the card so the page's right border stops short of it and the shell's texture runs behind the rail. */
body.has-minimap {
  --reader-minimap-column: calc(var(--minimap-width) + var(--reader-minimap-gap));
  /* The same number as the column, kept apart from it: the column is what a view drawing no rail collapses, and the floating bar reads this one so it does not move when the source or the graph closes that column. */
  --reader-toolbar-rail: calc(var(--minimap-width) + var(--reader-minimap-gap));
  /* The rail is the scroll affordance while it's up, so the native bar is hidden and its gutter closes with it. */
  --reader-scrollbar: 0px;
}
/* A document inside somebody else's product. Everything around the document belongs to the product — its bar, its buttons, its save — so the app is only the reader, and the bar height every other rule offsets against goes to zero. */
body.is-embedded {
  --app-bar-height: 0px;
}
body.is-embedded .app-bar,
body.is-embedded .library-pane,
body.is-embedded .library-divider,
body.is-embedded .reader-toolbar {
  display: none;
}
/* Not a grid here, so the rail track cannot hold a column open beside the page: the track the front end writes on the shell does nothing to a block. With the pane and the handle gone the reader is the only child left, so a block gives it the whole frame. */
body.is-embedded .library-shell {
  display: block;
}
.library-shell {
  display: grid;
  /* A trailing column and a bottom row hold the reader off the window frame; the rail spans both so only the page is inset. */
  /* The first track is the pane's width — 0px closed. The default here stands only until the front end writes this whole track on the shell and the same width on the app bar, never on the root, and the motion classes below transition this one property. Never an @property registration for the rail: animating a registered inherited length off :root crashed the whole app in this web view (library-sidebar-motion, phase 0). */
  grid-template-columns: var(--library-rail-width, 240px) minmax(0, 1fr) var(--reader-minimap-column) var(--reader-gutter);
  grid-template-rows: minmax(0, 1fr) var(--reader-gutter);
  /* The app surface's height, not the window's: the surface is the app, and past the inset the window has edge the app does not paint. */
  height: 100%;
  /* Positioning context for the open-library button, pinned to the left edge so it stays reachable when the pane collapses to 0. */
  position: relative;
  /* The chrome shade and grain again, on the same window-anchored lattice as the bar and the rail. What shows here is the gutter the reader is held off the window frame by (see --reader-gutter), so the texture runs unbroken from the bar, down the rail, and around the page. */
  background-color: var(--lt-surface);
  background-image: radial-gradient(circle, var(--lt-grain-dot) 0 var(--lt-grain-radius), transparent var(--lt-grain-edge));
  background-size: var(--lt-grain-tile) var(--lt-grain-tile);
  background-attachment: fixed;
}
/* Too narrow for a pane beside the page, so the library becomes a sheet over it: full width, parked off the left edge until the app bar's button pulls it in. Out of flow, so the grid still treats the library as closed and the page keeps the whole window. Under the app bar's z-index, which is what keeps the button that opened it reachable to close it again. */
.library-shell.library-narrow .library-pane {
  position: absolute;
  inset: 0;
  width: 100%;
  z-index: 5;
  transform: translateX(-100%);
  /* The base rule is where the sheet rests and where it leaves to, so it carries the exit — quicker than the way in, because you have stopped caring about it. */
  transition: transform var(--lt-duration-160) var(--lt-ease-accelerate);
}
.library-shell.library-narrow.library-overlay .library-pane {
  transform: translateX(0);
  transition: transform var(--lt-duration-220) var(--lt-ease-decelerate);
}
/* Nothing to drag when the sheet is the full width. */
.library-shell.library-narrow .library-divider {
  display: none;
}
/* The sheet stands in for the page, so the page's furniture goes with it: the corner arcs would paint on top of it, the divider is the top edge of a card nobody can see, and the tabs belong to a document the sheet is covering. The tabs go by visibility, not display — the overflow fold measures the strip to decide what to fold, and a collapsed one would unfold the whole bar into a window too narrow to hold it. */
.app-surface.has-library-overlay .reader-corner,
.app-surface.has-library-overlay .app-bar::after {
  display: none;
}
.app-surface.has-library-overlay .tab-bar {
  visibility: hidden;
}
/* The toggle's motion: open springs past its width on the overshoot curve; close slams to the reader's padding, bounces off it, and seats — three chained legs, because one curve cannot come back out of its target. The front end writes the width on the track and on the app bar, whose lead and divider line read --library-rail-width, so one write per leg moves the three in step; the transitions live only on these classes (library.js holds one per leg), so a drag or resize stays immediate and Reduce Motion's blanket rule zeroes every leg. */
body.is-library-opening .library-shell {
  transition: grid-template-columns var(--lt-duration-220) var(--lt-ease-overshoot);
}
body.is-library-closing .library-shell {
  transition: grid-template-columns var(--lt-duration-160) var(--lt-ease-accelerate);
}
body.is-library-settling .library-shell {
  transition: grid-template-columns var(--lt-duration-120) var(--lt-ease-decelerate);
}
body.is-library-opening .app-bar-lead {
  transition: width var(--lt-duration-220) var(--lt-ease-overshoot);
}
body.is-library-closing .app-bar-lead {
  transition: width var(--lt-duration-160) var(--lt-ease-accelerate);
}
body.is-library-settling .app-bar-lead {
  transition: width var(--lt-duration-120) var(--lt-ease-decelerate);
}
body.is-library-opening .app-bar::after {
  transition: left var(--lt-duration-220) var(--lt-ease-overshoot);
}
body.is-library-closing .app-bar::after {
  transition: left var(--lt-duration-160) var(--lt-ease-accelerate);
}
body.is-library-settling .app-bar::after {
  transition: left var(--lt-duration-120) var(--lt-ease-decelerate);
}
/* The rail's own column: the lead-in holds it off the page's right border, and the gutter beyond gives it the same outer inset the page card has. The bar's height keeps its top level with the card's.

   It scrolls, and that is the whole of how a wheel over the rail moves the page: the column is a scroller the web view drives itself, so a notch here is the same gesture it is over the page, on the web view's own curve, with no step of ours between the hand and the document. The front end only writes the reader's position from this scroll. Its travel is a spacer minimap.js sizes to the reader's own range; the rail's contents are pinned to the top of the column, so nothing the reader points at moves with it. Sideways stays clipped — the thumbnail is the column's width and there is nothing beside it. */
.reader-minimap {
  grid-column: 3;
  grid-row: 1;
  min-width: 0;
  padding-left: var(--reader-minimap-gap);
  padding-top: var(--app-bar-height);
  overflow-y: auto;
  overflow-x: hidden;
  /* The rail is what shows where you are, so a bar beside it says the same thing twice. Two rules, kept apart: in Chromium `scrollbar-width` anywhere on an element kills every ::-webkit-scrollbar rule on it (see .reader-shell.has-minimap). */
  scrollbar-width: none;
}
.reader-minimap::-webkit-scrollbar {
  width: 0;
}
/* A drag on the box writes the reader's position itself, so the column's own scroll stands aside for the length of it and a notch cannot fight the box being held. Hidden rather than unset: a programmatic write still lands, which is what lets the release put the column back where the reader now is. */
.reader-minimap.is-scroll-held {
  overflow-y: hidden;
}
.library-pane {
  /* Positioning context for the overlays it stacks (.library-scroll, .library-crumbs). The pane itself doesn't scroll or clip; the inner .library-scroll owns the scroll. */
  --library-app-bar: var(--app-bar-height);
  /* The breadcrumb band under the app bar. Fixed height whatever the path is, so entering a folder never shifts the list. */
  --library-crumbs-height: 28px;
  --library-chrome-height: calc(var(--library-app-bar) + var(--library-crumbs-height));
  /* The launcher row at the pane's foot, or nothing where it draws no launcher, so the list gives that height back. */
  --library-foot-height: 0px;
  /* Down the whole window, through the reader's bottom gutter row: the rail runs to the frame, only the page is held off it. */
  grid-column: 1;
  grid-row: 1 / -1;
  position: relative;
  /* A grid item's min-width is its content, which would hold the shrinking track open; the pane itself still never clips — the corner arc on its right edge is real geometry. */
  min-width: 0;
  /* The app surface's height, for the reason the shell's is. */
  height: 100%;
  /* The app bar's shade and grain, so the pane continues the bar rather than sitting under it. The tree rows on top are transparent, so the whole pane carries the texture. */
  background-color: var(--lt-surface);
  background-image: radial-gradient(circle, var(--lt-grain-dot) 0 var(--lt-grain-radius), transparent var(--lt-grain-edge));
  background-size: var(--lt-grain-tile) var(--lt-grain-tile);
  background-attachment: fixed;
  color: var(--lt-markdown-foreground);
  font-family: var(--app-font);
  font-size: var(--lt-text-13);
  /* No right-edge hairline: the reader's own left border, flush against this column, is the stroke that marks the boundary. */
}
/* The card's two top corners, where the app bar's divider turns down into the card's side borders. The card can't round these itself: its top is square and tucked under the bar, so the visible corner falls at the bar's bottom edge. Each element covers the junction with the chrome surface and grain, masks the page's quarter disc back out of it (which also hides the few px of straight border the arc stands in for), and strokes the arc over the join with ::after. The bottom corners need none of this — the card rounds those itself. .reader-corner-tl is a child of .library-pane and hangs off `left: 100%`, the grid line the card's left border starts on, rather than off --library-rail-width: a fractional pane width rounds to different device pixels in different containing blocks, which left the arc a pixel off the border it is meant to continue. */
.reader-corner {
  /* Where the mask cuts the page back out: a half pixel inside the arc's inner edge, so the stroke (which the mask also covers, being a child) survives whole instead of having its inner edge nibbled off. */
  --reader-corner-cut: calc(var(--lt-radius-md) - 0.5px);
  position: absolute;
  /* Over the app bar (z-index 10), whose grain the top corners sit on. */
  z-index: 11;
  width: calc(var(--lt-radius-md) + 1px);
  height: calc(var(--lt-radius-md) + 1px);
  background-color: var(--lt-surface);
  background-image: radial-gradient(circle, var(--lt-grain-dot) 0 var(--lt-grain-radius), transparent var(--lt-grain-edge));
  background-size: var(--lt-grain-tile) var(--lt-grain-tile);
  /* The same window-anchored lattice as every other grained surface, so a corner stays in phase with the bar and pane around it. */
  background-attachment: fixed;
  pointer-events: none;
}
.reader-corner::after {
  content: "";
  position: absolute;
  inset: 0;
  border: 0 solid var(--lt-border);
}
.reader-corner-tl {
  top: calc(var(--library-app-bar) - 1px);
  left: 100%;
  -webkit-mask-image: radial-gradient(circle at 100% 100%, transparent 0 var(--reader-corner-cut), var(--lt-mask-opaque) var(--reader-corner-cut));
  mask-image: radial-gradient(circle at 100% 100%, transparent 0 var(--reader-corner-cut), var(--lt-mask-opaque) var(--reader-corner-cut));
}
.reader-corner-tl::after {
  border-top-width: var(--lt-stroke-1);
  border-left-width: var(--lt-stroke-1);
  border-top-left-radius: calc(var(--lt-radius-md) + 1px);
}
/* In the app bar, so it tracks the bar's bottom edge whether or not the frameless window drops the bar's top border. Follows the card in when the rail takes a column beside it (0 wide when there is no rail).

   The mask belongs on this rule, not on a conditional one: without it the box paints as a plain chrome square over the page's corner. */
.reader-corner-tr {
  top: calc(100% - 1px);
  right: calc(var(--reader-gutter) + var(--reader-minimap-column));
  -webkit-mask-image: radial-gradient(circle at 0 100%, transparent 0 var(--reader-corner-cut), var(--lt-mask-opaque) var(--reader-corner-cut));
  mask-image: radial-gradient(circle at 0 100%, transparent 0 var(--reader-corner-cut), var(--lt-mask-opaque) var(--reader-corner-cut));
}
.reader-corner-tr::after {
  border-top-width: var(--lt-stroke-1);
  border-right-width: var(--lt-stroke-1);
  border-top-right-radius: calc(var(--lt-radius-md) + 1px);
}
.library-shell.library-closed .reader-corner-tl {
  /* No rail to sit against: follow the card out to its left gutter. */
  left: calc(100% + var(--reader-gutter));
}
.library-shell.library-closed {
  /* The page takes a left inset only while the pane is shut, and the floating bar is centered on the page, so it has to count that inset too — kept as a variable here, beside the other closed-pane facts, the way --reader-toolbar-rail is declared where the rail is reasoned about. */
  --reader-toolbar-gutter: var(--reader-gutter);
}
.library-divider {
  /* An invisible grab strip straddling the pane's right edge, wide enough to catch the pointer. Overhangs into the reader a few px. */
  position: absolute;
  top: 0;
  right: -3px;
  bottom: 0;
  width: 8px;
  z-index: 3;
  cursor: col-resize;
  touch-action: none;
}
.library-shell.library-closed .library-divider {
  display: none;
}
.library-shell.library-closed .library-crumbs,
.library-shell.library-closed .library-foot {
  /* Hide the pinned bands when snapped shut, or the unclipped pane would bleed them past the 0px column and show them over the reader. */
  display: none;
}
/* Fading with the travel: everything in the pane leaves 100% opaque and thins out over the close — riding visible to the seat reads as a ghost over the page, and vanishing on the first frame reads as a glitch. The pane itself keeps its surface, and the corner arc riding its edge never fades. */
body.is-library-closing .library-crumbs,
body.is-library-closing .library-foot,
body.is-library-closing .library-scroll,
body.is-library-settling .library-crumbs,
body.is-library-settling .library-foot,
body.is-library-settling .library-scroll {
  opacity: 0;
  transition: opacity var(--lt-duration-260) var(--lt-ease);
}
/* And back in at the same pace on open. An animation, not a transition: these were display:none while closed, and a freshly displayed element renders at its final value instead of transitioning. */
body.is-library-opening .library-crumbs,
body.is-library-opening .library-foot,
body.is-library-opening .library-scroll {
  animation: leaf-library-open-arrive var(--lt-duration-260) var(--lt-ease);
}
@keyframes leaf-library-open-arrive {
  from {
    opacity: 0;
  }
}
/* Except as a sheet, which is "closed" only to the grid — it is off-screen when shut, so there is nothing to bleed, and with this hidden it opened onto a blank band where the path belongs. */
.library-shell.library-narrow .library-crumbs {
  display: flex;
}
.library-shell.library-narrow .library-foot {
  display: grid;
}
/* The library toggle sits in the app bar's lead, left of Back. Rests muted like the other secondary toolbar icons, greens on hover. */
.library-open {
  /* The app's own furniture like the icons at the other end of the bar, so the pointer stays an arrow. Beats the shared hand by being one class. */
  cursor: default;
  /* The only control that opens the pane, so it holds its box however tight the zone gets, like the brand beside it. It never folds either. */
  flex-shrink: 0;
  border-color: transparent;
  background: transparent;
  color: var(--lt-muted-foreground);
}
.library-open:hover {
  background: var(--lt-navigation-button-hover-background);
  border-color: var(--lt-navigation-button-hover-background);
  color: var(--lt-primary-foreground);
}
.library-open .lt-icon {
  width: 16px;
  height: 16px;
}
/* While dragging the divider, lock the cursor and kill text selection window-wide. */
body.library-resizing {
  cursor: col-resize;
  user-select: none;
  -webkit-user-select: none;
}
/* The lock names the buttons as well: a button writes its own hand, and a pointer turning into a hand each time the drag crossed a control reads as the drag having let go. */
body.library-resizing button {
  cursor: col-resize;
}
.library-scroll {
  /* Scroll container filling the pane. Top padding clears the app bar and the breadcrumb band and bottom padding the launcher row, so the list starts below the bands, ends above the row, and scrolls under all three.

     NOTE: no `scrollbar-width`/`scrollbar-color` — in Chromium either standard property silently disables all `::-webkit-scrollbar` pseudo-elements. */
  position: absolute;
  inset: 0;
  /* Down only. Every row truncates itself, so a sideways bar on a narrow pane is noise — and it popped in and out while the pane animates. */
  overflow-y: auto;
  overflow-x: hidden;
  box-sizing: border-box;
  padding-top: var(--library-chrome-height);
  padding-bottom: var(--library-foot-height);
}
/* The pane wears the app's bar (see .leaf-scroll); only where it starts and ends is its own — clear of the app bar and the band under it, and of the launcher row at the foot. */
.library-scroll::-webkit-scrollbar-track {
  margin-top: var(--library-chrome-height);
  margin-bottom: var(--library-foot-height);
}
.library-tree {
  padding: 0 var(--lt-space-6) var(--lt-space-12);
}
.library-results {
  padding: 0 var(--lt-space-6) var(--lt-space-12);
}
/* The open document's headings, in the same box the file list and the search results use — one of the three shows at a time. */
.library-outline {
  padding: 0 var(--lt-space-6) var(--lt-space-12);
}
/* Not a row and not a button: one quiet line naming the list under it, with how many headings it holds at its right. */
.library-outline-note {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--lt-space-6);
  padding: var(--lt-space-4) var(--lt-space-6) var(--lt-space-6);
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-10);
}
.library-outline-count {
  flex: none;
}
/* A heading, drawn as the file rows beside it are drawn — one full-width target, stepped in by how deep the section sits. */
.library-outline-row {
  display: flex;
  align-items: center;
  gap: var(--lt-space-6);
  width: 100%;
  text-align: left;
  padding: var(--lt-space-4) var(--lt-space-6);
  padding-left: calc(var(--lt-space-6) + var(--library-outline-depth, 0) * var(--lt-space-12));
  margin-bottom: var(--lt-space-2);
  border: 0;
  border-radius: var(--lt-radius-md);
  background: transparent;
  color: inherit;
  font: inherit;
}
.library-outline-row:hover {
  background: var(--lt-wash-hover);
}
/* The section being read, with the treatment the file list gives the open file: it outranks hover, so it holds while the pointer is somewhere else. */
.library-outline-row.is-selected,
.library-outline-row.is-selected:hover {
  background: color-mix(in srgb, var(--lt-accent) 22%, transparent);
}
/* How far in each level sits, and how strongly it reads. Depth is measured from the shallowest heading the document has, so a note written entirely in `##` starts flush; the type steps down with it, so the structure reads without counting the indents. The two shallowest levels keep the body ink and stay fully legible; from the third in, the quiet ink lets a deep row recede. */
.library-outline-depth-0 {
  --library-outline-depth: 0;
  font-size: var(--lt-text-14);
  font-weight: var(--lt-weight-600);
  color: var(--lt-markdown-foreground);
}
.library-outline-depth-1 {
  --library-outline-depth: 1;
  font-size: var(--lt-text-13);
  font-weight: var(--lt-weight-500);
  color: var(--lt-markdown-foreground);
}
.library-outline-depth-2 {
  --library-outline-depth: 2;
  font-size: var(--lt-text-12);
  font-weight: var(--lt-weight-400);
  color: var(--lt-muted-foreground);
}
.library-outline-depth-3 {
  --library-outline-depth: 3;
  font-size: var(--lt-text-11);
  font-weight: var(--lt-weight-400);
  color: var(--lt-muted-foreground);
}
.library-outline-depth-4 {
  --library-outline-depth: 4;
  font-size: var(--lt-text-11);
  font-weight: var(--lt-weight-400);
  color: var(--lt-muted-foreground);
}
.library-outline-depth-5 {
  --library-outline-depth: 5;
  font-size: var(--lt-text-11);
  font-weight: var(--lt-weight-400);
  color: var(--lt-muted-foreground);
}
/* Said once to a reader who has never made a vault, at the top of the list and inside it — so no band moves and nothing is covered. A box rather than a bubble: this has to stand until a folder has been picked, and a bubble is gone the moment a pointer reaches what it points at. */
.library-intro {
  margin: var(--lt-space-6) 0 var(--lt-space-12);
  padding: var(--lt-space-12);
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-lg);
  background: var(--lt-surface-elevated);
}
.library-intro-title {
  display: block;
  font-size: var(--lt-text-13);
  font-weight: var(--lt-weight-600);
  line-height: var(--lt-leading-1-4);
  color: var(--lt-foreground);
}
.library-intro-text {
  margin: var(--lt-space-6) 0 var(--lt-space-10);
  font-size: var(--lt-text-12);
  line-height: var(--lt-leading-1-45);
  color: var(--lt-muted-foreground);
}
.library-intro-action {
  width: 100%;
  padding: var(--lt-space-6) var(--lt-space-10);
  border-radius: var(--lt-radius-md);
  font-size: var(--lt-text-12);
}
/* The one line above the rows, and the one place search says it is working: it counts what is drawn, and it carries the ring while an answer is still coming. Drawn whether or not there are hits, so a search run over an older query's rows marks them instead of leaving them looking like the answer. */
.library-results-count {
  display: flex;
  align-items: center;
  gap: var(--lt-space-4);
  margin: var(--lt-space-2) var(--lt-space-6) var(--lt-space-6);
  font-size: var(--lt-text-11);
  color: var(--lt-muted-foreground);
}
/* Sized to the line it sits in and painted in the same gray, so it reads as part of the sentence rather than as a control. */
.library-results-spinner {
  flex: none;
  width: 11px;
  height: 11px;
  border-width: var(--lt-stroke-1);
  border-color: color-mix(in srgb, var(--lt-muted-foreground) 30%, transparent);
  border-top-color: var(--lt-muted-foreground);
}
/* What the box made of a filter, above the results. Only ever shown for a query with syntax in it — a plain word would just be read back to the person who typed it. */
.library-search-note {
  display: flex;
  flex-direction: column;
  gap: var(--lt-space-2);
  margin: var(--lt-space-4) var(--lt-space-6) var(--lt-space-2);
  font-size: var(--lt-text-11);
  line-height: var(--lt-leading-1-4);
}
.library-search-read {
  color: var(--lt-muted-foreground);
}
/* A field name nobody in the vault has set. It reads as a warning rather than as a result count, because a filter naming one can only ever match nothing. */
.library-search-unknown {
  color: var(--lt-warning);
}
/* A search hit: the file's title on top, the match snippet below it. */
.library-hit {
  display: block;
  width: 100%;
  text-align: left;
  border: 0;
  border-radius: var(--lt-radius-md);
  padding: var(--lt-space-6) var(--lt-space-8);
  margin: 0 0 var(--lt-space-2);
  background: transparent;
  color: inherit;
  font-family: inherit;
}
.library-hit:hover {
  background: var(--lt-wash-hover);
}
.library-hit-title {
  display: block;
  font-size: var(--lt-text-13);
  font-weight: var(--lt-weight-600);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
/* The other name a hit matched, beside the file's own name on the same line. */
.library-hit-alias {
  margin-left: var(--lt-space-4);
  font-size: var(--lt-text-11);
  font-weight: var(--lt-weight-400);
  color: var(--lt-muted-foreground);
}
.library-hit-snippet {
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  margin-top: var(--lt-space-2);
  font-size: var(--lt-text-11);
  line-height: var(--lt-leading-1-4);
  color: var(--lt-muted-foreground);
}
/* The shape a result has, standing in the row it will take: a name, and the two clamped lines of matched words under it. Its own padding, because the row it stands for is a button and this is not one. */
.library-hit-waiting {
  display: block;
  padding: var(--lt-space-6) var(--lt-space-8);
  margin: 0 0 var(--lt-space-2);
}
.library-hit-waiting-title {
  width: 62%;
  height: var(--lt-text-13);
  margin-bottom: var(--lt-space-4);
}
.library-hit-waiting-line {
  height: var(--lt-text-11);
  margin-top: var(--lt-space-2);
}
.library-hit-waiting-line-short {
  width: 78%;
}
.library-hit-mark {
  background: color-mix(in srgb, var(--lt-primary) 40%, transparent);
  color: inherit;
  border-radius: var(--lt-radius-xs);
}
/* What you can type next, under the search field and placed from it: the field is one line tall, so the menu cannot live inside it. */
.filter-menu {
  position: absolute;
  z-index: var(--lt-z-50);
  max-width: 240px;
  padding: var(--lt-space-2);
  border: var(--lt-stroke-1) solid var(--lt-border);
  /* The shadow reads this too, and adds the spread to it, so the ring outside the corner is struck from the corner’s own center. */
  --lt-shadow-host-radius: var(--lt-radius-md);
  border-radius: var(--lt-shadow-host-radius);
  background: var(--lt-surface-elevated);
}
.filter-menu[hidden] {
  display: none;
}
.filter-menu-item {
  /* A menu row acts here without going anywhere, so the pointer stays an arrow. */
  cursor: default;
  display: block;
  width: 100%;
  padding: var(--lt-space-2) var(--lt-space-6);
  border: 0;
  border-radius: var(--lt-radius-sm);
  background: transparent;
  color: var(--lt-foreground);
  font-family: var(--app-font);
  font-size: var(--lt-text-11);
  text-align: left;
}
.filter-menu-item.is-active,
.filter-menu-item:hover {
  background: var(--lt-wash-hover);
}
/* The pinned band: the breadcrumb directly under the app bar. Absolute against the pane (not sticky) so it does not drift with the list, which slides up behind it. The pane's own surface and grain, on the same lattice, so the chrome is one continuous texture. Opaque, so the list never shows through. */
.library-crumbs {
  position: absolute;
  left: 0;
  right: 0;
  z-index: 2;
  box-sizing: border-box;
  /* Clip at the pane's right edge (the divider) so a narrow drag slides the controls under it instead of squashing or spilling past it. */
  overflow: hidden;
  display: flex;
  align-items: center;
  background-color: var(--lt-surface);
  background-image: radial-gradient(circle, var(--lt-grain-dot) 0 var(--lt-grain-radius), transparent var(--lt-grain-edge));
  background-size: var(--lt-grain-tile) var(--lt-grain-tile);
  background-repeat: repeat;
  background-attachment: fixed;
}
/* The launcher row, pinned to the pane's foot on the pane's own shade and grain the way the crumbs are pinned under the bar. The 4px inset is what lets one 32px button alone fit the pane's 40px floor exactly. */
.library-foot {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 2;
  box-sizing: border-box;
  /* One column as wide as the launcher row, capped at the pane, so the Grove pill under it takes the row's width and follows it. */
  display: grid;
  grid-template-columns: minmax(0, max-content);
  justify-content: start;
  align-content: start;
  height: var(--library-foot-height);
  padding: var(--lt-space-4);
  background-color: var(--lt-surface);
  background-image: radial-gradient(circle, var(--lt-grain-dot) 0 var(--lt-grain-radius), transparent var(--lt-grain-edge));
  background-size: var(--lt-grain-tile) var(--lt-grain-tile);
  background-attachment: fixed;
}
/* A hairline over the foot, inset to the pane's margins and fading out toward both ends. */
.library-foot::before {
  content: "";
  position: absolute;
  top: 0;
  left: var(--lt-space-8);
  right: var(--lt-space-8);
  height: var(--lt-stroke-1);
  background: linear-gradient(to right, transparent, var(--lt-border) 30%, var(--lt-border) 70%, transparent);
  pointer-events: none;
}
/* As strong as the narrow pane's own display and after it, or a sheet would draw an empty row. */
.library-shell .library-foot[hidden] {
  display: none;
}
.library-pane.has-foot {
  --library-foot-height: 40px;
}
/* The Grove pill takes one more row under the launchers: 4px between, 32 of its own. */
.library-pane.has-foot.has-grove {
  --library-foot-height: 76px;
}
/* The Grove pill. As wide as the launcher row above it and never wider, so it grows and shrinks with the row; its own words add nothing to the column's width, and a narrow row truncates the label and keeps the mark whole. */
.library-profile {
  display: flex;
  align-items: center;
  gap: var(--lt-space-6);
  box-sizing: border-box;
  contain: inline-size;
  width: 100%;
  max-width: 100%;
  min-width: 0;
  height: 32px;
  margin-top: var(--lt-space-4);
  padding: 0 var(--lt-space-10) 0 var(--lt-space-6);
  overflow: hidden;
  cursor: default;
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-pill);
  background: var(--lt-surface-elevated);
  color: var(--lt-foreground);
  font-family: var(--app-font);
  font-size: var(--lt-text-12);
  font-weight: var(--lt-weight-600);
}
.library-profile[hidden] {
  display: none;
}
/* A level is waiting: the pill wears the accent so the reader can see there is something to collect without opening it. */
.library-profile.has-claim {
  border-color: var(--lt-accent);
  background: color-mix(in srgb, var(--lt-accent) 16%, var(--lt-surface-elevated));
}
.library-profile:hover {
  background: var(--lt-navigation-button-hover-background);
  border-color: var(--lt-navigation-button-hover-background);
  color: var(--lt-primary-foreground);
}
.library-profile-mark {
  flex: none;
  width: 18px;
  height: 18px;
}
.library-profile-label {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
/* One row that never wraps, spaced like the app bar's own run of actions; a pane too narrow for it clips at the divider rather than spilling past it. */
.library-foot-rail {
  display: flex;
  gap: var(--lt-space-4);
  overflow: hidden;
}
/* The app bar's panel, placed over the foot's chevron rather than under the bar's, and open on its own class because the foot has no trailing group to wear one. */
.app-overflow-panel.library-foot-panel {
  top: auto;
  bottom: 100%;
  left: 4px;
  right: auto;
}
.app-overflow-panel.library-foot-panel.is-open {
  display: flex;
}
.library-crumbs {
  top: var(--library-app-bar);
  height: var(--library-crumbs-height);
  /* Tight against the trail: the button and the root crumb read as one group, the way a toolbar's control sits against what it acts on. */
  gap: var(--lt-space-2);
  padding: 0 var(--lt-space-6) 0 var(--lt-space-8);
}
.library-crumb-trail {
  flex: 1 1 auto;
  min-width: 0;
  display: flex;
  align-items: center;
  gap: var(--lt-space-2);
  overflow: hidden;
}
.library-crumb {
  flex: 0 0 auto;
  max-width: 55%;
  padding: var(--lt-space-1) var(--lt-space-4);
  border: 0;
  border-radius: var(--lt-radius-sm);
  background: transparent;
  color: var(--lt-muted-foreground);
  font-family: inherit;
  font-size: var(--lt-text-11);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.library-crumb:hover {
  background: var(--lt-wash-hover);
  color: var(--lt-foreground);
}
/* The folder you are in: full ink, and it gets the leftover room — the ancestors above it give way first. */
.library-crumb.is-current {
  flex: 0 1 auto;
  max-width: none;
  cursor: default;
  color: var(--lt-foreground);
  font-weight: var(--lt-weight-600);
}
.library-crumb.is-current:hover {
  background: transparent;
  color: var(--lt-foreground);
}
/* The "…" standing in for the folders that didn't fit. A real button: it opens a menu of what it swallowed (see .crumb-menu). */
.library-crumb.is-elided {
  padding: var(--lt-space-1) var(--lt-space-4);
}
.library-crumb.is-elided[aria-expanded="true"] {
  background: var(--lt-wash-hover);
  color: var(--lt-foreground);
}
/* While the trail measures how much of the path fits, nothing shrinks or clips — every crumb reports the width it actually wants. Held for one synchronous pass inside a single task, so this state never paints. */
.library-crumb-trail.is-measuring .library-crumb {
  flex: 0 0 auto;
  max-width: none;
}
/* The vault switcher, left of the trail. Its own control rather than the first crumb: that crumb is a place, and clicking a place should go there. This is the only thing in the pane that changes which root the trail is even about, so it sits outside the trail and reads as chrome. */
.library-vault-switch {
  /* This changes the pane's root without going anywhere, so the pointer stays an arrow. Beats the shared hand by being one class. */
  cursor: default;
  flex: none;
  display: inline-flex;
  align-items: center;
  gap: var(--lt-space-2);
  /* A bigger target than the glyph inside it: the whole thing is one button, and 20px of it is easy to miss. The icon plus the edge the crumbs beside it pay. */
  height: 23px;
  /* One edge either side, so the box says where the button ends: the band around the trail is what holds it off the pane, and the name beside it pays the same at their joint. */
  padding: 0 var(--lt-space-4);
  border: 0;
  border-radius: var(--lt-radius-sm);
  background: transparent;
  color: var(--lt-muted-foreground);
}
.library-vault-switch .lt-icon {
  width: 15px;
  height: 15px;
}
.library-vault-switch:hover,
.library-vault-switch[aria-expanded="true"] {
  background: var(--lt-wash-hover);
  color: var(--lt-foreground);
}
/* Open, the button and the vault's name beside it are one pill: what the list changes is the whole pane, not the 20px of icon you pressed. The button grows into the 2px gap and pulls the trail back by the same amount, so the name and every folder after it stay exactly where they were. The state is an attribute on the button, so a disk change rebuilding the trail underneath cannot lose it. */
.library-vault-switch[aria-expanded="true"] {
  padding-right: calc(var(--lt-space-4) + var(--lt-space-2));
  margin-right: calc(-1 * var(--lt-space-2));
  border-top-right-radius: 0;
  border-bottom-right-radius: 0;
}
.library-vault-switch[aria-expanded="true"] + .library-crumb-trail .library-crumb:first-child {
  /* The switcher's own height, or the joined pill goes ragged along its top and bottom edge. */
  height: 23px;
  border-top-left-radius: 0;
  border-bottom-left-radius: 0;
  background: var(--lt-wash-hover);
  color: var(--lt-foreground);
}
/* Standing at the vault's own root, the name is a span rather than a button, so nothing centers its text in a box this tall. It is also the only crumb there, so there is no ellipsis to lose. */
.library-vault-switch[aria-expanded="true"] + .library-crumb-trail .library-crumb.is-current:first-child {
  display: flex;
  align-items: center;
}
/* The start screen's copy heads a row rather than sitting in a band, so it cancels the switcher's left padding to sit flush with what is under it. */
.home-vault-switch {
  margin-left: calc(-1 * var(--lt-space-4));
  gap: var(--lt-space-4);
}
.library-crumb-caret {
  flex: none;
  font-size: var(--lt-text-9);
  line-height: var(--lt-leading-1);
}
/* The tick on the row you are in — including the whole-library row, which is a choice like any other. */
.crumb-menu-item.is-selected {
  font-weight: var(--lt-weight-600);
}
.crumb-menu-check {
  flex: none;
  width: 13px;
  height: 13px;
  margin-left: auto;
  color: var(--lt-accent-ink);
}
/* A vault row switches to it; its button opens that vault's settings. */
.crumb-menu-row {
  display: flex;
  align-items: center;
}
.crumb-menu-row .crumb-menu-item {
  flex: 1 1 auto;
  min-width: 0;
}
.crumb-menu-edit {
  /* A menu control acts here without going anywhere, so the pointer stays an arrow. */
  cursor: default;
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  margin-right: var(--lt-space-4);
  padding: 0;
  border: 0;
  border-radius: var(--lt-radius-sm);
  background: transparent;
  opacity: 0;
  /* Its own reveal, so the shared hover fade at the top of the file never reaches it: the colors are named here and in the row's own hover below. */
  transition: var(--lt-transition-hover-reveal-leave), background-color var(--lt-duration-120) var(--lt-ease),
    color var(--lt-duration-120) var(--lt-ease);
  color: color-mix(in srgb, var(--lt-muted-foreground) 75%, transparent);
}
.crumb-menu-edit .lt-icon {
  width: 14px;
  height: 14px;
}
.crumb-menu-row:hover .crumb-menu-edit,
.crumb-menu-row:focus-within .crumb-menu-edit {
  opacity: 1;
  transition: var(--lt-transition-hover-reveal-arrive), background-color var(--lt-duration-120) var(--lt-ease),
    color var(--lt-duration-120) var(--lt-ease);
}
.crumb-menu-row:hover .crumb-menu-edit {
  color: var(--lt-muted-foreground);
}
.crumb-menu-edit:hover {
  background: var(--lt-wash-hover);
  color: var(--lt-foreground);
}
/* Which vault the panel is about, so the rows below it are unambiguous. */
.crumb-menu-heading {
  padding: var(--lt-space-4) var(--lt-space-10) var(--lt-space-2);
  font-size: var(--lt-text-10);
  font-weight: var(--lt-weight-600);
  letter-spacing: var(--lt-tracking-040);
  text-transform: uppercase;
  color: var(--lt-muted-foreground);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
/* The name field. Enter or leaving it commits; Escape abandons the edit. */
.crumb-menu-input {
  display: block;
  width: calc(100% - 12px);
  box-sizing: border-box;
  margin: var(--lt-space-2) var(--lt-space-6) var(--lt-space-4);
  padding: var(--lt-space-4) var(--lt-space-8);
  border-radius: var(--lt-radius-md);
  border: var(--lt-stroke-1) solid color-mix(in srgb, var(--lt-muted-foreground) 35%, transparent);
  background: var(--lt-surface);
  color: inherit;
  font-family: inherit;
  font-size: var(--lt-text-12);
}
.crumb-menu-input:focus {
  outline: none;
  border-color: color-mix(in srgb, var(--lt-foreground) 45%, transparent);
}
/* The elided folders, listed under the "…". Rows carry a folder icon, so they read as places rather than commands. */
.crumb-menu {
  min-width: 132px;
  max-width: 300px;
}
.crumb-menu-item {
  display: flex;
  align-items: center;
  gap: var(--lt-space-6);
  font-weight: var(--lt-weight-500);
}
.crumb-menu-item .library-action-icon {
  flex: none;
  width: 15px;
  height: 15px;
  color: var(--lt-muted-foreground);
}
.crumb-menu-label {
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}
.crumb-menu-switch {
  flex: none;
  width: 28px;
  height: 16px;
  margin-left: auto;
  padding: var(--lt-space-2);
  box-sizing: border-box;
  border-radius: 8px;
  background: var(--lt-border);
  transition: background-color var(--lt-duration-120) var(--lt-ease);
}
.crumb-menu-switch-thumb {
  display: block;
  width: 12px;
  height: 12px;
  border-radius: 6px;
  background: var(--lt-accent-foreground);
  transition: transform var(--lt-duration-120) var(--lt-ease);
}
.crumb-menu-item[role="switch"][aria-checked="true"] .crumb-menu-switch {
  background: var(--lt-accent);
}
.crumb-menu-item[role="switch"][aria-checked="true"] .crumb-menu-switch-thumb {
  transform: translateX(12px);
}
.library-crumb-sep {
  flex: none;
  color: color-mix(in srgb, var(--lt-muted-foreground) 60%, transparent);
  font-size: var(--lt-text-10);
}
.library-file,
.library-nav-folder {
  display: flex;
  align-items: center;
  gap: var(--lt-space-6);
  width: 100%;
  text-align: left;
  padding: var(--lt-space-4) var(--lt-space-6);
  /* A hair of vertical space so adjacent row highlights don't touch. */
  margin-bottom: var(--lt-space-2);
  border: 0;
  border-radius: var(--lt-radius-md);
  background: transparent;
  color: inherit;
  font: inherit;
}
.library-file:hover,
.library-nav-folder:hover {
  background: var(--lt-wash-hover);
}
/* The way back out is an ordinary row: it takes the block above and writes nothing of its own, so it wears the same pill, the same box and the same ink as the folders under it. */
/* The currently-open file: accent-tinted, outranking hover so it holds while pointing elsewhere. */
.library-file.is-selected,
.library-file.is-selected:hover {
  background: color-mix(in srgb, var(--lt-accent) 22%, transparent);
}
/* The leaf mark before Markdown file names. Same inline glyph as the header logomark, so it tracks the theme's primary color instead of a baked-in one. */
.library-file > .lt-icon {
  flex: none;
  width: 14px;
  height: 14px;
  color: var(--lt-primary-ink);
}
/* The mark on a library action — the way back out, New vault…, Remove vault — dimmed to the muted tone so the word stays primary. No size of its own: the back row sits among folder rows and takes the same icon box they do. */
.library-action-icon {
  flex: none;
  color: var(--lt-muted-foreground);
}
.library-file-label {
  /* Fill the row so the fade lands on empty space until the name overflows; without flex:1 the label hugs its text and the mask clips every name. */
  flex: 1;
  min-width: 0;
  overflow: hidden;
  white-space: nowrap;
  /* Long names fade out at the right edge instead of showing an ellipsis, matching the tab labels. */
  -webkit-mask-image: linear-gradient(to right, var(--lt-mask-opaque) calc(100% - 18px), transparent);
  mask-image: linear-gradient(to right, var(--lt-mask-opaque) calc(100% - 18px), transparent);
}
.library-file .library-file-label,
.library-hit-title,
.home-row-name {
  display: flex;
  align-items: center;
  gap: var(--lt-space-4);
}
.library-file .library-file-label,
.library-hit-title {
  overflow: visible;
  -webkit-mask-image: none;
  mask-image: none;
}
.file-name-stem {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.library-file .file-name-stem {
  /* Long names fade before the badge, keeping the type visible at the trailing edge. */
  -webkit-mask-image: linear-gradient(to right, var(--lt-mask-opaque) calc(100% - 18px), transparent);
  mask-image: linear-gradient(to right, var(--lt-mask-opaque) calc(100% - 18px), transparent);
}
.file-type-badge {
  flex: none;
  padding: 0 var(--lt-space-4);
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-sm);
  background: var(--lt-surface-elevated);
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-10);
  font-weight: var(--lt-weight-600);
  white-space: nowrap;
}
.library-file .file-type-badge,
.library-hit-title .file-type-badge {
  margin-left: auto;
}
/* Folder rows: name left, a muted chevron pinned to the right edge marking the row as something you can enter. */
.library-nav-chevron {
  margin-left: auto;
  padding-left: var(--lt-space-8);
  color: var(--lt-muted-foreground);
}
.library-project {
  display: flex;
  flex-direction: column;
}
.library-empty {
  padding: var(--lt-space-8) var(--lt-space-12);
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-12);
}
/* The day picked in the calendar, heading the pane's third list, with the press that clears it. */
.library-calendar-note {
  align-items: center;
  text-transform: uppercase;
  letter-spacing: var(--lt-tracking-060);
}
.library-calendar-clear {
  width: 20px;
  height: 20px;
  border-color: transparent;
  background: transparent;
  color: var(--lt-muted-foreground);
}
.library-calendar-clear:hover {
  background: var(--lt-wash-hover);
  border-color: transparent;
  color: var(--lt-foreground);
}
.library-calendar-clear > .lt-icon {
  width: 12px;
  height: 12px;
}
/* The folder a day's document sits in, after its name, so two notes of one name read apart. */
.library-calendar-folder {
  flex: none;
  max-width: 40%;
  overflow: hidden;
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-10);
  text-overflow: ellipsis;
  white-space: nowrap;
}
/* The page: a card on the chrome, held off the window frame by --reader-gutter on the sides and the bottom so the bar's texture runs around it. Its own hairline and bottom rounding draw three of the four edges; the top stays flush and square, tucked under the bar, because the active tab has to read as joined to the document there — the bar's ::after divider is that edge, and .reader-corner-tl / -tr round where it turns the corner.

   Against an open library there is no left gutter: the card sits flush on the rail, and its left border is the stroke that marks the rail's edge. */
/* The graph, in the reader's own cell and wearing the page's frame, because it stands in for the page. The Pixi canvas owns pan and zoom, so this never scrolls. */
/* Columns 2 and 3: the reading column and the minimap's track. The map has no minimap, and a reserved-but-empty strip down the right of a canvas reads as a rendering fault rather than a layout. The gutter (column 4) stays, so the map is held off the window frame like the page is. */
.reader-graph {
  grid-column: 2 / 4;
  grid-row: 1;
  box-sizing: border-box;
  position: relative;
  overflow: hidden;
  background: var(--lt-markdown-background);
  border-left: var(--lt-stroke-1) solid var(--lt-border);
  border-right: var(--lt-stroke-1) solid var(--lt-border);
  border-bottom: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: 0 0 var(--reader-card-radius) var(--reader-card-radius);
  /* Clear the app bar the page tucks under. */
  padding-top: var(--app-bar-height);
}
.library-shell.library-closed .reader-graph {
  /* Standing in for the page means standing where it stands: with no pane to sit against, the card is held off the left frame by the same gutter, and the arc that caps its top-left is already moved out to it. */
  margin-left: var(--reader-gutter);
}
.reader-graph-canvas {
  width: 100%;
  height: 100%;
}
/* The wash over a slow load has to cover the same width the map draws on, or it stops a column short and leaves a lit strip down the right. The bar spans both columns in every view (see .reader-toolbar), so it needs nothing here. */
:root[data-graph-view="true"] .reader-loading {
  grid-column: 2 / 4;
}
/* The map has no minimap, so in this view there is no minimap column — said once here rather than in each place measuring to a rail that is not there. The bar's divider and .reader-corner-tr are both positioned off it, so they stopped a column short of the map and turned the arc down in mid-air over the canvas. On `body`, where the rule that opens the column sets it: a custom property set on an element beats one inherited from :root, however specific that selector. */
:root[data-graph-view="true"] > body {
  --reader-minimap-column: 0px;
}
.reader-graph-canvas canvas {
  display: block;
}
/* The key to the two node shapes, in the map's top corner — out of the way of the status line at the foot, and of the toolbar that floats over it. */
.reader-graph-legend {
  position: absolute;
  top: 12px;
  right: 16px;
  display: flex;
  align-items: center;
  gap: var(--lt-space-6);
  margin: 0;
  font-size: var(--lt-text-12);
  color: var(--lt-muted-foreground);
  pointer-events: none;
}
/* Laid out with flex, so the attribute that hides it needs saying explicitly. */
.reader-graph-legend[hidden] {
  display: none;
}
/* The swatches are the nodes themselves at rest: a filled dot and a ring, in the same two tokens graphColors() hands PixiJS. */
.graph-key {
  width: 9px;
  height: 9px;
  border-radius: 50%;
}
.graph-key-document {
  background: var(--lt-muted-foreground);
}
.graph-key-external {
  /* Set off from the label before it, so the two pairs read as two pairs. */
  margin-left: var(--lt-space-8);
  /* Ring plus a dot at the middle, matching the node — the dot is what an edge ends behind on the canvas. */
  border: var(--lt-stroke-1-5) solid var(--lt-border);
  background: radial-gradient(circle at center, var(--lt-border) 1.6px, transparent 1.6px);
}
.reader-graph-status {
  position: absolute;
  left: 0;
  right: 0;
  bottom: calc(var(--reader-toolbar-space) + 12px);
  margin: 0;
  padding: 0 var(--lt-space-16);
  text-align: center;
  font-size: var(--lt-text-12);
  color: var(--lt-muted-foreground);
  pointer-events: none;
}
/* The floating bar: the views, then the edits, parked over the foot of the page. Placed by the grid rather than inside the scroller, so it holds still while the document moves under it, and centered because it belongs to the page rather than to either edge of the window. */
/* How much room the page leaves at its foot for the bar: the bar's own height plus the gap it floats above the edge, and nothing at all when it is not there. */
:root {
  --reader-toolbar-space: 0px;
  --reader-toolbar-edits: 0px;
  --reader-toolbar-rail: 0px;
  /* The gutter the page is held off the left frame by, which only a shut pane opens — see library.css. */
  --reader-toolbar-gutter: 0px;
}
/* An embedded host hides the bar with a rule, so the window state stays off that host. */
body.has-reader-toolbar:not(.is-embedded) {
  --reader-toolbar-space: 52px;
}
.reader-toolbar {
  /* Page column plus the minimap's, in every view: only the reading view opens that second track, so centering on the page alone put the same bar 31px left of where the source view drew it and moved the button a reader goes back to most. The source view's own map strip is the editor's, drawn inside the page column, so it is already inside this measurement. */
  grid-column: 2 / 4;
  grid-row: 1;
  align-self: end;
  justify-self: center;
  /* The same choice the top bar makes: stand over the document wait, which is at 6. Seven is the smallest layer that clears it. */
  z-index: 7;
  /* Anchor for the dot-screened shadow behind it. */
  position: relative;
  display: flex;
  align-items: center;
  gap: var(--lt-space-2);
  /* Off the page's bottom edge by the same 8px the card is held off the frame. */
  margin-bottom: var(--lt-space-8);
  /* The rail measure stays fixed while views collapse the column they do not draw. The gutter is subtracted because a left inset moves the page's own middle right, and a right margin that moves a centered box left has to shrink to follow it. */
  margin-right: calc(var(--reader-toolbar-rail) - var(--reader-toolbar-edits) - var(--reader-toolbar-gutter));
  padding: var(--lt-space-4);
  /* The shadow reads this too, and adds the spread to it, so the ring outside the corner is struck from the corner’s own center. */
  --lt-shadow-host-radius: var(--lt-radius-lg);
  border-radius: var(--lt-shadow-host-radius);
  /* Transparent, not gone: the border keeps the box's size while ::after paints the visible face — see below. */
  border: var(--lt-stroke-1) solid transparent;
  background: transparent;
}
/* The bar's face — fill and hairline — on ::after rather than the element: a negative-z child paints over its parent's own background, so the only way the dot shadow (::before) gets behind an opaque face is for the face to be a later negative-z child itself. inset -1px re-covers the border box the element's transparent border holds in layout. */
.reader-toolbar::after {
  content: "";
  position: absolute;
  z-index: var(--lt-z-below);
  inset: -1px;
  border-radius: var(--lt-radius-lg);
  border: var(--lt-stroke-1) solid var(--lt-border);
  /* Opaque: the page scrolls underneath it. */
  background: var(--lt-surface);
  pointer-events: none;
}
.reader-tool-group {
  position: relative;
  display: flex;
  align-items: center;
  gap: var(--lt-space-2);
}
.reader-tool-chip {
  position: absolute;
  top: 0;
  left: 0;
  width: 30px;
  height: 30px;
  border-radius: var(--lt-radius-md);
  background: var(--lt-accent);
  pointer-events: none;
  transform: translateX(var(--reader-tool-chip-x, 0px));
  /* Transform owns the transition because an unregistered custom property cannot interpolate. */
  transition: transform var(--lt-duration-200) var(--lt-ease-overshoot);
}
/* The reading view's tools, sunk into the bar beside the button that turns that view on. A recess says "these belong to the thing next to them"; another row of same-level buttons would just read as more views. Grained on the same window-anchored lattice as the bar and the rail, so it is the same surface pressed in rather than a different one laid on top. */
/* The vault's own sync button, at the end of its crumb row. Carries a count rather than a bare dot: "3" is a reason to press it, a dot is only a rumor. Absent entirely when there is nothing waiting -- see renderVaultSyncButton. */
.library-sync {
  display: inline-flex;
  align-items: center;
  gap: var(--lt-space-6);
  flex: 0 0 auto;
  margin-left: auto;
  padding: var(--lt-space-2) var(--lt-space-6) var(--lt-space-2) var(--lt-space-4);
  border: 0;
  border-radius: 999px;
  background: color-mix(in srgb, var(--lt-accent) 16%, transparent);
  color: var(--lt-accent-ink);
  font-size: var(--lt-text-11);
  font-variant-numeric: tabular-nums;
}
.library-sync:hover {
  background: color-mix(in srgb, var(--lt-accent) 26%, transparent);
}
/* Automatic sync has stopped after a failed job; the word in the count says what the tint only hints at. */
.library-sync.is-stopped {
  background: color-mix(in srgb, var(--lt-danger) 16%, transparent);
  color: var(--lt-danger);
}
.library-sync.is-stopped:hover {
  background: color-mix(in srgb, var(--lt-danger) 26%, transparent);
}
.library-sync[hidden] {
  display: none;
}
/* On its way out, still turning. */
.library-sync.is-leaving {
  opacity: 0;
  /* Accelerate, because it is leaving. Its length stays: SYNC_FADE_MS in library.js hides the button on the same 260ms, and it is slow on purpose — the last thing seen is the work finishing. */
  transition: opacity var(--lt-duration-260) var(--lt-ease-accelerate);
  pointer-events: none;
}
.library-sync .lt-icon {
  width: 13px;
  height: 13px;
}
.library-sync:disabled {
  cursor: default;
}
/* Turning while it works, so a slow push looks like a slow push. An <svg> takes its transform origin from its own box, so this has to be said out loud or the glyph orbits the button's top-left corner instead of spinning. */
.library-sync.is-busy .lt-icon {
  transform-origin: 50% 50%;
  animation: lt-spin var(--lt-duration-1100) var(--lt-ease-linear) infinite;
}
/* Slowed, not stopped, and its own rule because the glyph is an icon rather than an .lt-spinner. */
@media (prefers-reduced-motion: reduce) {
  .library-sync.is-busy .lt-icon {
    animation-duration: var(--lt-duration-2400) !important;
  }
}

/* A line of explanation inside the vault menu: what the repository is, or what is missing before it can be one. Sized down from a row and not clickable, so it never looks like a button that has stopped working. */
.crumb-menu-note {
  padding: var(--lt-space-4) var(--lt-space-10) var(--lt-space-6);
  font-size: var(--lt-text-11);
  line-height: var(--lt-leading-1-4);
  color: var(--lt-muted-foreground);
  white-space: normal;
  word-break: break-word;
}
/* Save beside Cancel, sharing the width, rather than stacked into two rows that read as two separate choices. */
.crumb-menu-actions {
  display: flex;
  gap: var(--lt-space-4);
  padding: var(--lt-space-2) var(--lt-space-4);
}
.crumb-menu-actions .crumb-menu-action {
  flex: 1 1 0;
  justify-content: center;
}
/* The check icon is borrowed from the selected-row tick, which pushes itself to the far edge; here it rides next to its label, centered as one group. */
.crumb-menu-actions .crumb-menu-action .lt-icon {
  margin-left: 0;
}
.crumb-menu-actions .crumb-menu-action.is-primary {
  color: var(--lt-accent-ink);
}
.crumb-menu-note.is-danger {
  color: var(--lt-danger);
}
.crumb-menu-item:disabled {
  opacity: var(--lt-opacity-50);
  cursor: default;
}
/* The tray the view's tools ride in, and it is one element in one place: a small nub standing proud of the bar over the button whose tools it holds, which grows upward into the whole tray on hover or keyboard focus and shrinks back into the nub when both are gone. Never a second panel arriving over the page — the drawer is always there and only its height changes, which is what makes the nub read as the thing the tools come out of. Its foot sits inside the bar's border box behind the opaque face, so the two meet with no seam. Placed by --reader-tray-left, the middle of the button of the view whose tools these are, written by renderViewTools: CSS anchor positioning is not on the Mac web view, so the offset is measured rather than declared. */
.reader-tool-tray {
  position: absolute;
  /* Three pixels down inside the bar's border box, so the foot is covered and the nub stands six proud of it. It grows from here and never moves. Geometry of this one component. */
  --reader-tray-foot: 3px;
  /* How tall the nub is parked: the three sunk into the bar plus the six standing proud of it. Named because this height and the bounce both need it. Geometry of this one component. */
  --reader-tray-nub: 9px;
  bottom: calc(100% - var(--reader-tray-foot));
  left: var(--reader-tray-left, 50%);
  display: flex;
  flex-direction: column;
  /* The tools stay against the fixed bottom while the tray's top edge opens and closes over them. */
  justify-content: flex-end;
  align-items: center;
  box-sizing: border-box;
  /* Parked, it is the nub. A real height rather than a ceiling, because the spring on the way out has to carry the box past its resting size and a ceiling would simply stop at the content. */
  height: var(--reader-tray-nub);
  /* No bottom edge to draw — that side is inside the bar — and only the corners that show are rounded, so the nub is the tray's own top and nothing else. */
  /* One visible step on every edge, with the hidden foot and the bar's top stroke repaid at the bottom. */
  padding: var(--lt-space-2) var(--lt-space-2) calc(var(--lt-space-2) + var(--reader-tray-foot) + var(--lt-stroke-1));
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-bottom: none;
  /* The shadow reads this too, and adds the spread to it, so the ring outside the corner is struck from the corner’s own center. */
  --lt-shadow-host-radius: var(--lt-radius-md);
  border-radius: var(--lt-shadow-host-radius) var(--lt-shadow-host-radius) 0 0;
  /* The bar's own face, carried up with the tray. The recess wash is a translucent black, which reads as a well only because something opaque is behind it — over a document the page would read straight through the tools. Opaque the whole time: there is no fade here, because a thing growing out of the bar was never somewhere else. */
  background: var(--lt-surface);
  /* `clip` rather than `hidden` lets the ring paint into the margin below. */
  overflow: clip;
  /* Exactly the ring and nothing else. The tools are clipped by their own box, so this margin paints none of them. */
  overflow-clip-margin: var(--lt-shadow-spread);
  /* The bar's own lower layer, in both states: the face is a later negative-layer child, so it covers the foot inside the bar's box and nothing above it. */
  z-index: var(--lt-z-below);
  transform: translateX(-50%);
  /* The nub answers the pointer, which is how the tray is reached at all; clipped to the nub, it can take nothing else. */
  pointer-events: auto;
  transition: left var(--lt-duration-200) var(--lt-ease-overshoot), height var(--lt-duration-160) var(--lt-ease-accelerate);
}
.reader-tool-tray[hidden] {
  display: none;
}
/* Home in three legs, the way the library's pane comes home. The slam above arrives on the nub, this rides a little back out of it, and the seat below lands on it — one curve cannot leave its target again, so `graph.js` stages these two as classes and the stylesheet keeps the heights. Both stand above the open rule and carry its own specificity, so a pointer or a keyboard coming back mid-bounce wins on source order and the tray springs out from wherever it had reached. */
.reader-tool-tray.is-reader-tray-bouncing {
  /* Seven percent of what the tray is holding, which is the share the library rides back out of its own travel. Not a fixed distance: the map's tray is little more than half as tall, so one number bounces it nearly twice as far. */
  height: calc(var(--reader-tray-nub) + var(--reader-tray-height, 80px) * 0.07);
  transition: left var(--lt-duration-200) var(--lt-ease-overshoot), height var(--lt-duration-120) var(--lt-ease-decelerate);
}
/* Back onto the nub the rule above already rests at, on the same settling curve — only the timing is this leg's. */
.reader-tool-tray.is-reader-tray-seating {
  transition: left var(--lt-duration-200) var(--lt-ease-overshoot), height var(--lt-duration-120) var(--lt-ease-decelerate);
}
/* Out: the nub grown to hold what is in it, quick and with the spring the owner asked for — the overshoot curve runs about a tenth past the mark and settles back, which is the rubberband at the top. Two ways in besides the tray's own nub: the button of the view these tools belong to, and the keyboard reaching anything inside. */
/* The keyboard is `:focus-visible` rather than `:focus-within` on purpose. A press leaves focus on the button it landed on, so plain focus pins the tray open until the reader clicks somewhere else — press the padlock, take your hand away, and it stays out. `:focus-visible` is exactly the distinction: Tab sets it, a press does not, so the tray closes on a press the way it closes on a hover that left. The one press that has to hold it is the graph size, whose list is a window of its own that the pointer leaves the tray to reach — a select keeps plain focus the whole time its list is up, which is what that last selector is for and why it names `select` rather than anything focused. */
.reader-toolbar.has-open-tray .reader-tool-tray {
  /* The tools' measured height plus both visible steps, the hidden foot, and the tray and bar strokes. */
  height: calc(var(--reader-tray-height, 80px) + var(--lt-space-2) * 2 + var(--reader-tray-foot) + var(--lt-stroke-1) * 2);
  transition: left var(--lt-duration-200) var(--lt-ease-overshoot), height var(--lt-duration-200) var(--lt-ease-overshoot);
}
.reader-tool-tray-clip {
  align-self: stretch;
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  justify-content: flex-end;
  align-items: center;
  min-height: 0;
  overflow: clip;
}
/* Exactly as wide as a view button is tall, so the tray is the width of one control and rises rather than widening the bar; its own tools are smaller and center inside it. A column, because the tray goes up. Everything below this line is the well it always was — the wash, the grain and the inset edge move across as they are. */
.reader-view-tools {
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  /* Never squashed to fit the nub. A flex item shrinks by default, so inside a tray clipped to its shortest the tools would compress to that height instead of standing behind it. */
  flex: none;
  box-sizing: border-box;
  /* As wide as a view button is tall where it holds icons, and as wide as it needs where it holds the graph's named list. The tray is out of the bar's row either way, so neither widens the bar. */
  min-width: 30px;
  gap: var(--lt-space-1);
  margin: 0;
  padding: var(--lt-space-2) 0;
  border-radius: var(--lt-radius-md);
  /* A well cut into the bar: a wash of shadow over its face, and more inside the top edge. Black at an alpha, never a mix toward the foreground — that lightens on a dark theme, which is a recess lit from inside. Not a shade mixed from the chrome token either, so the bar stays one color. */
  /* The one grained surface in the reader that tiles from its own box rather than the app's shared lattice, and it says so: the tray is centered by a transform, and a transform re-anchors a fixed background to the moving box. The well floats over an ungrained tray face, so it meets no other grain and has no seam to show — asking for the shared lattice here only claimed a phase it could not hold. */
  background-color: var(--lt-tint-recess);
  background-image: radial-gradient(circle, var(--lt-grain-dot) 0 var(--lt-grain-radius), transparent var(--lt-grain-edge));
  background-size: var(--lt-grain-tile) var(--lt-grain-tile);
  box-shadow: var(--lt-shadow-inset);
}
.reader-view-tools[hidden] {
  display: none;
}
/* The graph's one setting: a named list of four sizes, so it reads rather than being clicked through. No words beside it — nothing else in the bar is labeled, the list says what it is, and the name it needs for a screen reader is on the control. Same box as the panel dropdown it came from, one padding step shorter because it stands beside 24px buttons. */
.reader-subselect {
  display: inline-flex;
  align-items: center;
  gap: var(--lt-space-6);
  color: var(--lt-muted-foreground);
}
.reader-subselect[hidden] {
  display: none;
}
.reader-subselect select {
  height: 26px;
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-md);
  background: var(--lt-surface-elevated);
  color: var(--lt-foreground);
  font-family: var(--app-font);
  /* The smallest the tokens carry: the list is the whole of what the tray holds on the map, and it stood wider than the bar under it. */
  font-size: var(--lt-text-9);
  font-weight: var(--lt-weight-600);
  line-height: var(--lt-leading-1-2);
  padding-block: var(--lt-space-4);
}
.leaf-select {
  position: relative;
}
.leaf-select select {
  appearance: none;
  padding-inline: var(--lt-space-8) var(--lt-space-24);
}
.leaf-select > .lt-icon-chevron-down {
  position: absolute;
  top: 50%;
  right: var(--lt-space-6);
  color: var(--lt-foreground);
  pointer-events: none;
  transform: translateY(-50%);
}
/* Smaller than a view button, and never blue: the blue chip is how this bar says which view you are in, and a setting inside a view must not wear it. On gets a page-colored fill raised out of the recess's grain, so the state reads at a glance; off sits flat and muted. */
.reader-subtool {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  padding: 0;
  border: 0;
  border-radius: 6px;
  background: transparent;
  color: var(--lt-muted-foreground);
  /* Switching this on lights a fill, an ink and a hairline together, and the shared rule at the top of the file carries no shadow — so all three are named here rather than putting a shadow transition on every button in the app to time one chip. */
  transition: background-color var(--lt-duration-120) var(--lt-ease), color var(--lt-duration-120) var(--lt-ease),
    box-shadow var(--lt-duration-120) var(--lt-ease);
}
/* The tools in the recess come and go with the view, and a display of our own beats the browser's rule for [hidden] — so say it again here. */
.reader-subtool[hidden] {
  display: none;
}
.reader-subtool .lt-icon {
  width: 16px;
  height: 16px;
}
.reader-subtool:hover {
  background: var(--lt-wash-hover);
  color: var(--lt-foreground);
}
/* On is a lit chip in its own frame: the page color pushed away from the recess, so it lifts off the grain on a light theme and a dark one alike, and a hairline drawing the edge of what is switched on. The page color alone is the tone of the bar behind it and reads as nothing. */
.reader-subtool[aria-pressed="true"],
.reader-subtool[aria-pressed="true"]:hover {
  color: var(--lt-foreground);
  background: color-mix(in srgb, var(--lt-background) 88%, var(--lt-foreground));
  box-shadow: var(--lt-shadow-edge-strong);
}
/* One button, two glyphs, and the pressed state picks which. Swapping innerHTML instead would rebuild the icon under the pointer on every render. */
.reader-swap-glyph {
  display: inline-flex;
}
/* The gauge reads as a speedometer: off, its needle points left (slow), so the off glyph is mirrored; on, it points right (fast) and its heavier stroke makes it the louder of the two. */
.reader-subtool .reader-glyph-off {
  transform: scaleX(-1);
}
.reader-subtool .reader-glyph-on,
.reader-subtool[aria-pressed="true"] .reader-glyph-off {
  display: none;
}
.reader-subtool[aria-pressed="true"] .reader-glyph-on {
  display: inline-flex;
}
.reader-tool {
  /* This changes the view without going anywhere, so the pointer stays an arrow. Beats the shared hand by being one class. */
  cursor: default;
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 30px;
  height: 30px;
  padding: 0;
  border: 0;
  border-radius: var(--lt-radius-md);
  background: transparent;
  color: var(--lt-muted-foreground);
}
.reader-tool .lt-icon {
  width: 17px;
  height: 17px;
}
/* No `:not(:disabled)` here: every tool in the bar is always enterable, and the bar itself is gone when there is no document. */
.reader-tool:hover {
  background: var(--lt-wash-hover);
  color: var(--lt-foreground);
}
/* The view you are in. The one piece of color in the bar, so the bar answers "where am I" at a glance — the same job the highlighted tool does in Figma. */
.reader-tool.is-active,
.reader-tool.is-active:hover {
  background: transparent;
  color: var(--lt-accent-foreground);
}
/* The active glyph is drawn a touch heavier than its resting outline, so the selected view reads as bolder as well as brighter. A mask has no strokes to thicken, so it swaps to the bolder drawing, which `just bundle-icons` writes from the same file at stroke-width 2.25. */
.reader-tool.is-active .lt-icon-document {
  -webkit-mask-image: var(--lt-icon-document-heavy);
  mask-image: var(--lt-icon-document-heavy);
}
.reader-tool.is-active .lt-icon-code-view {
  -webkit-mask-image: var(--lt-icon-code-view-heavy);
  mask-image: var(--lt-icon-code-view-heavy);
}
.reader-tool.is-active .lt-icon-graph {
  -webkit-mask-image: var(--lt-icon-graph-heavy);
  mask-image: var(--lt-icon-graph-heavy);
}
.reader-tool-divider {
  width: 1px;
  height: 18px;
  margin: 0 var(--lt-space-4);
  background: var(--lt-border);
}
/* Save keeps its word. It is the one thing in the bar that writes to disk, and an icon would make it guessable rather than certain. */
.reader-tool-save {
  height: 30px;
  padding: 0 var(--lt-space-12);
  border: 0;
  border-radius: var(--lt-radius-md);
  background: var(--lt-accent);
  color: var(--lt-accent-foreground);
  font-family: inherit;
  font-size: var(--lt-text-12);
  font-weight: var(--lt-weight-600);
}
.reader-tool-save:hover {
  filter: brightness(var(--lt-hover-lift));
}
/* `display` on a class beats the user agent's `[hidden] { display: none }`, so every one of these has to turn itself off explicitly. Without the first rule the bar ignored `hidden` entirely and sat over the home screen. */
.reader-toolbar[hidden],
.reader-tool[hidden],
.reader-tool-save[hidden] {
  display: none;
}
/* Nothing drawn after the divider: it has nothing to divide. Asked of the markup rather than named button by button, so a button added after it needs no edit here — which is why every element after it has to ship `hidden`. */
.reader-toolbar.no-trailing-tools .reader-tool-divider {
  display: none;
}
.reader-shell {
  background: var(--lt-markdown-background);
  /* Pin the reader to its grid cell. Auto-placed, it gets evicted into the 0px library column when the .reader-loading overlay (which claims column 2, row 1) is unhidden — the document then reflows at zero width and every scroll computation made while the wait is up lands wrong. */
  grid-column: 2;
  grid-row: 1;
  box-sizing: border-box;
  border-left: var(--lt-stroke-1) solid var(--lt-border);
  border-right: var(--lt-stroke-1) solid var(--lt-border);
  border-bottom: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: 0 0 var(--reader-card-radius) var(--reader-card-radius);
  overflow: auto;
  /* The reader pins its own scroll anchor across re-renders; the browser's native scroll anchoring fights that and causes transient jumps. */
  overflow-anchor: none;
  padding-top: var(--app-bar-height);
  position: relative;
  scroll-padding-top: var(--app-bar-height);
}
.library-shell.library-closed .reader-shell,
.library-shell.library-closed .reader-loading {
  /* No rail to sit against, so the card is held off the left frame too. */
  margin-left: var(--reader-gutter);
}
/* Where the page's content ends. Both edges are hard cuts: the top slides under an opaque app bar, the bottom stops dead at the card's hairline, and a line of text sliced through its x-height reads as a rendering fault. These dissolve the last few pixels back to the page color instead.

   Top and bottom only. Nothing is cut at the sides: the one box that widens past the words is a table, and it stops 62px short and dissolves its own ends. A band there veils the first and last letter of every line instead, which is what v0.1.469 shipped.

   Its own element in the reader's grid cell, not a pseudo-element inside the scroller: an absolutely positioned child of a scroll container is placed against the scrolled content, so it would slide away with the document. Same placement trick as .reader-loading. */
.reader-edge-fade {
  /* The surface being dissolved to. The code view repaints the card in the editor's code color, so the dots have to follow it or the last lines break up into the wrong page. */
  --reader-edge-fade-surface: var(--lt-markdown-background);
  grid-column: 2;
  grid-row: 1;
  position: relative;
  pointer-events: none;
  /* The wash the dot screen sits on, one band for the top and one for the bottom. On the element, not the bands: those carry the mask that fades the dots, and a mask takes the whole box with it, so the wash would come out ramped twice. A parent's background paints under its pseudo-elements, which puts it behind the screen for free. */
  background-image: linear-gradient(
      to bottom,
      var(--reader-edge-fade-surface) 0 var(--reader-edge-fade-hold),
      transparent
    ),
    linear-gradient(
      to top,
      var(--reader-edge-fade-surface) 0 var(--reader-edge-fade-hold),
      transparent
    );
  background-size: 100% var(--reader-edge-fade-depth), 100% var(--reader-edge-fade-depth);
  /* The top wash starts at the bar's edge for the same reason the top band does; the bottom one is anchored to the card's edge. */
  background-position: 0 var(--app-bar-height), 0 100%;
  background-repeat: no-repeat;
  /* Over the document (the code view's textarea layer sits at 2), under the loading wash (6), the library sheet (5) and the app bar (10). */
  z-index: 4;
  /* Inside the card's three hairlines, so the bottom band can't paint over the stroke or spill past the rounded corners. Two things hold it off and both are needed: the transparent border reserves the straight edges, the padding-box clip reserves the curve — a background is clipped at the border box otherwise, and that curve is the card's outer one, so the wash paints over both bottom arcs. A transparent border, not a margin of the same width: a border width is snapped to whole device pixels and a margin is not, so at 150% the card's 1px stroke computes to 0.667px and a 1px margin leaves half a device pixel of the last line with no fade over it. */
  border: 0 solid transparent;
  border-width: 0 var(--lt-stroke-1) var(--lt-stroke-1);
  background-clip: padding-box;
  /* The right side clears the scrollbar: the browser draws it inside the scroller where an overlay on the cell can't get under it, and the thumb starts at the same edge the top band does, so the wash would bury it. */
  margin-right: var(--reader-scrollbar);
  /* The card's own corner: an inner curve is the outer one less the border, and this border is snapped the same way the card's is. */
  border-radius: 0 0 var(--reader-card-radius) var(--reader-card-radius);
  overflow: hidden;
}
.library-shell.library-closed .reader-edge-fade {
  margin-left: var(--reader-gutter);
}
/* The top and bottom fades belong to a scrolling document. The map does not scroll, and a wash across its edges just dims nodes near the frame. */
:root[data-graph-view="true"] .reader-edge-fade {
  display: none;
}
:root[data-code-view="true"] .reader-edge-fade {
  --reader-edge-fade-surface: var(--lt-editor-code-background, var(--lt-markdown-background));
  /* And it stops where the page does, a whole minimap short of the shell's edge: out that way is the rail, and a wash of the page's color across the top and bottom of it would put the page back under the map. The frame's own measure; the stroke it is drawn with is reserved by the fade's own border. */
  margin-right: calc(var(--cv-minimap-width, 0px) + var(--cv-minimap-standoff));
}
/* The chrome's own dot grain — same circle, same 2px lattice the app bar and the shell are screened with — laid over the page in the page's color.

   The ramp is a mask, not the pattern. Carrying it in the dots (a `repeat-x` row per layer, radius shrinking with depth) read as stacked bands every time: rows are rows however their phase is staggered, and the fat rows needed to cover the cut fused into a hatch. An even screen at falling alpha has no rows in it.

   `background-attachment: fixed` for the same reason the bar and shell have it — one window-anchored lattice, so the phase doesn't shift where surfaces meet. Hence too the bottom band flipping its mask rather than the box: a transformed element becomes the containing block for its own fixed background. */
.reader-edge-fade::before,
.reader-edge-fade::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  height: var(--reader-edge-fade-depth);
  /* The chrome's own lattice, in the page's color rather than the bar's. */
  --lt-grain-dot: var(--reader-edge-fade-surface);
  background-image: radial-gradient(circle, var(--lt-grain-dot) 0 var(--lt-grain-radius), transparent var(--lt-grain-edge));
  background-size: var(--lt-grain-tile) var(--lt-grain-tile);
  background-repeat: repeat;
  background-attachment: fixed;
}
/* Hung off the bar's bottom edge, not the cell's top: the cell's first 40px are behind the bar, where a band would be invisible. Same hold and same span as the wash beneath, which is what keeps the two from parting and drawing a bright line where they do. */
.reader-edge-fade::before {
  top: var(--app-bar-height);
  -webkit-mask-image: linear-gradient(
    to bottom,
    var(--lt-mask-opaque) 0 var(--reader-edge-fade-hold),
    transparent
  );
  mask-image: linear-gradient(
    to bottom,
    var(--lt-mask-opaque) 0 var(--reader-edge-fade-hold),
    transparent
  );
}
.reader-edge-fade::after {
  bottom: 0;
  -webkit-mask-image: linear-gradient(
    to top,
    var(--lt-mask-opaque) 0 var(--reader-edge-fade-hold),
    transparent
  );
  mask-image: linear-gradient(
    to top,
    var(--lt-mask-opaque) 0 var(--reader-edge-fade-hold),
    transparent
  );
}
/* The rail is the reader's scroll affordance, so the native bar hides while there is one. On a class because scrollbar styles do not re-resolve when a relational match flips, leaving the bar behind after the rail returns. The two branches stay apart for a second reason: in Chromium `scrollbar-width` anywhere on the element kills every ::-webkit-scrollbar rule for it (see .library-scroll). */
.reader-shell.has-minimap {
  scrollbar-width: none;
}
.reader-shell.has-minimap::-webkit-scrollbar {
  width: 0;
}
/* No rail — the minimap is off, or there is no document — leaves nothing at all showing where you are in a long page, so the app's bar comes back (see .leaf-scroll). Only the app bar needs clearing here; the page scrolls under it, and the thumb insets itself from the other three edges so the track keeps its full travel and the thumb still reaches the very bottom. */
.reader-shell:not(.has-minimap)::-webkit-scrollbar-track {
  margin-top: var(--app-bar-height);
}
.reader-loading {
  /* Overlays the reader cell so the shape of the arriving page can show during a slow load. Pointer events pass through; sits below the app bar. */
  grid-column: 2;
  grid-row: 1;
  align-self: stretch;
  justify-self: stretch;
  /* Same rounding as the card it covers (the gutter tracks inset it already), so nothing spills past the page's corners. */
  box-sizing: border-box;
  border-radius: 0 0 var(--reader-card-radius) var(--reader-card-radius);
  display: flex;
  justify-content: center;
  padding-top: var(--app-bar-height);
  pointer-events: none;
  /* Opaque rather than a wash: the document underneath has already been replaced, and letting it show through says the page somebody is reading is still the answer. */
  background: var(--lt-markdown-background);
  z-index: 6;
}
.reader-loading[hidden] {
  display: none;
}
/* The document's own measure and padding, so a bar stands where the text it holds a place for will stand. */
.reader-loading-page {
  width: min(var(--type-measure-body), 100%);
  padding: var(--reader-content-pad);
  overflow: hidden;
}
.reader-loading-heading {
  width: 55%;
  height: 1.7rem;
  margin-bottom: var(--lt-space-24);
}
.reader-loading-line {
  height: 0.85rem;
  margin-bottom: var(--lt-space-12);
}
.reader-loading-line-short {
  width: 72%;
  margin-bottom: var(--lt-space-24);
}
.reader-layout {
  --reader-layout-padding-inline: var(--reader-content-pad);
  container-type: inline-size;
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  justify-items: center;
  min-height: 100%;
  padding: 0 var(--reader-layout-padding-inline);
  position: relative;
  /* Heading permalinks sit in the left gutter via negative positioning; clip stops them widening the horizontal scroll without making this a scroll container. */
  overflow-x: clip;
}
.reader-layout-no-minimap {
  justify-items: center;
}
/* The growl. Rises into place rather than appearing, because something that appears in the corner of a page has already been half-missed by the time the eye gets there. */
.app-toast {
  position: fixed;
  right: 18px;
  bottom: 18px;
  z-index: var(--lt-z-45);
  max-width: min(520px, calc(100% - 36px));
  border: var(--lt-stroke-1) solid var(--lt-border);
  /* The shadow reads this too, and adds the spread to it, so the ring outside the corner is struck from the corner’s own center. */
  --lt-shadow-host-radius: var(--lt-radius-lg);
  border-radius: var(--lt-shadow-host-radius);
  background: var(--lt-surface-elevated);
  color: var(--lt-foreground);
  font-family: var(--app-font);
  font-size: var(--lt-text-14);
  font-weight: var(--lt-weight-600);
  line-height: var(--lt-leading-1-45);
  padding: var(--lt-space-12) var(--lt-space-14);
  opacity: 0;
  transform: translateY(6px);
  transition: opacity var(--lt-duration-120) var(--lt-ease-accelerate), transform var(--lt-duration-120) var(--lt-ease-accelerate);
}
.app-toast.is-shown {
  opacity: 1;
  transform: none;
  transition: opacity var(--lt-duration-200) var(--lt-ease-decelerate), transform var(--lt-duration-200) var(--lt-ease-decelerate);
}
.app-toast.is-error {
  border-color: var(--lt-danger);
  color: var(--lt-danger);
}
/* A toast that carries an offer: the words, then the one button. Laid out only when there is something to lay out beside — a plain growl is still its own text. */
.app-toast.has-action {
  display: flex;
  align-items: center;
  gap: var(--lt-space-12);
  padding-right: var(--lt-space-8);
}
.app-toast-action {
  flex: none;
  padding: var(--lt-space-4) var(--lt-space-10);
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-md);
  background: var(--lt-surface);
  color: var(--lt-foreground);
  font: inherit;
}
.app-toast-action:hover {
  border-color: var(--lt-border-strong);
  background: var(--lt-wash-hover);
}
/* A path the growl names and can open, pressed inside the sentence rather than beside it. Stripped back to text so it reads as the path it is, and wrapping anywhere because a path is long and has no spaces to break at. */
.app-toast-link {
  padding: 0;
  border: 0;
  background: none;
  color: var(--lt-link);
  font: inherit;
  text-align: left;
  text-decoration: underline;
  overflow-wrap: anywhere;
  cursor: pointer;
}
.app-toast-link:hover {
  /* Clear the app-wide button fill, which would otherwise paint a path that is drawn as a link. */
  background: none;
  border-color: transparent;
  color: var(--lt-link-hover);
}
/* The first-run bubble. Floats over the window rather than being wedged into a row, so nothing on screen moves to make room and it takes the width it needs. Deaf to the pointer: nothing in it can be pressed, a pointer crossing it on the way somewhere else must not lose the words mid-sentence, and it must not stand between the pointer and whatever it is laid over. */
.hint-bubble {
  position: fixed;
  pointer-events: none;
  left: 0;
  top: 0;
  z-index: var(--lt-z-44);
  max-width: 260px;
  border: var(--lt-stroke-1) solid var(--lt-border);
  /* The shadow reads this too, and adds the spread to it, so the ring outside the corner is struck from the corner’s own center. */
  --lt-shadow-host-radius: var(--lt-radius-lg);
  border-radius: var(--lt-shadow-host-radius);
  background: var(--lt-surface-elevated);
  color: var(--lt-foreground);
  font-family: var(--app-font);
  font-size: var(--lt-text-13);
  font-weight: var(--lt-weight-600);
  line-height: var(--lt-leading-1-45);
  padding: var(--lt-space-10) var(--lt-space-12);
  opacity: 0;
  transform: translateY(4px);
  transition: opacity var(--lt-duration-200) var(--lt-ease-decelerate), transform var(--lt-duration-200) var(--lt-ease-decelerate);
}
.hint-bubble.is-shown {
  opacity: 1;
  transform: none;
}
/* The chevron: a corner of the box turned 45 degrees, so it carries the same edge and fill and cannot drift out of step with them. `--hint-tail` is where along the facing edge the target's center is, set by the placement pass — the box gets clamped away from an edge, the chevron does not follow it. */
.hint-bubble-tail {
  position: absolute;
  width: 10px;
  height: 10px;
  background: var(--lt-surface-elevated);
  border-left: var(--lt-stroke-1) solid var(--lt-border);
  border-bottom: var(--lt-stroke-1) solid var(--lt-border);
  transform: rotate(45deg);
}
.hint-bubble.is-right .hint-bubble-tail {
  left: -6px;
  top: calc(var(--hint-tail) - 5px);
}
.hint-bubble.is-left .hint-bubble-tail {
  right: -6px;
  top: calc(var(--hint-tail) - 5px);
  transform: rotate(-135deg);
}
.hint-bubble.is-above .hint-bubble-tail {
  bottom: -6px;
  left: calc(var(--hint-tail) - 5px);
  transform: rotate(-45deg);
}
.hint-bubble.is-below .hint-bubble-tail {
  top: -6px;
  left: calc(var(--hint-tail) - 5px);
  transform: rotate(135deg);
}
.document-body {
  width: min(var(--type-measure-body), 100%);
  margin: calc(-1 * var(--reader-scroll-origin, 0px)) 0 0;
  padding: var(--reader-content-pad) 0;
  /* The floating bar sits over this corner of the page. Without the extra room the last thing on the page ends underneath it — which the Previous/Next pager makes obvious, being the last thing and a target. */
  padding-bottom: calc(var(--reader-content-pad) + var(--reader-toolbar-space, 0px));
  color: var(--lt-markdown-foreground);
  font-size: var(--type-body-size);
  line-height: var(--type-body-line);
  word-wrap: break-word;
  word-break: normal;
}
/* The reader lays the whole document out up front (like the web reader), which keeps scrolling smooth: content-visibility skipping makes off-screen blocks flash blank and the minimap box jump as heights re-estimate. A drawn diagram is the one exception, and only because its height is measured and remembered rather than estimated. */
.docs-pager {
  display: flex;
  justify-content: space-between;
  gap: var(--lt-space-16);
  margin-top: var(--app-bar-height);
  padding-top: var(--lt-space-24);
  border-top: var(--lt-stroke-1) solid var(--lt-markdown-rule);
}
/* Scoped under the document, never a bare `.docs-pager a`: the blanket link rule below is the same weight and later, so at that weight it takes this button's color at rest and its color and an underline on hover. */
.document-body .docs-pager a {
  flex: 1 1 0;
  min-width: 0;
  text-decoration: none;
  padding: var(--lt-space-12) var(--lt-space-16);
  border: var(--lt-stroke-1) solid var(--lt-markdown-rule);
  /* The shadow reads this too, and adds the spread to it, so the ring outside the corner is struck from the corner’s own center. */
  --lt-shadow-host-radius: var(--lt-radius-lg);
  border-radius: var(--lt-shadow-host-radius);
  color: var(--lt-markdown-foreground);
  /* The halftone this card throws rides a `::before` in `panels.css`, and an absolutely positioned layer needs a positioned host. */
  position: relative;
}
.docs-pager-skeleton {
  flex: 1 1 0;
  min-width: 0;
  padding: var(--lt-space-12) var(--lt-space-16);
  border: var(--lt-stroke-1) solid var(--lt-markdown-rule);
  border-radius: var(--lt-radius-lg);
}
.docs-pager-label-skeleton {
  width: 72px;
  height: 0.74rem;
  margin-bottom: var(--lt-space-8);
}
.docs-pager-title-skeleton {
  width: min(220px, 80%);
  height: 1rem;
}
.docs-pager-next .docs-pager-label-skeleton,
.docs-pager-next .docs-pager-title-skeleton {
  margin-left: auto;
}
/* The same fill the chrome buttons take, so the biggest target on the page answers the pointer the way the smallest ones do. Never a dot lattice: the app spends that everywhere else on saying a thing is quiet, and over a card this wide it reads as switched off. What keeps the fill from being a slab is the halftone `panels.css` throws around it. */
.document-body .docs-pager a:hover,
.document-body .docs-pager a:focus-visible {
  background: var(--lt-navigation-button-hover-background);
  border-color: var(--lt-navigation-button-hover-background);
  color: var(--lt-primary-foreground);
  text-decoration: none;
}
.docs-pager .docs-pager-next {
  text-align: right;
}
.docs-pager-label {
  display: block;
  font-size: 0.74rem;
  color: var(--lt-muted-foreground);
  margin-bottom: var(--lt-space-2);
}
/* Quiet, on a filled surface: the ink the title inverts to, at three quarters. The muted gray above is chosen against the page and disappears on a saturated fill. */
.document-body .docs-pager a:hover .docs-pager-label,
.document-body .docs-pager a:focus-visible .docs-pager-label {
  color: var(--lt-primary-foreground);
  opacity: var(--lt-opacity-75);
}
@media (max-width: 700px) {
  .docs-pager {
    flex-direction: column;
  }
  .docs-pager .docs-pager-next {
    text-align: left;
  }
}
.document-body :target,
.document-body [id] {
  scroll-margin-top: var(--lt-space-16);
}
.document-body h1,
.document-body h2,
.document-body h3,
.document-body h4,
.document-body h5,
.document-body h6 {
  color: var(--lt-markdown-heading);
  font-family: var(--heading-font);
  letter-spacing: 0;
  margin: var(--type-spacing) 0 var(--type-spacing);
}
.document-body h1 {
  border-bottom: var(--lt-stroke-1) solid var(--lt-markdown-rule);
  font-size: var(--type-h1-size);
  font-weight: var(--type-h1-weight);
  line-height: var(--type-h1-line);
  padding-bottom: 0.3em;
}
/* A heading the page borrowed from the file's name renames the file when pressed, and only here: the same document on a published site draws the same mark, whose host can rename nothing. */
.app-surface .document-body [data-borrowed-title] {
  cursor: text;
}
.document-body h1:first-of-type {
  font-size: var(--type-display-size);
  font-weight: var(--type-display-weight);
  line-height: var(--type-display-line);
}
/* h1 takes the base heading color; h2–h6 each have their own token, so a theme can tint the deeper levels or leave them equal. */
.document-body h2 {
  color: var(--lt-markdown-heading-2);
  border-bottom: var(--lt-stroke-1) solid var(--lt-markdown-rule);
  font-size: var(--type-h2-size);
  font-weight: var(--type-h2-weight);
  line-height: var(--type-h2-line);
  padding-bottom: 0.3em;
}
.document-body h3 {
  color: var(--lt-markdown-heading-3);
  font-size: var(--type-h3-size);
  font-weight: var(--type-h3-weight);
  line-height: var(--type-h3-line);
}
.document-body h4 {
  color: var(--lt-markdown-heading-4);
  font-size: var(--type-h4-size);
  font-weight: var(--type-h4-weight);
  line-height: var(--type-h4-line);
}
.document-body h5 {
  color: var(--lt-markdown-heading-5);
  font-size: var(--type-h5-size);
  font-weight: var(--type-h5-weight);
  line-height: var(--type-h4-line);
}
.document-body h6 {
  color: var(--lt-markdown-heading-6);
  font-size: var(--type-h6-size);
  font-weight: var(--type-h6-weight);
  line-height: var(--type-caption-line);
}
.document-body p,
.document-body ul,
.document-body ol,
.document-body blockquote,
.document-body table,
.document-body pre {
  margin: 0 0 var(--type-spacing);
}
.document-body [align="left"] {
  text-align: left;
}
.document-body [align="center"] {
  margin: var(--type-spacing-sm) 0;
  text-align: center;
}
.document-body [align="center"] > table {
  margin-left: auto;
  margin-right: auto;
}
.document-body [align="right"] {
  text-align: right;
}
.document-body [align="justify"] {
  text-align: justify;
}
.document-body a {
  color: var(--lt-markdown-link);
  text-decoration: none;
}
.document-body a:hover {
  color: var(--lt-link-hover);
  text-decoration: underline;
}
/* Leaf custom Markdown buttons: a link wrapped in braces renders as a button styled like the app's action controls (the zero-state "Choose file"). The base rule is the filled variant, from `{{{[Label](url)}}}`. */
.document-body a.leaf-md-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  /* The mark a button may wear sits before the label, so the two need a gap. */
  gap: var(--lt-space-8);
  border: var(--lt-stroke-1) solid var(--lt-primary);
  border-radius: var(--lt-radius-md);
  background: var(--lt-primary);
  color: var(--lt-primary-foreground);
  font-family: var(--app-font);
  font-size: var(--lt-text-15);
  font-weight: var(--lt-weight-600);
  /* A button can sit inside an italic run of a document. */
  font-style: normal;
  line-height: var(--lt-leading-1-2);
  padding: var(--lt-space-12) var(--lt-space-20);
  /* An atomic inline box keeps a vertical margin, so a run of buttons that wraps has room between its lines rather than two fills meeting. None on the left, so the first button stays on the text column. */
  margin: var(--lt-space-4) var(--lt-space-4) var(--lt-space-4) 0;
  text-decoration: none;
  /* The hand, because a reader reads the drawing and this is drawn as a button. Written rather than left off: it is the same answer the shared button rule gives every native button. */
  cursor: pointer;
}
/* Color alone, on the base rule, so the outline and ghost variants below take it by having the same box rather than by writing it again. No corner here: the button a reader aimed at keeps the shape it was aimed at. */
.document-body a.leaf-md-button:hover {
  background: var(--lt-navigation-button-hover-background);
  border-color: var(--lt-navigation-button-hover-background);
  color: var(--lt-primary-foreground);
  text-decoration: none;
}
/* Outline, from `{{[Label](url)}}`: an outline at rest that fills on hover. */
.document-body a.leaf-md-button--secondary {
  background: transparent;
  border-color: var(--lt-primary);
  color: var(--lt-primary-ink);
}
.document-body a.leaf-md-button--secondary:hover {
  background: var(--lt-primary);
  border-color: var(--lt-primary);
  color: var(--lt-primary-foreground);
}
/* Ghost, from `{[Label](url)}`: no fill or outline until hover, when it fills. */
.document-body a.leaf-md-button--ghost {
  background: transparent;
  border-color: transparent;
  color: var(--lt-primary-ink);
}
.document-body a.leaf-md-button--ghost:hover {
  background: var(--lt-primary);
  border-color: var(--lt-primary);
  color: var(--lt-primary-foreground);
}
/* A link with nothing behind it drops the link color and the hover underline, which promise there is: the words stay the document's own under a quiet dotted rule, saying the author meant a link here and this app does not follow that kind of address. `decorate.js` writes the class, because an anchor with no address is not by itself a stripped link. Placed after the button rules so it wins the tie against them. */
.document-body a.link-goes-nowhere {
  color: inherit;
  text-decoration: underline dotted;
  text-decoration-color: color-mix(in srgb, currentColor 40%, transparent);
  text-underline-offset: 0.18em;
}
/* A brace-wrapped button with nothing behind it stops being a pressable button: the fill, the outline and the box go, leaving the words the rule above draws. */
.document-body a.leaf-md-button.link-goes-nowhere {
  display: inline;
  border: none;
  border-radius: 0;
  background: none;
  font-family: inherit;
  font-size: inherit;
  font-weight: inherit;
  line-height: inherit;
  padding: 0;
  margin: 0;
  /* The arrow, taking back the hand the button rule wrote: everything else here already says this is not a button, and the pointer was the last thing still promising a press. */
  cursor: default;
}
.document-body strong {
  font-weight: var(--lt-weight-600);
}
/* A badge: a state word an author writes as {green: Shipped}, drawn as a small outlined label so a status list can be scanned down its left edge instead of read. Outlined rather than filled or washed, because the role inks were tuned to sit just over 4.5:1 against the page and any tint under one puts it back below — the edge takes the same ink as the words, so the one pair the theme gate already proves is the only pair a badge makes. Sized in em so it follows the reader's own text rather than a fixed interface size. */
/* Keyed on the app's own surface as well as on a document, because the two controls that offer a tone draw a real badge to say what the tone looks like, and they stand in the bar and the gutter rather than in the page. Scoped to the document alone, all five presses drew one word in the toolbar's own ink and a reader picking a color had nothing to look at. `:is()` takes its most specific arm, so the pair weighs exactly what the single key weighed. */
:is(.document-body, .app-surface) .doc-badge {
  display: inline-block;
  text-indent: 0;
  border: var(--lt-stroke-1) solid currentColor;
  border-radius: var(--lt-radius-sm);
  background: var(--lt-markdown-background);
  padding: 0 0.4em;
  font-family: var(--app-font);
  font-size: 0.8em;
  font-weight: var(--lt-weight-600);
  /* A badge can sit inside an italic run of a document. */
  font-style: normal;
  line-height: var(--lt-leading-1-2);
  /* The words are a label, so a long one stays one badge rather than breaking across two lines. */
  white-space: nowrap;
  vertical-align: baseline;
}
/* `.doc-badge` is the base a tag is drawn from as well, and the two differ in exactly the two things that carry meaning: a tag swaps the corner for `--lt-radius-pill` and takes the press that finds every note carrying it, because a pill says press me and a square says read me. Everything else — the box, the em sizing, the hairline edge in `currentColor`, the page behind it — is shared, so the pair reads as one family. The tag's own class is `tags`'s to ship; this rule is what it takes. */
/* The four tones, each one a role color eleven families already set, so retinting a badge is editing a theme. Gray is a class of its own rather than the bare rule's color: the renderer then has one name to emit whether the author wrote the tone or left it out. A tag has no state, so it takes the gray tone: green is `--lt-success` and would say shipped about every subject somebody files under. */
:is(.document-body, .app-surface) .doc-badge--green {
  color: var(--lt-success);
}
:is(.document-body, .app-surface) .doc-badge--amber {
  color: var(--lt-warning);
}
:is(.document-body, .app-surface) .doc-badge--red {
  color: var(--lt-danger);
}
:is(.document-body, .app-surface) .doc-badge--gray {
  color: var(--lt-muted-foreground);
}
/* The fifth tone is the theme's own action color rather than a fifth fixed color, so it is whatever the family the reader picked is recognized by and it moves when they change families. `primary-ink` rather than `primary`: the fill wants to be light enough to print dark words on it, and a badge is words on the page. */
:is(.document-body, .app-surface) .doc-badge--primary {
  color: var(--lt-primary-ink);
}
/* A highlight, washed the way a search match is washed in find.css — the warning role, which is the yellow-amber every family carries in both modes, so it lands beside a search hit (the accent) and an action (the primary) without being either. Left alone the browser paints a fixed yellow with black ink over it, which reads as a foreign object in every dark family. The words keep the body's own ink, so nothing has to be picked per family for them to stay readable. */
.document-body mark {
  background-color: color-mix(in srgb, var(--lt-warning) 45%, transparent);
  color: inherit;
}
/* Outline: a collapsed <details> built from the headings, dropped in under the title. The published sites' — `site/outline.js` builds it, and this stylesheet is what they are served. The app draws its own headings in the library pane instead. */
.document-body .document-outline {
  margin: 1.5em 0;
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-md);
  background: var(--lt-editor-code-background);
}
.document-body .document-outline-summary {
  padding: 0.5em 0.9em;
  font-weight: var(--lt-weight-600);
  color: var(--lt-markdown-foreground);
  list-style: none;
  user-select: none;
}
.document-body .document-outline-summary::-webkit-details-marker {
  display: none;
}
.document-body .document-outline-summary::before {
  content: "";
  display: inline-block;
  width: 0;
  height: 0;
  margin-right: 0.55em;
  border-left: 0.4em solid currentColor;
  border-top: 0.32em solid transparent;
  border-bottom: 0.32em solid transparent;
  vertical-align: middle;
  /* Emphasized: the caret turns in place and both ends of the turn are at rest. */
  transition: transform var(--lt-duration-150) var(--lt-ease-emphasized);
}
.document-body .document-outline[open] > .document-outline-summary::before {
  transform: rotate(90deg);
}
.document-body .document-outline-summary:hover {
  color: var(--lt-link-hover);
}
/* The document's total line count, stamped in after the numbering pass. */
.document-body .document-outline-count {
  margin-left: 0.45em;
  font-weight: var(--lt-weight-400);
  color: var(--lt-muted-foreground);
}
/* Bulleted, not numbered: a deep outline runs a counter into the hundreds and the wide markers overflow the panel's left edge. */
.document-body .document-outline > ul {
  margin: 0;
  padding: 0 1.4em 0.7em 2.4em;
}
.document-body .document-outline ul {
  margin: 0;
  padding-left: 1.6em;
  list-style: disc;
}
.document-body .document-outline li {
  margin: 0.15em 0;
  color: var(--lt-muted-foreground);
}
.document-body .document-outline-link {
  color: var(--lt-muted-foreground);
}
.document-body .document-outline-link:hover {
  color: var(--lt-link-hover);
}
/* Alternate-language title lines under a TEI main title. Muted and tight, and pulled up toward the h1, so the stack reads as one title block. */
.document-body .tei-doc-subtitles {
  margin: calc(-0.5 * var(--type-spacing)) 0 var(--type-spacing);
  color: var(--lt-muted-foreground);
}
.document-body .tei-doc-subtitles .tei-doc-subtitle {
  margin: 0 0 0.3em;
}
.document-body .tei-doc-subtitles .tei-doc-subtitle:last-child {
  margin-bottom: 0;
}
/* TEI front matter (summary, acknowledgments, introduction) rendered as a collapsed <details> before the body — mirrors the outline toggle above. */
.document-body .tei-front {
  margin: 1.5em 0;
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-md);
  background: var(--lt-editor-code-background);
}
.document-body .tei-front-summary {
  /* The arrow: a control is not a link. Written rather than left off, because an unlocked block says `cursor: text` and this would inherit it. */
  cursor: default;
  padding: 0.5em 0.9em;
  font-weight: var(--lt-weight-600);
  color: var(--lt-markdown-foreground);
  list-style: none;
  user-select: none;
}
.document-body .tei-front-summary::-webkit-details-marker {
  display: none;
}
.document-body .tei-front-summary::before {
  content: "";
  display: inline-block;
  width: 0;
  height: 0;
  margin-right: 0.55em;
  border-left: 0.4em solid currentColor;
  border-top: 0.32em solid transparent;
  border-bottom: 0.32em solid transparent;
  vertical-align: middle;
  transition: transform var(--lt-duration-150) var(--lt-ease-emphasized);
}
.document-body .tei-front[open] > .tei-front-summary::before {
  transform: rotate(90deg);
}
.document-body .tei-front-summary:hover {
  color: var(--lt-link-hover);
}
.document-body .tei-front-body {
  padding: 0 1.4em 0.7em;
  border-top: var(--lt-stroke-1) solid var(--lt-border);
}
.document-body .tei-front-body > :first-child {
  margin-top: 0.7em;
}
/* Tree documents — generic (non-TEI) XML, JSON, YAML: label/value rows share one two-column grid, so the labels line up down the page. */
.document-body .data-fields {
  display: grid;
  grid-template-columns: max-content minmax(0, 1fr);
  gap: 0.3em 1.2em;
  margin: var(--type-spacing) 0;
}
.document-body .data-fields dt {
  color: var(--lt-muted-foreground);
  font-family: var(--app-font);
  font-size: 0.9em;
  font-weight: var(--lt-weight-600);
  line-height: inherit;
  padding-top: 0.12em;
}
.document-body .data-fields dd {
  margin: 0;
  overflow-wrap: anywhere;
}
/* An element's attributes sit tighter under its heading than its content does. */
.document-body .data-attributes {
  margin-top: calc(-0.4 * var(--type-spacing));
}
/* Attributes carried alongside a value, shown after it. */
.document-body .data-value-attrs {
  color: var(--lt-muted-foreground);
  font-size: 0.9em;
}
/* Repeated records (a sitemap's urls, a POM's dependencies, a JSON array of objects) become a table. Long URL cells wrap rather than pushing the table into a scroll. */
.document-body .data-table {
  font-size: 0.95em;
  width: 100%;
}
.document-body .data-table td {
  overflow-wrap: anywhere;
  vertical-align: top;
}
/* A comment the file carries, folded away as a labeled row: a note beside the document rather than words of it, so it takes one line until somebody opens it. */
.document-body .xml-comment {
  color: var(--lt-muted-foreground);
  font-family: var(--app-font);
  font-size: 0.9em;
  margin: var(--type-spacing) 0;
}
.document-body .xml-comment-summary {
  /* The arrow, for the reason on .tei-front-summary above: an unlocked block's caret would land here. */
  cursor: default;
  font-weight: var(--lt-weight-600);
  list-style: none;
  user-select: none;
}
.document-body .xml-comment-summary::-webkit-details-marker {
  display: none;
}
.document-body .xml-comment-summary::before {
  content: "";
  display: inline-block;
  width: 0;
  height: 0;
  margin-right: 0.55em;
  border-left: 0.4em solid currentColor;
  border-top: 0.32em solid transparent;
  border-bottom: 0.32em solid transparent;
  vertical-align: middle;
  transition: transform var(--lt-duration-150) var(--lt-ease-emphasized);
}
.document-body .xml-comment[open] > .xml-comment-summary::before {
  transform: rotate(90deg);
}
.document-body .xml-comment-summary:hover {
  color: var(--lt-link-hover);
}
.document-body .xml-comment-body {
  padding: 0.35em 0 0 1.5em;
}
:root[data-speed-reader="true"] .document-body {
  color: color-mix(in srgb, var(--lt-markdown-foreground) 80%, var(--lt-markdown-background));
  font-weight: var(--lt-weight-400);
}
:root[data-speed-reader="true"] .document-body h1,
:root[data-speed-reader="true"] .document-body h2,
:root[data-speed-reader="true"] .document-body h3,
:root[data-speed-reader="true"] .document-body h4,
:root[data-speed-reader="true"] .document-body h5,
:root[data-speed-reader="true"] .document-body h6,
:root[data-speed-reader="true"] .document-body strong,
:root[data-speed-reader="true"] .document-body b,
:root[data-speed-reader="true"] .document-body .github-mention,
:root[data-speed-reader="true"] .document-body .markdown-alert-note::before,
:root[data-speed-reader="true"] .document-body .markdown-alert-tip::before,
:root[data-speed-reader="true"] .document-body .markdown-alert-important::before,
:root[data-speed-reader="true"] .document-body .markdown-alert-warning::before,
:root[data-speed-reader="true"] .document-body .markdown-alert-caution::before {
  color: color-mix(in srgb, var(--lt-markdown-foreground) 80%, var(--lt-markdown-background));
  font-weight: var(--lt-weight-400);
}
:root[data-speed-reader="true"] .document-body em,
:root[data-speed-reader="true"] .document-body i {
  font-style: italic;
  font-weight: var(--lt-weight-400);
}
:root[data-speed-reader="true"] .document-body a,
:root[data-speed-reader="true"] .document-body .github-ref,
:root[data-speed-reader="true"] .document-body .github-mention {
  color: inherit;
  /* Quiet, dim underline so links stay findable without competing with the bold lead anchors. */
  text-decoration: underline;
  text-decoration-color: color-mix(in srgb, currentColor 45%, transparent);
  text-underline-offset: 0.18em;
}
:root[data-speed-reader="true"] .document-body a:hover,
:root[data-speed-reader="true"] .document-body a:focus-visible,
:root[data-speed-reader="true"] .document-body .github-ref:hover,
:root[data-speed-reader="true"] .document-body .github-mention:hover {
  color: var(--lt-link-hover);
  text-decoration: underline;
}
:root[data-speed-reader="true"] .document-body .speed-reader-anchor {
  color: var(--lt-markdown-foreground);
  font-weight: var(--lt-weight-700);
}
/* Glossary term links: a quiet dotted underline in the surrounding text's color (not the accent), so a term stays discoverable without standing out. Matches both `glossary:slug` and a `…/GLOSSARY.md#slug` link; placed last so it wins ties against the generic link/hover rules above. */
.document-body a[href^="glossary:" i],
.document-body a[href*="GLOSSARY.md#" i],
.document-body a[href^="glossary:" i]:hover,
.document-body a[href*="GLOSSARY.md#" i]:hover,
:root[data-speed-reader="true"] .document-body a[href^="glossary:" i],
:root[data-speed-reader="true"] .document-body a[href*="GLOSSARY.md#" i] {
  color: inherit;
  text-decoration: underline dotted;
  text-decoration-color: color-mix(in srgb, currentColor 40%, transparent);
  text-underline-offset: 0.18em;
}
.document-body .github-ref,
.document-body .github-mention {
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-pill);
  background: var(--lt-markdown-badge-background);
  color: var(--lt-markdown-badge-foreground);
  font-family: var(--app-font);
  font-size: 0.82em;
  font-weight: var(--lt-weight-700);
  padding: 0.08em 0.42em;
  text-decoration: none;
}
.document-body .emoji {
  font-family: "Segoe UI Emoji", "Apple Color Emoji", "Noto Color Emoji", sans-serif;
}
.document-body ul,
.document-body ol {
  padding-left: 2em;
}
.document-body li + li {
  margin-top: 0.25em;
}
.document-body li > ul,
.document-body li > ol {
  margin: 0.25em 0 0;
}
/* A list whose item opens with a badge is a status list rather than prose, so it is drawn as one: the badge is lifted out of the flow into a column of its own on the left and the row's own indent is what places everything beside it. Lifted rather than laid out in a grid or a flex row, because a row is a title, a run of links and a paragraph — every one of them a child, and every child of a grid takes a cell of its own. Nothing here reaches an item the author did not open with a badge, so an ordinary list is never converted. */
.document-body li.doc-badge-row {
  position: relative;
  /* The badge is the marker. */
  list-style: none;
  /* Back onto the text column, out of the indent the marker was given. */
  margin-left: -2em;
  margin-top: 0;
  padding: 0.5em 0 0.5em 11em;
}
/* One width for every badge in the column, so a badge that is a whole sentence — the `Conflicts with #205` case — leaves every title beside it on the same left edge. Over that width it wraps inside its own column rather than reaching into the row. */
.document-body li.doc-badge-row > .doc-badge:first-child {
  position: absolute;
  left: 0;
  max-width: 10em;
  white-space: normal;
}
/* A hairline between rows and none above the first, which is what makes a run of them read as a table of states. */
.document-body li.doc-badge-row + li.doc-badge-row {
  border-top: var(--lt-stroke-1) solid var(--lt-border);
}
/* A bar: a list item ending in an amount and a bar marker, drawn as its label with the amount on the end edge and a track under both. A grid, because every child here is the renderer's own and there are exactly three, so every track runs the same width and every amount ends on the same edge whatever the label's length. */
.document-body li.doc-bar-row {
  list-style: none;
  margin-left: -2em;
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  column-gap: var(--lt-space-16);
  row-gap: var(--lt-space-4);
  align-items: baseline;
}
.document-body li.doc-bar-row + li.doc-bar-row {
  margin-top: var(--lt-space-12);
}
/* A list nested under a bar is its own run, under the track rather than squeezed into the label's cell. */
.document-body li.doc-bar-row > :is(ul, ol) {
  grid-column: 1 / -1;
}
/* The amount is the number the bar is drawn from, so it reads as a figure rather than as a piece of code sitting in a sentence: no ground, and digits that line up down the column. */
:is(.document-body, .app-surface) code.doc-bar-amount {
  background: none;
  padding: 0;
  color: inherit;
  font-family: var(--code-font);
  font-weight: var(--lt-weight-600);
  font-variant-numeric: tabular-nums;
  text-align: end;
  white-space: nowrap;
}
/* The meter draws its own fill from `value` over `max`, so no width is ever written by anybody. */
:is(.document-body, .app-surface) meter.doc-bar {
  appearance: none;
  display: block;
  grid-column: 1 / -1;
  inline-size: 100%;
  block-size: 0.5em;
  background: none;
  border: none;
}
:is(.document-body, .app-surface) meter.doc-bar::-webkit-meter-bar {
  background: var(--lt-surface-sunken);
  border: none;
  border-radius: var(--lt-radius-xs);
  block-size: 100%;
}
/* A floor, so the smallest amount in a comparison is still a mark on the track rather than nothing — the sliver is the point of the drawing. */
:is(.document-body, .app-surface) meter.doc-bar::-webkit-meter-optimum-value {
  background: var(--doc-bar-fill);
  border-radius: var(--lt-radius-xs);
  min-inline-size: 3px;
}
/* Its own rule: an engine drops a whole selector list holding a pseudo-element it does not know. */
:is(.document-body, .app-surface) meter.doc-bar::-moz-meter-bar {
  background: var(--doc-bar-fill);
  border-radius: var(--lt-radius-xs);
  min-inline-size: 3px;
}
:is(.document-body, .app-surface) meter.doc-bar--green {
  --doc-bar-fill: var(--lt-success);
}
:is(.document-body, .app-surface) meter.doc-bar--amber {
  --doc-bar-fill: var(--lt-warning);
}
:is(.document-body, .app-surface) meter.doc-bar--red {
  --doc-bar-fill: var(--lt-danger);
}
:is(.document-body, .app-surface) meter.doc-bar--gray {
  --doc-bar-fill: var(--lt-muted-foreground);
}
/* `primary-ink` rather than `primary`, which falls under 3:1 on its own track on two light families. */
:is(.document-body, .app-surface) meter.doc-bar--primary {
  --doc-bar-fill: var(--lt-primary-ink);
}
/* A zero or negative amount has no length, so the floor goes and the track stays empty. */
:is(.document-body, .app-surface) meter.doc-bar--empty::-webkit-meter-optimum-value {
  min-inline-size: 0;
}
:is(.document-body, .app-surface) meter.doc-bar--empty::-moz-meter-bar {
  min-inline-size: 0;
}
/* Ordered lists follow the classic outline sequence by depth (I, A, 1, a, i) rather than restarting at decimal each level. */
.document-body ol {
  list-style-type: upper-roman;
}
.document-body ol ol {
  list-style-type: upper-alpha;
}
.document-body ol ol ol {
  list-style-type: decimal;
}
.document-body ol ol ol ol {
  list-style-type: lower-alpha;
}
.document-body ol ol ol ol ol {
  list-style-type: lower-roman;
}
.document-body input[type="checkbox"] {
  accent-color: var(--lt-checkbox-accent);
  margin-right: 0.4em;
}
/* A task checkbox the reading view has made interactive (its `disabled` attribute removed). The arrow: a control is not a link. Written rather than left off, because an unlocked block says `cursor: text` and this would inherit it. */
.document-body input[type="checkbox"]:not([disabled]) {
  cursor: default;
}
/* Live editing affordances: text caret on hover, a focus ring while editing, and the monospace source font for XML blocks edited as raw source. */
.document-body .leaf-editable {
  cursor: text;
}
/* Nothing at all around the block you are typing in. A ring or a shaded band draws a box on a page whose whole point is that it is a page and not a form. The caret says where you are, and the words are already there to be read. A raw-source block is the one exception below — its code tint is what says "this is source", not "this is selected". */
.document-body .leaf-editable:focus,
.document-body .leaf-editable:focus-visible {
  outline: none;
}
/* The family's own code face, the same name every other code surface reads, so a block does not change face under the click that opens its source. base.css declares it, so there is nothing to fall back to. */
.document-body .leaf-editing-source {
  font-family: var(--code-font);
  white-space: pre-wrap;
  background: var(--lt-editor-inline-code-background);
  border-radius: var(--lt-radius-sm);
}
/* The fresh empty paragraph Enter opens below a block: give it a line's height so the caret has somewhere to blink (Markdown has no empty block). */
.document-body .leaf-insert-block {
  min-height: 1.5em;
}
/* The gray wording a blank block shows: printed rather than typed, so it is not in the document and cannot be committed. Switched off by the first keystroke (see makeBlankBlock) rather than by `:empty`, which a contenteditable's leftover <br> would defeat. */
.document-body .leaf-insert-block[data-blank="true"][data-placeholder]::before {
  content: attr(data-placeholder);
  color: var(--lt-muted-foreground);
  pointer-events: none;
}
/* The block gutter's insert row lies across this line while it is open, and a placeholder under it reads as text struck through by the controls. */
.document-body .leaf-insert-block.is-insert-open[data-blank="true"][data-placeholder]::before {
  content: none;
}
/* A heading's underline belongs to a heading that says something. On a blank page it is a line drawn under nothing, which is the difference between a title and a field. Kept as a transparent color so the space it holds doesn't move when the first letter arrives. */
.document-body h1.leaf-insert-block[data-blank="true"],
.document-body h2.leaf-insert-block[data-blank="true"] {
  border-bottom-color: transparent;
}
/* Links inside an editable block keep the hand, not the block's text caret. Never the ones drawn as buttons: this rule comes later at equal specificity, so without the exception it would put the hand back on them. */
.document-body .leaf-editable a:not(.leaf-md-button) {
  cursor: pointer;
}

/* And no wash over the page's own top and bottom. The edge fade dissolves a cut line of Leaftext's own text back into Leaftext's own page color, which over somebody else's page is Leaftext's color painted across the top and bottom of it — the page reads as stopping short of the card rather than filling it. The map already switches the fade off for the same reason: what is drawn there is not a column of text being sliced. */
.library-shell.has-contained-document .reader-edge-fade {
  display: none;
}
/* The lane's own side padding as well. Every other format is a column of words that wants a margin either side; a whole HTML page is a page, and a page stops at the edge of the window it is in. Written as the lane's own variable rather than as a negative margin on the article, so the rail's clone box — which is sized from this lane's content width — measures the same room the page is drawn in. */
.reader-layout.has-contained-document {
  --reader-layout-padding-inline: 0px;
}
/* A whole HTML file is drawn as the page its own CSS makes, so the article holding it takes none of Leaftext's measure, padding or type — the only thing around it is the reader's own edges. */
.document-body-site {
  width: 100%;
  max-width: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  min-height: 100%;
}
/* The page itself. It is the page's viewport as well as the page, which is the whole reason it is sized rather than grown to its content: a frame that grew would make the page's own viewport units mean the height of the document, and a sticky header would never stick. The export grows it on purpose, for exactly as long as the sheet is being measured and drawn. */
.document-site {
  border: 0;
  display: block;
  width: 100%;
  flex: 1 1 auto;
  min-height: 0;
}
/* A framed figure the note's author asked for. The only class a document may name is one beginning `note-` (`markdown/rawhtml.rs`), and this is the first drawing through that door: a titled box with a quiet note in its head, whatever blocks the writer put in the body, and a caption on a sunken strip at the foot. Keyed on `.document-body` like every other document rule, so it draws inside a note and nowhere else. */
.document-body .note-frame {
  margin: var(--lt-space-24) 0;
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-md);
  background: var(--lt-surface-elevated);
  /* The two hairlines inside it are the head's and the caption's own borders, so a frame missing either part has no rule floating where that part would have been. */
  overflow: hidden;
}
/* The head is plain text in a `div` rather than a heading, so a frame's title stays out of the document outline and the minimap's heading list — and in a reader that has never heard of Leaftext it reads as the paragraph a figure's title should be. */
.document-body .note-frame-head {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--lt-space-8);
  padding: var(--lt-space-12) var(--lt-space-16);
  border-bottom: var(--lt-stroke-1) solid var(--lt-border);
  font-weight: var(--lt-weight-600);
  line-height: var(--lt-leading-1-35);
}
/* The note in the head's top right: quieter and smaller than the title, and pushed to the far end by the head's own spacing rather than by a float, so a long title wraps above it instead of running under it. */
.document-body .note-frame-aside {
  color: var(--lt-muted-foreground);
  font-size: 0.85em;
  font-weight: var(--lt-weight-400);
}
/* The body is whatever the writer put between the head and the caption, so it takes the frame's padding and nothing else — a paragraph, a list, a table or a diagram each keeps the drawing it already has. The first and last blocks lose their outer margin so the box closes on them rather than on a band of empty page. */
.document-body .note-frame > :not(.note-frame-head):not(.note-frame-caption) {
  padding-left: var(--lt-space-16);
  padding-right: var(--lt-space-16);
}
.document-body .note-frame > :not(.note-frame-head):first-child {
  padding-top: var(--lt-space-16);
}
.document-body .note-frame > :not(.note-frame-caption):last-child {
  padding-bottom: var(--lt-space-16);
}
/* The caption sits on a recess under its own hairline, the way the head sits over one, so the two ends of the box read as the same kind of edge. */
.document-body .note-frame-caption {
  padding: var(--lt-space-10) var(--lt-space-16);
  border-top: var(--lt-stroke-1) solid var(--lt-border);
  background: var(--lt-surface-sunken);
  color: var(--lt-muted-foreground);
  font-size: 0.9em;
  line-height: var(--lt-leading-1-45);
}
/* Cards the note's author set across the page. `auto-fill` keeps a lone last card the width of the ones above it, the inner `min` lets one card fit a column narrower than its minimum, and start alignment leaves each card its own height rather than the tallest one's. */
.document-body .note-card-grid {
  --note-card-min: 18em;
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, var(--note-card-min)), 1fr));
  align-items: start;
  gap: var(--lt-space-16);
  margin: var(--lt-space-24) 0;
}
/* Short figures and swatches: the same grid with a smaller floor, so three or four fit across the measure. */
.document-body .note-card-grid-compact {
  --note-card-min: 9em;
}
.document-body .note-card {
  min-width: 0;
  padding: var(--lt-space-16);
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-md);
  background: var(--lt-surface-elevated);
  overflow-wrap: anywhere;
}
/* A swatch card: the color the card's own code line named, as a band across its top. The band is the document's color rather than the theme's, like a picture, and the words under it keep the theme's ink. */
.document-body .note-card.is-swatch-card {
  padding-top: calc(var(--lt-space-48) + var(--lt-space-16));
  background-image: linear-gradient(var(--note-card-swatch), var(--note-card-swatch));
  background-size: 100% var(--lt-space-48);
  background-repeat: no-repeat;
}
/* The card's padding is its edge, so the first and last blocks inside lose the margin that would otherwise sit inside it. */
.document-body .note-card > :first-child {
  margin-top: 0;
}
.document-body .note-card > :last-child {
  margin-bottom: 0;
}

/* What the Grove sells for the page. Each is one class on the document's body, written by `profile.js` from the unlocks switched on, so turning one on or off restyles one element. */
/* The capped paragraph holds its own float, so a paragraph shorter than the cap does not push the next block aside. */
.document-body.has-drop-cap p.is-drop-cap {
  display: flow-root;
}
.document-body.has-drop-cap .is-drop-cap::first-letter {
  float: left;
  margin-right: var(--lt-space-6);
  color: var(--lt-markdown-heading);
  font-family: var(--heading-font);
  font-size: 4.2em;
  font-weight: var(--lt-weight-700);
  line-height: var(--lt-leading-1);
}
/* A heading carrying the cap is already large, so its letter doubles rather than growing to three lines. */
.document-body.has-drop-cap h1.is-drop-cap::first-letter,
.document-body.has-drop-cap h2.is-drop-cap::first-letter,
.document-body.has-drop-cap h3.is-drop-cap::first-letter,
.document-body.has-drop-cap h4.is-drop-cap::first-letter,
.document-body.has-drop-cap h5.is-drop-cap::first-letter,
.document-body.has-drop-cap h6.is-drop-cap::first-letter {
  float: none;
  font-size: 2.2em;
}
.document-body.has-illuminated-headings h1::first-letter,
.document-body.has-illuminated-headings h2::first-letter,
.document-body.has-illuminated-headings h3::first-letter,
.document-body.has-illuminated-headings h4::first-letter,
.document-body.has-illuminated-headings h5::first-letter,
.document-body.has-illuminated-headings h6::first-letter {
  color: var(--lt-primary-ink);
}
/* The cap's own color outranks the one above, so a heading wearing both says so again. */
.document-body.has-drop-cap.has-illuminated-headings h1.is-drop-cap::first-letter,
.document-body.has-drop-cap.has-illuminated-headings h2.is-drop-cap::first-letter,
.document-body.has-drop-cap.has-illuminated-headings h3.is-drop-cap::first-letter,
.document-body.has-drop-cap.has-illuminated-headings h4.is-drop-cap::first-letter,
.document-body.has-drop-cap.has-illuminated-headings h5.is-drop-cap::first-letter,
.document-body.has-drop-cap.has-illuminated-headings h6.is-drop-cap::first-letter {
  color: var(--lt-primary-ink);
}
/* A small leaf where the bullet was. A task item keeps its checkbox and no leaf. */
.document-body.has-leaf-bullets ul > li:not(.is-task) {
  position: relative;
  list-style: none;
}
.document-body.has-leaf-bullets ul > li:not(.is-task)::before {
  content: "";
  position: absolute;
  top: 0.4em;
  left: -1.1em;
  width: 0.7em;
  height: 0.7em;
  color: var(--lt-primary-ink);
  background-color: currentColor;
  -webkit-mask: var(--lt-icon-leaf) center / contain no-repeat;
  mask: var(--lt-icon-leaf) center / contain no-repeat;
}
/* A divider cut in two with a leaf in the gap. */
.document-body.has-cut-rule hr {
  position: relative;
  overflow: visible;
  background: linear-gradient(to right, transparent, var(--lt-markdown-thematic-break) 15%, var(--lt-markdown-thematic-break) 45%, transparent 45%, transparent 55%, var(--lt-markdown-thematic-break) 55%, var(--lt-markdown-thematic-break) 85%, transparent);
}
.document-body.has-cut-rule hr::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  width: 0.9em;
  height: 0.9em;
  transform: translate(-50%, -50%);
  color: var(--lt-muted-foreground);
  background-color: currentColor;
  -webkit-mask: var(--lt-icon-leaf) center / contain no-repeat;
  mask: var(--lt-icon-leaf) center / contain no-repeat;
}
/* The chrome's speckle on the page's own ground: the whole reader shell, since grain on the document's body alone left the shell's margins beside it plain. */
.reader-shell.has-page-grain {
  --lt-grain-dot: var(--reader-surface-grain);
  background-image: radial-gradient(circle, var(--lt-grain-dot) 0 var(--lt-grain-radius), transparent var(--lt-grain-edge));
  background-size: var(--lt-grain-tile) var(--lt-grain-tile);
  background-repeat: repeat;
  background-attachment: fixed;
}
/* A leaf in the margin beside a heading the reader has passed. */
.document-body.has-margin-mark .is-passed {
  position: relative;
}
/* A fixed size and place, so a large title's leaf does not grow out past the page's edge. */
.document-body.has-margin-mark .is-passed::before {
  content: "";
  position: absolute;
  top: 50%;
  left: -22px;
  width: 14px;
  height: 14px;
  transform: translateY(-50%);
  color: var(--lt-primary-ink);
  background-color: currentColor;
  -webkit-mask: var(--lt-icon-leaf) center / contain no-repeat;
  mask: var(--lt-icon-leaf) center / contain no-repeat;
}
/* ---- The block gutter --------------------------------------------------
   The handle you drag a block by and the plus that writes a new one, in the page's left margin. Positioned inside .reader-layout (the reader's positioned ancestor), so it scrolls with the document instead of being chased down the page by a scroll handler. See block-controls.js.

   --block-gutter-shift is how far left of the text the pair sits; the script sets it from the margin actually available, so a window too narrow to center the measure keeps the controls at the page edge rather than losing them. */
.block-gutter[hidden] {
  display: none;
}
.block-gutter {
  position: absolute;
  z-index: 3;
  display: flex;
  align-items: center;
  gap: var(--lt-space-10);
  transform: translate(calc(-1 * var(--block-gutter-shift, 72px)), -50%);
}
.block-gutter-tools {
  display: flex;
  align-items: center;
  gap: var(--lt-space-2);
  /* Page-colored, so where the margin is too narrow to hold them the tools read over the start of a line instead of dissolving into it. */
  background: var(--lt-markdown-background);
  border-radius: var(--lt-radius-pill);
}
.block-gutter button {
  display: grid;
  place-items: center;
  margin: 0;
  padding: 0;
  border: 0;
  background: none;
  color: var(--lt-muted-foreground);
}
.block-gutter button[hidden] {
  display: none;
}
.block-gutter .lt-icon {
  display: block;
  width: 18px;
  height: 18px;
}
/* The handle is for carrying, not for clicking. */
.block-gutter .block-grip {
  width: 22px;
  height: 30px;
  cursor: grab;
}
.block-gutter .block-grip:active {
  cursor: grabbing;
}
.block-gutter .block-add,
.block-gutter .block-insert-option {
  width: 32px;
  height: 32px;
  border: var(--lt-stroke-1) solid var(--lt-markdown-rule);
  border-radius: var(--lt-radius-full);
  background: var(--lt-markdown-background);
  transition: color var(--lt-duration-120) var(--lt-ease), border-color var(--lt-duration-120) var(--lt-ease);
}
.block-gutter .block-grip:hover,
.block-gutter .block-add:hover,
.block-gutter .block-insert-option:hover {
  color: var(--lt-accent-ink);
  border-color: var(--lt-accent, var(--lt-border));
}
/* A tone press in the plus's row is a word, not a mark, so it takes the shape of the badge it puts in rather than the circle every other option wears: the box grows to the word, the corner is the badge's own, and nothing is clipped or spilled at any of the four names. Its own rule for that reason — the circle beside it is drawn for a 24-unit mask and a word does not fit in one. */
.block-gutter .block-insert-tone {
  width: auto;
  height: auto;
  padding: var(--lt-space-2) var(--lt-space-4);
  border: none;
  border-radius: var(--lt-radius-sm);
  background: none;
  transition: background-color var(--lt-duration-120) var(--lt-ease);
}
.block-gutter .block-insert-tone:hover {
  background: var(--lt-hover-wash);
}
.block-add-close {
  display: none;
}
.block-gutter.is-expanded .block-add-open {
  display: none;
}
.block-gutter.is-expanded .block-add-close {
  display: block;
}
/* The space under the line being typed in, made clickable. Laid over the gap rather than opened in it: a real box there re-lays out the page every time the gutter moves, and the page growing and shrinking a line mid-sentence is what made whole lines jump under the pointer. Invisible — the plus is the mark. */
.block-gap-line {
  position: absolute;
  z-index: 2;
  cursor: text;
}
/* The image box: which picture, before anything is written. Its own row so the field has the width of the line rather than the width of a button. */
.block-insert-choose {
  flex: none;
  height: 30px;
  padding: 0 var(--lt-space-12);
  border: var(--lt-stroke-1) solid var(--lt-markdown-rule);
  border-radius: var(--lt-radius-pill);
  background: var(--lt-markdown-background);
  color: var(--lt-markdown-foreground);
  font-family: var(--app-font);
  font-size: var(--lt-text-12);
  font-weight: var(--lt-weight-600);
  line-height: var(--lt-leading-1-2);
}
.block-insert-choose:hover {
  border-color: var(--lt-accent, var(--lt-border));
  color: var(--lt-accent-ink);
}
.block-insert-url {
  flex: 1 1 auto;
  min-width: 0;
  max-width: 320px;
  height: 30px;
  padding: 0 var(--lt-space-10);
  border: var(--lt-stroke-1) solid var(--lt-markdown-rule);
  border-radius: var(--lt-radius-sm);
  background: var(--lt-markdown-background);
  color: var(--lt-markdown-foreground);
  font-family: var(--app-font);
  font-size: var(--lt-text-13);
  font-weight: var(--lt-weight-400);
  line-height: var(--lt-leading-1-2);
}
/* The live bar beside the bar box's two fields: the document's own row drawing, label and amount over a full track, at a width that leaves the fields room. */
.block-insert-bar {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  column-gap: var(--lt-space-8);
  row-gap: var(--lt-space-2);
  align-items: baseline;
  flex: 0 0 160px;
  color: var(--lt-markdown-foreground);
  font-family: var(--app-font);
  font-size: var(--lt-text-13);
}
.block-insert-bar .doc-bar-label {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.block-insert-url:focus {
  border-color: var(--lt-accent, var(--lt-border));
  outline: none;
}
/* The options fan out to the right of the cross, over the (nearly always empty) line the plus was pressed on — the rule is the divider between "close this" and "pick one of these". */
.block-insert-row {
  display: flex;
  align-items: center;
  gap: var(--lt-space-8);
  padding-left: var(--lt-space-10);
  border-left: var(--lt-stroke-1) solid var(--lt-markdown-rule);
  background: var(--lt-markdown-background);
}
.block-insert-row[hidden] {
  display: none;
}
/* The tools are the handle you grabbed; once the block itself is following the pointer they are one thing too many. Faded rather than hidden, so the grip holding the pointer capture stays where the drag started. */
.block-gutter.is-dragging {
  opacity: 0;
}
/* The block being carried. A copy lifted off the page, over the gap its neighbors open for it. */
.block-drag-ghost {
  position: absolute;
  z-index: 5;
  padding: var(--lt-space-2) var(--lt-space-10);
  margin-left: calc(var(--lt-space-10) * -1);
  /* The shadow reads this too, and adds the spread to it, so the ring outside the corner is struck from the corner’s own center. */
  --lt-shadow-host-radius: var(--lt-radius-lg);
  --lt-shadow-host-border: 0;
  border-radius: var(--lt-shadow-host-radius);
  background: var(--lt-markdown-background);
  opacity: var(--lt-opacity-92);
  pointer-events: none;
}
.block-drag-ghost > * {
  margin: 0;
}
/* The original keeps its space while it is away — the neighbors step over it, and stepping over something visible would just be two copies of one block. */
.document-body .is-block-dragging {
  visibility: hidden;
}
/* Blocks slide to open the gap rather than jumping to it, so the page reads as making room. Only while a drag is on: no document pays for this at rest. */
body.is-block-dragging {
  cursor: grabbing;
  user-select: none;
}
/* The lock names the buttons as well: a button writes its own hand, and a pointer turning into a hand each time the drag crossed a control reads as the drag having let go. */
body.is-block-dragging button {
  cursor: grabbing;
}
body.is-block-dragging .document-body [data-src-start] {
  /* Emphasized: a block stays where it is on the page and steps aside, so both ends of the move are at rest. */
  transition: transform var(--lt-duration-140) var(--lt-ease-emphasized);
}
/* ---- The selection toolbar ---------------------------------------------
   What highlighted text can become, floating over it. Positioned inside .reader-layout like the block gutter, so it travels with the words instead of being chased down the page by a scroll handler. See selection-toolbar.js.

   --selection-arrow is where the point sits along the bar: the script keeps it over the words even where the bar itself had to stop at the page edge. */
.selection-toolbar[hidden] {
  display: none;
}
.selection-toolbar {
  position: absolute;
  z-index: 6;
  display: flex;
  align-items: center;
  /* Never wider than the column, less the 8px either side the script clamps to — SELECTION_TOOLBAR_MARGIN in selection-toolbar.js. Unlocked the row is 402px wide and the reading column can be squeezed to 360, so the row wraps to a second line here rather than the bar being pinned to a left edge whose right edge hangs past the words. */
  max-width: calc(100% - 16px);
  padding: var(--lt-space-4);
  /* Transparent, not gone: the border holds the box's size while ::after paints the visible face — the same arrangement the reader's bottom toolbar uses, and for the same reason. A negative-z child paints over its parent's own background, so the only way the dot shadow (::before) gets behind an opaque face is for the face to be a later negative-z child itself. */
  border: var(--lt-stroke-1) solid transparent;
  /* The shadow reads this too, and adds the spread to it, so the ring outside the corner is struck from the corner’s own center. */
  --lt-shadow-host-radius: var(--lt-radius-lg);
  border-radius: var(--lt-shadow-host-radius);
  background: transparent;
  font-family: var(--app-font);
  transform: translate(-50%, -100%);
}
/* The face — fill and hairline. inset -1px re-covers the border box the element's transparent border holds in layout. */
.selection-toolbar::after {
  content: '';
  position: absolute;
  z-index: var(--lt-z-below);
  inset: -1px;
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-lg);
  background: var(--lt-surface-elevated);
  pointer-events: none;
}
/* The point, drawn as a rotated corner of the bar so it takes the same border and background without a second color to keep in step. A real element, so it paints above both layers behind it. */
.selection-toolbar-point {
  position: absolute;
  bottom: -5px;
  left: var(--selection-arrow, 50%);
  width: 8px;
  height: 8px;
  margin-left: calc(var(--lt-space-4) * -1);
  border-right: var(--lt-stroke-1) solid var(--lt-border);
  border-bottom: var(--lt-stroke-1) solid var(--lt-border);
  background: var(--lt-surface-elevated);
  transform: rotate(45deg);
  pointer-events: none;
}
/* Under the words instead of over them, where there was no room above — selection-toolbar.js places the bar off the highlight's bottom edge for this, so the bar keeps its own height rather than being pulled up through it. */
.selection-toolbar.is-below {
  transform: translate(-50%, 0);
}
/* The same rotated corner, hung off the top edge and struck from the other two sides of it. */
.selection-toolbar.is-below .selection-toolbar-point {
  top: -5px;
  bottom: auto;
  border-right: 0;
  border-bottom: 0;
  border-left: var(--lt-stroke-1) solid var(--lt-border);
  border-top: var(--lt-stroke-1) solid var(--lt-border);
}
.selection-format-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: var(--lt-space-2);
}
/* The one input in the bar wears two hats — a link, and a note — and either of them puts the buttons away while it is being typed into. Two classes rather than one and a flag, because the class is what says which of the two Enter is finishing. The badge's tone row is a third state of the same bar and puts the buttons away the same way. */
.selection-toolbar.is-linking .selection-format-row,
.selection-toolbar.is-noting .selection-format-row,
.selection-toolbar.is-toning .selection-format-row {
  display: none;
}
/* Four tones and nothing to type, so this is a row of presses rather than the field above. Each press is drawn as a badge of its own tone, so the choice is made by looking at the color rather than by reading a name for it. */
.selection-tone-row {
  display: none;
  gap: var(--lt-space-4);
  align-items: center;
  padding: 0 var(--lt-space-4);
}
.selection-toolbar.is-toning .selection-tone-row {
  display: flex;
}
.selection-tone {
  display: grid;
  place-items: center;
  padding: var(--lt-space-2) var(--lt-space-4);
  border: none;
  border-radius: var(--lt-radius-sm);
  background: none;
  cursor: pointer;
}
.selection-tone:hover {
  background: var(--lt-hover-wash);
}
.selection-tone:focus-visible {
  outline: var(--lt-stroke-2) solid var(--lt-focus-ring);
  outline-offset: var(--lt-space-2);
}
.selection-link-row {
  display: none;
  padding: 0 var(--lt-space-4);
}
.selection-toolbar.is-linking .selection-link-row,
.selection-toolbar.is-noting .selection-link-row {
  display: block;
}
.selection-link-input {
  width: 240px;
  padding: var(--lt-space-6) var(--lt-space-8);
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-sm);
  background: var(--lt-surface);
  color: var(--lt-foreground);
  font-family: var(--app-font);
  font-size: var(--lt-text-13);
  font-weight: var(--lt-weight-400);
  line-height: var(--lt-leading-1-2);
}
.selection-link-input:focus {
  border-color: var(--lt-accent, var(--lt-border));
  outline: none;
}
.selection-format {
  display: grid;
  place-items: center;
  width: 30px;
  height: 30px;
  margin: 0;
  padding: 0;
  border: 0;
  border-radius: var(--lt-radius-sm);
  background: none;
  color: var(--lt-foreground);
}
.selection-format[hidden] {
  display: none;
}
.selection-format .lt-icon {
  display: block;
  width: 17px;
  height: 17px;
}
/* One H at two sizes, which is the whole message: bigger, or smaller. */
.selection-format.is-heading-bigger .lt-icon {
  width: 20px;
  height: 20px;
}
.selection-format.is-heading-smaller .lt-icon {
  width: 13px;
  height: 13px;
}
.selection-format:hover:not(:disabled) {
  background: var(--lt-wash-hover);
}
/* The kind the block already is: grayed, not pressable. Overrides the app-wide disabled fill — in a floating bar a filled box reads as pressed, not unavailable. */
.selection-format:disabled,
.selection-format:disabled:hover {
  border: 0;
  background: none;
  color: var(--lt-muted-foreground);
  cursor: default;
}
/* Lit for a format the highlighted words already carry — the bar says what they are as much as what they could be. */
.selection-format.is-active {
  color: var(--lt-accent-ink);
}
.selection-format-divider {
  width: 1px;
  height: 18px;
  margin: 0 var(--lt-space-4);
  background: var(--lt-border);
}
.selection-toolbar:not(.has-block-formats) .selection-format-divider {
  display: none;
}
.document-body blockquote {
  border-left: 0.25em solid var(--lt-markdown-blockquote-border);
  color: var(--lt-markdown-blockquote-foreground);
  padding: 0 1em;
}
.document-body blockquote p {
  padding-left: 1.25em;
  text-indent: -1.25em;
}
.document-body blockquote p.blockquote-lines {
  padding-left: 0;
  text-indent: 0;
}
.document-body blockquote .blockquote-line {
  display: block;
  padding-left: 1.25em;
  text-indent: -1.25em;
}
.document-body .markdown-alert-note p,
.document-body .markdown-alert-tip p,
.document-body .markdown-alert-important p,
.document-body .markdown-alert-warning p,
.document-body .markdown-alert-caution p {
  padding-left: 0;
  text-indent: 0;
}
.document-body blockquote > :first-child {
  margin-top: 0;
}
.document-body blockquote > :last-child {
  margin-bottom: 0;
}
.document-body .markdown-alert-note,
.document-body .markdown-alert-tip,
.document-body .markdown-alert-important,
.document-body .markdown-alert-warning,
.document-body .markdown-alert-caution {
  border-left-width: var(--lt-stroke-6);
  font-family: var(--app-font);
  font-size: 0.92em;
  line-height: var(--lt-leading-1-55);
  position: relative;
}
.document-body .markdown-alert-note:not(.leaf-editing-source)::before,
.document-body .markdown-alert-tip:not(.leaf-editing-source)::before,
.document-body .markdown-alert-important:not(.leaf-editing-source)::before,
.document-body .markdown-alert-warning:not(.leaf-editing-source)::before,
.document-body .markdown-alert-caution:not(.leaf-editing-source)::before {
  display: block;
  font-weight: var(--lt-weight-700);
  letter-spacing: 0;
  margin-bottom: 0.15em;
}
.document-body .markdown-alert-note {
  border-left-color: var(--lt-markdown-alert-note);
}
.document-body .markdown-alert-note:not(.leaf-editing-source)::before {
  color: var(--lt-markdown-alert-note);
  content: "Note";
}
.document-body .markdown-alert-tip {
  border-left-color: var(--lt-markdown-alert-tip);
}
.document-body .markdown-alert-tip:not(.leaf-editing-source)::before {
  color: var(--lt-markdown-alert-tip);
  content: "Tip";
}
.document-body .markdown-alert-important {
  border-left-color: var(--lt-markdown-alert-important);
}
.document-body .markdown-alert-important:not(.leaf-editing-source)::before {
  color: var(--lt-markdown-alert-important);
  content: "Important";
}
.document-body .markdown-alert-warning {
  border-left-color: var(--lt-markdown-alert-warning);
}
.document-body .markdown-alert-warning:not(.leaf-editing-source)::before {
  color: var(--lt-markdown-alert-warning);
  content: "Warning";
}
.document-body .markdown-alert-caution {
  border-left-color: var(--lt-markdown-alert-caution);
}
.document-body .markdown-alert-caution:not(.leaf-editing-source)::before {
  color: var(--lt-markdown-alert-caution);
  content: "Caution";
}
.document-body code {
  background: var(--lt-editor-inline-code-background);
  border-radius: var(--lt-radius-md);
  color: var(--lt-editor-inline-code-foreground);
  font-family: var(--code-font);
  font-size: 0.875em;
  padding: 0.2em 0.4em;
}
.document-body pre {
  position: relative;
  background: var(--lt-editor-code-background);
  background-clip: padding-box;
  border-radius: var(--lt-radius-md);
  clip-path: inset(0 round 6px);
  color: var(--lt-editor-code-foreground);
  line-height: var(--lt-leading-1-45);
  overflow: auto;
  padding: 1em;
  tab-size: 4;
}
/* Hand the horizontal scroll (and the corner clip with it) to the <code> inside, so the gutter number hung outside is not clipped and the language label and copy button hold still while the code scrolls. A raw-HTML <pre> with no <code> keeps scrolling itself — there is nothing inside to hand the job to. */
.document-body pre.doc-code-block {
  clip-path: none;
  overflow: visible;
}
.document-body pre code {
  background: transparent;
  color: inherit;
  font-size: 0.875em;
  padding: 0;
  white-space: pre;
  word-break: normal;
}
.document-body pre.doc-code-block > code {
  display: block;
  overflow-x: auto;
}
.document-body pre ::selection {
  background: var(--lt-editor-code-selection-background);
  color: var(--lt-editor-code-selection-foreground);
}
.document-body pre.highlight,
.document-body pre.mermaid {
  position: relative;
}
/* Mermaid measures a diagram hundreds of times while drawing it, and each read of a dirty page relaid out the whole document. Layout containment keeps those reads inside the block. Layout only — size containment would flatten the block to nothing, and paint containment would clip what overflows it. */
.document-body pre.mermaid {
  contain: layout;
}
/* A diagram not drawn yet is not its own source code — showing that text gives the reader words that vanish a second later. The ink goes, the block keeps its laid-out height, and a spinner stands in the middle. A diagram mermaid refused keeps everything: it drew its own error in there, and that is the answer. */
.document-body pre.mermaid:not([data-processed="true"]):not([data-mermaid-render="failed"]) {
  min-height: 88px;
  color: transparent;
  overflow: hidden;
  user-select: none;
}
/* Only the box waiting its turn spins: one too far away to be queued may never be scrolled to, and fifty-seven animating for as long as the file is open is work nobody asked for. */
.document-body pre.mermaid:not([data-processed="true"]):not([data-mermaid-render="failed"]):not([data-diagram-wait="far"])::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  /* Pulled back half its own size to center it. Not a spacing step — it is locked to the box, and the spin animation owns `transform`, so the usual translate is not available. */
  --lt-spinner-size: 18px;
  width: var(--lt-spinner-size);
  height: var(--lt-spinner-size);
  margin: calc(var(--lt-spinner-size) / -2) 0 0 calc(var(--lt-spinner-size) / -2);
  border-radius: var(--lt-radius-full);
  border: var(--lt-stroke-2) solid color-mix(in srgb, var(--lt-markdown-foreground) 22%, transparent);
  border-top-color: var(--lt-accent);
  animation: lt-spin var(--lt-duration-800) var(--lt-ease-linear) infinite;
  pointer-events: none;
}
/* Slowed, not stopped: a diagram can take a while and the tile has nothing else to say it is coming. Its own rule — a pseudo-element carries no class. */
@media (prefers-reduced-motion: reduce) {
  .document-body pre.mermaid:not([data-processed="true"]):not([data-diagram-wait="far"])::after {
    animation-duration: var(--lt-duration-1600) !important;
  }
}
.document-body pre.highlight::before,
.document-body pre.mermaid::before {
  content: attr(data-language);
  position: absolute;
  top: 8px;
  right: 12px;
  color: var(--lt-muted-foreground);
  font-family: var(--app-font);
  font-size: var(--lt-text-11);
  font-weight: var(--lt-weight-700);
  /* The label sits inside a document that can set italic around its block. */
  font-style: normal;
  line-height: var(--lt-leading-1-2);
  letter-spacing: 0;
  text-transform: uppercase;
}
/* On highlighted blocks the copy button sits top-right, so nudge the language label left to make room. */
.document-body pre.highlight::before {
  right: 44px;
}
/* "Copy all" button on code blocks: muted at rest, brightening on hover/focus, swapping to a check mark briefly on copy. */
.document-body pre > .code-copy {
  position: absolute;
  top: 6px;
  right: 8px;
  display: inline-grid;
  place-items: center;
  width: 28px;
  height: 28px;
  padding: 0;
  border: var(--lt-stroke-1) solid transparent;
  border-radius: var(--lt-radius-md);
  background: color-mix(in srgb, var(--lt-editor-code-background) 65%, transparent);
  color: var(--lt-muted-foreground);
  opacity: var(--lt-opacity-50);
  transition: opacity var(--lt-duration-120) var(--lt-ease), color var(--lt-duration-120) var(--lt-ease), background var(--lt-duration-120) var(--lt-ease),
    border-color var(--lt-duration-120) var(--lt-ease);
}
.document-body pre:hover > .code-copy,
.document-body pre > .code-copy:focus-visible {
  opacity: 1;
}
.document-body pre > .code-copy:hover {
  background: var(--lt-editor-code-background);
  border-color: var(--lt-editor-code-border);
  color: var(--lt-markdown-foreground);
}
.document-body pre > .code-copy.is-copied {
  opacity: 1;
  color: var(--lt-success, currentColor);
}
.code-copy-mark {
  width: 16px;
  height: 16px;
  pointer-events: none;
}
.code-copy-check {
  display: none;
}
.code-copy.is-copied .code-copy-copy {
  display: none;
}
.code-copy.is-copied .code-copy-check {
  display: block;
}
.document-body pre.mermaid[data-processed="true"] {
  /* The code block's own cell, kept rather than cleared: a diagram you drag around needs an edge to be inside of. The grain is restated here because the shared rule further down loses to this selector — same token and the same 2px window-anchored lattice, so it is one texture with every other reading surface. */
  background-color: var(--lt-editor-code-background);
  --lt-grain-dot: var(--reader-surface-grain);
  background-image: radial-gradient(circle, var(--lt-grain-dot) 0 var(--lt-grain-radius), transparent var(--lt-grain-edge));
  background-size: var(--lt-grain-tile) var(--lt-grain-tile);
  background-repeat: repeat;
  background-attachment: fixed;
  border: 0;
  color: var(--lt-markdown-foreground);
  padding: 0.75em;
  text-align: center;
  /* A window onto the drawing: zooming moves the picture inside rather than the page around it. At life size nothing is clipped, so a page nobody zooms looks exactly as it did. */
  overflow: hidden;
  /* Grab, not the text caret .leaf-editable gives every editable block: the source opens from the corner button now, not from a press. */
  cursor: grab;
}
.document-body pre.mermaid[data-processed="true"]::before {
  content: none;
}
/* Direct child, always: the drawing is the block's own SVG, and the corner buttons hold SVGs of their own. A descendant selector here takes every icon with it — they pile up at the pan offset and leave empty buttons behind. */
/* The full-window stage rides on all three of these: setMermaidView drives them by hand, so a rule the stage misses is a diagram that pans into nowhere. */
.document-body pre.mermaid[data-processed="true"] > svg,
.diagram-stage > svg {
  display: inline-block;
  height: auto;
  max-width: 100%;
}
/* A box wired to a link. The block itself is `grab` because a diagram is dragged to move it, so the anchor has to say pointer over the top of that — otherwise the one part of a diagram that goes somewhere is the part that looks least like it does. */
.document-body pre.mermaid[data-processed="true"] a[href] {
  cursor: pointer;
}
/* And it reads as a link, in the page and on the editor's canvas alike: mermaid wraps the label in an anchor, so the label is underlined the way a link in the text is. On the canvas that anchor carries only `xlink:href`, which is why this does not ask for the attribute. */
.document-body pre.mermaid[data-processed="true"] a {
  text-decoration: underline;
}
.flow-stage > svg a {
  text-decoration: underline;
}
/* Moved or zoomed, the drawing comes out of the flow and the block holds the height the page gave it, so the words around a diagram never shift. Only ever translated — a CSS scale re-lays out the labels inside mermaid's foreignObjects against boxes that did not grow with them and clips every one, so the size is set on the SVG instead. */
.document-body pre.mermaid[data-processed="true"].is-moved,
.diagram-stage.is-moved {
  height: var(--mermaid-box-height);
}
.document-body pre.mermaid[data-processed="true"].is-moved > svg,
.diagram-stage.is-moved > svg {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%) translate(var(--mermaid-pan-x, 0px), var(--mermaid-pan-y, 0px));
}
.document-body pre.mermaid[data-processed="true"].is-panning,
.diagram-stage.is-panning {
  cursor: grabbing;
}
/* The lock names the buttons as well: a button writes its own hand, and a pointer turning into a hand each time the drag crossed a control reads as the drag having let go. */
.document-body pre.mermaid[data-processed="true"].is-panning button,
.diagram-stage.is-panning button {
  cursor: grabbing;
}
/* A diagram swapped for its source is a code block again. The rules above center it, tighten its padding and print it in the preview ink, and they outrank .leaf-editing-source — so without this the mermaid sits centered in a diagram's cell rather than reading as the source it now is. */
.document-body pre.mermaid[data-processed="true"][data-editing-source="true"] {
  background: var(--lt-editor-code-background);
  color: var(--lt-editor-code-foreground);
  padding: 1em;
  text-align: left;
}
.document-body pre.mermaid[data-processed="true"][data-editing-source="true"]::before {
  content: attr(data-language);
}
.document-body .syn-comment {
  color: var(--lt-syntax-comment);
  font-style: italic;
}
.document-body .syn-keyword,
.document-body .syn-storage,
.document-body .syn-control {
  color: var(--lt-syntax-keyword);
  font-weight: var(--lt-weight-700);
}
.document-body .syn-operator {
  color: var(--lt-syntax-operator);
  font-weight: var(--lt-weight-700);
}
.document-body .syn-string {
  color: var(--lt-syntax-string);
}
.document-body .syn-constant,
.document-body .syn-numeric,
.document-body .syn-boolean,
.document-body .syn-character,
.document-body .syn-language {
  color: var(--lt-syntax-number);
}
.document-body .syn-entity,
.document-body .syn-tag,
.document-body .syn-attribute,
.document-body .syn-heading {
  color: var(--lt-syntax-function);
}
.document-body .syn-function,
.document-body .syn-method {
  color: var(--lt-syntax-function);
}
.document-body .syn-type,
.document-body .syn-class,
.document-body .syn-support {
  color: var(--lt-syntax-type);
}
.document-body .syn-variable,
.document-body .syn-parameter,
.document-body .syn-property {
  color: var(--lt-syntax-variable);
}
.document-body .syn-punctuation {
  color: var(--lt-syntax-punctuation);
}
.document-body .syn-invalid,
.document-body .syn-illegal {
  color: var(--lt-syntax-deleted);
  text-decoration: underline;
}
.document-body .syn-inserted {
  background: var(--lt-syntax-inserted-background);
  color: var(--lt-syntax-inserted);
  text-decoration: underline;
  text-decoration-thickness: 0.08em;
  text-underline-offset: 0.18em;
}
.document-body .syn-deleted {
  background: var(--lt-syntax-deleted-background);
  color: var(--lt-syntax-deleted);
  text-decoration: line-through;
  text-decoration-thickness: 0.08em;
}
.document-body .syn-changed {
  background: var(--lt-syntax-changed-background);
  color: var(--lt-syntax-changed);
  font-style: italic;
}
/* ---- Code view (raw source editing) -------------------------------------
   Monaco, hosted in the reader's shell: it owns the text, the wrapping, the caret and its own minimap. What follows is the frame around it — the page card faked over an editor that fills the whole reader area — and the few places its own chrome is restyled to match the app. */
/* Monaco code view. Monaco owns its own scrolling and its own minimap; the shell stops scrolling and the editor fills the reader area out to the left window edge, matching the reading view's framing. No surgery on Monaco's internals. */
.reader-shell.code-view-monaco-shell {
  overflow: hidden;
  /* No card borders of its own here: the minimap runs flush to the shell's right edge, so the page frame must wrap only the text and stop at the minimap's left stroke — which a static border can't do. The left edge and the (trimmed) bottom edge are redrawn by ::after below; the top edge is the app bar's divider (also trimmed below); the right side is the minimap rail. */
  border-left: 0;
  border-right: 0;
  border-bottom: 0;
  border-radius: 0;
  /* No fill of its own: ::before paints the page and stops at the frame's right border, because past that border is the minimap rail — chrome, not page, and the shell's grain has to run behind it as it does behind the reading view's. */
  background: transparent;
}
/* The page's fill, out to the same edge ::after strokes and no further. It lives here rather than on the editor because Monaco's own background boxes cover the rail too (see .code-view-monaco below); a pseudo-element paints under its element's children, so this lands behind the editor without a z-index. */
.reader-shell.code-view-monaco-shell::before {
  content: "";
  position: absolute;
  inset: 0 calc(var(--cv-minimap-width, 0px) + var(--cv-minimap-standoff)) 0 0;
  background: var(--lt-syntax-background);
  /* The two corners the card rounds itself, so the fill can't poke outside ::after's curve. The top two are the arc elements' business — each paints chrome over its corner and masks the page's disc back out, hiding the square corner under it. */
  border-bottom-left-radius: var(--reader-card-radius);
  border-bottom-right-radius: var(--reader-card-radius);
  pointer-events: none;
}
/* The page frame for the text area: left, right and bottom edges, with both bottom corners rounded. The right edge sits at the minimap's left stroke (--cv-minimap-width from the shell's right, plus --cv-minimap-standoff), so this one border both frames the page and is the divider walling off the minimap rail — no separate minimap stroke. The top edge is the app bar's divider; the two top corners are the arc elements (reader-corner-tl and -tr), which sit at z-index 11 above Monaco — a shell pseudo can't, since ::before paints behind the editor (which is exactly why the page fill lives there). So this box starts a radius below the divider and leaves its own top corners square. Kept inside the padding box so the shell's overflow:hidden doesn't clip it; pointer-events:none so Monaco still takes the clicks. */
.reader-shell.code-view-monaco-shell::after {
  content: "";
  position: absolute;
  left: 0;
  top: calc(var(--app-bar-height) + var(--lt-radius-md));
  bottom: 0;
  right: calc(var(--cv-minimap-width, 0px) + var(--cv-minimap-standoff));
  border-left: var(--lt-stroke-1) solid var(--lt-border);
  border-right: var(--lt-stroke-1) solid var(--lt-border);
  border-bottom: var(--lt-stroke-1) solid var(--lt-border);
  border-bottom-left-radius: var(--reader-card-radius);
  border-bottom-right-radius: var(--reader-card-radius);
  /* Above the reader-edge-fade wash (z-index 4). The fade dissolves the top and bottom ~36px of the card to the page color; in the reading view it is inset inside the card's borders, but this frame's right border and bottom corners sit deeper in the shell, so the wash would fade the border out near the top and flatten the bottom corners. Below the loading wash (6), which should still cover the frame. The top corners (reader-corner-tl/-tr) already clear it at 11. */
  z-index: 5;
  pointer-events: none;
}
/* Monaco draws its own rail inside the source frame, so the reader's grid column closes without changing the bar's rail measure. */
:root[data-code-view="true"] > body {
  --reader-minimap-column: 0px;
}
/* Trim the app bar's reader divider (the card's top edge) to the faked right edge at the minimap stroke, measured from the window's right edge: the reader gutter to the shell, then the minimap and its stand-off, then a radius short so the ::before top-right arc turns the corner. Same shape as the reading-view formula, with the minimap column replaced by the code-view minimap width. */
:root[data-code-view="true"] .app-bar::after {
  right: calc(
    var(--reader-gutter) + var(--cv-minimap-width, 0px) + var(--cv-minimap-standoff) +
      var(--lt-radius-md) - 1px
  );
}
/* The top-right corner of the faked page: the same convex arc reader-corner-tr draws at the card's real right corner in the reading view, moved in to the minimap stroke. Only the offset changes — outside the corner is the shell's grain here as well, now that the page fill stops at the frame (the shell's ::before), so the chrome fill and the mask cutting the page's disc back out of it are both right as they stand. Its z-index 11 keeps it above Monaco, which is why the corner lives here and not on a shell pseudo (::before paints behind the editor). The right offset matches ::after's faked edge; the arc's own geometry (top: 100% - 1px, the radius+1 box, the top/right borders) is inherited from .reader-corner(-tr). */
:root[data-code-view="true"] .reader-corner-tr {
  right: calc(var(--reader-gutter) + var(--cv-minimap-width, 0px) + var(--cv-minimap-standoff));
}
.code-view-monaco {
  position: absolute;
  inset: var(--app-bar-height) 0 0 0;
}
/* Neither box that carries editor.background may paint: both cover the minimap rail as well as the text, and neither can be stopped at the divider — the root box is the whole editor, and the lines layer is a 16,777,216px square bounded only by the overflow guard around it. The shell's ::before paints the page instead. That is all it takes, because the minimap's canvas writes only the pixels a glyph lands in and fills no background of its own — what looked like the map's background was always one of these two behind it. Off, the rail shows the shell's grain between the map's lines: text on the chrome, as the reading view's rail has always drawn it. */
.code-view-monaco .monaco-editor,
.code-view-monaco .monaco-editor .monaco-editor-background {
  background-color: transparent;
}
/* Monaco right-aligns the line numbers in a box it sizes to fit the widest one, and that box starts at the frame's left border — so once a file needs five digits (its minimum width is five characters) the numbers sit against the stroke with nothing between: on a 76,000-line document every "76001" touched the edge. The gutter has no left padding to give, and its one width knob buys a whole character at a time, which is about twice this gap. So the column is nudged off the border here. A transform, not a layout change: Monaco measures this gutter and re-lays-out when its width changes, and the nudge must not be one of the numbers it measures. So nothing else moves — the room comes out of the gap Monaco keeps between the numbers and the text, which is wide enough (its own 10px, plus the space the folding controls sit in) to spare this and still read as a gap. */
.code-view-monaco .monaco-editor .margin-view-overlays .line-numbers {
  transform: translateX(var(--cv-line-number-pad));
}
/* The square Monaco draws before a color in the source. It is a mark, not a control — the picker's hover participant is not in the vendored bundle, so a click on it does nothing — and the editor's own style sets cursor:pointer, which is the app promising something that will not happen. Its black-in-light, near-white-in-dark hairline is the editor's too, and stays: it is what keeps a white or black swatch visible. */
.code-view-monaco .monaco-editor .colorpicker-color-decoration {
  cursor: text;
}
/* The minimap's floating viewport box (the draggable "where am I" window), styled to echo the reader rail's viewport box: our minimap-viewport colors, a border, and rounded corners. Nothing else about the minimap is touched. */
.code-view-monaco .monaco-editor .minimap-slider {
  background: var(--lt-minimap-viewport-background) !important;
  border: var(--lt-stroke-1) solid var(--lt-minimap-viewport-border);
  border-radius: var(--lt-radius-sm);
  box-sizing: border-box;
  /* Hold the box a pixel clear of the rail's outer edge, or its right stroke is a coin toss. Monaco sizes the box to the full width of the rail, and the rail ends exactly where the editor's overflow:hidden cuts — so the stroke lands on the last device pixel inside the clip, and whether that pixel survives depends on which way the clip rounds at this window width and display scale. Measured with a deliberately fat border: the left edge got all nine of its device pixels and the right edge got eight. A real stroke is one device pixel, so on the losing side it disappeared completely — the whole right side of the box, at some window widths and not others. A pixel of clearance takes the rounding out of it. !important because the width is Monaco's, written inline; nothing reads this box's width back (dragging works off the pointer), so narrowing the drawing changes nothing else. */
  width: calc(100% - 1px) !important;
}
/* ---- Code view: the pinned heading trail ----------------------------------
   The headings you are reading under, held at the top of the source. Built by code-sticky.js as plain rows over the editor, positioned from Monaco's own layout so they land on the same columns the real lines do.

   A sibling of the editor, at z-index 5, so the rows paint ABOVE .reader-edge-fade (4) rather than under its wash — the fade would dissolve the one thing here meant to stay readable. The frame's own borders (the shell's ::after, also 5 but later in tree order) still paint over the rows' edges, which is why this box can run right up to the frame. */
.code-sticky {
  position: absolute;
  top: var(--app-bar-height);
  left: 0;
  /* Stops where the page does: at the frame's right border, the minimap's divider. The same measure the frame and the app bar's divider use. */
  right: calc(var(--cv-minimap-width, 0px) + var(--cv-minimap-standoff));
  z-index: 5;
  /* Height is the row count, written by the script — the stack slides up out of the box as a section ends, and the box shortens with it. */
  height: 0;
}
.code-sticky[hidden] {
  display: none;
}
/* The rows themselves, on the page's own fill, clipped so a departing stack slides away instead of spilling under the app bar. The shadow is the rows' own: the page's edge fade is behind them now and casts nothing. */
.code-sticky-rows {
  position: absolute;
  inset: 0;
  overflow: hidden;
  background: var(--lt-syntax-background);
}
/* And the dissolve for what slides under them — the chrome's dot screen in the page's color, at falling alpha, exactly the recipe .reader-edge-fade uses. A wash would read as a band; an even screen going transparent has no rows in it. `fixed` so the lattice is the window's, in phase with every other surface. */
.code-sticky::after {
  content: "";
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  height: 18px;
  --lt-grain-dot: var(--lt-syntax-background);
  background-image: radial-gradient(circle, var(--lt-grain-dot) 0 var(--lt-grain-radius), transparent var(--lt-grain-edge));
  background-size: var(--lt-grain-tile) var(--lt-grain-tile);
  background-repeat: repeat;
  background-attachment: fixed;
  -webkit-mask-image: linear-gradient(to bottom, var(--lt-mask-opaque) 0 2px, transparent);
  mask-image: linear-gradient(to bottom, var(--lt-mask-opaque) 0 2px, transparent);
  pointer-events: none;
}
.code-sticky-row {
  position: absolute;
  left: 0;
  right: 0;
  white-space: pre;
}
.code-sticky-row:hover {
  background: var(--lt-navigation-button-hover-background);
}
/* Both columns are Monaco's, read back and restated: the gutter is right-aligned in the width Monaco sized it to, nudged off the frame's border by the same --cv-line-number-pad the real numbers get. */
.code-sticky-number {
  position: absolute;
  top: 0;
  text-align: right;
  color: var(--lt-syntax-comment);
  transform: translateX(var(--cv-line-number-pad));
}
.code-sticky-text {
  position: absolute;
  top: 0;
  right: 8px;
  overflow: hidden;
  text-overflow: ellipsis;
}
.document-body .math {
  font-family: "Cambria Math", "STIX Two Math", "Times New Roman", serif;
}
.document-body .math-inline {
  background: var(--lt-markdown-math-inline-background);
  border-radius: var(--lt-radius-sm);
  padding: 0.08em 0.24em;
}
.document-body .math-display {
  display: block;
  overflow-x: auto;
  text-align: center;
}
.document-body .footnote-reference,
.document-body .footnote-definition-label {
  font-family: var(--app-font);
}
.document-body .footnote-definition {
  border-top: var(--lt-stroke-1) solid var(--lt-markdown-rule);
  color: var(--lt-muted-foreground);
  font-size: var(--type-caption-size);
  line-height: var(--type-caption-line);
  margin-top: var(--lt-space-32);
  padding-top: 0.8em;
}
.document-body .footnote-backref {
  align-items: center;
  display: inline-flex;
  font-family: var(--app-font);
  font-size: 0.82em;
  height: 1em;
  line-height: var(--lt-leading-1);
  margin-left: 0.3em;
  text-decoration: none;
  vertical-align: -0.12em;
}
.document-body .footnote-backref svg {
  display: block;
  height: 1em;
  width: 1em;
}
.document-body table {
  border-collapse: collapse;
  display: block;
  font-family: var(--app-font);
  line-height: var(--lt-leading-1-45);
  /* Sideways only. A block table with collapsed borders rounds two or three empty pixels onto its height, so a vertical scrollport here eats the wheel over every table, hangs a thumb that drags nowhere down its right edge and holds 14px of width for it. The horizontal half is spelled out because a box with one axis not visible computes the other to auto. */
  overflow-x: auto;
  overflow-y: hidden;
  width: max-content;
  max-width: 100%;
}
/* A wide table reads through the reader's whole lane, less the strip the block controls need, and the wrapper is what widens rather than the table: the bands that dissolve a sliced column into the page have to be painted over the table, and a mask can only take ink away. `100cqi` is the room inside .reader-layout's padding, so this rides that container query and nothing else; `max(100%, ...)` hands a narrow window back to the measure it has today. decorate.js wraps only a body table that is not a data table, so a frontmatter table, a data file's wrapping table and a table inside <div align="center"> keep their width. */
/* The bay is the box the centering arithmetic can name, and it exists for nothing else: it draws no paint, holds no grain and takes no gesture. Its width is a length rather than the lane's `max-content`, so the margin that centers it is computable — half the room the measure does not cover, which is zero on a window too narrow for a lane to break out at all. Never a transform: a transform makes its own box the containing block for every `background-attachment: fixed` inside it, which is what dragged the dots in a scrolled table's header sideways with the columns, and what shrank a printed sheet to fit a slid lane's phantom width. print.css carries the same arithmetic for paper off a width the render wrote down. */
.document-body > .table-bay {
  width: max(100%, calc(100cqi - 2 * var(--reader-lane-inset)));
  margin-inline: calc((100% - max(100%, 100cqi - 2 * var(--reader-lane-inset))) / 2);
}
/* And the lane keeps its own box inside the bay, so everything keyed on it — the bands, the corner control, the hover that reveals it, the wheel, the full-window sheet — lands where it always did. Auto margins center it because it can no longer be wider than its parent; a block box wider than its containing block has them treated as zero, which is why they cannot center the lane against the measure directly. */
.table-bay > .table-lane {
  position: relative;
  margin-inline: auto;
  /* The table's own width, capped by the bay. A block box at `auto` fills the bay and a `max-width` alone can only cap it. */
  width: max-content;
  max-width: 100%;
  /* The bands sit here and the scroll is the table's, one box down, so the timeline has to be published up to this element for them to name it. */
  timeline-scope: --lt-table-scroll;
  /* Whether this reader gets cards at all, published where decorate.js can read it so the card width is written once and the measured class cannot disagree with the width fallback about it. `0` is a reader with room, and the container query below is the only thing that turns it to `1`. */
  --reader-table-cards: 0;
}
.table-lane > table {
  scroll-timeline: --lt-table-scroll inline;
}
/* The table's reading control is a second corner action beside the content, so it appears only when the table is being aimed at and leaves the page quiet otherwise. A widened picture wears the same shape in the same corner — one shape, two blocks, so the pair of them is written once. */
.table-sheet-open,
.image-sheet-open,
.image-export-open {
  z-index: 1;
  /* The wash below hangs off this box, so each of the three has to be the layer's containing block. The table's own is placed absolutely a rule down, which does the same job. */
  position: relative;
  display: grid;
  place-items: center;
  width: 28px;
  height: 28px;
  padding: 0;
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-md);
  background: var(--lt-surface-elevated);
  color: var(--lt-muted-foreground);
}
/* The wash is a tint over whatever is behind, and here that is a picture, so it goes on top of the button's own surface rather than instead of it: replacing it leaves a see-through square with the picture showing through the control. It is a layer of its own rather than a gradient on the button, because a background image cannot be interpolated between `none` and a picture however it is timed — so written on the button the wash arrives whole on the first frame beside an edge and an ink that fade. */
.table-sheet-open::before,
.image-sheet-open::before,
.image-export-open::before {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  pointer-events: none;
  background: transparent;
  transition: background-color var(--lt-duration-120) var(--lt-ease);
}
.table-sheet-open:hover::before,
.image-sheet-open:hover::before,
.image-export-open:hover::before {
  background: var(--lt-wash-hover);
}
/* One control, so the table's own sits in the corner itself. Its own reveal, so the shared hover fade at the top of the file never reaches it — a `transition` shorthand replaces that one outright rather than merging with it — which is why the edge and the ink are named here and on the rule that shows it below. */
.table-sheet-open {
  position: absolute;
  top: var(--lt-space-6);
  right: var(--lt-space-6);
  opacity: 0;
  pointer-events: none;
  transition: var(--lt-transition-hover-reveal-leave), border-color var(--lt-duration-120) var(--lt-ease),
    color var(--lt-duration-120) var(--lt-ease);
}
/* The second corner action: the same shape and the same reveal, one button-width further in. Written out rather than folded into the lists above, which are each read as one selector by a test that names them; a row box like the picture lane's would be the other way to place two, and this is one block against restructuring the lane for a control that never moves. */
.table-copy-csv {
  z-index: 1;
  position: absolute;
  top: var(--lt-space-6);
  right: calc(var(--lt-space-6) + 34px);
  display: grid;
  place-items: center;
  width: 28px;
  height: 28px;
  padding: 0;
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-md);
  background: var(--lt-surface-elevated);
  color: var(--lt-muted-foreground);
  opacity: 0;
  pointer-events: none;
  transition: var(--lt-transition-hover-reveal-leave), border-color var(--lt-duration-120) var(--lt-ease),
    color var(--lt-duration-120) var(--lt-ease);
}
.table-copy-csv::before {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  pointer-events: none;
  background: transparent;
  transition: background-color var(--lt-duration-120) var(--lt-ease);
}
.table-copy-csv:hover::before {
  background: var(--lt-wash-hover);
}
.table-copy-csv .lt-icon {
  position: relative;
  width: 16px;
  height: 16px;
}
.table-lane:hover .table-copy-csv,
.table-copy-csv:focus-visible {
  opacity: 1;
  pointer-events: auto;
  transition: var(--lt-transition-hover-reveal-arrive), border-color var(--lt-duration-120) var(--lt-ease),
    color var(--lt-duration-120) var(--lt-ease);
}
.table-copy-csv:hover {
  border-color: var(--lt-border-strong);
  color: var(--lt-foreground);
}
/* A picture has two, so the corner is a row they sit in and the space between them is a gap rather than an offset somebody measured — the way the diagram's own pair sits. */
.image-lane-corner {
  position: absolute;
  top: var(--lt-space-6);
  right: var(--lt-space-6);
  z-index: 1;
  display: flex;
  gap: var(--lt-space-6);
  opacity: 0;
  pointer-events: none;
  /* The reveal alone: this is a box holding the two buttons and changes no color of its own, so a color leg here would time nothing. */
  transition: var(--lt-transition-hover-reveal-leave);
}
.table-sheet-open .lt-icon,
.image-sheet-open .lt-icon,
.image-export-open .lt-icon {
  /* Above the wash: an absolutely placed layer with no depth of its own paints after the content in the box, so left static the glyph would sit under the tint rather than over it. */
  position: relative;
  width: 16px;
  height: 16px;
}
.image-lane:hover .image-lane-corner,
.image-lane-corner:focus-within {
  opacity: 1;
  pointer-events: auto;
  transition: var(--lt-transition-hover-reveal-arrive);
}
/* The colors ride along here too, for the reason written on the resting rule: the shorthand that reveals the button is the whole of its transition, so a fade it does not name is a fade it does not get. */
.table-lane:hover .table-sheet-open,
.table-sheet-open:focus-visible {
  opacity: 1;
  pointer-events: auto;
  transition: var(--lt-transition-hover-reveal-arrive), border-color var(--lt-duration-120) var(--lt-ease),
    color var(--lt-duration-120) var(--lt-ease);
}
/* The edge and the ink; the fill is the layer above. */
.table-sheet-open:hover,
.image-sheet-open:hover,
.image-export-open:hover {
  border-color: var(--lt-border-strong);
  color: var(--lt-foreground);
}
/* The page's own edge fade turned on its side and laid over the table's cut, which is 62px inside the page's edge where the reader's own side bands cannot reach. Same depth, same hold, same wash under the same dot screen — but both in one box here, ramped once by one mask, because a side band has no parent of its own to carry the wash. The first layer is the app's own lattice and the second is the wash, which is what the paired `fixed, scroll` says; nothing between here and the app surface is transformed, so the dots fall in phase with the page the band dissolves into. */
.table-lane::before,
.table-lane::after {
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  width: var(--reader-edge-fade-depth);
  pointer-events: none;
  /* Off until the scroll says otherwise, which is also what a table with nothing to scroll is left at: no timeline, no animation, no veil over a narrow table. */
  opacity: 0;
  --lt-grain-dot: var(--lt-markdown-background);
  background-size: var(--lt-grain-tile) var(--lt-grain-tile), 100% 100%;
  background-repeat: repeat, no-repeat;
  background-attachment: fixed, scroll;
}
.table-lane::before {
  left: 0;
  background-image: radial-gradient(circle, var(--lt-grain-dot) 0 var(--lt-grain-radius), transparent var(--lt-grain-edge)),
    linear-gradient(
      to right,
      var(--lt-markdown-background) 0 var(--reader-edge-fade-hold),
      transparent
    );
  -webkit-mask-image: linear-gradient(
    to right,
    var(--lt-mask-opaque) 0 var(--reader-edge-fade-hold),
    transparent
  );
  mask-image: linear-gradient(
    to right,
    var(--lt-mask-opaque) 0 var(--reader-edge-fade-hold),
    transparent
  );
}
.table-lane::after {
  right: 0;
  background-image: radial-gradient(circle, var(--lt-grain-dot) 0 var(--lt-grain-radius), transparent var(--lt-grain-edge)),
    linear-gradient(
      to left,
      var(--lt-markdown-background) 0 var(--reader-edge-fade-hold),
      transparent
    );
  -webkit-mask-image: linear-gradient(
    to left,
    var(--lt-mask-opaque) 0 var(--reader-edge-fade-hold),
    transparent
  );
  mask-image: linear-gradient(
    to left,
    var(--lt-mask-opaque) 0 var(--reader-edge-fade-hold),
    transparent
  );
}
/* The bands ride the table's own sideways scroll, not a clock — so they join the page only where a scroll can drive them. A browser without scroll-driven animations (the export and both sites are handed this file) drops only the timeline line, and what is left is a zero-second clock animation whose fill mode holds the last keyframe: the left band stuck on over a table nobody scrolled. Behind the guard, such a browser keeps the resting `opacity: 0` and shows no band at all. Left on under Reduce Motion for the same reason it is scroll-driven: it only moves when the reader moves it. */
@supports (animation-timeline: scroll()) {
  .table-lane::before,
  .table-lane::after {
    animation-fill-mode: both;
    animation-timing-function: var(--lt-ease-linear);
    animation-timeline: --lt-table-scroll;
  }
  .table-lane::before {
    animation-name: lt-table-edge-behind;
  }
  .table-lane::after {
    animation-name: lt-table-edge-ahead;
  }
}
/* Exempt by name: a zero duration lands a scroll-driven animation on its last keyframe and holds it there, which for the ahead band is `opacity: 0` — the cut edge unmarked on the very tables that need it. `auto` hands progress back to the scroll. */
@media (prefers-reduced-motion: reduce) {
  .table-lane::before,
  .table-lane::after {
    animation-duration: auto !important;
  }
}
/* On within the first tenth of the travel and gone again in the last, so a band says "there is more this way" rather than veiling a column already reached. */
@keyframes lt-table-edge-behind {
  from {
    opacity: 0;
  }
  10%,
  to {
    opacity: 1;
  }
}
@keyframes lt-table-edge-ahead {
  from,
  90% {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
.document-body th,
.document-body td {
  border: var(--lt-stroke-1) solid var(--lt-markdown-table-border);
  padding: 0.375em 0.8125em;
}
.document-body th {
  background: var(--lt-markdown-table-row-background);
  color: var(--lt-markdown-heading);
  font-weight: var(--lt-weight-600);
}
.document-body tr:nth-child(2n) td {
  background: var(--lt-markdown-table-row-background);
}
/* The chrome's grain over the reading view's tinted surfaces, so a code block or table header reads as a dithered cell rather than a flat wash. Must stay after the rules that set those fills: each uses the `background:` shorthand, which at equal specificity would blank the image. The frontmatter table drops it on its own — it clears the fill at higher specificity, taking the grain with it; a rendered diagram outranks this rule too and so restates it. Cells only — the code view is a whole page, so graining it dithers the editor. */
.document-body .document-outline,
.document-body .tei-front,
.document-body pre,
.document-body th,
.document-body tr:nth-child(2n) td {
  --lt-grain-dot: var(--reader-surface-grain);
  background-image: radial-gradient(circle, var(--lt-grain-dot) 0 var(--lt-grain-radius), transparent var(--lt-grain-edge));
  background-size: var(--lt-grain-tile) var(--lt-grain-tile);
  background-repeat: repeat;
  background-attachment: fixed;
}
/* Grain the untinted rows too, so a dark table reads as one texture banded light and dark rather than speckled rows alternating with flat ones. Same fixed lattice as every other grain, so the dots run straight down across the stripe. Light themes zero the token rather than drop the rule, keeping one selector to reason about against the frontmatter opt-out below. */
.document-body tr:nth-child(2n + 1) td {
  --lt-grain-dot: var(--reader-row-grain);
  background-image: radial-gradient(circle, var(--lt-grain-dot) 0 var(--lt-grain-radius), transparent var(--lt-grain-edge));
  background-size: var(--lt-grain-tile) var(--lt-grain-tile);
  background-repeat: repeat;
  background-attachment: fixed;
}
/* Cards, and the last word on a cell: this block sits below the striping and the grain on purpose. Those two are written for a grid, they carry the same weight as these selectors, and a card is one surface — left above them, every second card came out shaded and every cell in it wore a box of its own. */
/* The sites have no reader container, so their screen rule shares the card shape the window keys to its reader container. `no-cards` is the measured answer: it silences the width fallback for a grid that fits, while `is-cards` cards a grid that does not fit — and only for a reader under the card width, because the changeover reads `--reader-table-cards` off the lane first. Above it a wide grid keeps its lane, its two bands and the sideways wheel, which is the whole reading those three shipped features draw. */
/* On a screen and never on paper. The reader is a query container on the printed sheet too, and a printed lane is written as a pixel width off the chosen paper — narrower than this number on most of them — so an unguarded container query cards every table in an export or a print, which is the one place a grid has all the room it needs. The media rule under it already says `screen and` for the same reason. */
/* The cell is a block, never a flex box. A flex container makes every child its own item, so a cell of three links and the words between them came out as six columns side by side, each one broken a word-piece per line; and a flex item cannot shrink under its longest unbreakable word, so a path ran clean out of the card. As a block the whole cell is one run of words, the label an inline box at the head of it, and `overflow-wrap: anywhere` is what lets a path break rather than overhang. */
/* The row wraps rather than gridding, which is what puts a `#` beside a `Ticket` and leaves a paragraph a line of its own: equal grid tracks handed both the same room. A cell is laid out at its own width and the browser breaks the line where the next one stops fitting, so nothing here reads a cell to decide how long it is. */
/* The table is the one lane and every row a card standing on it, which is the shape the RDB board already draws a record in: the lane takes the reading view's tinted panel, the card takes the page it is printed on, and the room down the lane is what separates one record from the next. The board's own classes describe different markup, so the tokens travel and the selectors do not. */
/* A column whose middle value cannot share a card line takes a line of its own, led by a rule — the one place a rule does work, since the card edge is what separates the records. Which columns those are is the renderer's answer, off the whole table, because no field name or cell position holds across documents; `data-leaf-long` is what it writes. A marked cell that opens a card draws no rule, because the card edge above it has already made the break. */
/* The label is an eyebrow, which is the whole difference between a card that reads as a run of words and one whose fields can be found without reading them. Three quarters of the value rather than four fifths: at the reader's 14 pixels that is the 10.5 the app's own muted headings are already drawn at, and the narrower label packs one more field onto a card's first line. Relative rather than a token, because a document's text scales with the reader's setting and the label has to scale with it. */
.document-body table.is-cell-card {
  border-collapse: separate;
  border-spacing: 0;
  overflow: hidden;
  background: var(--lt-markdown-background);
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-md);
}
.document-body table.is-cell-card th,
.document-body table.is-cell-card td {
  background: none;
  background-image: none;
  border: 0;
  padding: var(--lt-space-12);
}
.document-body table.is-figure-card th {
  padding-bottom: 0;
  color: var(--lt-muted-foreground);
  font-size: 0.75em;
  letter-spacing: var(--lt-tracking-040);
  text-transform: uppercase;
}
.document-body table.is-figure-card td {
  padding-top: 0;
  font-size: 2em;
  font-variant-numeric: tabular-nums;
  font-weight: var(--lt-weight-400);
}
@media screen {
  @container (max-width: 720px) {
    /* The one place the card width is decided for the window, and the flag the changeover reads. A reader wider than this is left a grid however far it overflows its lane, so the bands and the Control wheel have something to run on. */
    .table-bay > .table-lane {
      --reader-table-cards: 1;
    }
    .document-body table:not(.no-cards) {
      border-collapse: separate;
      border-spacing: 0;
      display: block;
      max-width: none;
      overflow: visible;
      width: 100%;
      background: var(--lt-surface-muted);
      border: var(--lt-stroke-1) solid var(--lt-border);
      border-radius: var(--lt-radius-lg);
      padding: var(--lt-space-8);
    }
    .document-body table:not(.no-cards) thead {
      display: none;
    }
    .document-body table:not(.no-cards) tbody {
      display: flex;
      flex-direction: column;
      gap: var(--lt-space-8);
    }
    .document-body table:not(.no-cards) tr {
      background: var(--lt-markdown-background);
      border: var(--lt-stroke-1) solid var(--lt-border);
      border-radius: var(--lt-radius-md);
      display: flex;
      flex-wrap: wrap;
      gap: var(--lt-space-8) var(--lt-space-16);
      margin-bottom: 0;
      padding: var(--lt-space-12);
    }
    .document-body table:not(.no-cards) td {
      background: none;
      border: 0;
      display: block;
      flex: 0 1 auto;
      max-width: 100%;
      min-width: 0;
      overflow-wrap: anywhere;
      padding: 0;
      text-align: left;
    }
    .document-body table:not(.no-cards) td::before {
      color: var(--lt-muted-foreground);
      content: attr(data-leaf-col);
      display: inline-block;
      font-size: 0.75em;
      font-weight: var(--lt-weight-600);
      letter-spacing: var(--lt-tracking-040);
      margin-right: var(--lt-space-6);
      text-transform: uppercase;
    }
    .document-body table:not(.no-cards) td:not([data-leaf-col])::before {
      display: none;
    }
    .document-body table:not(.no-cards) td[data-leaf-long] {
      border-top: var(--lt-stroke-1) solid var(--lt-markdown-table-border);
      flex-basis: 100%;
      padding-top: var(--lt-space-8);
    }
    .document-body table:not(.no-cards) td[data-leaf-long]:first-child {
      border-top: 0;
      padding-top: 0;
    }
    /* Cards need no room past the writing, so the bay gives its break-out back and the lane fills the measure inside it. */
    .document-body > .table-bay.table-allows-cards {
      width: 100%;
      margin-inline: 0;
    }
    .document-body .table-lane.table-allows-cards {
      max-width: none;
      width: 100%;
    }
    .document-body .table-lane.table-allows-cards::before,
    .document-body .table-lane.table-allows-cards::after {
      display: none;
    }
  }
}
@media screen and (max-width: 720px) {
  .document-body table:not(.no-cards) {
    border-collapse: separate;
    border-spacing: 0;
    display: block;
    max-width: none;
    overflow: visible;
    width: 100%;
    background: var(--lt-surface-muted);
    border: var(--lt-stroke-1) solid var(--lt-border);
    border-radius: var(--lt-radius-lg);
    padding: var(--lt-space-8);
  }
  .document-body table:not(.no-cards) thead {
    display: none;
  }
  .document-body table:not(.no-cards) tbody {
    display: flex;
    flex-direction: column;
    gap: var(--lt-space-8);
  }
  .document-body table:not(.no-cards) tr {
    background: var(--lt-markdown-background);
    border: var(--lt-stroke-1) solid var(--lt-border);
    border-radius: var(--lt-radius-md);
    display: flex;
    flex-wrap: wrap;
    gap: var(--lt-space-8) var(--lt-space-16);
    margin-bottom: 0;
    padding: var(--lt-space-12);
  }
  .document-body table:not(.no-cards) td {
    background: none;
    border: 0;
    display: block;
    flex: 0 1 auto;
    max-width: 100%;
    min-width: 0;
    overflow-wrap: anywhere;
    padding: 0;
    text-align: left;
  }
  .document-body table:not(.no-cards) td::before {
    color: var(--lt-muted-foreground);
    content: attr(data-leaf-col);
    display: inline-block;
    font-size: 0.75em;
    font-weight: var(--lt-weight-600);
    letter-spacing: var(--lt-tracking-040);
    margin-right: var(--lt-space-6);
    text-transform: uppercase;
  }
  .document-body table:not(.no-cards) td:not([data-leaf-col])::before {
    display: none;
  }
  .document-body table:not(.no-cards) td[data-leaf-long] {
    border-top: var(--lt-stroke-1) solid var(--lt-markdown-table-border);
    flex-basis: 100%;
    padding-top: var(--lt-space-8);
  }
  .document-body table:not(.no-cards) td[data-leaf-long]:first-child {
    border-top: 0;
    padding-top: 0;
  }
}
.document-body table.is-cards {
  border-collapse: separate;
  border-spacing: 0;
  display: block;
  max-width: none;
  overflow: visible;
  width: 100%;
  background: var(--lt-surface-muted);
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-lg);
  padding: var(--lt-space-8);
}
.document-body table.is-cards thead {
  display: none;
}
.document-body table.is-cards tbody {
  display: flex;
  flex-direction: column;
  gap: var(--lt-space-8);
}
.document-body table.is-cards tr {
  background: var(--lt-markdown-background);
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-md);
  display: flex;
  flex-wrap: wrap;
  gap: var(--lt-space-8) var(--lt-space-16);
  margin-bottom: 0;
  padding: var(--lt-space-12);
}
.document-body table.is-cards td {
  background: none;
  border: 0;
  display: block;
  flex: 0 1 auto;
  max-width: 100%;
  min-width: 0;
  overflow-wrap: anywhere;
  padding: 0;
  text-align: left;
}
.document-body table.is-cards td::before {
  color: var(--lt-muted-foreground);
  content: attr(data-leaf-col);
  display: inline-block;
  font-size: 0.75em;
  font-weight: var(--lt-weight-600);
  letter-spacing: var(--lt-tracking-040);
  margin-right: var(--lt-space-6);
  text-transform: uppercase;
}
.document-body table.is-cards td:not([data-leaf-col])::before {
  display: none;
}
.document-body table.is-cards td[data-leaf-long] {
  border-top: var(--lt-stroke-1) solid var(--lt-markdown-table-border);
  flex-basis: 100%;
  padding-top: var(--lt-space-8);
}
.document-body table.is-cards td[data-leaf-long]:first-child {
  border-top: 0;
  padding-top: 0;
}
/* Cards need no room past the writing, so the bay gives its break-out back and the lane fills the measure inside it. */
.document-body > .table-bay.table-is-cards {
  width: 100%;
  margin-inline: 0;
}
.document-body .table-lane.table-is-cards {
  max-width: none;
  width: 100%;
}
.document-body .table-lane.table-is-cards::before,
.document-body .table-lane.table-is-cards::after {
  display: none;
}
.document-body kbd {
  border: var(--lt-stroke-1) solid var(--lt-markdown-keyboard-border);
  border-bottom-width: var(--lt-stroke-2);
  border-radius: var(--lt-radius-sm);
  background: var(--lt-markdown-keyboard-background);
  font-family: var(--code-font);
  font-size: 0.8em;
  padding: 0.08em 0.32em;
}
/* Every other folded block, the outline included. The arrow: a control is not a link. Written rather than left off, because an unlocked block says `cursor: text` and this would inherit it. */
.document-body summary {
  cursor: default;
  font-family: var(--app-font);
  font-weight: var(--lt-weight-700);
}
/* The leading frontmatter block is already a key-and-value card: small Noto Sans (the UI font), tight rows, no table chrome — distinct from body. */
.document-body .frontmatter {
  margin: 0 0 var(--type-spacing);
  overflow-x: auto;
}
.document-body .frontmatter table {
  border-collapse: collapse;
  font-family: var(--app-font);
  font-size: var(--lt-text-12);
  line-height: var(--lt-leading-1-5);
}
/* Guarded the same way, and for the same reason: the field block keeps its own two-column shape on paper. Every row of the card shape has to be given back, not just the table's own: handing the table `display: table` and stopping left the block's rows still folding into cards and its keys still stacking above their values. And every declaration the card row carries, not just its display: with the border, radius, padding, gap and margin left behind, the one table meant to carry no chrome at all wore a rounded box round each of its rows the moment the reader went narrow. */
@media screen {
  @container (max-width: 720px) {
    .document-body .frontmatter table:not(.no-cards) {
      background: none;
      border: 0;
      border-radius: 0;
      display: table;
      padding: 0;
      max-width: 100%;
      overflow: auto;
      width: max-content;
    }
    .document-body .frontmatter table:not(.no-cards) tbody {
      display: table-row-group;
    }
    .document-body .frontmatter table:not(.no-cards) tr {
      background: none;
      border: 0;
      border-radius: 0;
      display: table-row;
      flex-wrap: nowrap;
      gap: 0;
      margin-bottom: 0;
      padding: 0;
    }
    .document-body .frontmatter table:not(.no-cards) th,
    .document-body .frontmatter table:not(.no-cards) td {
      display: table-cell;
    }
  }
}
@media screen and (max-width: 720px) {
  .document-body .frontmatter table:not(.no-cards) {
    background: none;
    border: 0;
    border-radius: 0;
    display: table;
    padding: 0;
    max-width: 100%;
    overflow: auto;
    width: max-content;
  }
  .document-body .frontmatter table:not(.no-cards) tbody {
    display: table-row-group;
  }
  .document-body .frontmatter table:not(.no-cards) tr {
    background: none;
    border: 0;
    border-radius: 0;
    display: table-row;
    flex-wrap: nowrap;
    gap: 0;
    margin-bottom: 0;
    padding: 0;
  }
  .document-body .frontmatter table:not(.no-cards) th,
  .document-body .frontmatter table:not(.no-cards) td {
    display: table-cell;
  }
}
/* The `tr` is here to out-specify the striping and grain rules above, which are one element deeper than a bare `.frontmatter td` and would otherwise put a speckled stripe through the one table meant to carry no chrome at all. */
.document-body .frontmatter tr th,
.document-body .frontmatter tr td {
  text-align: left;
  vertical-align: top;
  padding: var(--lt-space-1) var(--lt-space-12) var(--lt-space-1) 0;
  border: 0;
  background: none;
}
.document-body .frontmatter th {
  font-weight: var(--lt-weight-600);
  white-space: nowrap;
  color: var(--lt-muted-foreground);
}
/* A document that asked for a full-width page by name in its `cssclasses`. The only style a note can ask for so far, and it uses the reader's whole lane the way a widened table does. The class is ours, looked up from the note's word in `markdown/mod.rs` — a document's own string never reaches the page. */
.document-body.document-body-wide {
  width: 100%;
}
/* A list-valued field, one item per line. The cell is the list's whole box, so the marker, the indent and the outer margin all go: what says "list" here is the items sitting one under another, not a row of bullets down a compact table. No class on the `ul` — the sanitizer does not pass one on a list — so this reaches it as a descendant of the table. */
.document-body .frontmatter td ul {
  list-style: none;
  margin: 0;
  padding: 0;
}
/* A field block whose values can be typed into. The caret is the whole cue, exactly as it is for a paragraph lower down the page: nothing paints behind a value the pointer is over, because a page being edited is still a page and not a form. The cross appearing at the end of the row is what says the row itself answers the pointer. A locked document never gets the class. */
.document-body .frontmatter.is-editable td[data-leaf-field] {
  cursor: text;
}
/* The box sits in the row it replaced, at the row's own size, so opening one moves no other line of the table. */
.document-body .frontmatter td.is-editing {
  padding-top: 0;
  padding-bottom: 0;
}
.frontmatter-input {
  box-sizing: border-box;
  width: 100%;
  min-width: 120px;
  padding: 0 var(--lt-space-4);
  border-radius: var(--lt-radius-sm);
  border: var(--lt-stroke-1) solid color-mix(in srgb, var(--lt-muted-foreground) 35%, transparent);
  background: var(--lt-surface);
  color: inherit;
  font-family: inherit;
  font-size: inherit;
  line-height: var(--lt-leading-1-5);
}
.frontmatter-input:focus {
  outline: none;
  border-color: color-mix(in srgb, var(--lt-foreground) 45%, transparent);
}
/* Two boxes on the add row are one editor, so they sit side by side rather than stacking into two things to fill in. */
.document-body .frontmatter tr.frontmatter-add td {
  display: flex;
  gap: var(--lt-space-6);
}
/* The cross at the right end of a row, drawn on every row and shown under the pointer: the table has no chrome of its own, and a column of crosses down a note's metadata is the note about the app rather than the note. */
.document-body .frontmatter td.frontmatter-actions {
  width: 1%;
  padding-right: 0;
}
.frontmatter-remove {
  display: block;
  padding: 0;
  border: 0;
  border-radius: var(--lt-radius-sm);
  background: none;
  color: var(--lt-muted-foreground);
  opacity: 0;
  /* Its own reveal, so the shared hover fade at the top of base.css never reaches it: the colors it changes under its own pointer are named here instead. */
  transition: var(--lt-transition-hover-reveal-leave), background-color var(--lt-duration-120) var(--lt-ease),
    color var(--lt-duration-120) var(--lt-ease);
}
.document-body .frontmatter tr:hover .frontmatter-remove,
.frontmatter-remove:focus-visible {
  opacity: 1;
  transition: var(--lt-transition-hover-reveal-arrive), background-color var(--lt-duration-120) var(--lt-ease),
    color var(--lt-duration-120) var(--lt-ease);
}
.frontmatter-remove:hover {
  background: var(--lt-wash-hover);
  color: var(--lt-foreground);
}
.frontmatter-remove .lt-icon {
  width: 13px;
  height: 13px;
}
/* The add row is the quietest thing in the block until it is reached for: it is an offer under the fields, not a sixth field. */
.frontmatter-add-button {
  display: flex;
  align-items: center;
  gap: var(--lt-space-4);
  /* Room each side, so what the pointer paints is a chip around the words rather than a band the words are pressed against. The left edge stays on the key column and the label sits inside it; nothing is pulled back out to the margin. */
  padding: var(--lt-space-4) var(--lt-space-8);
  border: 0;
  border-radius: var(--lt-radius-md);
  background: none;
  color: var(--lt-muted-foreground);
  font: inherit;
}
/* The fill has to be named here, not merely cleared above: `button:hover` is a pseudo-class and an element, so it outranks one class on its own and paints this the app's primary purple with the quiet label left unreadable on it. */
.frontmatter-add-button:hover {
  background: var(--lt-wash-hover);
  color: var(--lt-foreground);
}
.frontmatter-add-button .lt-icon {
  width: 12px;
  height: 12px;
}
/* A list, as one chip an item. The cell already drew the items one under another; a chip is the same list with somewhere to press. */
.frontmatter-chips {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--lt-space-4);
}
.frontmatter-chip {
  display: inline-flex;
  align-items: center;
  gap: var(--lt-space-2);
  padding: 0 var(--lt-space-2) 0 var(--lt-space-6);
  border-radius: var(--lt-radius-pill);
  background: var(--lt-wash-hover);
}
.frontmatter-chip-remove,
.frontmatter-chip-add {
  display: flex;
  padding: 0;
  border: 0;
  border-radius: var(--lt-radius-sm);
  background: none;
  color: var(--lt-muted-foreground);
}
/* The one that is not inside a chip stands on the page beside them, so it carries its own room the way the add button does. */
.frontmatter-chip-add {
  align-items: center;
  padding: var(--lt-space-2) var(--lt-space-4);
}
/* Named for the same reason as the add button above. Over a chip's own pill the wash deepens what is already there rather than replacing it, which is how it reads as a target at this size. */
.frontmatter-chip-remove:hover,
.frontmatter-chip-add:hover {
  background: var(--lt-wash-hover);
  color: var(--lt-foreground);
}
.frontmatter-chip-remove .lt-icon,
.frontmatter-chip-add .lt-icon {
  width: 11px;
  height: 11px;
}
/* The picker's own indicator is the platform's; the box round it is ours. */
.frontmatter-date {
  min-width: 0;
  width: auto;
}
/* A picture alone in its paragraph reads through the reader's whole lane, less the strip the block controls need. It is the table's break-out on the paragraph itself, because a picture has no sliced column for edge bands to be painted in; `max-content` of a picture whose tag carries the width the renderer read out of its header is that stamped number, decoded or not, so a small one is left where it was and an undecoded one still has its box, and the centering is a percentage transform because CSS cannot read a used width. */
.document-body > p.image-lane {
  position: relative;
  left: 50%;
  transform: translateX(-50%);
  width: max-content;
  max-width: max(100%, calc(100cqi - 2 * var(--reader-lane-inset)));
}
/* A percentage cap resolves against the box being measured, so `max-width: 100%` below holds the paragraph at the very measure it is escaping; a percentage width does not, so the paragraph sizes to the picture and the picture fills it. */
.document-body > p.image-lane > img {
  width: 100%;
}
.document-body img {
  display: block;
  height: auto;
  margin: 0 auto var(--type-spacing);
  max-width: 100%;
}
/* A picture that would not load. decorate.js leaves the <img> in place — a re-fetch has to be able to put the real one back — and wears the mark as an icon class over a transparent pixel. The ink is the rule's, not the icon's, so it is quieter than body text and follows the theme without being repainted. */
.document-body img[data-image-missing="true"] {
  background-color: var(--lt-muted-foreground);
  opacity: var(--lt-opacity-75);
}
.document-body hr {
  border: 0;
  height: 1px;
  margin: var(--type-spacing) 0;
  background: var(--lt-markdown-thematic-break);
}
.document-body figcaption,
.document-body .caption,
.document-body .metadata {
  color: var(--lt-muted-foreground);
  font-family: var(--app-font);
  font-size: var(--type-caption-size);
  line-height: var(--type-caption-line);
  margin-block-start: 0;
}

/* ---- A table's own row handle -------------------------------------------
   The grip a body row is dragged by. Add, delete and the rest are on the right-click menu over a cell; this control only moves the row. Inside .table-lane rather than in the block gutter: the gutter already stands in that margin and it means the whole block, so a row control beside it would read as another way to drag the table. Being in the lane is also what makes it travel with a wide table's sideways scroll instead of hanging over a column it no longer points at.

   It stands on the row's own middle, which the script writes as `top`; everything else is the component's own geometry. */
.table-row-handle[hidden] {
  display: none;
}
.table-row-handle {
  position: absolute;
  z-index: 2;
  left: 0;
  display: flex;
  align-items: center;
  gap: var(--lt-space-4);
  transform: translate(-100%, -50%);
}
.table-row-grip {
  display: grid;
  place-items: center;
  margin: 0;
  padding: var(--lt-space-2);
  border: 0;
  border-radius: var(--lt-radius-6);
  background: var(--lt-markdown-background);
  color: var(--lt-markdown-muted);
  cursor: grab;
  opacity: var(--lt-opacity-70);
  transition: opacity var(--lt-duration-fast) var(--lt-ease-standard), color var(--lt-duration-fast) var(--lt-ease-standard);
}
.table-row-grip:hover,
.table-row-grip:focus-visible {
  color: var(--lt-markdown-text);
  opacity: var(--lt-opacity-100);
}
.table-row-grip:active {
  cursor: grabbing;
}

/* ---- A table's own column handle -----------------------------------------
   The grip a column is dragged by, and nothing else: add, delete, align and sort are on the right-click menu over a cell. In .table-lane like the row handle, and for the same reason: the lane owns the sideways scroll, so a handle in it travels with its column instead of hanging over a neighbor once a wide table is scrolled. Its place along the lane is the column's middle, which the script writes as `left`. */
.table-column-handle[hidden] {
  display: none;
}
.table-column-handle {
  position: absolute;
  z-index: 2;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--lt-space-4);
  transform: translate(-50%, -100%);
}
.table-column-grip {
  display: grid;
  place-items: center;
  margin: 0;
  padding: var(--lt-space-2);
  border: 0;
  border-radius: var(--lt-radius-6);
  background: var(--lt-markdown-background);
  color: var(--lt-markdown-muted);
  cursor: grab;
  opacity: var(--lt-opacity-70);
  transform: rotate(90deg);
  transition: opacity var(--lt-duration-fast) var(--lt-ease-standard), color var(--lt-duration-fast) var(--lt-ease-standard);
}
.table-column-grip:hover,
.table-column-grip:focus-visible {
  color: var(--lt-markdown-text);
  opacity: var(--lt-opacity-100);
}
.table-column-grip:active {
  cursor: grabbing;
}
/* A number the app keeps right off the document's own hidden formula line wears a quiet bar on its leading edge, so it is not mistaken for one somebody typed. It is a mark and not a second copy of the value — the number in the cell is the number in the file — and it sits on the edge a right-aligned number never reaches, which is why it can never collide with the digits. */
.document-body .table-cell-computed {
  position: relative;
}
.document-body .table-cell-computed::before {
  content: '';
  position: absolute;
  inset-block: var(--lt-space-4);
  inset-inline-start: 0;
  width: var(--lt-stroke-1-5);
  border-radius: var(--lt-radius-pill);
  background: var(--lt-muted-foreground);
  opacity: var(--lt-opacity-46);
}
/* The strip a reader drags to set a column's width: the library pane's own divider, at the same width and with the same pointer, straddling the divider on a cell's right edge. Invisible at rest and drawing no paint, so a table nobody is pointing at looks exactly as it did — there is no handle, no bar over the table and nothing new in any corner. The cell takes `position: relative` so the strip has a box to hang off, which is safe beside the grain written above it: a positioned box is not the containing block for `background-attachment: fixed`, which is what a transform would have been and what dragged the dots in a scrolled header sideways with the columns. Every cell rather than each body row's first one, because a table with no heading row hangs its column strips off its first body row and a heading row written with `td` hangs them off that row — watched in a running copy, a strip in an unpositioned cell landed past its own cell and stretched to the lane. */
.table-lane th,
.table-lane td {
  position: relative;
}
.table-sizer-column {
  position: absolute;
  top: 0;
  right: -3px;
  bottom: 0;
  width: 8px;
  z-index: 1;
  cursor: col-resize;
  touch-action: none;
}
/* The drag lock, written the way the pane's own is: the pointer keeps its shape wherever the hand wanders and nothing selects, so dragging across a table does not paint a selection behind it. The buttons are named as well — a control writing its own hand under a moving pointer reads as the drag having let go. */
body.table-resizing {
  cursor: col-resize;
  user-select: none;
  -webkit-user-select: none;
}
body.table-resizing button {
  cursor: col-resize;
}
/* The strip a reader drags to set a row's height, along the lower edge of every cell of the row. Every cell rather than the first: a wide table scrolls sideways inside its lane, so a reader who has moved right has no first cell left to point at — watched in a running copy, its grip sat 436 px off the left of the table's own box with nothing to press anywhere along the row. It starts 3 px in, because the column strip in the cell before it straddles 3 px across the boundary, and a row strip flush with the edge would take those last three pixels of an 8 px column divider by being later in the document. A stated height on a row is a floor the layout may grow past, which is what makes a row the asymmetrical half of this gesture — taller freely, and never shorter than the words wrapped inside it. */
.table-sizer-row {
  position: absolute;
  left: 3px;
  right: 0;
  bottom: -3px;
  height: 8px;
  z-index: 1;
  cursor: row-resize;
  touch-action: none;
}
/* A row drag holds the up-and-down pointer instead, and takes everything else the lock above brings. */
body.table-resizing.is-row,
body.table-resizing.is-row button {
  cursor: row-resize;
}
/* The lens bar over a table, and the one menu it opens.
 *
 * Quiet by default and drawn only when the table is being aimed at, the way the two corner actions beside it are: a document with a table on every second screen must not read as a page of toolbars. It sits above the lane rather than in it, because the lane is the table's own scrollport and a bar inside it would scroll away sideways with a wide table. */
.table-lens-bar {
  display: flex;
  position: relative;
  /* Tight inside a group; the space between groups is written on the button that starts the next one. Four layouts and the one control about whichever is drawn, then the two that are about the table however it is laid out, then the one that writes — a row of seven evenly spaced pills says none of that and leaves the reader to work out from a button appearing and disappearing which of them belongs to what. */
  gap: var(--lt-space-2);
  align-items: center;
  margin-inline: auto;
  margin-block-end: var(--lt-space-4);
  width: max-content;
  max-width: 100%;
  opacity: 0;
  pointer-events: none;
  transition: var(--lt-transition-hover-reveal-leave);
}
/* The whole bay, not the lane: the bar is above the table, so a pointer moving onto it from the table has already left the lane. */
.table-bay:hover > .table-lens-bar,
.table-lens-bar:focus-within,
.table-lens-bar.is-open {
  opacity: 1;
  pointer-events: auto;
  transition: var(--lt-transition-hover-reveal-arrive);
}
/* A lens that answered nothing stays visible and says so: a control that vanished under the press is a control nobody can ask about. */
.table-lens-bar.is-refused {
  opacity: 1;
  pointer-events: auto;
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-12);
}
.table-lens-bar.is-waiting {
  opacity: var(--lt-opacity-60);
  pointer-events: none;
}

.table-lens-button {
  padding: var(--lt-space-2) var(--lt-space-8);
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-pill);
  background: var(--lt-surface-elevated);
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-12);
  font-weight: var(--lt-weight-500);
  line-height: var(--lt-leading-1-3);
  transition: background-color var(--lt-duration-120) var(--lt-ease), color var(--lt-duration-120) var(--lt-ease),
    border-color var(--lt-duration-120) var(--lt-ease);
}
.table-lens-button.is-group-start {
  margin-inline-start: var(--lt-space-16);
}
.table-lens-button:hover {
  background: var(--lt-wash-hover);
  color: var(--lt-foreground);
}
/* The control that is only ever about the layout beside it. Drawn without a pill of its own so it hangs off the layout group rather than standing in the row as a seventh equal: a reader who meets it next to Sort and Filter reads it as another thing you can ask the table, and it is not — it changes which column leads a card, carries its picture or groups a board, and it is gone the moment the table is a table again. */
.table-lens-attached {
  border-color: transparent;
  background: transparent;
}
/* A control that clears its own fill has to say what the pointer paints, or the app-wide `button:hover` lands primary purple under this one's quiet ink. The same wash every other button on the bar takes, and the border stays cleared so hovering it does not grow the pill it was drawn without. */
.table-lens-attached:hover {
  background: var(--lt-wash-hover);
}
/* A lens that is doing something says so on the button that is doing it, so a reader coming back to the document knows the rows are not the file's order. */
.table-lens-button.is-on {
  border-color: var(--lt-primary);
  color: var(--lt-primary-ink);
}

/* The one menu the bar has open. Placed against the bar rather than the page so it travels with a table that scrolls. It floats, so it takes the app's one shadow — the dot halftone every floating surface throws, grouped in `panels.css` — rather than a blur of its own. */
.table-lens-menu {
  position: absolute;
  z-index: var(--lt-z-40);
  top: 100%;
  left: 0;
  display: flex;
  flex-direction: column;
  gap: var(--lt-space-1);
  margin-block-start: var(--lt-space-4);
  padding: var(--lt-space-4);
  /* As wide as its longest row and no wider. Written `hidden auto` rather than `overflow-y: auto` alone: a box that scrolls on one axis makes the other axis scroll too, so a menu sized to its own words still drew a sideways bar under them. */
  width: max-content;
  max-width: 320px;
  max-height: 320px;
  overflow: hidden auto;
  border: var(--lt-stroke-1) solid var(--lt-border);
  /* Handed to the shared shadow, so the ring it strikes is cut from this box's own corner rather than from a square one outside it. */
  --lt-shadow-host-radius: var(--lt-radius-lg);
  border-radius: var(--lt-shadow-host-radius);
  background: var(--lt-surface-elevated);
}
/* A row is a line in a panel, not a control of its own. Written out because a `button` that names no border takes the system's, so every row in this menu came up as its own outlined box inside the one rounded surface. */
.table-lens-menu-item {
  display: flex;
  border: 0;
  gap: var(--lt-space-8);
  align-items: center;
  justify-content: space-between;
  padding: var(--lt-space-4) var(--lt-space-6);
  border-radius: var(--lt-radius-sm);
  background: transparent;
  color: var(--lt-foreground);
  font-size: var(--lt-text-12-5);
  text-align: start;
}
.table-lens-menu-item:hover {
  background: var(--lt-wash-hover);
}
.table-lens-menu-label {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
/* What a row is doing, in words at the end of it. The sort direction was three stacked lines and nothing else, which says which way a sort points only to somebody who already knows the mark. */
.table-lens-menu-trail {
  flex: none;
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-11-5);
}
.table-lens-menu-check {
  flex: none;
  width: 14px;
  height: 14px;
  color: var(--lt-primary-ink);
}
/* The last row of a filter's own panel, held apart from the values above it so it cannot be pressed by somebody aiming at the bottom one. It keeps the rounded corners every other row has: a square hover box at the foot of a rounded panel is what makes the rounding read as broken. */
.table-lens-menu-clear {
  margin-block-start: var(--lt-space-4);
  border-top: var(--lt-stroke-1) solid var(--lt-border);
  padding-block-start: var(--lt-space-6);
  color: var(--lt-muted-foreground);
}

.table-lens-range {
  display: flex;
  gap: var(--lt-space-4);
}
.table-lens-input {
  padding: var(--lt-space-4) var(--lt-space-6);
  min-width: 0;
  width: 100%;
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-sm);
  background: var(--lt-surface);
  color: var(--lt-foreground);
  font-size: var(--lt-text-12-5);
}
.table-lens-input:focus-visible {
  border-color: var(--lt-primary);
  box-shadow: var(--lt-shadow-focus);
  outline: none;
}

/* The board and the list are drawn beside the table rather than out of it: neither is a shape a `table` can be made into, and both are read-only pictures of the model, so the table itself is hidden while one stands and comes back untouched. */
.table-lens-board {
  display: flex;
  gap: var(--lt-space-12);
  overflow-x: auto;
  align-items: flex-start;
  /* Centered in the reader's lane, the way every other block in the document is. A board of two lanes hanging off the left edge under centered prose reads as a mistake. `safe` so a board wider than the lane still scrolls to its first column rather than clipping it off the front. */
  justify-content: safe center;
}
/* The lane a card stands in. Its fill is the reading view's own tinted panel and the cards on it are the page's paper, so the two read as cards on a lane rather than as one flat field. */
.table-lens-column {
  display: flex;
  flex-direction: column;
  gap: var(--lt-space-8);
  padding: var(--lt-space-8);
  min-width: 220px;
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-lg);
  background: var(--lt-surface-muted);
}
.table-lens-column-head {
  margin: 0;
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-11-5);
  font-weight: var(--lt-weight-600);
  letter-spacing: var(--lt-tracking-060);
  text-transform: uppercase;
}
.table-lens-card {
  display: flex;
  flex-direction: column;
  gap: var(--lt-space-4);
  padding: var(--lt-space-8);
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-md);
  background: var(--lt-markdown-background);
}
.table-lens-card-picture {
  border-radius: var(--lt-radius-sm);
  width: 100%;
  height: auto;
}
.table-lens-card-title {
  margin: 0;
  color: var(--lt-foreground);
  font-size: var(--lt-text-13-5);
  font-weight: var(--lt-weight-600);
  line-height: var(--lt-leading-1-3);
}
.table-lens-card-field {
  display: flex;
  gap: var(--lt-space-6);
  margin: 0;
  color: var(--lt-foreground);
  font-size: var(--lt-text-12);
  line-height: var(--lt-leading-1-4);
}
/* The column's own name in front of the value, because a card takes the row out of the grid that was labeling it. */
.table-lens-card-name {
  flex: none;
  color: var(--lt-muted-foreground);
}
.table-lens-list {
  display: flex;
  flex-direction: column;
}
.table-lens-line {
  display: flex;
  gap: var(--lt-space-8);
  align-items: baseline;
  justify-content: space-between;
  padding: var(--lt-space-6) var(--lt-space-2);
  border-bottom: var(--lt-stroke-1) solid var(--lt-border);
  color: var(--lt-foreground);
  font-size: var(--lt-text-13);
}
.table-lens-line-title {
  font-weight: var(--lt-weight-500);
}
.table-lens-line-trail {
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-12);
}

/* Cards are the table itself, so which cell leads a card is said on the cell. The label the card drawing writes in front of every value is taken off the two that are the card's own heading and picture. */
.document-body table.is-cards td.is-lens-title {
  color: var(--lt-foreground);
  font-size: var(--lt-text-13-5);
  font-weight: var(--lt-weight-600);
}
.document-body table.is-cards td.is-lens-title::before,
.document-body table.is-cards td.is-lens-picture::before {
  content: '';
  display: none;
}

/* A cell that points at a row of another table. It is a link, and it stays looking like one: the words are the document's own and so is the shape, because a lens that turns every link in a column into an outlined pill has redrawn the reader's document to say something the document did not say. What the lens adds is what it found on the other end, which hovering answers — and, where it found nothing, which kind of nothing. */
.document-body .table-lens-chip.is-missing,
.document-body .table-lens-chip.is-unread {
  text-decoration-style: dotted;
  text-underline-offset: var(--lt-space-2);
}
/* Read whole, and it is not there: a broken link, drawn as one. */
.document-body .table-lens-chip.is-missing {
  color: var(--lt-danger);
  text-decoration-color: var(--lt-danger);
}
/* The read ran past its cap, so this may be perfectly fine and simply unlooked-at. A different problem, and it must not be drawn as the one above. */
.document-body .table-lens-chip.is-unread {
  color: var(--lt-muted-foreground);
  text-decoration-color: var(--lt-muted-foreground);
}

/* The picker over one cell. It hangs off the cell rather than off the page, so a table scrolled sideways carries it. */
.document-body td.is-lens-picking {
  position: relative;
}
.table-lens-picker {
  top: 100%;
  left: 0;
  margin-block-start: var(--lt-space-1);
}
/* Lives in the shell's own column, outside the page — so no bleed and nothing to out-stack: it never overlaps the bar or the card.

   Pinned to the top of that column, which scrolls: the column's travel is what carries a wheel over the rail, and the pin is what keeps that travel off the rail's own parts — the thumbnail, the track and the box stay where the click jump and the box drag read them. Zero, because a sticky offset is measured from the scrollport's content edge and the column's own top padding has already moved that down by the app bar — so naming the bar's height here stacks on the padding rather than standing in for it, and the thumbnail starts an app bar below the top of the page card. */
.document-minimap {
  width: var(--minimap-width);
  position: sticky;
  top: 0;
}
/* The height here is the frames before the first measurement; JS writes the real one onto this element. Never a custom property on the rail above: it would inherit down into the clone, and re-resolving style across a couple of thousand cloned elements is 91ms where writing here is a fraction of one. */
.document-minimap-track {
  box-sizing: border-box;
  position: relative;
  width: 100%;
  height: 100%;
  cursor: default;
  opacity: var(--lt-opacity-92);
  overflow: hidden;
  touch-action: none;
  user-select: none;
}
/* The clipped thumbnail dissolves into the same fixed grain the rail stands on, using the page edge's depth and hold so the two views end alike. */
.document-minimap-fade,
body.leaf-web .document-minimap-track::before,
body.leaf-web .document-minimap-track::after {
  content: "";
  position: absolute;
  right: 0;
  left: 0;
  height: var(--reader-edge-fade-depth);
  background-color: var(--lt-surface);
  background-image: radial-gradient(circle, var(--lt-grain-dot) 0 var(--lt-grain-radius), transparent var(--lt-grain-edge));
  background-size: var(--lt-grain-tile) var(--lt-grain-tile);
  background-repeat: repeat;
  background-attachment: fixed;
  z-index: 1;
  pointer-events: none;
}
.document-minimap-fade[data-edge="top"],
body.leaf-web .document-minimap-track::before {
  top: 0;
  -webkit-mask-image: linear-gradient(
    to bottom,
    var(--lt-mask-opaque) 0 var(--reader-edge-fade-hold),
    transparent
  );
  mask-image: linear-gradient(
    to bottom,
    var(--lt-mask-opaque) 0 var(--reader-edge-fade-hold),
    transparent
  );
}
.document-minimap-fade[data-edge="bottom"],
body.leaf-web .document-minimap-track::after {
  bottom: 0;
  -webkit-mask-image: linear-gradient(
    to top,
    var(--lt-mask-opaque) 0 var(--reader-edge-fade-hold),
    transparent
  );
  mask-image: linear-gradient(
    to top,
    var(--lt-mask-opaque) 0 var(--reader-edge-fade-hold),
    transparent
  );
}
/* While the thumbnail is being built — it clones the rendered page, so it can't exist until that page is laid out. updateDocumentMinimapPreview drops the class once a clone is in. */
.document-minimap-spinner {
  position: absolute;
  top: calc(var(--app-bar-height) + 12px);
  left: 50%;
  width: 16px;
  height: 16px;
  margin-left: calc(var(--lt-space-8) * -1);
  border-color: color-mix(in srgb, var(--lt-markdown-foreground) 22%, transparent);
  border-top-color: var(--lt-accent);
  pointer-events: none;
}
.document-minimap:not(.is-loading) .document-minimap-spinner {
  display: none;
}
/* Nothing to point at yet — the box would otherwise sit over blank rail. */
.document-minimap.is-loading .document-minimap-viewport {
  opacity: 0;
}
/* Holds the scaled document clone; slides within the clipped track (JS writes the translate onto this element) when the document is taller than the rail. A transform, not `top`: this moves every frame, and as a layout property `top` made the browser re-lay-out the page to do it — 128ms worst frame against 44ms. The value is written here rather than inherited from the rail, which costs 78ms a write because a custom property re-resolves style across the whole clone. */
.document-minimap-content {
  position: absolute;
  top: 0;
  z-index: 0;
  transform: translateY(0px);
  right: var(--minimap-padding-inline);
  left: var(--minimap-padding-inline);
  overflow: visible;
  pointer-events: none;
}
/* The lane's own layer, on the Mac only. On Windows the hint cost a wheel deep in a 44,000px note 62 dropped frames against none, with nothing built and the slide frozen, and a fast drag of the box was no better for it; the transform alone still keeps the slide off layout. Every Mac reading of the deep scroll was taken with it on. */
body.mac-frame .document-minimap-content {
  will-change: transform;
}
/* The box the clone is laid out in: .reader-layout's own content-box width (JS writes it) and a container query of its own, so a document sizing itself against that container measures the same room here as on the page. Without it a wide table read `100cqi` as the whole window and was drawn wider than the page draws it, so the thumbnail wrapped less and ended a fifth short of its track. It carries the scale as well, which is why the clone below needs a containing block: container-type is layout containment, so this box would otherwise be one. */
.document-minimap-frame {
  container-type: inline-size;
  transform-origin: 0 0;
}
/* On WebKit this layer cut travel frames from 100–600 ms to 17–54 ms and rebuilds from 200 ms to 33 ms; containment and the content layer did not. */
body.mac-frame .document-minimap-frame {
  will-change: transform;
}
/* The clone: a shrunken rendering of the document. JS sets its width; the frame above carries the scale, so `position: relative` is what keeps a document's absolutely positioned parts measuring off the clone rather than off that wider box. Zero the .document-body scroll-origin margin (JS positions it) but keep its padding so the internal layout matches the page. */
.document-minimap-preview {
  box-sizing: border-box;
  position: relative;
  margin: 0 !important;
  pointer-events: none;
}
/* Scaling takes the clone off the shared lattice: 31.5ms a frame before, 7.2ms after. */
.document-minimap-preview.document-body .document-outline,
.document-minimap-preview.document-body .tei-front,
.document-minimap-preview.document-body pre,
.document-minimap-preview.document-body th,
.document-minimap-preview.document-body tr:nth-child(2n) td,
.document-minimap-preview.document-body tr:nth-child(2n + 1) td,
.document-minimap-preview.document-body td {
  background-attachment: scroll;
}
/* The clone is inert; clicks belong to the rail, which handles jump/drag. */
.document-minimap-preview,
.document-minimap-preview * {
  pointer-events: none !important;
}
/* The clone strips hrefs, so the href-based glossary blend cannot match and terms would show accent-blue. updateDocumentMinimapPreview tags them .glossary-term before stripping; re-blend them to body text here. */
.document-minimap-preview a.glossary-term {
  color: inherit;
}
/* The clone is a .document-body, so an undrawn diagram in it matches the spinner rule too, and a page of boxes would spin dozens down a 68px rail. A pseudo-element survives any stripping of nodes, so only a rule the clone's own class reaches can cancel it. The three conditions are the spinner rule's own, which is what ties the weight; the tie is broken by this rule sitting later. Written with the class alone it counts two class-level parts against that rule's five and never applies. The block stays: its invisible source text is what holds the right height. */
.document-minimap-preview pre.mermaid:not([data-processed="true"]):not([data-mermaid-render="failed"]):not([data-diagram-wait="far"])::after {
  content: none;
}
/* A drawn diagram lets the browser skip its own paint while it is off screen, and the clone is cloned with that on it — but the whole rail is one shrunken slice, so every cloned block is a few pixels tall and every drawing in the thumbnail went blank. Measured: 54 of them. Important, because the skip is written on the block itself. */
.document-minimap-preview pre.mermaid {
  content-visibility: visible !important;
}
/* Place and size are written onto this element by JS: the place as a transform, so `top: 0%` here is the origin that transform is measured from, and `height` is the frame before the first write. A transform, not `top`: the box moves every frame with a new number, and as a layout property `top` makes the browser lay the rail's own subtree out again to draw it — 12.0 to 21.0µs a frame against 3.5 to 4.0. Not a custom property on the rail above, which inherits into the clone and costs 78ms a write to re-resolve. */
.document-minimap-viewport {
  position: absolute;
  inset-inline: 0;
  top: 0%;
  z-index: 2;
  height: 100%;
  min-height: 22px;
  border: var(--lt-stroke-1) solid var(--lt-minimap-viewport-border);
  /* All four corners at the page card's rounding. */
  border-radius: var(--lt-radius-md);
  background: var(--lt-minimap-viewport-background);
  pointer-events: none;
}
/* The ribbon bought in the Grove: a small tab on the rail at the deepest point read in this document, placed from the share `profile.js` writes on it. */
.document-minimap-ribbon {
  position: absolute;
  top: calc(var(--ribbon-at, 0) * 100%);
  right: 0;
  z-index: 3;
  width: 8px;
  height: 14px;
  transform: translateY(-100%);
  color: var(--lt-primary-ink);
  background-color: currentColor;
  clip-path: polygon(0 0, 100% 0, 100% 100%, 50% 72%, 0 100%);
  pointer-events: none;
}
.empty-state {
  width: min(720px, calc(100% - 40px));
  margin: 0 auto;
  padding: 14vh 0;
}
/* The reader column is what the start screen measures itself against, and what the two lists break out to. A window breakpoint cannot do either: the library pane is a remembered width draggable to the window minus the reader's minimum, so one window can leave this column anywhere from a third of itself to all of it. */
.reader-shell.empty {
  container-type: inline-size;
  container-name: home;
}
.empty-state .kicker,
.recent h2,
.home-list h2 {
  color: var(--lt-primary-ink);
  font-family: var(--app-font);
  font-size: var(--lt-text-13);
  font-weight: var(--lt-weight-700);
  line-height: var(--lt-leading-1-2);
  letter-spacing: var(--lt-tracking-120);
  text-transform: uppercase;
}
.empty-state h1 {
  color: var(--lt-markdown-heading);
  font-family: var(--heading-font);
  font-size: clamp(2.6rem, 7vw, 5.2rem);
  font-weight: var(--lt-weight-700);
  line-height: var(--lt-leading-1-04);
  letter-spacing: var(--lt-tracking-tight-01);
  margin: 0 0 var(--lt-space-10);
}
/* The second half of the brand lockup — quieter than the headline, but still set in the heading face so the two lines read as one statement. */
.empty-subtitle {
  color: var(--lt-muted-foreground);
  font-family: var(--heading-font);
  font-size: clamp(1.15rem, 2.4vw, 1.6rem);
  font-weight: var(--lt-weight-500);
  line-height: var(--lt-leading-1-25);
  letter-spacing: var(--lt-tracking-tight-005);
  margin: 0 0 var(--lt-space-20);
}
.empty-description {
  color: var(--lt-muted-foreground);
  font-family: var(--app-font);
  font-size: var(--lt-text-16);
  font-weight: var(--lt-weight-500);
  line-height: var(--lt-leading-1-6);
  margin: 0 0 var(--lt-space-24);
  max-width: 54ch;
}
.empty-help {
  color: var(--lt-muted-foreground);
  font-family: var(--app-font);
  font-size: var(--lt-text-15);
  font-weight: var(--lt-weight-500);
  line-height: var(--lt-leading-1-6);
  margin: var(--lt-space-20) 0 0;
}
/* Running version, at the foot of the one screen always reachable: quiet, one line, selectable because it exists to be pasted into a bug report. */
.empty-version {
  margin: var(--lt-space-24) 0 0;
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-11);
  font-variant-numeric: tabular-nums;
  letter-spacing: var(--lt-tracking-020);
  user-select: text;
}
/* The way to the licenses document, in the version line and in its voice — same size, same muted color — a button reset to a word so it sits in the line rather than beside it. The hover sets the background as well as the color, since the generic button hover fill sits underneath. */
.empty-licenses {
  margin: 0 0 0 var(--lt-space-12);
  padding: 0;
  border: 0;
  background: none;
  color: var(--lt-muted-foreground);
  font: inherit;
  letter-spacing: inherit;
  text-decoration: underline;
  cursor: pointer;
}
.empty-licenses:hover {
  background: none;
  color: var(--lt-link);
}
/* The two ways in, side by side: open a document you have, or start one you don't. */
.empty-actions {
  display: flex;
  align-items: center;
  gap: var(--lt-space-10);
}
.primary-open {
  font-size: var(--lt-text-15);
  padding: var(--lt-space-12) var(--lt-space-20);
}
/* Quieter than Choose file. Only one of the two can be the obvious thing to do, so this one is an outline. */
.primary-new {
  display: inline-flex;
  align-items: center;
  gap: var(--lt-space-6);
  font-size: var(--lt-text-15);
  padding: var(--lt-space-12) var(--lt-space-16);
  border-color: var(--lt-border);
  background: transparent;
  color: var(--lt-markdown-foreground);
}
/* Must set the background too: a color alone leaves the generic `button:hover` fill underneath, which is one purple on another. This pair the theme compiler gates for contrast. */
.primary-new:hover {
  background: var(--lt-navigation-button-hover-background);
  border-color: var(--lt-navigation-button-hover-background);
  color: var(--lt-primary-foreground);
}
.primary-new .lt-icon {
  width: 16px;
  height: 16px;
}
/* Quiet for the same reason New document is: this is the third way in on the screen a new reader meets, and only one thing there can be the obvious one. Drawn only while there is no vault. */
.primary-vault {
  font-size: var(--lt-text-15);
  padding: var(--lt-space-12) var(--lt-space-16);
  border-color: var(--lt-border);
  background: transparent;
  color: var(--lt-markdown-foreground);
}
.primary-vault:hover {
  background: var(--lt-navigation-button-hover-background);
  border-color: var(--lt-navigation-button-hover-background);
  color: var(--lt-primary-foreground);
}
/* Tighter to the buttons than the line about recent files, which sits further down: this one belongs to the button above it. */
.empty-vault-help {
  color: var(--lt-muted-foreground);
  font-family: var(--app-font);
  font-size: var(--lt-text-14);
  font-weight: var(--lt-weight-500);
  line-height: var(--lt-leading-1-55);
  margin: var(--lt-space-10) 0 0;
  max-width: 54ch;
}
.recent {
  border-top: var(--lt-stroke-1) solid var(--lt-navigation-recent-border);
  margin-top: var(--lt-space-48);
  padding-top: var(--lt-space-24);
}
/* Pulled out by a row’s own side inset, the way the paired box is: a name then opens where the heading above it does, and the fill under the pointer runs past that into the margin instead of crowding the first letter. */
.recent ol {
  list-style: none;
  margin: 0 0 0 calc(var(--lt-space-10) * -1);
  padding: 0;
}
.recent li + li {
  margin-top: var(--lt-space-8);
}
/* Both lists under the two buttons. One column at rest; the container query below is what puts them side by side, so the fold is measured off this section. */
/* The pair sizes to what is in it and sits centered. It may grow out past the writing's own column — a path is longer than a line of prose — as far as the reader, and no further; stretched to the reader it left two thin columns at opposite edges with nothing between them, because a file name never fills that. The break-out is the table lane's, sized the same way; the centering is a percentage transform because CSS cannot read a used width, which the lane answers with a parent whose width is a length instead — nothing here carries the app's lattice, so there is no seam for the transform to break. */
.home-list-grid {
  position: relative;
  left: 50%;
  transform: translateX(-50%);
  /* Starts at the writing's own width and grows past it only where a path needs the room, never past the reader. Three declarations because a math function cannot hold `max-content`: the floor is the writing's column, the reach is the longest path, and the ceiling is what the reader can give. */
  width: max-content;
  min-width: 100%;
  max-width: max(100%, calc(100cqi - 2 * var(--reader-lane-inset)));
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: var(--lt-space-16);
  margin-top: var(--lt-space-48);
}
@container home (min-width: 600px) {
  .home-list-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
/* What is due next, in one box across the whole of what the pair below it uses. The slot is in the markup on every Home screen and empty until the vault answers, so filling it moves nothing either side of it — and it draws nothing at all while it is empty, since a heading over a line saying there is nothing scheduled is a box on the screen somebody sees most, saying nothing. */
.home-scheduled-slot:empty {
  display: none;
}
/* The pair's own break-out, so the three boxes line up on both edges instead of reading as three widths. */
.home-scheduled {
  position: relative;
  left: 50%;
  transform: translateX(-50%);
  width: max-content;
  min-width: 100%;
  max-width: max(100%, calc(100cqi - 2 * var(--reader-lane-inset)));
  margin-top: var(--lt-space-48);
}
/* The date sits in the column the heart sits in on a favorite, at the other end of the same three-column row — so a long task wraps inside its own column rather than pushing its date off the end. */
.home-task-due {
  grid-column: 3;
  margin-right: var(--lt-space-16);
}
/* Each list is a box of its own, not a section of the writing: a hairline round it and the page's own surface inside, so the rows sit on what everything else on this screen sits on.

   No inset on the right at all: the bar takes its own width out of the box below, and its thumb is drawn inset inside that, so the gap it leaves to the box's edge and the gap it leaves to the row fill beside it are the same one. Any padding here is added to the first of those and to neither of the others. */
/* Full width of its column, so the fill under the pointer ends where the list ends rather than where its longest path happens to. */
.home-list {
  min-width: 0;
  width: 100%;
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-lg);
  padding: var(--lt-space-16) 0 var(--lt-space-16) var(--lt-space-16);
}
.home-list h2 {
  margin: 0 0 var(--lt-space-10);
}
/* Holds the scroll box and the soft edge over it, which has to be placed against the box rather than the scrolled rows or it would slide away with them. Pulled out by a row's own inset, the way a wide table breaks its column: a name then opens where the heading above it does, and the fill under the pointer runs past that into the margin instead of crowding the first letter. */
.home-list-box {
  position: relative;
  margin-left: calc(var(--lt-space-10) * -1);
}
.home-list-scroll {
  max-height: calc(var(--home-row-height) * 8);
  overflow-y: auto;
  /* The bar's width is held whether or not there is one, so a list short enough not to need it still has the same inset on the right as the one beside it — without this a one-row list ran its fill into the box's own edge. Not `scrollbar-width` or `scrollbar-color`: either of those silently kills every rule painting the bar on this box. */
  scrollbar-gutter: stable;
}
/* The bar takes its own width out of this box, so a row already stops where the bar starts and needs no inset of its own. Never a negative inset on the left — this box clips, so the rounded corner of the row under the pointer would be cut. */
.home-list-scroll ol {
  list-style: none;
  margin: 0;
  padding: 0;
}
/* Which vault a group of favorites was marked in. Drawn only where there is more than one, so it is never a label with nothing to tell apart. */
.home-list-group {
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-11);
  letter-spacing: var(--lt-tracking-120);
  padding: var(--lt-space-10) var(--lt-space-10) var(--lt-space-4);
  text-transform: uppercase;
}
/* The reader's own soft edge, on this box: the same ramp to the same surface, top and bottom. Takes no pointer events, and stops short of the right edge so it never paints over the bar. */
.home-list-fade {
  /* The surface being dissolved to: the page's own on the screen, and the sheet's where the same box is drawn in one. */
  --home-list-surface: var(--lt-markdown-background);
  /* An edge is drawn only where there really is more list past it. A soft top on a list sitting at its first row says something is above it that is not. */
  --home-list-fade-top: 0px;
  --home-list-fade-bottom: 0px;
  position: absolute;
  inset: 0 var(--reader-scrollbar) 0 0;
  pointer-events: none;
  background-image: linear-gradient(
      to bottom,
      var(--home-list-surface) 0 var(--reader-edge-fade-hold),
      transparent
    ),
    linear-gradient(to top, var(--home-list-surface) 0 var(--reader-edge-fade-hold), transparent);
  background-size: 100% var(--home-list-fade-top), 100% var(--home-list-fade-bottom);
  background-position: 0 0, 0 100%;
  background-repeat: no-repeat;
}
.home-list-box.has-above .home-list-fade {
  --home-list-fade-top: var(--reader-edge-fade-depth);
}
.home-list-box.has-below .home-list-fade {
  --home-list-fade-bottom: var(--reader-edge-fade-depth);
}
/* The way out of a folded list. Flat, because the two buttons above it are the only real controls on this screen and a third framed one would stand beside them as an equal. Drawn only where the columns have folded — wide, the box scrolls instead. */
.home-showall {
  display: none;
  width: 100%;
  margin-top: var(--lt-space-8);
  padding: var(--lt-space-8) 0;
  border-color: transparent;
  background: transparent;
  color: var(--lt-primary-ink);
  font-size: var(--lt-text-13);
  text-align: left;
}
.home-showall:hover {
  background: var(--lt-wash-hover);
}
/* Folded: one column, five rows, and the rest a press away. Not a scroll box — a nested scroller inside a page that also scrolls takes a wheel meant for the page, and this app's answer to a window too narrow is already a sheet. */
@container home (max-width: 599px) {
  .home-list-scroll {
    max-height: calc(var(--home-row-height) * 5);
    overflow-y: hidden;
  }
  .home-list-fade {
    display: none;
  }
  .home-showall {
    display: block;
  }
}
/* One row in a home list: the file's name, with the folder holding it under it. Both lines are one line each and neither wraps, so every row is the same height and a list can be capped at a whole number of them. The mark, where a row has one, spans both lines in a column of its own — placed rather than auto-flowed, or a row without one would put its name where the mark goes. */
/* A wrapper, not a control: it holds the two buttons side by side and carries the path the right-click menu keys on. Nothing is drawn here. */
.home-row {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
}
/* The row's own target: everything but the heart. Inset on all four sides, so the fill under the pointer is a chip around the two lines rather than a band with the words pressed against its edges. */
.home-row-open {
  grid-column: 2;
  display: block;
  width: 100%;
  min-width: 0;
  border-color: transparent;
  border-radius: var(--lt-radius-md);
  background: transparent;
  padding: var(--lt-space-8) var(--lt-space-10);
  text-align: left;
}
/* The heart the tab strip wears, doing the same job on the same call. Outside the row's own button because a button inside a button is not markup. */
.home-row-heart {
  grid-column: 1;
  display: grid;
  place-items: center;
  width: 28px;
  height: 28px;
  padding: 0;
  border: 0;
  border-radius: var(--lt-radius-md);
  background: none;
  color: var(--lt-primary-ink);
}
.home-row-heart:hover {
  background: var(--lt-wash-hover);
}
.home-row-heart .lt-icon {
  width: 16px;
  height: 16px;
}
.home-row-name {
  display: flex;
  align-items: center;
  gap: var(--lt-space-4);
  color: var(--lt-navigation-recent-item-foreground);
  font-size: var(--lt-text-14);
  line-height: var(--lt-leading-1-4);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
/* Clipped from the left, not the right: every path on this screen shares a long prefix, and the end is the part that says which folder it is. `direction` does the clipping — the text stays a left-to-right run because it opens with a letter, and the trailing separator is stripped before it gets here. */
.home-row-folder {
  display: block;
  color: var(--lt-muted-foreground);
  direction: rtl;
  font-size: var(--lt-text-12);
  line-height: var(--lt-leading-1-4);
  overflow: hidden;
  text-align: left;
  text-overflow: ellipsis;
  white-space: nowrap;
}
/* The app's own wash, and both lines keep their own ink. The generic button hover under this one fills with the accent, which leaves a muted second line unreadable on it in every theme — and no theme is checked for that pair, because it is a fill nothing on this screen was meant to take. */
.home-row-open:hover,
.home-row-open:focus-visible {
  background: var(--lt-wash-hover);
  border-color: transparent;
}
.home-row-open:hover .home-row-name {
  color: var(--lt-navigation-recent-item-hover-foreground);
}
/* A favorite that is not where it was. Struck rather than unfavorited, because a favorite is a decision somebody made and the file is usually not gone at all — and the folder line stays, dimmed, since where it used to be is what helps you find it. The row keeps its height: it is capped at one, and a line underneath would be clipped. */
.home-row.is-missing .home-row-name {
  color: var(--lt-muted-foreground);
  text-decoration: line-through;
}
.home-row.is-missing .home-row-folder {
  opacity: var(--lt-opacity-60);
}
/* The way out, in a third column on the row itself. Drawn on every favorite document and shown only on a row that has lost its file, so the answer marks rows already on screen instead of rebuilding the list under a row that is mid-dissolve. */
.home-row-repair {
  display: none;
  grid-column: 3;
  border: 0;
  border-radius: var(--lt-radius-md);
  background: transparent;
  padding: var(--lt-space-4) var(--lt-space-8);
  color: var(--lt-primary-ink);
  font-size: var(--lt-text-12);
  line-height: var(--lt-leading-1-4);
  white-space: nowrap;
}
.home-row.is-missing .home-row-repair {
  display: block;
}
/* Except where the whole vault's folder has gone: repointing one file inside a folder that is not there is not the fix, and the heading says so once. */
.home-row.is-vault-gone .home-row-repair {
  display: none;
}
.home-row-repair:hover {
  background: var(--lt-wash-hover);
}
/* Said once, on the heading that already names the vault. */
.home-list-group-gone {
  display: none;
}
.home-list-group.is-missing .home-list-group-gone {
  display: inline;
}
.home-list-group.is-missing .home-list-group-gone::before {
  content: " — ";
}
/* The row being carried, on the pattern a dragged block already uses: a copy over the gap the rows open for it, wearing the same halftone every floating surface throws. The row is its own handle past a small threshold; under it the press opens the file. */
.home-row-ghost {
  position: fixed;
  z-index: var(--lt-z-50);
  /* The shadow reads this too, and adds the spread to it, so the ring outside the corner is struck from the corner’s own center. */
  --lt-shadow-host-radius: var(--lt-radius-md);
  --lt-shadow-host-border: 0;
  border-radius: var(--lt-shadow-host-radius);
  background: var(--lt-markdown-background);
  pointer-events: none;
}
/* The original stays where it is holding its space — carrying a copy and the thing itself would be two of one row — and the space it holds is the one that travels. */
.home-row.is-dragging {
  visibility: hidden;
}
/* Where it will land, said as room made rather than a line drawn: the empty slot wears the app's own dot grain, so the gap reads as a place for something rather than a list that lost a row. */
.home-list-scroll li.is-dropzone {
  --lt-grain-dot: var(--lt-grain-hover);
  border-radius: var(--lt-radius-md);
  background-image: radial-gradient(circle, var(--lt-grain-dot) 0 var(--lt-grain-radius), transparent var(--lt-grain-edge));
  background-size: var(--lt-grain-tile) var(--lt-grain-tile);
  background-repeat: repeat;
}
/* Rows step aside rather than jumping, so the list reads as making room. Only while a drag is on: no list pays for this at rest, and Reduce Motion answers it with the rest of the app. */
body.is-home-row-dragging {
  cursor: grabbing;
  user-select: none;
}
/* The lock names the buttons as well: a button writes its own hand, and a pointer turning into a hand each time the drag crossed a control reads as the drag having let go. */
body.is-home-row-dragging button {
  cursor: grabbing;
}
body.is-home-row-dragging .home-list-scroll li {
  transition: transform var(--lt-duration-140) var(--lt-ease-emphasized);
}
/* Unfavorited, and still on screen so the press can be taken back. Dimmed rather than struck through: it is a row you can still read, still open and still favorite. */
.home-row.is-going {
  opacity: var(--lt-opacity-45);
}
/* And then it goes: it dissolves while the rows under it close the gap, on the app's own curve. Both on the item holding the row, because a height that snapped shut under a row still fading would drag the list up in one jump — and only an item holding a row, since a group heading is not one of these and is not this tall. Reduce Motion answers this rule with everything else, so the row simply goes. */
.home-list-scroll li.home-list-row {
  overflow: hidden;
  max-height: var(--home-row-height);
  opacity: 1;
  transition: max-height var(--lt-duration-300) var(--lt-ease-decelerate),
    opacity var(--lt-duration-300) var(--lt-ease-decelerate);
}
.home-list-scroll li.is-leaving {
  max-height: 0;
  opacity: 0;
}
@media (max-width: 900px) {
  :root {
    --type-display-size: calc(var(--type-base) * 2.4);
    --type-h1-size: calc(var(--type-base) * 1.9);
    --type-h2-size: calc(var(--type-base) * 1.7);
    --type-h3-size: calc(var(--type-base) * 1.55);
    --type-h4-size: calc(var(--type-base) * 1.4);
    --type-h5-size: calc(var(--type-base) * 1.3);
    --type-h6-size: calc(var(--type-base) * 1.15);
  }
  /* On :root, not the layout: the shell sizes the rail's column from this too, and the two have to shrink together. */
  :root {
    --minimap-preview-width: 46px;
  }
}
@media (max-width: 640px) {
  /* No padding or gap here: the lead and trailing zones carry their own insets, and adding the bar's on top shifts the logo off the library header's 12px it is meant to line up with — the whole left group slides right as the window narrows. */
  .tab {
    max-width: 104px;
  }
  .tab-active {
    max-width: 200px;
  }
  .tab-label {
    max-width: 96px;
  }
  .tab-active .tab-label {
    max-width: 184px;
  }
}
@media (max-width: 600px) {
  :root {
    --reader-content-pad: 16px;
    --type-display-size: calc(var(--type-base) * 2);
    --type-h1-size: calc(var(--type-base) * 1.6);
    --type-h2-size: calc(var(--type-base) * 1.45);
    --type-h3-size: calc(var(--type-base) * 1.35);
    --type-h4-size: calc(var(--type-base) * 1.25);
    --type-h5-size: calc(var(--type-base) * 1.2);
    --type-h6-size: calc(var(--type-base) * 1.1);
  }
  .reader-layout {
    --minimap-preview-width: 38px;
  }
}
/* ---- Glossary bottom sheet ---------------------------------------------
   A glossary link opens the term here, sliding up over the reading view; the document keeps its place underneath. The body reuses .document-body so the entry is styled like ordinary Markdown. See window.leafShowGlossary. */
/* ---- the bottom sheet, once ------------------------------------------------
   Three things slide up from the bottom edge: the glossary, the theme picker, and the flowchart editor's own. They differ in what they are anchored to and what they are filled with, and in nothing else — so that is all their own classes say, and everything below is shared. `makeSheetDraggable` is the matching half in dom.js: --sheet-drag is how far the pointer has carried the sheet down, --sheet-grow how far it has pulled the one sheet with room to grow up past flush, and the transition is off for the length of the drag so it tracks the pointer exactly. */
/* The scrim behind a sheet: one definition, three sheets. It dims the page and takes the click that closes what is over it. */
.lt-backdrop[hidden] {
  display: none;
}
.lt-backdrop {
  position: fixed;
  inset: 0;
  /* Dimmed and dotted: the tint does the dimming, the 2px lattice every grained surface wears does the rest, on the same window-anchored grid. */
  --lt-grain-dot: var(--lt-grain-dot-strong);
  background-color: var(--lt-tint-backdrop);
  background-image: radial-gradient(circle, var(--lt-grain-dot) 0 var(--lt-grain-radius), transparent var(--lt-grain-edge));
  background-size: var(--lt-grain-tile) var(--lt-grain-tile);
  background-repeat: repeat;
  background-attachment: fixed;
  opacity: 0;
  /* The exit, because this rule is both where the scrim rests and where it goes back to. The way in is on `.open`, and is the longer of the two. */
  transition: opacity var(--lt-duration-160) var(--lt-ease-accelerate);
  z-index: var(--lt-z-40);
}
.lt-backdrop.open {
  opacity: 1;
  transition: opacity var(--lt-duration-200) var(--lt-ease-decelerate);
}
/* The flowchart editor is a full-window view rather than a sheet over the page, so the scrim it opens with — the press that closes the editor — takes the layer above those views: at the sheets' own 40 it would paint under them. The shape picker inside throws one of its own, against the editor rather than the window. */
#flowBackdrop {
  z-index: var(--lt-z-42);
}
/* The shape picker is inside that editor rather than over the window, so its scrim is too: absolute against the editor's own box, dimming the whole of it — the diagram, the top bar and the text pane — and nothing beyond it, on the layer just under the picker's own 5. At the sheets' 40 it would paint over the sheet it belongs to.

   It dims and takes nothing, which is the one way it differs from every other scrim. That sheet is not a question standing in your way: it follows whatever is selected and stays up while the canvas is worked, and pressing a box or one of its + handles chooses that box, which brings the sheet up mid-gesture. A scrim that took the pointer would swallow the rest of that drag, so a line drawn from a handle would always land on empty space. So the press that closes it is read where it lands instead — `pressOutsideFlowPicker` in flow-picker.js — along with the X, Escape and clearing the selection. */
#flowPickerBackdrop {
  position: absolute;
  z-index: 4;
  pointer-events: none;
}
/* A term rises over the full-window table, which is itself a sheet, so its scrim takes the layer above: at the sheets' own 40 it paints under the table and the press outside the term lands on the table instead. */
#glossaryBackdrop {
  z-index: var(--lt-z-42);
}
/* The one question the app asks, on the scrim the sheets already throw. Centered rather than slid up from the bottom: a sheet is somewhere you go, and this is something standing in your way until you answer it. */
.confirm-dialog {
  position: fixed;
  left: 50%;
  top: 44%;
  transform: translate(-50%, -50%);
  z-index: var(--lt-z-41);
  width: min(360px, calc(100% - 48px));
  box-sizing: border-box;
  padding: var(--lt-space-20);
  border: var(--lt-stroke-1) solid var(--lt-border);
  /* The shadow reads this too, and adds the spread to it, so the ring outside the corner is struck from the corner’s own center. */
  --lt-shadow-host-radius: var(--lt-radius-lg);
  border-radius: var(--lt-shadow-host-radius);
  background: var(--lt-surface-elevated);
  font-family: var(--app-font);
}
.confirm-dialog[hidden] {
  display: none;
}
.confirm-dialog-title {
  margin: 0;
  color: var(--lt-foreground);
  font-size: var(--lt-text-15);
  font-weight: var(--lt-weight-700);
}
.confirm-dialog-detail {
  margin: var(--lt-space-8) 0 0;
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-13);
  line-height: var(--lt-leading-1-45);
}
.confirm-dialog-actions {
  display: flex;
  justify-content: flex-end;
  gap: var(--lt-space-8);
  margin-top: var(--lt-space-20);
}
.confirm-dialog-button {
  padding: var(--lt-space-8) var(--lt-space-14);
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-md);
  background: var(--lt-surface-elevated);
  color: var(--lt-foreground);
  font: inherit;
  font-size: var(--lt-text-13);
}
.confirm-dialog-button:hover {
  border-color: var(--lt-border-strong);
  background: var(--lt-wash-hover);
}
/* The destructive one, in the color the menu item it came from already wears. It holds the wash layer below, and isolates so that layer's negative depth stops at the button rather than dropping behind the dialog itself. */
.confirm-dialog-button.is-danger {
  position: relative;
  isolation: isolate;
  border-color: transparent;
  background: var(--lt-danger);
  color: var(--lt-danger-foreground);
  font-weight: var(--lt-weight-700);
}
/* The app's own hover wash, laid over the red rather than replacing it: the wash is transparent and mixed from the family's ink, so it deepens a light theme and lifts a dark one without a second red to keep in step. It is a layer of its own rather than a gradient on the button, because a background image cannot be interpolated between `none` and a gradient however it is timed — so written on the button the wash arrived whole on the first frame beside an edge and an ink that fade. Below the button's own content and above its red, so the word is never washed over. */
.confirm-dialog-button.is-danger::before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: var(--lt-z-below);
  border-radius: inherit;
  pointer-events: none;
  background: transparent;
  transition: background-color var(--lt-duration-120) var(--lt-ease);
}
.confirm-dialog-button.is-danger:hover::before {
  background: var(--lt-wash-hover);
}
.leaf-sheet {
  left: 0;
  right: 0;
  /* How far past its seat the sheet rides when it lands, and how far it pulls up before it leaves. */
  --sheet-raise: 10px;
  /* The skirt: the sheet is that much taller than it looks and rests with the extra below the window's edge, so neither raised moment shows the window under it — the same gap the drag clamps at flush to prevent. */
  bottom: calc(var(--sheet-raise) * -1);
  padding-bottom: var(--sheet-raise);
  display: flex;
  flex-direction: column;
  /* As tall as a sheet is ever allowed to be, named once so a sheet that opens shorter can be dragged back up to it and stop there. */
  --sheet-ceiling: 78vh;
  max-height: var(--sheet-ceiling);
  /* The shadow reads this too, and adds the spread to it, so the ring outside the corner is struck from the corner’s own center. */
  --lt-shadow-host-radius: var(--lt-radius-2xl);
  --lt-shadow-host-border: 0;
  border-top-left-radius: var(--lt-shadow-host-radius);
  border-top-right-radius: var(--lt-shadow-host-radius);
  transform: translateY(100%);
  /* Dropping away, so it accelerates and is over sooner than the rise. */
  transition: transform var(--lt-duration-200) var(--lt-ease-accelerate);
}
/* Four narrow layers keep WebKit's curve on the band instead of running it over the sheet's whole face. */
.sheet-shadow-band {
  position: absolute;
  z-index: -2;
  pointer-events: none;
  background-color: var(--lt-grain-shadow-base);
  background-repeat: repeat;
  filter: var(--lt-grain-shadow-curve);
  opacity: var(--lt-grain-shadow-opacity-inside);
}
.sheet-shadow-face {
  position: absolute;
  inset: 0;
  z-index: var(--lt-z-below);
  pointer-events: none;
  border-radius: inherit;
  background-color: inherit;
  background-image: inherit;
  background-size: inherit;
  background-repeat: inherit;
}
.sheet-shadow-band-top {
  top: calc(-1 * var(--lt-shadow-spread));
  left: calc(-1 * var(--lt-shadow-spread));
  right: calc(-1 * var(--lt-shadow-spread));
  height: calc(var(--lt-shadow-spread) + var(--lt-shadow-host-radius));
  border-radius: calc(var(--lt-shadow-host-radius) + var(--lt-shadow-spread)) calc(var(--lt-shadow-host-radius) + var(--lt-shadow-spread)) 0 0;
  background-image: linear-gradient(to right, var(--lt-grain-shadow-rim) 0, var(--lt-grain-shadow-mid) calc(var(--lt-shadow-spread) / 2), transparent var(--lt-shadow-spread)),
    linear-gradient(to left, var(--lt-grain-shadow-rim) 0, var(--lt-grain-shadow-mid) calc(var(--lt-shadow-spread) / 2), transparent var(--lt-shadow-spread)),
    linear-gradient(to bottom, var(--lt-grain-shadow-rim) 0, var(--lt-grain-shadow-mid) calc(var(--lt-shadow-spread) / 2), transparent var(--lt-shadow-spread)),
    linear-gradient(transparent, transparent),
    radial-gradient(circle, var(--lt-grain-shadow-blob) 0, transparent var(--lt-grain-blob));
  background-size: 100% 100%, 100% 100%, 100% 100%, 100% 100%, var(--lt-grain-shadow-tile) var(--lt-grain-shadow-tile);
  background-attachment: scroll, scroll, scroll, scroll, fixed;
  background-blend-mode: screen, screen, screen, screen, multiply;
  -webkit-mask-image: linear-gradient(to right, transparent 0, var(--lt-mask-opaque) var(--lt-shadow-spread)), linear-gradient(to left, transparent 0, var(--lt-mask-opaque) var(--lt-shadow-spread)), linear-gradient(to bottom, transparent 0, var(--lt-mask-opaque) var(--lt-shadow-spread));
  -webkit-mask-composite: source-in, source-in, source-in;
  mask-image: linear-gradient(to right, transparent 0, var(--lt-mask-opaque) var(--lt-shadow-spread)), linear-gradient(to left, transparent 0, var(--lt-mask-opaque) var(--lt-shadow-spread)), linear-gradient(to bottom, transparent 0, var(--lt-mask-opaque) var(--lt-shadow-spread));
  mask-composite: intersect, intersect, intersect;
}
.sheet-shadow-band-bottom {
  bottom: calc(-1 * var(--lt-shadow-spread));
  left: calc(-1 * var(--lt-shadow-spread));
  right: calc(-1 * var(--lt-shadow-spread));
  height: var(--lt-shadow-spread);
  background-image: linear-gradient(to right, var(--lt-grain-shadow-rim) 0, var(--lt-grain-shadow-mid) calc(var(--lt-shadow-spread) / 2), transparent var(--lt-shadow-spread)),
    linear-gradient(to left, var(--lt-grain-shadow-rim) 0, var(--lt-grain-shadow-mid) calc(var(--lt-shadow-spread) / 2), transparent var(--lt-shadow-spread)),
    linear-gradient(transparent, transparent),
    linear-gradient(to top, var(--lt-grain-shadow-rim) 0, var(--lt-grain-shadow-mid) calc(var(--lt-shadow-spread) / 2), transparent var(--lt-shadow-spread)),
    radial-gradient(circle, var(--lt-grain-shadow-blob) 0, transparent var(--lt-grain-blob));
  background-size: 100% 100%, 100% 100%, 100% 100%, 100% 100%, var(--lt-grain-shadow-tile) var(--lt-grain-shadow-tile);
  background-attachment: scroll, scroll, scroll, scroll, fixed;
  background-blend-mode: screen, screen, screen, screen, multiply;
  -webkit-mask-image: linear-gradient(to right, transparent 0, var(--lt-mask-opaque) var(--lt-shadow-spread)), linear-gradient(to left, transparent 0, var(--lt-mask-opaque) var(--lt-shadow-spread)), linear-gradient(to top, transparent 0, var(--lt-mask-opaque) var(--lt-shadow-spread));
  -webkit-mask-composite: source-in, source-in, source-in;
  mask-image: linear-gradient(to right, transparent 0, var(--lt-mask-opaque) var(--lt-shadow-spread)), linear-gradient(to left, transparent 0, var(--lt-mask-opaque) var(--lt-shadow-spread)), linear-gradient(to top, transparent 0, var(--lt-mask-opaque) var(--lt-shadow-spread));
  mask-composite: intersect, intersect, intersect;
}
.sheet-shadow-band-left {
  top: var(--lt-shadow-host-radius);
  bottom: 0;
  left: calc(-1 * var(--lt-shadow-spread));
  width: var(--lt-shadow-spread);
  background-image: linear-gradient(to right, var(--lt-grain-shadow-rim) 0, var(--lt-grain-shadow-mid) calc(var(--lt-shadow-spread) / 2), transparent var(--lt-shadow-spread)), linear-gradient(transparent, transparent), linear-gradient(transparent, transparent), linear-gradient(transparent, transparent), radial-gradient(circle, var(--lt-grain-shadow-blob) 0, transparent var(--lt-grain-blob));
  background-size: 100% 100%, 100% 100%, 100% 100%, 100% 100%, var(--lt-grain-shadow-tile) var(--lt-grain-shadow-tile);
  background-attachment: scroll, scroll, scroll, scroll, fixed;
  background-blend-mode: screen, screen, screen, screen, multiply;
  -webkit-mask-image: linear-gradient(to right, transparent 0, var(--lt-mask-opaque) var(--lt-shadow-spread));
  mask-image: linear-gradient(to right, transparent 0, var(--lt-mask-opaque) var(--lt-shadow-spread));
}
.sheet-shadow-band-right {
  top: var(--lt-shadow-host-radius);
  right: calc(-1 * var(--lt-shadow-spread));
  bottom: 0;
  width: var(--lt-shadow-spread);
  background-image: linear-gradient(transparent, transparent), linear-gradient(to left, var(--lt-grain-shadow-rim) 0, var(--lt-grain-shadow-mid) calc(var(--lt-shadow-spread) / 2), transparent var(--lt-shadow-spread)), linear-gradient(transparent, transparent), linear-gradient(transparent, transparent), radial-gradient(circle, var(--lt-grain-shadow-blob) 0, transparent var(--lt-grain-blob));
  background-size: 100% 100%, 100% 100%, 100% 100%, 100% 100%, var(--lt-grain-shadow-tile) var(--lt-grain-shadow-tile);
  background-attachment: scroll, scroll, scroll, scroll, fixed;
  background-blend-mode: screen, screen, screen, screen, multiply;
  -webkit-mask-image: linear-gradient(to left, transparent 0, var(--lt-mask-opaque) var(--lt-shadow-spread));
  mask-image: linear-gradient(to left, transparent 0, var(--lt-mask-opaque) var(--lt-shadow-spread));
}
/* The same cassette grain the app bar and the reading surfaces wear, so a sheet reads as one of this app's surfaces rather than a plain card dropped on it. The color under it is each sheet's own, written as `background-color`: the shorthand would reset the lattice. It tiles from the sheet's own box rather than from the window, which is right for a surface that slides up over the page — and is what it does anyway, since a sheet always carries a transform and a transform re-anchors a fixed background to the element itself. */
.leaf-sheet {
  background-image: radial-gradient(circle, var(--lt-grain-dot) 0 var(--lt-grain-radius), transparent var(--lt-grain-edge));
  background-size: var(--lt-grain-tile) var(--lt-grain-tile);
  background-repeat: repeat;
}
.leaf-sheet[hidden] {
  display: none;
}
.leaf-sheet.open {
  transform: translateY(var(--sheet-drag, 0px));
  /* `lt-ease-sheet` and not `lt-ease-decelerate`: it is the same shape, tuned by hand against a real drag, and the drag is what it has to feel continuous with. */
  transition: transform var(--lt-duration-260) var(--lt-ease-sheet);
}
/* Landing with a rubber band: up from below the window, past the seat by the raise, then back down onto it. One animation and not two transitions — an element that has just come off `display: none` has no before-change style for a transition to move from, so a rise written as one does not draw and the sheet appears already raised. An animation starts from its own first keyframe, so there is nothing to wait a frame for. Not `lt-ease-overshoot` for the spring, either: that one runs about a tenth of its whole travel past the mark, and this travel is the sheet's own height. */
@keyframes sheet-land {
  0% {
    transform: translateY(100%);
    /* The rise keeps the curve tuned by hand against a real drag, which is the gesture it has to feel continuous with. */
    animation-timing-function: var(--lt-ease-sheet);
  }
  /* The raised mark, at the rise's share of the whole landing: 260ms of 400. */
  65% {
    transform: translateY(calc(var(--sheet-raise) * -1));
    animation-timing-function: var(--lt-ease-emphasized);
  }
  100% {
    transform: translateY(var(--sheet-drag, 0px));
  }
}
.leaf-sheet.open.is-landing {
  animation: sheet-land var(--lt-duration-400) both;
}
/* Leaving with intent: a short pull up to that same mark, then away faster than it arrived. One animation and not two transitions handing off — a transition ends long after its visible motion does and the next class waits on that end, which held the sheet perfectly still for a measured 35ms at the top of the pull. Here the apex is a percentage somebody wrote down. The seat is wherever a drag parked the sheet, so a dismissal from half-way down still winds up from where the hand left it. */
@keyframes sheet-leave {
  0% {
    transform: translateY(var(--sheet-drag, 0px));
    /* Something already on screen moving 10px, which is what emphasized is for. Never the arriving curve: it is front-loaded enough to spend half of a 10px throw in the first frame, which reads as a twitch rather than a wind-up. */
    animation-timing-function: var(--lt-ease-emphasized);
  }
  /* The pull-up's share of the whole gesture: 120ms of 280. */
  43% {
    transform: translateY(calc(var(--sheet-drag, 0px) - var(--sheet-raise)));
    animation-timing-function: var(--lt-ease-accelerate);
  }
  100% {
    transform: translateY(100%);
  }
}
/* A drag dismissal skips the pull, because the hand already made it: the departure alone, from wherever it was let go. */
@keyframes sheet-boost {
  from {
    transform: translateY(var(--sheet-drag, 0px));
  }
  to {
    transform: translateY(100%);
  }
}
/* `both`, so the sheet holds the first keyframe before the animation starts and the last one after it ends — without it the sheet flicks back to where the cascade says it is for the frame between the end and the hide. No curve in the shorthand: each interval names its own on the keyframe it starts at. */
.leaf-sheet.is-leaving {
  animation: sheet-leave var(--lt-duration-280) both;
}
.leaf-sheet.is-boosting {
  animation: sheet-boost var(--lt-duration-160) var(--lt-ease-accelerate) both;
}
/* The scrim waits out the wind-up so the two leave together — a sheet still on screen over an undimmed window is the one thing the scrim is there to prevent. A drag dismissal has no wind-up and takes no delay. */
.lt-backdrop.is-held {
  transition-delay: var(--lt-duration-120);
}
/* Last of the moving states, so a held pointer beats every one it ties with on specificity. The three-class ones it cannot outrank are dropped by the drag itself before this applies. */
.leaf-sheet.is-dragging {
  transition: none;
}
.leaf-sheet-grip {
  flex: none;
  display: flex;
  align-items: center;
  justify-content: center;
  /* The bar is 4px of ink, but what you grab is the whole strip across the top of the sheet -- a 4px target is a promise nobody can hit. The negative bottom margin returns the strip to the space the bar alone once took. */
  height: 24px;
  margin: 0 0 calc(var(--lt-space-8) * -1);
  cursor: grab;
  user-select: none;
  -webkit-user-select: none;
  touch-action: none;
}
.leaf-sheet-grip::before {
  content: '';
  width: 40px;
  height: 4px;
  border-radius: var(--lt-radius-pill);
  background: var(--lt-border-strong);
}
.leaf-sheet.is-dragging .leaf-sheet-grip {
  cursor: grabbing;
}
/* The X. One look for all four; where it sits is the only thing that differs, because the theme and start-screen sheets have a header row to put it in and the others don't. */
.leaf-sheet-close {
  display: grid;
  place-items: center;
  width: 32px;
  height: 32px;
  padding: 0;
  border: 0;
  border-radius: var(--lt-radius-lg);
  background: none;
  color: var(--lt-muted-foreground);
}
.leaf-sheet-close:hover {
  background: var(--lt-wash-hover);
  color: var(--lt-foreground);
}
.leaf-sheet-close .lt-icon {
  width: 18px;
  height: 18px;
}
.glossary-sheet > .leaf-sheet-close,
.flow-picker > .leaf-sheet-close {
  position: absolute;
  top: 6px;
  right: 10px;
  z-index: 1;
}
/* The app's one scrollbar, worn by everything that draws one: the reader with no minimap, the library pane, any box marked .leaf-scroll, and the five boxes a document brings. Those five are named as a selector rather than given a class because they come out of Markdown with nowhere to carry one; where the markup is ours the box takes .leaf-scroll. Every wearer is in all ten rules and not only the six that paint: the three on the box carry the thumb's color and inset, so a box in half of them reserves a gutter and never draws in it. `.table-lane > table` is redundant under the document selector and stays, named as a wearer by the test that walks this block. Never set `scrollbar-width` on any of them: in Chromium either standard scrollbar property silently kills every ::-webkit-scrollbar rule on it. */
.leaf-scroll::-webkit-scrollbar,
.library-scroll::-webkit-scrollbar,
.reader-shell:not(.has-minimap)::-webkit-scrollbar,
.table-lane > table::-webkit-scrollbar,
.document-body :is(pre, pre > code, .math-display, .frontmatter, table)::-webkit-scrollbar {
  /* 4px of inset each side plus the 6px the thumb actually shows. */
  width: 14px;
  height: 14px;
}
.leaf-scroll::-webkit-scrollbar-track,
.library-scroll::-webkit-scrollbar-track,
.reader-shell:not(.has-minimap)::-webkit-scrollbar-track,
.table-lane > table::-webkit-scrollbar-track,
.document-body :is(pre, pre > code, .math-display, .frontmatter, table)::-webkit-scrollbar-track {
  /* Transparent, not the surface color: an opaque track masks the grain and leaves an ungrained strip down the edge it sits on. */
  background: transparent;
}
/* Registered so it can be animated at all: an unregistered custom property has no type to interpolate, and a transition written on the bar itself never runs in this engine — the fade shipped that way and only ever blinked. Inherited, because a scrollbar pseudo has no declarations of its own and reads this off its box. Registering is safe here and is not next door: the one that killed the app fed a grid track off :root, so every frame relaid the window out (see .library-shell). This drives paint on a bar inside a gutter that is reserved either way. */
@property --lt-scroll-thumb {
  syntax: "<color>";
  inherits: true;
  initial-value: transparent;
}
/* How far the thumb is held off each edge of its gutter, registered for the same reason and inherited down to the thumb the same way. Shrinking it thickens the grabber inside the gutter that is reserved either way, so nothing on the page reflows. Zero initially because the box rule below always supplies the resting value; the initial one is only what an element outside that rule would read. */
@property --lt-scroll-thumb-inset {
  syntax: "<length>";
  inherits: true;
  initial-value: 0px;
}
/* The bar answers the scroll, not the pointer over the box: gone at rest, there while that box is moving, and gone again a moment after it stops. Never the whole box's hover — pointing at a list on the way somewhere else is not asking to be told how long it is. `is-scrolling` is stamped on whatever scrolled, and `is-pointing` on whatever has the pointer in its own gutter, both by the watchers in `dom.js`. The fade rides the box because it cannot ride the bar; the resting rule carries the exit and the raised ones the enter, which is what a direction per curve costs. */
.leaf-scroll,
.library-scroll,
.reader-shell:not(.has-minimap),
.table-lane > table,
.document-body :is(pre, pre > code, .math-display, .frontmatter, table) {
  --lt-scroll-thumb: transparent;
  --lt-scroll-thumb-inset: var(--lt-stroke-4);
  transition: --lt-scroll-thumb var(--lt-duration-160) var(--lt-ease-accelerate), --lt-scroll-thumb-inset var(--lt-duration-160) var(--lt-ease-accelerate);
}
/* Scrolling changes the color and nothing else: a bar that swells every time the page moves is a bar drawing attention to itself while somebody is reading. The inset still names its exit here, so a pointer leaving mid-scroll thins the thumb while the bar stays up. */
.leaf-scroll.is-scrolling,
.library-scroll.is-scrolling,
.reader-shell:not(.has-minimap).is-scrolling,
.table-lane > table.is-scrolling,
.document-body :is(pre, pre > code, .math-display, .frontmatter, table).is-scrolling {
  --lt-scroll-thumb: color-mix(in srgb, var(--lt-muted-foreground) 35%, transparent);
  transition: --lt-scroll-thumb var(--lt-duration-200) var(--lt-ease-decelerate), --lt-scroll-thumb-inset var(--lt-duration-160) var(--lt-ease-accelerate);
}
/* Aiming at the bar is aiming at a control, so it comes back and thickens to be held: 6px of painted thumb becomes 10px inside the same gutter. Last of the three on purpose — a box that is both scrolling and pointed at takes this one, and the color it sets is the same, so the two reasons never fight. */
.leaf-scroll.is-pointing,
.library-scroll.is-pointing,
.reader-shell:not(.has-minimap).is-pointing,
.table-lane > table.is-pointing,
.document-body :is(pre, pre > code, .math-display, .frontmatter, table).is-pointing {
  --lt-scroll-thumb: color-mix(in srgb, var(--lt-muted-foreground) 35%, transparent);
  --lt-scroll-thumb-inset: var(--lt-stroke-2);
  transition: --lt-scroll-thumb var(--lt-duration-200) var(--lt-ease-decelerate), --lt-scroll-thumb-inset var(--lt-duration-200) var(--lt-ease-decelerate);
}
/* Somebody who told their operating system to always show scrollbars gets every bar painted at rest. The flag is stamped on the surface from the platform's own preference, so the app asks nobody: a bar that is gone until you scroll is a target you have to already know is there. Painted, not thickened — the pointer's 10px grabber stays a hover answer, because a bar permanently at its widest takes room from the page for exactly the reader who turned this on. So this sets the color and nothing else, and the inset still comes from the resting and pointing rules above. Last of the four on purpose, and the extra class on the surface outranks all three either way. The railed reader is not a wearer here any more than it is up there: the picture down its side is the same control doing the same job. */
.app-surface.is-scrollbars-always .leaf-scroll,
.app-surface.is-scrollbars-always .library-scroll,
.app-surface.is-scrollbars-always .reader-shell:not(.has-minimap),
.app-surface.is-scrollbars-always .table-lane > table,
.app-surface.is-scrollbars-always .document-body :is(pre, pre > code, .math-display, .frontmatter, table) {
  --lt-scroll-thumb: color-mix(in srgb, var(--lt-muted-foreground) 35%, transparent);
}
/* What fades is that property, not an opacity: a scrollbar pseudo has no box of its own to fade. It also means the bar's width is reserved whether or not the thumb is painted, so nothing on the page moves when one appears. */
.leaf-scroll::-webkit-scrollbar-thumb,
.library-scroll::-webkit-scrollbar-thumb,
.reader-shell:not(.has-minimap)::-webkit-scrollbar-thumb,
.table-lane > table::-webkit-scrollbar-thumb,
.document-body :is(pre, pre > code, .math-display, .frontmatter, table)::-webkit-scrollbar-thumb {
  /* A transparent border with the fill clipped inside it is the only way to inset a webkit thumb. */
  border: var(--lt-scroll-thumb-inset) solid transparent;
  background-clip: padding-box;
  border-radius: var(--lt-radius-md);
  background-color: var(--lt-scroll-thumb);
}
/* Floor the grabber so a long page can't shrink it to a sliver. Per axis: a bare `min-height` on a sideways bar sets its thickness instead of its length, which swells the 14px bar into a 56px band. */
.leaf-scroll::-webkit-scrollbar-thumb:vertical,
.library-scroll::-webkit-scrollbar-thumb:vertical,
.reader-shell:not(.has-minimap)::-webkit-scrollbar-thumb:vertical,
.table-lane > table::-webkit-scrollbar-thumb:vertical,
.document-body :is(pre, pre > code, .math-display, .frontmatter, table)::-webkit-scrollbar-thumb:vertical {
  min-height: 56px;
}
.leaf-scroll::-webkit-scrollbar-thumb:horizontal,
.library-scroll::-webkit-scrollbar-thumb:horizontal,
.reader-shell:not(.has-minimap)::-webkit-scrollbar-thumb:horizontal,
.table-lane > table::-webkit-scrollbar-thumb:horizontal,
.document-body :is(pre, pre > code, .math-display, .frontmatter, table)::-webkit-scrollbar-thumb:horizontal {
  min-width: 56px;
}
/* Where two bars meet, so the square between them is not the platform's gray. */
.leaf-scroll::-webkit-scrollbar-corner,
.library-scroll::-webkit-scrollbar-corner,
.reader-shell:not(.has-minimap)::-webkit-scrollbar-corner,
.table-lane > table::-webkit-scrollbar-corner,
.document-body :is(pre, pre > code, .math-display, .frontmatter, table)::-webkit-scrollbar-corner {
  background: transparent;
}
/* The one sheet that can stand on another sheet, so it rides one rung above its own scrim at 42 rather than beside the sheets at 41. */
.glossary-sheet {
  position: fixed;
  z-index: var(--lt-z-43);
  background-color: var(--lt-background);
  color: var(--lt-foreground);
}
/* A folded start-screen list, given the window — same slide-up pattern again. */
.home-sheet {
  position: fixed;
  z-index: var(--lt-z-41);
  /* The skirt is carried in the bottom padding: a plain `padding` here would drop the component's own and leave the last row hanging below the window's edge. */
  padding: 0 var(--lt-space-20) calc(var(--lt-space-24) + var(--sheet-raise));
  background-color: var(--lt-background);
  color: var(--lt-foreground);
  font-family: var(--app-font);
}
.home-sheet-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex: none;
}
.home-sheet-title {
  color: var(--lt-primary-ink);
  font-family: var(--app-font);
  font-size: var(--lt-text-13);
  font-weight: var(--lt-weight-700);
  line-height: var(--lt-leading-1-2);
  letter-spacing: var(--lt-tracking-120);
  text-transform: uppercase;
}
/* The box fills whatever the sheet's own 78vh ceiling leaves it, so the list scrolls inside the sheet rather than the sheet growing past the window. */
.home-sheet-body {
  display: flex;
  flex: 1 1 auto;
  min-height: 0;
}
.home-sheet .home-list-box {
  display: flex;
  flex: 1 1 auto;
  min-height: 0;
}
.home-sheet .home-list-scroll {
  flex: 1 1 auto;
  min-height: 0;
  max-height: none;
}
.home-sheet .home-list-fade {
  --home-list-surface: var(--lt-background);
}
/* Theme selector bottom sheet — same slide-up pattern as the glossary sheet. */
.theme-sheet {
  position: fixed;
  z-index: var(--lt-z-41);
  gap: var(--lt-space-14);
  /* The skirt is carried in the bottom padding, as on the start-screen sheet. */
  padding: 0 var(--lt-space-20) calc(var(--lt-space-24) + var(--sheet-raise));
  background-color: var(--lt-surface-elevated);
  color: var(--lt-foreground);
  font-family: var(--app-font);
}
.theme-sheet-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.theme-sheet-title {
  font-size: var(--lt-text-15);
  font-weight: var(--lt-weight-800);
  color: var(--lt-foreground);
}
.theme-sheet-modes {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: var(--lt-space-6);
}
.theme-mode-btn {
  padding: var(--lt-space-8) var(--lt-space-6);
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-lg);
  background: var(--lt-surface-elevated);
  color: var(--lt-foreground);
  font-family: var(--app-font);
  font-size: var(--lt-text-12);
  font-weight: var(--lt-weight-600);
  line-height: var(--lt-leading-1-2);
}
.theme-mode-btn:hover {
  background: var(--lt-wash-hover);
  border-color: var(--lt-border-strong);
}
.theme-mode-btn.is-active {
  background: var(--lt-primary);
  border-color: var(--lt-primary);
  color: var(--lt-primary-foreground);
}
.theme-sheet-divider {
  height: 1px;
  margin: 0;
  border: 0;
  background: var(--lt-border);
}
.theme-sheet-grid {
  list-style: none;
  margin: 0;
  padding: var(--lt-space-2);
  /* Equal-column grid so every card is the same width. auto-fit (not auto-fill) collapses empty tracks, so the cards grow to fill the row instead of sitting at their min width with big gaps. */
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: var(--lt-space-8);
  overflow-y: auto;
}
.theme-item {
  position: relative;
  /* Column-reverse: name span comes first in the DOM (a test pins that), the swatch block second — reversed so the block sits on top and the name below. */
  display: flex;
  flex-direction: column-reverse;
  justify-content: flex-start;
  /* Fill the grid column; without this the button shrinks to its name's width. */
  width: 100%;
  box-sizing: border-box;
  min-height: 54px;
  padding: 0;
  border: 0;
  border-radius: var(--lt-radius-xl);
  /* The card wears the theme's own paper and ink (Random falls back to a neutral tile), so it reads as a sample of the theme. A faint stroke in the SHEET's ink keeps a paper-white card from vanishing on a light sheet. */
  background: var(--card-bg-light, color-mix(in srgb, var(--lt-foreground) 5%, var(--lt-surface-elevated)));
  color: var(--card-fg-light, var(--lt-foreground));
  font-family: var(--app-font);
  font-size: var(--lt-text-13-5);
  font-weight: var(--lt-weight-700);
  line-height: var(--lt-leading-1-2);
  text-align: left;
  overflow: hidden;
}
/* The stroke rides a pseudo-element above the swatches; drawn on the card itself the opaque swatch block would paint over it everywhere but the name band. */
.theme-item::after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  box-shadow: var(--lt-shadow-hairline);
  pointer-events: none;
  transition: box-shadow var(--lt-duration-120) var(--lt-ease);
}
:root[data-leaf-appearance='dark'] .theme-item {
  background: var(--card-bg-dark, color-mix(in srgb, var(--lt-foreground) 5%, var(--lt-surface-elevated)));
  color: var(--card-fg-dark, var(--lt-foreground));
}
/* The palette preview: a full-bleed block of edge-to-edge bars across the top, the card's rounded corners clipping it (card sets overflow: hidden). */
.theme-swatches {
  display: flex;
  height: 78px;
}
.theme-swatch {
  flex: 1;
  /* Each swatch carries both colors; show the one for the resolved appearance. */
  background: var(--sw-light);
}
:root[data-leaf-appearance='dark'] .theme-swatch {
  background: var(--sw-dark);
}
.theme-item-name {
  padding: var(--lt-space-12) var(--lt-space-14) var(--lt-space-12);
  /* The app font until the picker has loaded this theme's own font; then swap. */
  font-family: var(--app-font);
  /* Named, because the name's line box is the only part of a card a font can resize — left to a face's own `normal` it moved the whole sheet 2px as the previews landed. */
  line-height: var(--lt-leading-1-3);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.theme-item.font-ready .theme-item-name {
  font-family: var(--card-font, var(--app-font));
}
/* Spinner shown over the swatch block while that theme's font loads. A neutral disc in the sheet's own tokens keeps it legible over any swatch colors. */
.theme-item-spinner {
  position: absolute;
  top: 39px;
  left: 50%;
  /* Half its own size, like the diagram spinner: the pull-back belongs to the box, not to a spacing step. */
  --lt-spinner-size: 26px;
  width: var(--lt-spinner-size);
  height: var(--lt-spinner-size);
  margin: calc(var(--lt-spinner-size) / -2) 0 0 calc(var(--lt-spinner-size) / -2);
  border-color: color-mix(in srgb, var(--lt-foreground) 22%, transparent);
  border-top-color: var(--lt-foreground);
  background: color-mix(in srgb, var(--lt-surface-elevated) 78%, transparent);
  display: none;
  pointer-events: none;
}
.theme-item.is-loading .theme-item-spinner {
  display: block;
}
.theme-item:hover::after {
  box-shadow: var(--lt-shadow-hairline-strong);
}
.theme-item.is-active::after {
  box-shadow: var(--lt-shadow-edge-accent);
}
/* Selected badge: the check-circle, tinted with the theme accent, pinned to the name band. Hidden until the card is active. */
.theme-item-check {
  position: absolute;
  bottom: 11px;
  right: 10px;
  width: 16px;
  height: 16px;
  display: none;
  color: var(--lt-accent-ink);
  pointer-events: none;
}
.theme-item.is-active .theme-item-check {
  display: block;
}
.theme-sheet-footer {
  display: flex;
  justify-content: center;
}
.theme-sheet-browse {
  color: var(--lt-link);
  font-size: var(--lt-text-12);
  font-weight: var(--lt-weight-600);
  text-decoration: none;
}
.theme-sheet-browse:hover {
  color: var(--lt-link-hover);
  text-decoration: underline;
}
/* Under every menu: a rest raises this, a right-click asks for the menu, and the second beats the first. */
.link-hover-tip {
  position: fixed;
  z-index: var(--lt-z-44);
  max-width: min(34rem, calc(100% - 24px));
  padding: var(--lt-space-8) var(--lt-space-10);
  border: var(--lt-stroke-1) solid var(--lt-border-strong);
  /* The shadow reads this too, and adds the spread to it, so the ring outside the corner is struck from the corner’s own center. */
  --lt-shadow-host-radius: var(--lt-radius-xl);
  border-radius: var(--lt-shadow-host-radius);
  background: color-mix(in srgb, var(--lt-background) 92%, black);
  color: var(--lt-foreground);
  pointer-events: none;
  opacity: 0;
  transition: opacity var(--lt-duration-300) var(--lt-ease-accelerate);
}
.link-hover-tip.shown {
  opacity: 1;
  transition-duration: var(--lt-duration-100);
  transition-timing-function: var(--lt-ease-decelerate);
}
/* One width for every card with a picture, so a short address cannot make a narrow card whose scaled note wraps its heading into a tall column. It is the width of the note: the picture box lands at 250px, which is what 75 characters draw at. */
.link-hover-tip.has-preview {
  width: 17rem;
}
.link-hover-tip-preview {
  /* The one shrink: a starting value here, written over by the measurement, read back for the layer's width, its scale and the box's height. */
  --link-preview-shrink: 0.36;
  position: relative;
  contain: inline-size;
  width: 100%;
  height: 11rem;
  max-height: 11rem;
  margin-bottom: var(--lt-space-8);
  padding-bottom: var(--lt-space-8);
  border-bottom: var(--lt-stroke-1) solid var(--lt-border);
  overflow: hidden;
  transition: height var(--lt-duration-100) var(--lt-ease-emphasized);
}
/* A glossary entry is the card's whole answer rather than a picture of a page, so a thumbnail's ceiling comes off it. The room it gets instead is measured against the window in the page. */
.link-hover-tip-preview.is-entry {
  max-height: none;
}
/* The entry starts at its first word. The host's page framing plus the first block's own margin is 53px, which reads as framing at a thumbnail's scale and as a hole at reading size — a sixth of a short entry spent on nothing. */
.link-hover-tip-preview.is-entry .link-hover-tip-preview-document > article {
  padding-top: 0;
}
.link-hover-tip-preview.is-entry .link-hover-tip-preview-document > article > :first-child {
  margin-top: 0;
}
/* An entry taller than that room is cut, so the words at the cut fade into the card rather than stopping mid-line. Above the divider, not over it: the box's own padding is what the fade stops at. */
.link-hover-tip-preview.is-capped::after {
  content: '';
  position: absolute;
  right: 0;
  bottom: var(--lt-space-8);
  left: 0;
  height: 3rem;
  background: linear-gradient(to bottom, transparent, color-mix(in srgb, var(--lt-background) 92%, black));
  pointer-events: none;
}
.link-hover-tip-preview-placeholder {
  position: absolute;
  inset: 0;
  display: grid;
  place-items: center;
  background-color: var(--lt-surface);
  background-image: radial-gradient(circle, var(--lt-grain-dot) 0 var(--lt-grain-radius), transparent var(--lt-grain-edge));
  background-size: var(--lt-grain-tile) var(--lt-grain-tile);
  background-repeat: repeat;
  background-attachment: fixed;
  opacity: 1;
  transition: opacity var(--lt-duration-100) var(--lt-ease-decelerate);
}
.link-hover-tip-preview-spinner {
  width: var(--lt-space-24);
  height: var(--lt-space-24);
  border-width: var(--lt-stroke-2);
}
/* A card on its way out is not loading anything; its spinner stops with it. */
.link-hover-tip:not(.shown) .link-hover-tip-preview-spinner {
  visibility: hidden;
}
.link-hover-tip-preview-scale {
  width: calc(100% / var(--link-preview-shrink));
  opacity: 0;
  transform: scale(var(--link-preview-shrink));
  transform-origin: top left;
  transition: opacity var(--lt-duration-100) var(--lt-ease-decelerate);
}
.link-hover-tip-preview.is-loaded .link-hover-tip-preview-placeholder {
  opacity: 0;
}
.link-hover-tip-preview.is-loaded .link-hover-tip-preview-scale {
  opacity: 1;
}
.link-hover-tip-preview-document {
  width: 100%;
  margin: 0;
  padding: 0;
}
/* A drawing bigger than the room the card has is scaled into it rather than turned away — a pie chart is 570 by 450 and an ordinary picture, and a rule on height alone refused it. The room is half the picture in the picture's own pixels, so it is divided by the card's shrink; the height cap alone keeps the drawing's shape, and giving it a width beside that collapses every drawing in the card. */
.link-hover-tip-preview-document pre.mermaid[data-processed="true"] > svg {
  max-height: calc(88px / var(--link-preview-shrink));
}
/* A drawing the card will not show — one still too narrow to read at the size it fits, or one mermaid refused — leaves its block undrawn for good, so the box the page holds open for a diagram that is coming would sit there for ever with a ring turning in it. It falls to a strip instead, still printing the corner word that says what stood there, and the opening reads on past it. The three conditions are the spinner rule's own, which is what ties the weight; the tie is broken by this rule sitting later. */
.link-hover-tip-preview-document pre.mermaid:not([data-processed="true"]):not([data-mermaid-render="failed"]):not([data-diagram-wait="far"])[data-card-diagram="unshown"] {
  /* The corner label sits 8px down on a 13.2px line, so a block under about 22px clips its own word. */
  min-height: 0;
  height: 28px;
}
.link-hover-tip-preview-document pre.mermaid:not([data-processed="true"]):not([data-mermaid-render="failed"]):not([data-diagram-wait="far"])[data-card-diagram="unshown"]::after {
  content: none;
}
.link-hover-tip-kind {
  font-size: 0.78rem;
  font-weight: var(--lt-weight-700);
  line-height: var(--lt-leading-1-2);
}
.link-hover-tip-detail {
  margin-top: var(--lt-space-4);
  color: var(--lt-muted-foreground);
  font-family: var(--font-mono);
  font-size: 0.76rem;
  line-height: var(--lt-leading-1-3);
  overflow-wrap: anywhere;
}
.link-hover-tip-lines {
  margin-top: var(--lt-space-4);
  color: var(--lt-foreground);
  font-weight: var(--lt-weight-600);
  font-size: 0.74rem;
  line-height: var(--lt-leading-1-2);
}
/* What the fade above it promises: the rest of the entry is a press away. */
.link-hover-tip-more {
  margin-top: var(--lt-space-4);
  color: var(--lt-muted-foreground);
  font-size: 0.74rem;
  line-height: var(--lt-leading-1-2);
}
.glossary-sheet-body {
  /* Override .document-body's reading-measure width + scroll-origin margin so the entry fills the sheet and its scrollbar sits at the right edge. */
  width: auto;
  margin: 0;
  overflow-y: auto;
  padding: var(--lt-space-6) var(--lt-space-16) var(--lt-space-4) var(--lt-space-24);
}
.glossary-sheet-body > :first-child {
  margin-top: 0;
}
/* A term's entry is rendered outside #app, so the draw pass never collects its diagrams and one of them stays undrawn for good — the box the page holds open for a drawing that is coming would sit in the middle of the entry for ever with a ring turning in it. It falls to a strip instead, still printing the corner word that says what stood there, and the rest of the entry reads on past it. The three conditions are the spinner rule's own, which is what ties the weight; the tie is broken by these rules sitting later. Both published sites draw this same sheet off this same stylesheet. */
.glossary-sheet-body pre.mermaid:not([data-processed="true"]):not([data-mermaid-render="failed"]):not([data-diagram-wait="far"]) {
  /* The corner label sits 8px down on a 13.2px line, so a block under about 22px clips its own word. */
  min-height: 0;
  height: 28px;
}
.glossary-sheet-body pre.mermaid:not([data-processed="true"]):not([data-mermaid-render="failed"]):not([data-diagram-wait="far"])::after {
  content: none;
}
/* Waiting on the host to read and render the glossary. The fade-in is delayed past the sheet's own slide-up, so a lookup answered from the render cache lands first and no spinner is ever seen. */
.glossary-sheet-waiting {
  display: grid;
  place-items: center;
  min-height: 132px;
  opacity: 0;
  animation: leaf-glossary-wait-in var(--lt-duration-200) var(--lt-ease) var(--lt-duration-300) forwards;
}
.glossary-sheet-spinner {
  width: 28px;
  height: 28px;
  border-width: var(--lt-stroke-3);
  border-color: color-mix(in srgb, var(--lt-foreground) 18%, transparent);
  border-top-color: var(--lt-accent);
}
@keyframes leaf-glossary-wait-in {
  to {
    opacity: 1;
  }
}
/* A lookup that came back with nothing to show: no such term, no glossary file, or one that wouldn't read. */
.glossary-sheet-message {
  margin: var(--lt-space-24) 0;
  color: var(--lt-muted-foreground);
}
.glossary-sheet-footer {
  flex: none;
  padding: var(--lt-space-12) var(--lt-space-24) var(--lt-space-20);
  border-top: var(--lt-stroke-1) solid var(--lt-border);
}
.glossary-sheet-fulllink {
  padding: 0;
  border: 0;
  background: none;
  font: inherit;
  font-size: 0.85rem;
  color: var(--lt-link);
  cursor: pointer;
}
.glossary-sheet-fulllink:hover {
  /* Reset the global button:hover green fill so this reads as a plain link. */
  background: none;
  border-color: transparent;
  color: var(--lt-link-hover);
  text-decoration: underline;
}
/* The reading record — the same slide-up pattern at the shared ceiling, wide like the shape picker. What it holds is drawn in profile.css. */
.grove-sheet {
  position: fixed;
  z-index: var(--lt-z-41);
  gap: var(--lt-space-10);
  padding: 0 var(--lt-space-20) calc(var(--lt-space-16) + var(--sheet-raise));
  background-color: var(--lt-background);
  color: var(--lt-foreground);
  font-family: var(--app-font);
}
.grove-sheet-head {
  display: flex;
  align-items: center;
  gap: var(--lt-space-12);
  flex: none;
}
.grove-sheet-title {
  color: var(--lt-primary-ink);
  font-size: var(--lt-text-18);
  font-weight: var(--lt-weight-700);
  line-height: var(--lt-leading-1-2);
}
/* The record scrolls inside the sheet's own ceiling rather than growing the sheet past the window. */
.grove-sheet-body {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
}
/* A month of the vault's documents — the same slide-up pattern, at the ordinary column. */
.calendar-sheet {
  position: fixed;
  z-index: var(--lt-z-41);
  gap: var(--lt-space-10);
  /* The skirt is carried in the bottom padding, as on the start-screen sheet. */
  padding: 0 var(--lt-space-20) calc(var(--lt-space-16) + var(--sheet-raise));
  background-color: var(--lt-background);
  color: var(--lt-foreground);
  font-family: var(--app-font);
}
.calendar-sheet-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--lt-space-8);
  flex: none;
}
.calendar-sheet-title {
  color: var(--lt-primary-ink);
  font-size: var(--lt-text-18);
  font-weight: var(--lt-weight-700);
  line-height: var(--lt-leading-1-2);
}
.calendar-sheet-steps {
  display: flex;
  align-items: center;
  gap: var(--lt-space-4);
}
.calendar-step-back {
  transform: rotate(90deg);
}
.calendar-step-forward {
  transform: rotate(-90deg);
}
/* The month scrolls inside the sheet's own ceiling rather than growing the sheet past the window. */
.calendar-sheet-body {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
}
.calendar-month {
  display: grid;
  grid-template-columns: repeat(7, minmax(0, 1fr));
  gap: var(--lt-space-6);
}
.calendar-weekday {
  padding-bottom: var(--lt-space-2);
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-10);
  font-weight: var(--lt-weight-600);
  letter-spacing: var(--lt-tracking-120);
  text-align: center;
  text-transform: uppercase;
}
.calendar-day {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--lt-space-4);
  min-height: 56px;
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-lg);
  background: var(--lt-surface-elevated);
  color: var(--lt-foreground);
  font-family: var(--app-font);
  font-size: var(--lt-text-13);
  cursor: default;
}
.calendar-day:hover {
  background: var(--lt-wash-hover);
  border-color: var(--lt-border-strong);
}
.calendar-day.is-outside {
  color: var(--lt-muted-foreground);
}
.calendar-day.is-marked {
  background: color-mix(in srgb, var(--lt-accent) 14%, var(--lt-surface-elevated));
}
.calendar-day.is-today {
  border-style: dashed;
  border-color: var(--lt-border-strong);
}
.calendar-day.is-selected {
  border-width: var(--lt-stroke-2);
  border-style: solid;
  border-color: var(--lt-primary);
  background: color-mix(in srgb, var(--lt-accent) 26%, var(--lt-surface-elevated));
  font-weight: var(--lt-weight-700);
}
.calendar-day-number {
  line-height: var(--lt-leading-1);
}
.calendar-day-marks {
  display: flex;
  gap: var(--lt-space-2);
}
.calendar-day-mark {
  width: 4px;
  height: 4px;
  border-radius: var(--lt-radius-full);
  background: var(--lt-primary-ink);
}
.calendar-sheet-foot {
  flex: none;
  margin: 0;
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-12);
}
/* The month arrows are the sheet's own furniture, drawn quiet beside Today rather than as filled buttons. */
.calendar-sheet-step {
  border-color: transparent;
  background: transparent;
  color: var(--lt-muted-foreground);
}
.calendar-sheet-step:hover {
  background: var(--lt-wash-hover);
  border-color: transparent;
  color: var(--lt-foreground);
}
/* The span choice, and the field choice beside it, on one row under the title. */
.calendar-sheet-choices {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--lt-space-8);
  flex: none;
}
.calendar-sheet-spans {
  display: flex;
  gap: var(--lt-space-4);
}
/* One day is one column: seven would leave it a seventh of the sheet wide. */
.calendar-month.is-one-day {
  grid-template-columns: minmax(0, 1fr);
}
/* The Grove's contents: the seeds and the switch in the sheet's header, the total, and the Growth areas with their level bars. The sheet's own frame is in sheets.css and the pill in library.css. */
/* One balance for the whole Grove, at the head's right end beside the close cross, in every area and inside each one. */
.grove-sheet-seeds {
  margin-left: auto;
  padding: var(--lt-space-2) var(--lt-space-10);
  border-radius: var(--lt-radius-pill);
  background: color-mix(in srgb, var(--lt-accent) 22%, transparent);
  color: var(--lt-primary-ink);
  font-size: var(--lt-text-13);
  font-weight: var(--lt-weight-600);
}
/* The one switch that turns the whole record off. Pushed to the far end of the header, beside the close cross, and drawn quiet so it never reads as the sheet's main action. */
.grove-switch {
  display: flex;
  align-items: center;
  gap: var(--lt-space-8);
  padding: var(--lt-space-4) var(--lt-space-8);
  cursor: default;
  border: var(--lt-stroke-1) solid transparent;
  border-radius: var(--lt-radius-lg);
  background: transparent;
  color: var(--lt-muted-foreground);
  font-family: var(--app-font);
  font-size: var(--lt-text-12);
}
/* Inside an area the head holds Back instead, and the UA's own `[hidden]` cannot beat the display above. */
.grove-switch[hidden] {
  display: none;
}
.grove-switch:hover {
  background: var(--lt-wash-hover);
  border-color: transparent;
  color: var(--lt-foreground);
}
.grove-switch-track {
  flex: none;
  width: 28px;
  height: 16px;
  padding: var(--lt-space-2);
  box-sizing: border-box;
  border-radius: var(--lt-radius-pill);
  background: var(--lt-border);
  transition: background-color var(--lt-duration-120) var(--lt-ease);
}
.grove-switch-thumb {
  display: block;
  width: 12px;
  height: 12px;
  border-radius: var(--lt-radius-full);
  background: var(--lt-accent-foreground);
  transition: transform var(--lt-duration-120) var(--lt-ease);
}
.grove-switch-track.is-on {
  background: var(--lt-accent);
}
.grove-switch-thumb.is-on {
  transform: translateX(12px);
}
.grove-level-total {
  margin: 0 0 var(--lt-space-12);
  color: var(--lt-foreground);
  font-size: var(--lt-text-16);
  font-weight: var(--lt-weight-700);
}
/* As many 220px columns of areas as the room beside the Landmarks holds. */
.grove-areas {
  flex: 3 1 440px;
  min-width: 0;
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: var(--lt-space-8) var(--lt-space-20);
  /* Every card the height of the tallest, so a line that wraps in one does not leave the grid ragged. */
  grid-auto-rows: 1fr;
  align-items: stretch;
}
/* A door into the area's tree: the whole card is the press. */
.grove-area {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-content: start;
  gap: var(--lt-space-4) var(--lt-space-8);
  width: 100%;
  padding: var(--lt-space-8) var(--lt-space-10);
  cursor: default;
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-lg);
  background: var(--lt-surface-elevated);
  color: inherit;
  font-family: var(--app-font);
  text-align: left;
}
/* The app-wide `button:hover` fill lands under the card, so every ink inside it moves to the one the theme compiler gates on that fill. */
.grove-area:hover {
  background: var(--lt-navigation-button-hover-background);
  border-color: var(--lt-navigation-button-hover-background);
  color: var(--lt-primary-foreground);
}
.grove-area:hover .grove-area-name,
.grove-area:hover .grove-area-level,
.grove-area:hover .grove-area-about,
.grove-area:hover .grove-area-note,
.grove-area:hover .grove-area-count,
.grove-area:hover .grove-strip-note,
.grove-area:hover .grove-chip {
  color: var(--lt-primary-foreground);
}
.grove-area:hover .grove-chip {
  border-color: var(--lt-primary-foreground);
  background: transparent;
}
.grove-area:hover .grove-chip.is-read {
  background: color-mix(in srgb, var(--lt-primary-foreground) 22%, transparent);
}
.grove-area:hover .grove-level-bar {
  background: color-mix(in srgb, var(--lt-primary-foreground) 30%, transparent);
}
.grove-area:hover .grove-level-bar-fill {
  background: var(--lt-primary-foreground);
}
/* How many nodes the tree behind the card holds. */
.grove-area-count {
  grid-column: 1 / -1;
  justify-self: end;
  color: var(--lt-primary-ink);
  font-size: var(--lt-text-11);
  font-weight: var(--lt-weight-600);
}
.grove-area-name {
  overflow: hidden;
  color: var(--lt-foreground);
  font-size: var(--lt-text-13);
  font-weight: var(--lt-weight-600);
  text-overflow: ellipsis;
  white-space: nowrap;
}
.grove-area-level {
  color: var(--lt-primary-ink);
  font-size: var(--lt-text-12);
  font-weight: var(--lt-weight-600);
}
/* What the area counts, under its name, so a name like Leafing explains itself. */
.grove-area-about {
  grid-column: 1 / -1;
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-12);
}
.grove-area-note {
  grid-column: 1 / -1;
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-11);
}
/* How far into its current level an area has grown. */
.grove-level-bar {
  grid-column: 1 / -1;
  display: block;
  height: 6px;
  overflow: hidden;
  border-radius: var(--lt-radius-pill);
  background: var(--lt-border);
}
.grove-level-bar-fill {
  display: block;
  width: 100%;
  height: 100%;
  border-radius: var(--lt-radius-pill);
  background: var(--lt-accent);
  transform: scaleX(var(--grove-fill, 0));
  transform-origin: left center;
}
/* The bar's own value in words, so a number is never drawn without its unit or its threshold. */
.grove-bar-words {
  grid-column: 1 / -1;
  color: var(--lt-primary-ink);
  font-size: var(--lt-text-11);
  font-weight: var(--lt-weight-600);
}
.grove-area:hover .grove-bar-words {
  color: var(--lt-primary-foreground);
}
/* The claim screen: the Grove sheet's whole body while a level waits, so nothing else is drawn over the one thing there is to do. */
.grove-claim {
  display: grid;
  gap: var(--lt-space-8);
  justify-items: start;
  max-width: 420px;
  padding: var(--lt-space-16);
  border: var(--lt-stroke-1) solid var(--lt-accent);
  border-radius: var(--lt-radius-lg);
  background: var(--lt-surface-elevated);
}
.grove-claim .grove-level-bar {
  width: 100%;
}
.grove-claim-eyebrow {
  color: var(--lt-foreground);
  font-size: var(--lt-text-16);
  font-weight: var(--lt-weight-700);
}
.grove-claim-earned {
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-13);
}
.grove-claim-gives {
  color: var(--lt-foreground);
  font-size: var(--lt-text-13);
}
.grove-claim-more {
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-11);
}
/* What the grove total is made of, under it. */
.grove-level-said {
  margin: calc(-1 * var(--lt-space-8)) 0 var(--lt-space-12);
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-12);
}
/* Every rule that pays this area: what the reader does on the left, what it is worth on the right. */
.grove-rules-head {
  margin-top: var(--lt-space-12);
  color: var(--lt-foreground);
  font-size: var(--lt-text-12);
  font-weight: var(--lt-weight-600);
}
.grove-rules {
  display: grid;
  gap: var(--lt-space-2);
  margin: var(--lt-space-6) 0 0;
}
.grove-rule {
  display: flex;
  gap: var(--lt-space-8);
  justify-content: space-between;
  align-items: baseline;
}
.grove-rule-doing {
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-12);
}
.grove-rule-pays {
  margin: 0;
  color: var(--lt-primary-ink);
  font-size: var(--lt-text-12);
  font-weight: var(--lt-weight-600);
  white-space: nowrap;
}
/* Nothing earned yet: the row is there to be pressed, and says so quietly. */
.grove-area-level.is-unstarted {
  color: var(--lt-muted-foreground);
}
.grove-off {
  margin: 0;
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-13);
}
/* The year: its days in order, wrapping to fill the sheet's whole width with square cells at least 10px across. Four steps of the accent, so one enormous day does not wash every other day out. */
.grove-year {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(10px, 1fr));
  gap: var(--lt-space-2);
  margin: 0 0 var(--lt-space-16);
}
.grove-day {
  aspect-ratio: 1;
  border-radius: var(--lt-radius-xs);
  background: var(--lt-border);
}
.grove-day.is-future {
  background: transparent;
}
.grove-day-shade-1 {
  background: color-mix(in srgb, var(--lt-accent) 30%, var(--lt-border));
}
.grove-day-shade-2 {
  background: color-mix(in srgb, var(--lt-accent) 55%, var(--lt-border));
}
.grove-day-shade-3 {
  background: color-mix(in srgb, var(--lt-accent) 80%, var(--lt-border));
}
.grove-day-shade-4 {
  background: var(--lt-accent);
}
/* The areas beside the Landmarks where the sheet has room, the Landmarks under them where it has not. A wrap on the sheet's own width rather than a window query: the sheet is a share of the window, and a column squeezed to a sliver is what a window query let through. */
.grove-columns {
  display: flex;
  flex-wrap: wrap;
  gap: var(--lt-space-16) var(--lt-space-20);
  align-items: flex-start;
}
/* Under an area's bar: the formats Leafing has read, or why Foraging stops where it does. */
.grove-strip {
  grid-column: 1 / -1;
  display: flex;
  flex-wrap: wrap;
  gap: var(--lt-space-4);
}
.grove-strip-note {
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-11);
}
.grove-chip {
  padding: 0 var(--lt-space-6);
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-pill);
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-10);
  line-height: var(--lt-leading-1-6);
}
.grove-chip.is-read {
  border-color: var(--lt-accent);
  background: color-mix(in srgb, var(--lt-accent) 22%, transparent);
  color: var(--lt-primary-ink);
}
/* Four high-water marks, a label over its figure. */
.grove-landmarks {
  flex: 1 1 200px;
  min-width: 0;
  display: grid;
  gap: var(--lt-space-8);
  margin: 0;
}
.grove-landmark {
  padding: var(--lt-space-8) var(--lt-space-10);
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-lg);
  background: var(--lt-surface-elevated);
}
.grove-landmark-label {
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-11);
}
.grove-landmark-value {
  margin: 0;
  color: var(--lt-foreground);
  font-size: var(--lt-text-15);
  font-weight: var(--lt-weight-700);
}
/* Inside an area: the back button and the area's level stand in the head where Your Grove was. */
.grove-back-icon {
  width: 18px;
  height: 18px;
}
.grove-sheet-level {
  margin-left: var(--lt-space-6);
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-13);
  font-weight: var(--lt-weight-500);
}
.grove-area-view {
  display: grid;
  gap: var(--lt-space-8);
}
.grove-tree-head {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--lt-space-4) var(--lt-space-12);
  margin-top: var(--lt-space-8);
}
.grove-tree-heading {
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-11);
  font-weight: var(--lt-weight-700);
  letter-spacing: var(--lt-tracking-120);
  text-transform: uppercase;
}
.grove-tree-hint {
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-12);
}
/* The tree scrolls sideways inside its own frame when its columns outrun the sheet; the lines sit under the nodes at the same origin. */
.grove-tree {
  position: relative;
  overflow: auto;
  padding: var(--lt-space-20);
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-xl);
}
.grove-tree-links {
  position: absolute;
  top: 0;
  left: 0;
  overflow: visible;
  pointer-events: none;
}
.grove-tree-link {
  fill: none;
  stroke: var(--lt-border);
  stroke-width: var(--lt-stroke-2);
}
.grove-tree-link.is-lit {
  stroke: var(--lt-accent);
}
/* A column per step along a path and a row per node in catalog order, both handed over on the node from its edges. */
.grove-tree-grid {
  position: relative;
  display: grid;
  grid-auto-columns: 220px;
  gap: var(--lt-space-16) var(--lt-space-48);
  align-items: center;
}
.grove-tree-node {
  grid-column: var(--grove-column);
  grid-row: var(--grove-row);
  display: grid;
  gap: var(--lt-space-6);
  padding: var(--lt-space-10) var(--lt-space-12);
  border: var(--lt-stroke-1-5) solid var(--lt-border);
  border-radius: var(--lt-radius-lg);
  background: var(--lt-surface-elevated);
}
.grove-tree-node.is-available,
.grove-tree-node.is-short {
  border-color: var(--lt-accent);
}
.grove-tree-node.is-owned {
  border-color: var(--lt-primary-ink);
}
.grove-tree-node.is-locked,
.grove-tree-node.is-later {
  background: var(--lt-surface);
  color: var(--lt-muted-foreground);
}
.grove-tree-node-head {
  display: flex;
  align-items: center;
  gap: var(--lt-space-8);
  min-width: 0;
}
.grove-tree-node-mark {
  display: grid;
  flex: none;
  place-items: center;
  width: 26px;
  height: 26px;
  border-radius: var(--lt-radius-md);
  background: var(--lt-wash-hover);
  font-size: var(--lt-text-13);
  font-weight: var(--lt-weight-700);
}
.grove-tree-node-name {
  flex: 1 1 auto;
  min-width: 0;
  font-size: var(--lt-text-14);
  font-weight: var(--lt-weight-600);
}
.grove-tree-price,
.grove-tree-owned {
  flex: none;
  padding: 0 var(--lt-space-8);
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-pill);
  background: transparent;
  color: var(--lt-muted-foreground);
  font-family: var(--app-font);
  font-size: var(--lt-text-11);
  font-weight: var(--lt-weight-600);
  line-height: var(--lt-leading-1-6);
}
.grove-tree-price.is-available {
  cursor: default;
  border-color: var(--lt-accent);
  color: var(--lt-primary-ink);
}
.grove-tree-price:hover {
  border-color: var(--lt-navigation-button-hover-background);
  background: var(--lt-navigation-button-hover-background);
  color: var(--lt-primary-foreground);
}
.grove-tree-owned {
  border-color: transparent;
  color: var(--lt-primary-ink);
}
.grove-tree-switch {
  flex: none;
  padding: 0;
}
.grove-tree-node-line {
  font-size: var(--lt-text-12);
}
.grove-tree-node-line.is-needs {
  font-weight: var(--lt-weight-600);
}
.grove-tree-ranks {
  display: flex;
  gap: var(--lt-space-4);
}
.grove-tree-rank {
  flex: 1 1 0;
  height: 4px;
  border-radius: var(--lt-radius-pill);
  background: var(--lt-border);
}
.grove-tree-rank.is-filled {
  background: var(--lt-accent);
}
/* The in-place question, and the presses on an owned node. */
.grove-tree-question {
  color: var(--lt-foreground);
  font-size: var(--lt-text-12);
  font-weight: var(--lt-weight-600);
}
.grove-tree-actions,
.grove-tree-titles {
  display: flex;
  flex-wrap: wrap;
  gap: var(--lt-space-6);
}
.grove-tree-action,
.grove-tree-title {
  padding: var(--lt-space-2) var(--lt-space-8);
  cursor: default;
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-md);
  background: transparent;
  color: var(--lt-foreground);
  font-family: var(--app-font);
  font-size: var(--lt-text-12);
}
.grove-tree-action:hover,
.grove-tree-title:hover {
  background: var(--lt-wash-hover);
}
.grove-tree-action.is-spend,
.grove-tree-title.is-chosen {
  border-color: var(--lt-accent);
  background: var(--lt-accent);
  color: var(--lt-accent-foreground);
}/* The title bought in the Grove, under Your Grove. */
.grove-sheet-title-name {
  display: block;
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-12);
  font-weight: var(--lt-weight-600);
}
/* Admin mode's presses, under the head: a dashed frame so it never reads as part of the Grove. */
.grove-admin {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--lt-space-6);
  margin: 0 0 var(--lt-space-12);
  padding: var(--lt-space-6) var(--lt-space-10);
  border: var(--lt-stroke-1) dashed var(--lt-danger);
  border-radius: var(--lt-radius-lg);
}
.grove-admin-label {
  margin-right: var(--lt-space-4);
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-11);
  font-weight: var(--lt-weight-700);
  letter-spacing: var(--lt-tracking-120);
  text-transform: uppercase;
}
/* ---- The flowchart sheet ------------------------------------------------
   Full screen, unlike the other two sheets: it is an editor, not something to glance at, and it has two panes to fit. No grab bar for the same reason — a sheet you can flick away is wrong over unsaved work. */
.flow-sheet[hidden] {
  display: none;
}
.flow-sheet {
  /* The least room the picture keeps: the 320px it is drawn in plus the 5px the divider spends. */
  --flow-picture-floor: 325px;
  position: fixed;
  inset: 16px;
  z-index: var(--lt-z-43);
  display: flex;
  flex-direction: column;
  background: var(--lt-surface-elevated);
  color: var(--lt-foreground);
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-xl);
  /* The panes fill the sheet corner to corner, so without this the two bottom corners are squared off by whatever is drawn in them. */
  overflow: hidden;
  font-family: var(--app-font);
  transform: translateY(12px);
  opacity: 0;
  transition: transform var(--lt-duration-160) var(--lt-ease-accelerate), opacity var(--lt-duration-160) var(--lt-ease-accelerate);
}
.flow-sheet.open {
  transform: none;
  opacity: 1;
  /* The rise keeps the drag-tuned curve the bottom sheet's does; the fade rides along on plain decelerate. */
  transition: transform var(--lt-duration-220) var(--lt-ease-sheet), opacity var(--lt-duration-220) var(--lt-ease-decelerate);
}
.flow-sheet-head {
  flex: none;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--lt-space-12);
  padding: var(--lt-space-12) var(--lt-space-16);
  border-bottom: var(--lt-stroke-1) solid var(--lt-border);
  /* The sheet covers the app bar, so this strip is what the window is dragged by while it is open — and a drag must not sweep a selection across the title on the way. */
  user-select: none;
  -webkit-user-select: none;
}
.flow-sheet-title {
  font-size: var(--lt-text-14);
  font-weight: var(--lt-weight-800);
}
.flow-sheet-actions {
  display: flex;
  gap: var(--lt-space-8);
}
.flow-sheet-export,
.flow-sheet-cancel,
.flow-sheet-save {
  padding: var(--lt-space-8) var(--lt-space-14);
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-md);
  background: var(--lt-surface-elevated);
  color: var(--lt-foreground);
  font: inherit;
  font-size: var(--lt-text-13);
}
.flow-sheet-save {
  border-color: transparent;
  background: var(--lt-primary);
  color: var(--lt-primary-foreground);
  font-weight: var(--lt-weight-700);
}
.flow-sheet-export:hover,
.flow-sheet-cancel:hover {
  border-color: var(--lt-border-strong);
  background: var(--lt-wash-hover);
}
.flow-sheet-export:disabled {
  opacity: var(--lt-opacity-45);
  cursor: default;
}
.flow-sheet-save:hover {
  background: var(--lt-navigation-button-hover-background);
}
.flow-sheet-panes {
  flex: 1;
  min-height: 0;
  display: grid;
  /* How wide the text pane is, dragged by the bar between the two. The min() is what keeps the picture: grid resolves it on every layout, so a smaller window takes its room out of the text while the property still holds the width that was dragged to. */
  grid-template-columns: minmax(0, 1fr) 5px min(var(--flow-code-width, 340px), 100% - var(--flow-picture-floor));
}
/* The bar between the picture and the text. Thin ink, a wide grab area. */
.flow-split {
  position: relative;
  background: var(--lt-border);
  cursor: col-resize;
}
.flow-split::after {
  content: '';
  position: absolute;
  inset: 0 -4px;
}
.flow-split:hover,
.flow-split:focus-visible {
  background: var(--lt-link);
  outline: none;
}
.flow-pane {
  min-width: 0;
  min-height: 0;
  display: flex;
  flex-direction: column;
}

/* The chrome the canvas leaves to the strip: how far back you can step, which way the flow runs, and how big it is drawn. */
.flow-sheet-tools {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: var(--lt-space-10);
}
.flow-steps {
  display: flex;
  gap: var(--lt-space-2);
}
.flow-steps button {
  display: grid;
  place-items: center;
  width: 28px;
  height: 28px;
  padding: 0;
  border: var(--lt-stroke-1) solid transparent;
  border-radius: var(--lt-radius-md);
  background: transparent;
  color: var(--lt-muted-foreground);
}
.flow-steps button:hover:not(:disabled) {
  background: var(--lt-wash-hover);
  color: var(--lt-foreground);
}
.flow-steps button:disabled {
  opacity: var(--lt-opacity-35);
  cursor: default;
}
.flow-steps svg {
  width: 16px;
  height: 16px;
}
/* The little drawing on a shape button is mermaid's too — one tiny diagram per shape, so a button cannot show something the canvas draws differently. */
.flow-chip {
  display: block;
  width: 46px;
  height: 28px;
  max-width: none;
}
.flow-chip-line {
  stroke: var(--lt-foreground);
  stroke-width: var(--lt-stroke-1-5);
  fill: none;
}
.flow-chip-line.is-dotted {
  stroke-dasharray: 4 3;
}
.flow-chip-line.is-thick {
  stroke-width: var(--lt-stroke-3);
}
/* A line that isn't drawn at all. Shown as the ghost of one, because a button with nothing on it reads as a button that failed to load. */
.flow-chip-line.is-invisible {
  stroke-dasharray: 1 4;
  opacity: var(--lt-opacity-40);
}
.flow-end-mark {
  fill: var(--lt-foreground);
  stroke: none;
}
.flow-end-mark.is-open {
  fill: none;
  stroke: var(--lt-foreground);
  stroke-width: var(--lt-stroke-1-5);
}
.flow-zoom {
  display: flex;
}
/* Shaped like the reading view's diagram controls (.mermaid-zoom), on the sheet's own control surface so it sits with the Flow picker beside it. */
.flow-zoom button {
  display: grid;
  place-items: center;
  width: 28px;
  height: 28px;
  padding: 0;
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: 0;
  background: var(--lt-surface-elevated);
  color: var(--lt-muted-foreground);
}
.flow-zoom .lt-icon {
  width: 16px;
  height: 16px;
}
.flow-zoom button:first-child {
  border-radius: var(--lt-radius-md) 0 0 var(--lt-radius-md);
}
.flow-zoom button:last-child {
  border-radius: 0 var(--lt-radius-md) var(--lt-radius-md) 0;
}
.flow-zoom button + button {
  border-left: 0;
}
.flow-zoom button:hover {
  border-color: var(--lt-border-strong);
  background: var(--lt-wash-hover);
  color: var(--lt-foreground);
}
.flow-sheet-direction {
  display: flex;
  align-items: center;
  gap: var(--lt-space-6);
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-12);
}
.flow-sheet-direction select {
  padding-block: var(--lt-space-4);
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-md);
  background: var(--lt-surface-elevated);
  color: var(--lt-foreground);
  font: inherit;
  font-size: var(--lt-text-12);
}
/* What the thing under the pointer is for. Fourteen shapes is more than anyone knows by outline, so hovering one says what it means; otherwise it carries the gestures the canvas answers to. */
.flow-hint {
  flex: none;
  margin: 0;
  padding: var(--lt-space-6) var(--lt-space-14) var(--lt-space-8);
  min-height: 1.4em;
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-11-5);
}
/* The drawing surface. It scrolls rather than shrinks: a big diagram in a small window is a diagram you pan, not one you squint at. */
.flow-canvas {
  flex: 1;
  min-height: 0;
  display: flex;
  overflow: auto;
  padding: var(--lt-space-12);
  background: var(--lt-surface);
  outline: none;
  /* Stops a drag sweeping a selection across the diagram. A preventDefault on the pointerdown would too, but it also eats dblclick. */
  user-select: none;
  -webkit-user-select: none;
}
.flow-canvas.is-disabled {
  background: var(--lt-surface-muted);
}
.flow-canvas.is-connecting {
  cursor: crosshair;
}
.flow-canvas.is-dragging,
.flow-canvas.is-panning {
  cursor: grabbing;
}
/* The diagram's own box at the current zoom: mermaid's SVG, with our handles laid over it. It is `position: relative` so the overlay and the rename field can be placed in its pixels, and `margin: auto` centers it — the obvious `justify-content` clips the top-left off anything larger than the scroll box. */
.flow-stage {
  position: relative;
  flex: none;
  margin: auto;
  /* Where the diagram has been dragged to. A transform rather than a scroll, because a diagram smaller than the pane has nothing to scroll and dragging one has to work anyway — most of all with the picker covering the bottom. The overlay is inside the stage, so the handles come along for free. */
  transform: translate(var(--flow-pan-x, 0px), var(--flow-pan-y, 0px));
}
.flow-stage > svg {
  display: block;
}
/* Rings, handles and drop marks. The layer itself lets the pointer through to mermaid's own boxes and lines; only its children answer. */
.flow-overlay {
  position: absolute;
  inset: 0;
  pointer-events: none;
}
.flow-overlay > * {
  pointer-events: auto;
}
/* One box's worth of handles, sized to the shape mermaid drew. It owns its own ring and buds so hovering one box cannot light up another's — which a sibling selector across a flat overlay does. */
.flow-node-tools {
  position: absolute;
  pointer-events: none;
}
/* The ring is what a click lands on, and what a drag carries. Invisible until it matters. */
/* Its radius is set per box, from the shape mermaid drew plus the gap — see FLOW_RING_GAP. `border-box` so the border grows inward and the standoff stays the 8px it says it is. */
.flow-ring {
  position: absolute;
  inset: 0;
  box-sizing: border-box;
  border: var(--lt-stroke-2) solid transparent;
  pointer-events: auto;
  cursor: grab;
}
/* Above hover and selection on purpose: this one is always on, and those two are what the pointer is doing right now, so they win. */
.flow-ring.is-linked {
  border-color: var(--lt-link);
  border-style: dotted;
}
.flow-node-tools:hover .flow-ring {
  border-color: var(--lt-border-strong);
}
.flow-node-tools.is-selected .flow-ring {
  border-color: var(--lt-link);
}
.flow-node-tools.is-drop .flow-ring {
  border-color: var(--lt-link);
  border-style: dashed;
}
/* The box travels with the pointer and stops answering it, or it would be the box every drop landed on. Nothing stores where you put it, so it settles back into mermaid's layout on release. */
.flow-node-tools.is-dragging {
  pointer-events: none;
  opacity: var(--lt-opacity-60);
}
/* A box's + handles, on its four sides. They show on the box you are pointing at, so a page of boxes is not a page of buttons. */
.flow-bud {
  position: absolute;
  display: grid;
  place-items: center;
  width: 20px;
  height: 20px;
  margin: calc(var(--lt-space-10) * -1) 0 0 calc(var(--lt-space-10) * -1);
  padding: 0;
  border: var(--lt-stroke-2) solid var(--lt-surface);
  border-radius: var(--lt-radius-full);
  background: var(--lt-link);
  color: var(--lt-surface);
  font-family: var(--app-font);
  font-size: var(--lt-text-14);
  font-weight: var(--lt-weight-700);
  line-height: var(--lt-leading-1);
  opacity: 0;
  pointer-events: auto;
  cursor: crosshair;
  /* Its own reveal, so the shared hover fade at the top of the file never reaches it: the fill is named here instead. */
  transition: var(--lt-transition-hover-reveal-leave), background-color var(--lt-duration-120) var(--lt-ease);
}
.flow-bud.is-up {
  left: 50%;
  top: 0;
}
.flow-bud.is-down {
  left: 50%;
  top: 100%;
}
.flow-bud.is-left {
  left: 0;
  top: 50%;
}
.flow-bud.is-right {
  left: 100%;
  top: 50%;
}
.flow-node-tools:hover .flow-bud,
.flow-node-tools.is-selected .flow-bud,
.flow-bud:focus-visible {
  opacity: 1;
  transition: var(--lt-transition-hover-reveal-arrive), background-color var(--lt-duration-120) var(--lt-ease);
}
.flow-bud:hover {
  background: var(--lt-link-hover);
}
/* A selected line's two ends: grab either to point it somewhere else. */
.flow-edge-end {
  position: absolute;
  width: 12px;
  height: 12px;
  margin: calc(var(--lt-space-6) * -1) 0 0 calc(var(--lt-space-6) * -1);
  padding: 0;
  border: var(--lt-stroke-2) solid var(--lt-surface);
  border-radius: var(--lt-radius-full);
  background: var(--lt-link);
  cursor: crosshair;
}
/* The line that follows the pointer while a connection is drawn or moved. */
.flow-rubber-band {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  overflow: visible;
  pointer-events: none;
}
.flow-rubber {
  stroke: var(--lt-link);
  stroke-width: var(--lt-stroke-2);
  stroke-dasharray: 5 4;
}
/* The wide invisible copy of a line, drawn beside the real one purely to be hit. Painted with nothing and stroked this wide, so pointing at a line is intent rather than aim — the drawn ink is one pixel across, and a click either side of it lands on empty canvas. It takes the pointer on its stroke alone: a line's curve encloses nothing, but a fill would still catch the whole bay between a bend and its chord. */
.flow-edge-hit {
  --flow-edge-hit-width: 14px;
  fill: none;
  stroke: transparent;
  stroke-width: var(--flow-edge-hit-width);
  pointer-events: stroke;
}
/* The line the pointer is over, which is what tells you it is a thing you can point at at all — the same job the ring does for a box. Ahead of the two rules below on purpose: all three are the same weight, so a line that is both hovered and selected reads as selected. */
.flow-stage path[data-id].is-hover {
  stroke: var(--lt-border-strong) !important;
  stroke-width: var(--lt-stroke-2) !important;
}
/* Mermaid's own line, when it is the one selected or the one a box would drop into. Its drawing, our state. */
.flow-stage path[data-id].is-selected {
  stroke: var(--lt-link) !important;
  stroke-width: var(--lt-stroke-3) !important;
}
.flow-stage path[data-id].is-drop {
  stroke: var(--lt-link) !important;
  stroke-width: var(--lt-stroke-4) !important;
  stroke-dasharray: 6 4 !important;
}
/* A group about to take the box being dragged. Mermaid draws the cluster's outline as a rect inside the group, so the mark goes on that rather than on the group itself — which has no stroke of its own to change. */
.flow-stage g.cluster.is-drop rect {
  stroke: var(--lt-link) !important;
  stroke-width: var(--lt-stroke-2) !important;
  stroke-dasharray: 6 4 !important;
}
/* Right-click anything on the canvas. The gestures are quicker once they are known; this is where they are named, and where the rarer ones live at all. */
.flow-menu {
  position: absolute;
  z-index: 4;
  min-width: 180px;
  padding: var(--lt-space-4);
  /* The app-chrome pair, the same one .context-menu is built from: the reading surfaces this used are two shades that a dark theme draws almost alike, so the hover was there and invisible. */
  border: var(--lt-stroke-1) solid var(--lt-border);
  /* The shadow reads this too, and adds the spread to it, so the ring outside the corner is struck from the corner’s own center. */
  --lt-shadow-host-radius: var(--lt-radius-lg);
  border-radius: var(--lt-shadow-host-radius);
  background: var(--lt-surface-elevated);
  font-size: var(--lt-text-12-5);
}
.flow-menu-heading {
  grid-column: 1 / -1;
  margin: var(--lt-space-6) 0 var(--lt-space-2);
  padding: 0 var(--lt-space-10);
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-10-5);
  font-weight: var(--lt-weight-800);
  letter-spacing: var(--lt-tracking-060);
  text-transform: uppercase;
}
/* The heading that opens a menu or a sheet wears no space above it. Scoped to the container's own children on purpose: the shape grid sits in a wrapper, so its first heading is `:first-child` wherever that wrapper stands and would otherwise lose the 6px it has today. The third selector is the one case where it really does open the sheet — a box being added, which draws no fields above the grid. */
.flow-menu > .flow-menu-heading:first-child,
.flow-picker-body > .flow-menu-heading:first-child,
.flow-picker-body > .flow-shape-grid:first-child > .flow-menu-heading:first-child {
  margin-top: 0;
}
.flow-menu-item {
  /* A menu row acts here without going anywhere, so the pointer stays an arrow. */
  cursor: default;
  display: flex;
  align-items: center;
  gap: var(--lt-space-6);
  width: 100%;
  padding: var(--lt-space-6) var(--lt-space-10);
  border: 0;
  border-radius: var(--lt-radius-md);
  background: transparent;
  color: var(--lt-foreground);
  font: inherit;
  text-align: left;
  white-space: nowrap;
}
.flow-menu-item:hover,
.flow-menu-item:focus-visible {
  background: var(--lt-wash-hover);
  outline: none;
}
.flow-menu-item .flow-chip {
  flex: none;
  width: 34px;
  height: 22px;
}
/* Renaming happens over the thing being renamed, not in a strip at the bottom. */
.flow-label-box {
  position: absolute;
  z-index: 5;
  padding: 0 var(--lt-space-6);
  border: var(--lt-stroke-2) solid var(--lt-link);
  border-radius: var(--lt-radius-sm);
  background: var(--lt-surface-elevated);
  color: var(--lt-foreground);
  font-family: var(--app-font);
  text-align: center;
  outline: none;
  /* The canvas around it turns selection off; this is the one place you type. */
  user-select: text;
  -webkit-user-select: text;
}
.flow-notice {
  flex: none;
  margin: 0;
  padding: var(--lt-space-10) var(--lt-space-14);
  border-top: var(--lt-stroke-1) solid var(--lt-border);
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-12);
}
/* A document marks a failed diagram and moves on; an editor has to say what is wrong, so mermaid's own message is printed here. */
.flow-notice.is-error {
  border-top-color: var(--lt-danger);
  color: var(--lt-danger);
  font-family: var(--code-font);
  white-space: pre-wrap;
}
/* The picker: what a box or a line can be changed to, and what a new box can be. One sheet for both, sliding up from the bottom of the canvas — see .leaf-sheet, which the glossary and the theme picker are built from too. */
.flow-picker {
  /* Measured against the whole editor — the sheet is `position: fixed` — so it is centered on the modal rather than on the half of it left of the text. */
  position: absolute;
  z-index: 5;
  /* A quarter of the editor: the sheet is judged by what it is over, and at 62% it covers two thirds of the canvas, so nothing you are about to change is on screen while you change it. It is the one sheet the grab bar can pull taller, up to the ceiling every sheet shares, for anyone who wants the whole shape list at once. */
  --flow-picker-seat: 25%;
  max-height: min(calc(var(--flow-picker-seat) + var(--sheet-grow, 0px)), var(--sheet-ceiling));
  background-color: var(--lt-surface-elevated);
  color: var(--lt-foreground);
  border-top: var(--lt-stroke-1) solid var(--lt-border);
}
/* Every field the selection has, in a band of its own that does not scroll: losing the name off the top mid-list is how a box ends up unnamed, and the link, the icon and the picture were unfindable at the bottom of forty-seven shapes.

   The right side keeps the close cross's box clear. That cross is pinned over the sheet rather than laid out in it — see .leaf-sheet-close in sheets.css — so it hangs over whatever this band draws under it, and the last field on the line went 30px underneath it. The cross takes 42px off the sheet's edge; the widest gap in the app clears it with room. */
.flow-picker-head {
  flex: none;
  padding: var(--lt-space-2) var(--lt-space-48) var(--lt-space-4) var(--lt-space-12);
}
/* As many fields across as fit: a box has four and the sheet opens short, so one per line would spend the whole sheet on the form and leave no shapes under it. */
.flow-form {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: var(--lt-space-4) var(--lt-space-12);
}
/* The word beside the box rather than shouting over it: at the muted weight every other caption in the sheet takes, and only as wide as the longest of the four so the boxes line up.

   The cap is on the row and not on the grid track above it, so a box's four fields still share one line while the one field a new box gets stops at a width somebody can read a path in. Capping the track instead pushed the fourth field onto a line of its own, and stretching to the track made that lone field a 1610px band across a 1676px sheet. */
.flow-form-row {
  display: grid;
  grid-template-columns: max-content minmax(0, 1fr);
  align-items: center;
  gap: var(--lt-space-8);
  max-width: 420px;
}
.flow-form-label {
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-12);
}
.flow-picker-head .flow-field {
  width: 100%;
}
.flow-picker-body {
  overflow-y: auto;
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--lt-space-2);
  padding: var(--lt-space-4) var(--lt-space-10) var(--lt-space-12);
}
/* The forty-seven shape buttons never leave the page, so this wrapper stands in the body whatever is selected, across the whole width of it.

   How many across answers how wide the sheet is and nothing else. The width used to be tied to `--sheet-grow`, so every pixel the grab bar added widened each button and the count came down — nine across at the seat, six a fifth of the way up, five at the ceiling. Pulling a sheet open to see more of a list and being shown less of it is the opposite of what the grab bar is for.

   212px is what the longest of the forty-seven needs, measured off the drawn button rather than worked out from the font: "Comment, both sides" and "Direct access storage" both draw 152px, the widest picture is 34, the gap between them is 6 and the button holds 10 each side. It was 168, and a label is `nowrap` with nothing clipping it, so those names hung 12px out of their own button and over the one beside it. */
.flow-shape-grid {
  grid-column: 1 / -1;
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(212px, 1fr));
  gap: var(--lt-space-2);
}
/* A line has no shapes, so the wrapper collapses to nothing rather than emptying. A height of zero keeps the buttons laid out where `display: none` would throw their boxes away exactly the way removing them does — 1.3ms coming back against 4.9 for a hidden wrapper and 5.6 for hidden buttons. Out of the flow as well as flat, or a wrapper no taller than nothing still takes a row of the body's grid and one of its gaps, which pushed Delete 2px down the sheet every time a line was picked. Measured: it costs nothing, and the buttons come back at the pixel they left. */
.flow-shape-grid.is-collapsed {
  position: absolute;
  height: 0;
  overflow: hidden;
}
/* Delete belongs to the whole selection rather than to one column of choices, so it gets the row to itself — and is not worth the whole width of it. */
.flow-picker-body > .flow-delete {
  grid-column: 1 / -1;
  justify-self: start;
  margin-top: var(--lt-space-8);
}
.flow-field {
  min-width: 0;
  padding: var(--lt-space-6) var(--lt-space-10);
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-md);
  background: var(--lt-surface-elevated);
  color: var(--lt-foreground);
  font: inherit;
  font-size: var(--lt-text-13);
}
/* The browser's own focus ring is a second outline around a control that already has a border, drawn in a blue that belongs to no theme here. One ring, in the theme's link color, sitting just outside the border. */
.flow-field:focus,
.flow-field:focus-visible {
  outline: none;
  border-color: var(--lt-link);
  box-shadow: var(--lt-shadow-focus);
}
/* The one already chosen. An outline rather than a fill: the row carries a drawing of the shape, and a fill behind it fights the drawing. */
.flow-menu-item.is-current {
  box-shadow: var(--lt-shadow-edge-link);
}
.flow-delete {
  padding: var(--lt-space-6) var(--lt-space-10);
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-md);
  background: var(--lt-surface-elevated);
  color: var(--lt-danger);
  font: inherit;
  font-size: var(--lt-text-12);
}
/* What Save will do to the text below it. Muted and one line: it is a fact to have read once, not a warning to be argued with every time. */
.flow-code-note {
  flex: none;
  margin: 0;
  padding: var(--lt-space-8) var(--lt-space-14) var(--lt-space-6);
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-11-5);
}
.flow-code {
  flex: 1 1 45%;
  min-height: 0;
  padding: var(--lt-space-12) var(--lt-space-14);
  border: 0;
  border-bottom: var(--lt-stroke-1) solid var(--lt-border);
  background: var(--lt-syntax-background);
  color: var(--lt-syntax-foreground);
  font-family: var(--code-font);
  font-size: var(--lt-text-12-5);
  line-height: var(--lt-leading-1-55);
  resize: none;
  outline: none;
  white-space: pre;
  overflow: auto;
}
@media (max-width: 860px) {
  .flow-sheet-panes {
    grid-template-columns: minmax(0, 1fr);
    grid-template-rows: minmax(0, 1fr) 5px minmax(0, 0.6fr);
  }
  .flow-split {
    cursor: row-resize;
  }
}
/* A drawn diagram's corner controls: how it is looked at, top right, and what it can be opened as, bottom right. Zoom takes the corner a reader looks at first, because it is the one used on every diagram and editing is the rarer act. Both sit on the block itself and appear on hover, so a page being read carries none of them. */
.document-body pre.mermaid {
  position: relative;
}
.mermaid-tools,
.mermaid-view-controls {
  position: absolute;
  right: 6px;
  display: flex;
  opacity: 0;
  transition: var(--lt-transition-hover-reveal-leave);
}
.mermaid-tools {
  bottom: 6px;
  gap: var(--lt-space-6);
}
/* Keeping a diagram sits beside looking at one, in one row, so the space between them is a gap rather than an offset somebody measured against the corner. */
.mermaid-view-controls {
  top: 6px;
  gap: var(--lt-space-6);
}
.mermaid-zoom {
  display: flex;
}
.document-body pre.mermaid:hover .mermaid-tools,
.document-body pre.mermaid:hover .mermaid-view-controls,
.mermaid-tools:focus-within,
.mermaid-view-controls:focus-within {
  opacity: 1;
  transition: var(--lt-transition-hover-reveal-arrive);
}
.mermaid-export,
.mermaid-tool,
.mermaid-zoom button {
  display: grid;
  place-items: center;
  height: 28px;
  padding: 0;
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-md);
  background: var(--lt-surface-elevated);
  color: var(--lt-muted-foreground);
}
.mermaid-export,
.mermaid-tool,
.mermaid-zoom button {
  width: 28px;
}
.mermaid-export:hover,
.mermaid-tool:hover,
.mermaid-zoom button:hover {
  border-color: var(--lt-border-strong);
  background: var(--lt-wash-hover);
  color: var(--lt-foreground);
}
.mermaid-export .lt-icon,
.mermaid-tool .lt-icon,
.mermaid-zoom .lt-icon {
  width: 16px;
  height: 16px;
}
/* One control in three parts, so it reads as the zoom rather than three buttons that happen to be near each other. */
.mermaid-zoom button {
  border-radius: 0;
}
.mermaid-zoom button:first-child {
  border-radius: var(--lt-radius-md) 0 0 var(--lt-radius-md);
}
.mermaid-zoom button:last-child {
  border-radius: 0 var(--lt-radius-md) var(--lt-radius-md) 0;
}
.mermaid-zoom button + button {
  border-left: 0;
}
/* ---- A diagram on the whole window ----------------------------------------
   Built per open by diagram-view.js, inside #app so the delegated pan, wheel and click answer it with no listeners of its own. It takes the free pair of layers under the flowchart editor's: this is for looking at, and picking up a pen over it closes it. */
.diagram-overlay {
  position: fixed;
  inset: 16px;
  z-index: var(--lt-z-41);
  display: flex;
  background: var(--lt-surface-elevated);
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-xl);
  overflow: hidden;
  opacity: 0;
  /* Only ever arrives: closing removes the element, so there is no exit to curve. */
  transition: opacity var(--lt-duration-220) var(--lt-ease-decelerate);
}
.diagram-overlay.open {
  opacity: 1;
}
/* A table copied from the page at the window's size. The copy is a reader until phase 2 gives it tools, so its scroll box is the only interaction it owns. */
.table-sheet-overlay {
  position: fixed;
  inset: var(--lt-space-16);
  z-index: var(--lt-z-41);
  display: flex;
  flex-direction: column;
  min-width: 0;
  background: var(--lt-surface-elevated);
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-xl);
  overflow: hidden;
  opacity: 0;
  transition: opacity var(--lt-duration-220) var(--lt-ease-decelerate);
}
.table-sheet-overlay.open {
  opacity: 1;
}
.table-sheet-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex: 0 0 auto;
  padding: var(--lt-space-8) var(--lt-space-10) var(--lt-space-8) var(--lt-space-16);
  border-bottom: var(--lt-stroke-1) solid var(--lt-border);
}
.table-sheet-title {
  margin: 0;
  color: var(--lt-foreground);
  font-family: var(--heading-font);
  font-size: var(--lt-text-15);
  font-weight: var(--lt-weight-700);
  line-height: var(--lt-leading-1-2);
}
/* The grid also wears `.document-body`, for the link color and the dotted glossary underline written behind it. These three take back what that class brings that a sheet is not: a document's reading measure, the negative margin hanging it off the scroll origin, and the page's text size, which the cells' `em` padding and `ch` floor below are measured against. */
.table-sheet-grid {
  flex: 1 1 auto;
  min-height: 0;
  width: auto;
  margin: 0;
  font-size: inherit;
  padding: var(--lt-space-16);
  overflow: auto;
}
.table-sheet-grid > table {
  border-collapse: collapse;
  display: block;
  width: fit-content;
  max-width: 100%;
  /* The document hands a table its own scroll box and a gap under it, both wrong here: the grid is the scroll box the sideways wheel reads, and the sheet ends at its own padding. */
  margin: 0;
  overflow: visible;
  font-family: var(--app-font);
  line-height: var(--lt-leading-1-45);
}
.table-sheet-grid th,
.table-sheet-grid td {
  border: var(--lt-stroke-1) solid var(--lt-markdown-table-border);
  padding: 0.375em 0.8125em;
}
/* Only `anywhere` enters a column's smallest width, so `break-word` leaves the sheet scrolling sideways. Body cells only: on a heading it drops a column under one word and "Ref" draws as "R / ef". */
.table-sheet-grid td {
  overflow-wrap: anywhere;
  /* Which drops a body cell's smallest width to one character, so without a floor a short column stops at its own heading and cuts "Mon" in two. Border-box, so 7ch leaves 4.3 characters of content and stays under the floor any five-letter heading already sets. */
  min-width: 7ch;
}
.table-sheet-grid th {
  background: var(--lt-markdown-table-row-background);
  color: var(--lt-markdown-heading);
  font-weight: var(--lt-weight-600);
}
.table-sheet-grid tr:nth-child(2n) td {
  background: var(--lt-markdown-table-row-background);
}
.table-sheet-grid th,
.table-sheet-grid tr:nth-child(2n) td {
  --lt-grain-dot: var(--reader-surface-grain);
  background-image: radial-gradient(circle, var(--lt-grain-dot) 0 var(--lt-grain-radius), transparent var(--lt-grain-edge));
  background-size: var(--lt-grain-tile) var(--lt-grain-tile);
  background-repeat: repeat;
  background-attachment: fixed;
}
.table-sheet-grid tr:nth-child(2n + 1) td {
  --lt-grain-dot: var(--reader-row-grain);
  background-image: radial-gradient(circle, var(--lt-grain-dot) 0 var(--lt-grain-radius), transparent var(--lt-grain-edge));
  background-size: var(--lt-grain-tile) var(--lt-grain-tile);
  background-repeat: repeat;
  background-attachment: fixed;
}
/* ---- A picture on the whole window ----------------------------------------
   The one full-window view with no panel: no header, no title, no words. The scrim behind is the ground and this box is only what centers the picture on it, which is why it has no surface, no border and no corner of its own — and why a press anywhere but the picture reads as a press on the ground and closes it. */
.image-sheet-overlay {
  position: fixed;
  inset: 0;
  z-index: var(--lt-z-41);
  /* Flex rather than a centering grid: a grid row sized to its content leaves the picture's own height indefinite, so the cap below resolves against nothing and a tall picture is drawn past the bottom of the window. */
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--lt-space-24);
  opacity: 0;
  /* Only ever arrives: closing removes the element, so there is no exit to curve. */
  transition: opacity var(--lt-duration-220) var(--lt-ease-decelerate);
}
.image-sheet-overlay.open {
  opacity: 1;
}
/* Fitted whole: never cropped, and never drawn past its own size, because a cap can only cap. */
.image-sheet-picture {
  display: block;
  width: auto;
  height: auto;
  max-width: 100%;
  max-height: 100%;
  object-fit: contain;
}
/* The corner the close mark waits in. It is a region rather than the whole overlay so the mark is not drawn over a picture somebody is looking at, and it takes the pointer so it can be hovered — a press landing on it closes, the same as a press on the ground. */
.image-sheet-corner {
  position: absolute;
  top: 0;
  right: 0;
  width: 120px;
  height: 120px;
  display: grid;
  place-items: start end;
  padding: var(--lt-space-16);
}
.image-sheet-close {
  opacity: 0;
  pointer-events: none;
  transition: var(--lt-transition-hover-reveal-leave);
}
.image-sheet-corner:hover .image-sheet-close,
.image-sheet-close:focus-visible {
  opacity: 1;
  pointer-events: auto;
  transition: var(--lt-transition-hover-reveal-arrive);
}
/* A `pre.mermaid` like the block in the page, and deliberately outside any .document-body: what it is for is the room the reading column does not have. */
.diagram-stage {
  position: relative;
  flex: 1;
  min-width: 0;
  display: grid;
  place-items: center;
  margin: 0;
  padding: var(--lt-space-16);
  overflow: hidden;
  color: var(--lt-markdown-foreground);
  cursor: grab;
}
/* Fit is the whole drawing in this box, so the height is capped until somebody zooms — past that the size is the SVG's own and a cap here would undo it. */
.diagram-stage:not(.is-moved) > svg {
  max-height: 100%;
}
/* The window is the box now, so nothing here is something to go hunting for. */
.diagram-stage .mermaid-view-controls,
.diagram-stage .mermaid-tools {
  opacity: 1;
}
.diagram-close {
  position: absolute;
  top: 6px;
  right: 6px;
}
/* The view controls keep the top right they have in the page, moved left of the X, which is the one corner the overlay owns. Centered against it: the X is 32px tall and these are 28. The edit pair stays bottom right, as on the block. */
.diagram-stage .mermaid-view-controls {
  top: 8px;
  right: 44px;
}
/* Wide enough that a sheet across the whole width would be a line of text you have to sweep your head along: every sheet becomes a centered column instead. On the component, so all four do it and a fifth gets it for nothing. The centering is the `translate` property and not the other half of a `transform`, because the browser composes the two in that order for free: one rule centers, and every state and keyframe below draws its travel in `transform` without knowing this rule exists. As half of a transform it has to be repeated on every moving state, where one that forgets it snaps to the left edge mid-flight, and a keyframe cannot be repeated per window width at all. */
@media (min-width: 760px) {
  .leaf-sheet {
    left: 50%;
    right: auto;
    width: min(680px, 92%);
    translate: -50%;
  }
  /* Except the flowchart picker, which is two columns of drawings rather than a column of text, and the Grove, which is columns of bars for the same reason. It takes nearly the whole editor, because that is what it takes to read forty-seven shapes without scrolling for every one. */
  .flow-picker,
  .grove-sheet {
    width: 85%;
  }
}
/* ---- Find in this document -------------------------------------------------
   One bar over both views (find-bar.js), in the reader's own grid cell so it holds its place while the document scrolls under it. Top right, where every find bar is, and off the card's edges by the same 8px the card is held off the frame. */
.find-bar[hidden] {
  display: none;
}
.find-bar {
  grid-column: 2;
  grid-row: 1;
  align-self: start;
  justify-self: end;
  z-index: 7;
  /* Anchor for the face drawn behind it. */
  position: relative;
  display: flex;
  flex-direction: column;
  gap: var(--lt-space-4);
  /* Never wider than the page it floats over — the reading column can be 360px, and what a too-wide bar clips is the field you type into. */
  box-sizing: border-box;
  max-width: calc(100% - var(--lt-space-16));
  /* Clear of the app bar the reader's own padding sits under. */
  margin-top: calc(var(--app-bar-height) + var(--lt-space-4));
  margin-right: var(--lt-space-8);
  padding: var(--lt-space-10);
  /* Transparent, not gone: the border holds the box's size while ::after paints the visible face — the same arrangement the reader's toolbar uses. */
  border: var(--lt-stroke-1) solid transparent;
  /* The shadow reads this too, and adds the spread to it, so the ring outside the corner is struck from the corner’s own center. */
  --lt-shadow-host-radius: var(--lt-radius-lg);
  border-radius: var(--lt-shadow-host-radius);
  background: transparent;
  font-family: var(--app-font);
  font-size: var(--lt-text-12);
  color: var(--lt-foreground);
}
/* The face — fill and hairline. inset -1px re-covers the border box the element's transparent border holds in layout. */
.find-bar::after {
  content: '';
  position: absolute;
  z-index: var(--lt-z-below);
  inset: -1px;
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-lg);
  background: var(--lt-surface-elevated);
  pointer-events: none;
}
/* Wraps rather than clips: the field shrinks first, and when it has given all it can the toggles and the steps drop under it. */
.find-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--lt-space-4);
}
.find-row[hidden] {
  display: none;
}
/* The field and its counter share one sunken well, so the count reads as part of what you typed rather than as another control. */
.find-field {
  display: flex;
  align-items: center;
  gap: var(--lt-space-2);
  box-sizing: border-box;
  /* 260px at rest, and the first thing to give when the window narrows — down to a width a short query still reads in. */
  flex: 1 1 auto;
  width: 260px;
  min-width: 120px;
  padding: 0 var(--lt-space-8);
  border: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: var(--lt-radius-sm);
  overflow: hidden;
  background: var(--lt-surface-sunken);
}
.find-field:focus-within {
  border-color: var(--lt-focus-ring);
}
/* What the field searches, in the well's own left end. It takes its width from the field rather than from the row, so adding it grew the bar by nothing: the field gave up the 7px it needed. The hairline down its right-hand side is what makes it read as part of the well rather than as another control beside it. */
.find-scope {
  flex: 0 0 auto;
  align-self: stretch;
  display: inline-flex;
  align-items: center;
  gap: var(--lt-space-2);
  margin-left: calc(var(--lt-space-8) * -1);
  padding: 0 var(--lt-space-8);
  border: 0;
  border-right: var(--lt-stroke-1) solid var(--lt-border);
  border-radius: 0;
  background: transparent;
  color: var(--lt-muted-foreground);
  font-family: inherit;
  font-size: var(--lt-text-11);
  white-space: nowrap;
}
.find-scope:hover {
  background: var(--lt-wash-hover);
  color: var(--lt-foreground);
}
.find-scope-caret {
  font-size: var(--lt-text-10);
}
/* 30px, so the field's own hairline brings it to the 32px the buttons beside it are: the field takes its height from what is typed into it. */
.find-input {
  flex: 1 1 auto;
  min-width: 0;
  height: 30px;
  padding: 0;
  border: 0;
  background: transparent;
  color: inherit;
  font-family: inherit;
  font-size: inherit;
}
.find-input:focus {
  outline: none;
}
/* "3 of 41", or why there is nothing: quieter than the query it describes. */
.find-count {
  flex: 0 0 auto;
  color: var(--lt-muted-foreground);
  font-size: var(--lt-text-11);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
.find-flags {
  display: flex;
  align-items: center;
  gap: var(--lt-space-2);
}
/* The three how-to-match toggles are their own glyphs — Aa, ab|, .* — because that is what every editor draws for them, and a picture of "regular expression" does not exist. Only the face here. The box is .icon-button's, which all of them carry: a height in this rule would beat it, both being one class deep and this one 4,650 lines later. */
.find-flag,
.find-step,
.find-action {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: var(--lt-stroke-1) solid transparent;
  border-radius: var(--lt-radius-sm);
  background: transparent;
  color: inherit;
  font-family: inherit;
  font-size: var(--lt-text-12);
}
/* Text, not masks: .icon-button sets a width as well as a min-width, and 32px clips `ab|`. */
.find-flag {
  width: auto;
  padding: 0 var(--lt-space-4);
}
/* Replace and All are words, and they carry the outline that says they act. */
.find-action {
  width: auto;
  padding: 0 var(--lt-space-10);
  border-color: var(--lt-border);
}
.find-flag:hover:not(:disabled),
.find-step:hover:not(:disabled),
.find-action:hover:not(:disabled) {
  background: var(--lt-wash-hover);
}
.find-flag[aria-pressed='true'],
.find-step[aria-pressed='true'] {
  border-color: var(--lt-border-strong);
  background: var(--lt-surface-sunken);
}
/* Under All files the document's own controls are disabled where they stand rather than taken out of the row, so switching scope changes what is pressable without moving anything the reader has learned the place of. */
.find-flag:disabled,
.find-step:disabled,
.find-action:disabled {
  color: var(--lt-muted-foreground);
  cursor: default;
}
.find-input:disabled {
  color: var(--lt-muted-foreground);
}
/* Next and previous are the same chevron, one of them turned over: two drawings of one arrow would be two files to keep in step. */
.find-step-back {
  transform: rotate(180deg);
}
/* The all-file answer, under the bar that asked for it. Its own scrollport, so a long list grows the bar to a ceiling and no further: the bar floats over the page it is searching, and one that ran to the bottom of the window would cover the reading it is for. The rows themselves are the pane's, drawn by library-search.js. */
.find-results {
  max-height: 320px;
  overflow-y: auto;
}
.find-bar .library-results {
  padding: 0;
}
/* At a phone's width the bar spans the page instead of floating in the corner, held off both edges by the same 8px. The reader's own breakpoint, so there is one number and not two. */
@media (max-width: 600px) {
  .find-bar {
    justify-self: stretch;
    max-width: none;
    margin-left: var(--lt-space-8);
  }
}
/* Every match, washed in the accent — the color a matched search hit already takes in the library pane. The one you are on is the primary, so stepping through is a moving mark rather than a wall of identical washes. Both are drawn with the CSS Custom Highlight API in the reading view (no DOM mutation, no reflow) and as Monaco decorations in the source view, which is why each name appears twice. */
::highlight(leaf-find-match),
.leaf-find-match {
  background-color: color-mix(in srgb, var(--lt-accent) 45%, transparent);
}
::highlight(leaf-find-current),
.leaf-find-current {
  background-color: color-mix(in srgb, var(--lt-primary) 45%, transparent);
}
/* Printing, which is also the Save as PDF every desktop print panel offers — the app's one route to a PDF of the page it is drawing. A browser prints the page as it is laid out, and this page is laid out to fill a window exactly once: the app surface is fixed and paint-contained, the reader carries its own scroller, and the window's overflow is hidden. Unprepared, that prints a single sheet holding the app's frame and whatever of the document happened to be on screen. These rules unwind those three, drop everything on the page that is a control rather than the document, and force the colors so the panel's own Background graphics box cannot take the theme away.

   Keyed on `.app-surface` and `body.leaf-app`, never on a bare `html`, `body` or `:root`: this whole file is what leaftext.com and empty.guru are handed too, and `scripts/check-page-frame.mjs` refuses a rule here that would take somebody else's page frame. Both sites draw their documents through these same classes, so a reader printing from one of them gets this printable page as well, which is wanted rather than a leak. */
/* The page as it is handed to paper. On a class rather than in `@media print`, because the page has to be able to measure the sheet it is about to ask for: the height a document comes to under these rules is nothing the app can work out from the screen by subtracting things, and every attempt to came out as blank paper under the last line. The class goes on for the measurement and for the render, and comes off after both — `leafHoldAppearance` owns it, and `beforeprint` puts it on for a browser's own print. */
/* No page-box rule here on purpose. A page margin written in CSS outranks the one the app sets when it renders the page itself, and the app sizes that page to the whole document so it comes out as one continuous page rather than a document chopped across sheets — a margin written here would be added to a height already decided and push the last inch onto a second sheet. */
/* The window's overflow, and the shadow band the app throws over the strip of window it is held off by. Paper has no window to be held off. The body also wears the theme's own page color: the sheet is sized off a measurement and rounds up to the hundredth of an inch, so a few pixels of it always outlive the layout — painted here they are the page, unpainted they are a white strip under the last line. */
body.leaf-paper.leaf-app {
  overflow: visible;
  background: var(--lt-markdown-background);
  print-color-adjust: exact;
  -webkit-print-color-adjust: exact;
}
body.leaf-paper.leaf-app::before {
  display: none;
}
/* The app becomes a box on the page instead of a rectangle pinned to the window: static so it takes the height of what it holds, uncontained so nothing inside is clipped to one screen, and unframed because the card edge and the rounded corner are the window's drawing rather than the document's. `print-color-adjust` is what keeps the theme — a print panel leaves Background graphics unticked by default, which drops every painted background and prints a dark theme as dark ink on white paper. */
body.leaf-paper .app-surface {
  position: static;
  contain: none;
  /* The render behind an exported picture and an exported PDF paints a fixed-attachment background as nothing at all unless the box holding it composites, so without this the dot grain is absent from both, top to bottom — every table header, tinted row, code block and outline comes out a flat wash. Measured in a running copy: `contain: layout`, `contain: paint`, `transform: translateZ(0)` and `background-attachment: scroll` each wrote a byte-identical picture, and this is the only one of the five that moves a pixel. It costs the print nothing — one page, the same sheet. */
  will-change: transform;
  inset: auto;
  height: auto;
  border: 0;
  border-radius: 0;
  print-color-adjust: exact;
  -webkit-print-color-adjust: exact;
}
/* The grid holding a rail, a minimap column and the gutters the page is inset by. With everything but the page hidden there is nothing left for it to place, and its own texture is the chrome's rather than the document's. */
body.leaf-paper .library-shell {
  display: block;
  height: auto;
  background: none;
}
/* The reader's own scroller is the second thing pinning the document to one screen: it is what holds five thousand pixels of document inside twelve hundred of window, so unwinding it is what makes the print more than one sheet. The top padding is room for a fixed app bar nothing draws here, and the left margin is the window frame the card was held off. Two classes deep so the closed-library margin, which is written that way, is the rule being answered. */
body.leaf-paper .library-shell .reader-shell {
  overflow: visible;
  height: auto;
  padding-top: 0;
  margin: 0;
  border: 0;
  border-radius: 0;
  print-color-adjust: exact;
  -webkit-print-color-adjust: exact;
}
/* The room the page keeps at its foot for the floating toolbar, which nothing draws here: left in, it is blank paper under the last line. The scroll origin goes too — it only cancels the app bar's room at the top of the scroller, and paper has neither. Left on, the page measures the document pulled up by it while the render lays the document out at its full height, so the sheet comes out a few pixels short and a short note prints a second, blank page. */
body.leaf-paper .document-body {
  margin-top: 0;
  padding-bottom: var(--reader-content-pad);
}
/* The lanes a wide picture or table break out of the text measure into are what shrank the paper. On screen a picture's lane sizes itself with `100cqi` and centers itself by sliding half a measure right and transforming back; the print render measures overflow on the untransformed box, so the slid lane hung past the sheet, the renderer shrank the whole page to fit that phantom width, and the shrunken page stopped a fifth short of the sheet's foot, unpainted white — the container query is also self-referential there, growing with the very overflow it causes. So on paper a lane is a plain block: as wide as the room the page wrote down when it measured the sheet, centered by margin arithmetic the render was measured computing exactly, with nothing slid and nothing transformed. The fallback is the text measure, for a page printed before any script has run. A table's lane already arrives untransformed, centered inside a bay for the same reason; here the bay stands down to the measure so the lane's own arithmetic is the one that runs. */
body.leaf-paper .document-body > .table-bay {
  width: 100%;
  margin-inline: 0;
}
body.leaf-paper .table-bay > .table-lane,
body.leaf-paper .document-body > p.image-lane {
  position: static;
  transform: none;
  width: var(--leaf-paper-lane, 100%);
  max-width: none;
  margin-left: calc((100% - var(--leaf-paper-lane, 100%)) / 2);
  margin-right: 0;
}
/* The exported page wears `leaf-paper` for ever — the one script it runs is the rail below, which never touches that class, so nothing there can raise it for a print and drop it after — and on a screen that froze every lane at the text measure. `leaf-web`, written only by `exported_page_document`, hands the lanes back the screen width above. Keyed on the medium because the class cannot come off: printing the exported page still gets the paper lane, which is what keeps the print from shrinking to fit a slid lane's phantom width. The table's bay comes back with it rather than the transform, so a published document wears the app's own lattice under its table headers instead of one tiled from a box that moves. */
@media screen {
  body.leaf-paper.leaf-web .document-body > .table-bay {
    width: max(100%, calc(100cqi - 2 * var(--reader-lane-inset)));
    margin-inline: calc((100% - max(100%, 100cqi - 2 * var(--reader-lane-inset))) / 2);
  }
  body.leaf-paper.leaf-web .table-bay > .table-lane {
    position: relative;
    transform: none;
    width: max-content;
    max-width: 100%;
    margin-inline: auto;
  }
  body.leaf-paper.leaf-web .document-body > p.image-lane {
    position: relative;
    transform: translateX(-50%);
    width: max-content;
    max-width: max(100%, calc(100cqi - 2 * var(--reader-lane-inset)));
    margin-left: 0;
  }
}
/* Where the exported page's rail stands. The rail itself is the block up at `.document-minimap` — same component, same width — and these are the rules that place it, which on this page nothing else can: the script appends the rail straight to the body, outside `.app-surface`, so every other placement rule in this file is keyed too deep to reach it. `leaf-web` is written only by `exported_page_document`, which is what keeps leaftext.com and empty.guru out of them; each of those places its own rail in its own stylesheet.

   Hidden is the default, and the default is also the print rule: the rail is fixed, and a fixed element repeats on every sheet. */
body.leaf-web .document-minimap {
  display: none;
}
/* One pixel above the width site/styles.css hides the rail below, held there by just check-minimap-breakpoint: pinned to the top right over the document, on the page's own color so the thumbnail reads against something. A phone has no room for it. */
@media screen and (min-width: 721px) {
  body.leaf-web .document-minimap {
    display: block;
    position: fixed;
    top: 0;
    right: 0;
    z-index: var(--lt-z-30);
    background: var(--lt-markdown-background);
  }
  body.leaf-web .document-minimap-track::before,
  body.leaf-web .document-minimap-track::after {
    background-color: var(--lt-markdown-background);
    background-image: none;
  }
  /* The app lays its clone inside a frame element carrying the scale; this script has no such frame and writes the scale onto the clone itself, so the origin it is scaled from has to be said here or the thumbnail shrinks toward the middle of the rail. */
  body.leaf-web .document-minimap-preview {
    transform-origin: 0 0;
  }
  /* The rail is this page's scroll affordance, so the native bar goes while one stands — and a page whose script never arrived keeps its bar, which is the whole point of asking whether a rail is there. Two branches for the reason the reader's pair above are two: in Chromium `scrollbar-width` anywhere on the element kills every ::-webkit-scrollbar rule for it. */
  body.leaf-web.has-minimap {
    scrollbar-width: none;
  }
  body.leaf-web.has-minimap::-webkit-scrollbar {
    width: 0;
  }
}
/* The lane is now a fixed-width box, so what sits in it says its own size again: a small picture keeps its own width and centers, a wide one fills the lane, and a table narrower than the lane centers rather than hugging the left edge. */
body.leaf-paper .document-body > p.image-lane {
  text-align: center;
}
body.leaf-paper .document-body > p.image-lane > img {
  width: auto;
  max-width: 100%;
}
body.leaf-paper .table-lane > table {
  margin-inline: auto;
}
/* The home list breaks out the same way and prints only through a browser's own print of the home screen: it needs the overflow gone, not the breakout kept. */
body.leaf-paper .home-list-grid {
  position: static;
  transform: none;
  max-width: 100%;
}
/* Everything on the page that is a control rather than the document, named one at a time. Not written as "whatever the reader does not hold": the reader holds controls too — a block's gutter, the toolbar a selection raises, a diagram's own corner and its opened stage — so a rule keeping the reader's children would print those onto the paper. The Previous and Next strip is here for the same reason: it is a way to somewhere else, which paper has none of. The first-run bubble is the one control that floats over the window rather than sitting in it, which is how it stayed off the first reading of this list. */
body.leaf-paper :is(.docs-pager,
.hint-bubble,
.app-bar,
.app-overflow-panel,
.reader-corner,
.library-pane,
.library-divider,
.filter-menu,
.reader-graph,
.reader-toolbar,
.find-bar,
.reader-edge-fade,
.reader-minimap,
.reader-loading,
.lt-backdrop,
.leaf-sheet,
.flow-sheet,
.confirm-dialog,
.context-menu,
.crumb-menu,
.rename-box,
.link-hover-tip,
.app-toast,
.block-gutter,
.block-gap-line,
.block-drag-ghost,
.selection-toolbar,
.mermaid-tools,
.diagram-overlay) {
  display: none;
}
/* A drawn diagram lets the browser skip its own paint while it is off screen, and a picture export is a screenshot of the page beyond the window — so every drawing below the window came out an empty block. The rail met the same skip and answers it the same way. Important, because the skip is written on the block itself. */
body.leaf-paper .document-body pre.mermaid {
  content-visibility: visible !important;
}
/* The waiting ring is a control as much as the toolbar is: a box still waiting when the sheet is rendered prints its stalled spinner. The three conditions are the spinner rule's own, and the paper class on the body is what outweighs it, whatever order the stylesheet's parts are joined in. */
body.leaf-paper .document-body pre.mermaid:not([data-processed="true"]):not([data-mermaid-render="failed"]):not([data-diagram-wait="far"])::after {
  content: none;
}
/* A diagram on a sheet of its own, which is the same render with one thing left standing. The container holds a copy of the drawing made for the export — never the one on screen, which carries whatever it has been zoomed and dragged to, and in the editor its selection ring and handles as well — and it is out of the layout until an export fills it, so a reader never sees it. */
.diagram-print {
  display: none;
}
/* Worn beside `leaf-paper`, never instead of it: those rules are what make the surface static, uncontained and as tall as what it holds, and they are what the size was measured under. This leaves the container the only thing in the surface, so the sheet measures to the drawing. */
body.leaf-paper-diagram .diagram-print {
  display: block;
}
body.leaf-paper-diagram .app-surface > :not(.diagram-print) {
  display: none;
}
/* A picture on a sheet of its own, the same trick with a picture in the box instead of a drawing. The copy is sized to the picture's own pixels, so the sheet the page measures is the picture at 1:1 rather than whatever the reader's lane had squeezed it to. */
.picture-print {
  display: none;
}
body.leaf-paper-picture .picture-print {
  display: block;
}
body.leaf-paper-picture .app-surface > :not(.picture-print) {
  display: none;
}
.picture-print img {
  display: block;
}
