diff --git a/app/__init__.py b/app/__init__.py
index 6a82ff8..6456156 100644
--- a/app/__init__.py
+++ b/app/__init__.py
@@ -37,8 +37,12 @@ def create_app(config_name="development"):
# Register template filters
from app.core.template_filters import bp as filters_bp
+ from app.core.template_filters import markdown_filter
app.register_blueprint(filters_bp)
+
+ # Register the markdown filter directly
+ app.jinja_env.filters['markdown'] = markdown_filter
# Create database tables without seeding any data
with app.app_context():
diff --git a/app/core/template_filters.py b/app/core/template_filters.py
index 417953a..00de02b 100644
--- a/app/core/template_filters.py
+++ b/app/core/template_filters.py
@@ -7,35 +7,75 @@ bp = Blueprint("filters", __name__)
def github_style_admonition(text):
- """Transform GitHub-style alerts (> [!NOTE], etc.) to custom HTML"""
- patterns = {
- r"> \[!NOTE\](.*?)(?:\n\n|\Z)": '
',
- r"> \[!TIP\](.*?)(?:\n\n|\Z)": '',
- r"> \[!IMPORTANT\](.*?)(?:\n\n|\Z)": '',
- r"> \[!WARNING\](.*?)(?:\n\n|\Z)": '',
- r"> \[!CAUTION\](.*?)(?:\n\n|\Z)": '',
- }
-
- for pattern, replacement in patterns.items():
- text = re.sub(pattern, replacement, text, flags=re.DOTALL)
-
- return text
+ """Transform GitHub-style alerts (> [!NOTE], etc.) to custom HTML with GitHub styling"""
+ # Process the text line by line for better control
+ lines = text.split('\n')
+ result_lines = []
+ i = 0
+
+ while i < len(lines):
+ line = lines[i]
+
+ # Check if this line starts a GitHub-style alert
+ alert_match = re.match(r'>\s*\[!(NOTE|TIP|IMPORTANT|WARNING|CAUTION)\]\s*(.*)', line)
+
+ if alert_match:
+ # Found an alert start
+ alert_type = alert_match.group(1).lower()
+ first_line_content = alert_match.group(2).strip()
+
+ # Collect all continuation lines (those starting with >)
+ alert_content = [first_line_content] if first_line_content else []
+ j = i + 1
+
+ while j < len(lines) and lines[j].strip().startswith('>'):
+ # Remove the > and one optional space after it
+ content = re.sub(r'^>\s?', '', lines[j].strip())
+ alert_content.append(content)
+ j += 1
+
+ # Create the HTML for the alert with proper styling
+ alert_html = f'\n'
+ alert_html += f'
{alert_type.capitalize()}
\n'
+
+ # Join the content with line breaks
+ if alert_content:
+ alert_html += '\n'.join(alert_content)
+
+ alert_html += '\n
'
+
+ # Add the processed alert HTML
+ result_lines.append(alert_html)
+
+ # Move past all the lines we've processed
+ i = j
+ else:
+ # Not an alert line, add it unchanged
+ result_lines.append(line)
+ i += 1
+
+ return '\n'.join(result_lines)
@bp.app_template_filter("markdown")
def markdown_filter(text):
- """Convert markdown text to HTML with support for GitHub-style features"""
- if text:
- # Pre-process GitHub-style alerts
- text = github_style_admonition(text)
-
- # Convert to HTML with regular markdown
- html = md_package.markdown(
- text, extensions=["tables", "fenced_code", "codehilite", "nl2br"]
- )
-
- return html
- return ""
+ """Convert markdown text to HTML with proper GitHub styling for all elements"""
+ if not text:
+ return ""
+
+ # First process GitHub-style alerts
+ processed_text = github_style_admonition(text)
+
+ # Convert to HTML with standard markdown
+ html = md_package.markdown(
+ processed_text,
+ extensions=["tables", "fenced_code", "codehilite", "nl2br", "sane_lists", "smarty"]
+ )
+
+ # Wrap in GitHub's markdown reading view class for consistent styling
+ html = f'{html}
'
+
+ return html
@bp.app_template_filter("ip_network")
diff --git a/app/static/css/custom.css b/app/static/css/custom.css
index a561ff9..c1eedf6 100644
--- a/app/static/css/custom.css
+++ b/app/static/css/custom.css
@@ -173,4 +173,299 @@
[data-bs-theme="light"] .documentation-wrapper {
border-top: 1px solid rgba(0, 0, 0, 0.1);
+}
+
+/* Markdown admonition styling */
+.markdown-content .admonition {
+ padding: 1rem;
+ margin: 1.5rem 0;
+ border-radius: 0.375rem;
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
+}
+
+.markdown-content .admonition-title {
+ font-weight: 600;
+ margin: -1rem -1rem 0.8rem -1rem;
+ padding: 0.5rem 1rem;
+ border-top-left-radius: 0.375rem;
+ border-top-right-radius: 0.375rem;
+ display: flex;
+ align-items: center;
+}
+
+.markdown-content .admonition-title::before {
+ margin-right: 0.5rem;
+ font-family: "tabler-icons";
+ font-weight: normal;
+}
+
+/* Note styling */
+.markdown-content .admonition.note {
+ background-color: rgba(66, 153, 225, 0.1);
+ border-left: 4px solid #4299e1;
+}
+
+.markdown-content .admonition.note .admonition-title {
+ background-color: rgba(66, 153, 225, 0.15);
+ color: #2b6cb0;
+}
+
+.markdown-content .admonition.note .admonition-title::before {
+ content: "\ea67";
+ /* ti-info-circle */
+}
+
+/* Tip styling */
+.markdown-content .admonition.tip {
+ background-color: rgba(72, 187, 120, 0.1);
+ border-left: 4px solid #48bb78;
+}
+
+.markdown-content .admonition.tip .admonition-title {
+ background-color: rgba(72, 187, 120, 0.15);
+ color: #2f855a;
+}
+
+.markdown-content .admonition.tip .admonition-title::before {
+ content: "\ea4a";
+ /* ti-bulb */
+}
+
+/* Important styling */
+.markdown-content .admonition.important {
+ background-color: rgba(118, 106, 240, 0.1);
+ border-left: 4px solid #766af0;
+}
+
+.markdown-content .admonition.important .admonition-title {
+ background-color: rgba(118, 106, 240, 0.15);
+ color: #5046e4;
+}
+
+.markdown-content .admonition.important .admonition-title::before {
+ content: "\eaca";
+ /* ti-star */
+}
+
+/* Warning styling */
+.markdown-content .admonition.warning {
+ background-color: rgba(246, 173, 85, 0.1);
+ border-left: 4px solid #f6ad55;
+}
+
+.markdown-content .admonition.warning .admonition-title {
+ background-color: rgba(246, 173, 85, 0.15);
+ color: #c05621;
+}
+
+.markdown-content .admonition.warning .admonition-title::before {
+ content: "\eb4f";
+ /* ti-alert-triangle */
+}
+
+/* Danger/Caution styling */
+.markdown-content .admonition.danger {
+ background-color: rgba(245, 101, 101, 0.1);
+ border-left: 4px solid #f56565;
+}
+
+.markdown-content .admonition.danger .admonition-title {
+ background-color: rgba(245, 101, 101, 0.15);
+ color: #c53030;
+}
+
+.markdown-content .admonition.danger .admonition-title::before {
+ content: "\eb50";
+ /* ti-alert-octagon */
+}
+
+/* Dark mode adjustments */
+[data-bs-theme="dark"] .markdown-content .admonition.note {
+ background-color: rgba(56, 127, 187, 0.15);
+}
+
+[data-bs-theme="dark"] .markdown-content .admonition.tip {
+ background-color: rgba(56, 161, 105, 0.15);
+}
+
+[data-bs-theme="dark"] .markdown-content .admonition.important {
+ background-color: rgba(102, 92, 209, 0.15);
+}
+
+[data-bs-theme="dark"] .markdown-content .admonition.warning {
+ background-color: rgba(221, 155, 76, 0.15);
+}
+
+[data-bs-theme="dark"] .markdown-content .admonition.danger {
+ background-color: rgba(224, 92, 92, 0.15);
+}
+
+/* Make sure the markdown content text color is visible */
+.markdown-content {
+ color: var(--tblr-body-color);
+}
+
+[data-bs-theme="dark"] .markdown-content {
+ color: #e1e3e6;
+}
+
+/* Fix the app name in the expanded accordion */
+.app-card-header .app-link {
+ font-weight: 600;
+ text-decoration: none;
+}
+
+/* GitHub-style markdown alerts */
+.markdown-alert {
+ padding: 0.85rem 1rem;
+ margin: 1rem 0;
+ border-radius: 0.375rem;
+ border-left-width: 4px;
+ border-left-style: solid;
+ color: inherit;
+}
+
+.markdown-alert-title {
+ font-weight: 600;
+ margin-top: 0;
+ margin-bottom: 0.5rem;
+ font-size: 1rem;
+ display: flex;
+ align-items: center;
+}
+
+.markdown-alert-title::before {
+ margin-right: 0.5rem;
+ font-family: "tabler-icons";
+ font-weight: normal;
+}
+
+/* Individual alert types */
+/* Note styling */
+.markdown-alert-note {
+ background-color: rgba(66, 153, 225, 0.1);
+ border-left-color: #4299e1;
+}
+
+.markdown-alert-note .markdown-alert-title {
+ color: #2b6cb0;
+}
+
+.markdown-alert-note .markdown-alert-title::before {
+ content: "\ea67";
+ /* ti-info-circle */
+}
+
+/* Tip styling */
+.markdown-alert-tip {
+ background-color: rgba(72, 187, 120, 0.1);
+ border-left-color: #48bb78;
+}
+
+.markdown-alert-tip .markdown-alert-title {
+ color: #2f855a;
+}
+
+.markdown-alert-tip .markdown-alert-title::before {
+ content: "\ea4a";
+ /* ti-bulb */
+}
+
+/* Important styling */
+.markdown-alert-important {
+ background-color: rgba(118, 106, 240, 0.1);
+ border-left-color: #766af0;
+}
+
+.markdown-alert-important .markdown-alert-title {
+ color: #5046e4;
+}
+
+.markdown-alert-important .markdown-alert-title::before {
+ content: "\eaca";
+ /* ti-star */
+}
+
+/* Warning styling */
+.markdown-alert-warning {
+ background-color: rgba(246, 173, 85, 0.1);
+ border-left-color: #f6ad55;
+}
+
+.markdown-alert-warning .markdown-alert-title {
+ color: #c05621;
+}
+
+.markdown-alert-warning .markdown-alert-title::before {
+ content: "\eb4f";
+ /* ti-alert-triangle */
+}
+
+/* Caution styling */
+.markdown-alert-caution {
+ background-color: rgba(245, 101, 101, 0.1);
+ border-left-color: #f56565;
+}
+
+.markdown-alert-caution .markdown-alert-title {
+ color: #c53030;
+}
+
+.markdown-alert-caution .markdown-alert-title::before {
+ content: "\eb50";
+ /* ti-alert-octagon */
+}
+
+/* Dark mode adjustments */
+[data-bs-theme="dark"] .markdown-alert-note {
+ background-color: rgba(56, 127, 187, 0.15);
+}
+
+[data-bs-theme="dark"] .markdown-alert-tip {
+ background-color: rgba(56, 161, 105, 0.15);
+}
+
+[data-bs-theme="dark"] .markdown-alert-important {
+ background-color: rgba(102, 92, 209, 0.15);
+}
+
+[data-bs-theme="dark"] .markdown-alert-warning {
+ background-color: rgba(221, 155, 76, 0.15);
+}
+
+[data-bs-theme="dark"] .markdown-alert-caution {
+ background-color: rgba(224, 92, 92, 0.15);
+}
+
+/* Fix content inside alerts */
+.markdown-alert p {
+ margin-bottom: 0.5rem;
+}
+
+.markdown-alert p:last-child {
+ margin-bottom: 0;
+}
+
+/* Ensure proper spacing for code in alerts */
+.markdown-alert code {
+ background-color: rgba(0, 0, 0, 0.07);
+ border-radius: 3px;
+ padding: 0.2em 0.4em;
+ font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;
+}
+
+[data-bs-theme="dark"] .markdown-alert code {
+ background-color: rgba(255, 255, 255, 0.1);
+}
+
+/* Fix port display in accordion headers */
+.accordion-button .badge {
+ font-size: 0.7rem;
+ padding: 0.25em 0.5em;
+ margin-right: 0.25rem;
+}
+
+/* Add compatibility classes for GitHub markdown */
+.markdown-content .markdown-reading-view {
+ width: 100%;
}
\ No newline at end of file
diff --git a/app/static/css/github-markdown-reading-view.css b/app/static/css/github-markdown-reading-view.css
new file mode 100644
index 0000000..b7e49c7
--- /dev/null
+++ b/app/static/css/github-markdown-reading-view.css
@@ -0,0 +1,1258 @@
+.markdown-reading-view {
+ --base-size-4: 0.25rem;
+ --base-size-8: 0.5rem;
+ --base-size-16: 1rem;
+ --base-size-24: 1.5rem;
+ --base-size-40: 2.5rem;
+ --base-text-weight-normal: 400;
+ --base-text-weight-medium: 500;
+ --base-text-weight-semibold: 600;
+ --fontStack-monospace:
+ ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
+ monospace;
+ --fgColor-accent: Highlight;
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .markdown-reading-view,
+ [data-theme="dark"] {
+ /* dark */
+ color-scheme: dark;
+ --focus-outlineColor: #1f6feb;
+ --fgColor-default: #f0f6fc;
+ --fgColor-muted: #9198a1;
+ --fgColor-accent: #4493f8;
+ --fgColor-success: #3fb950;
+ --fgColor-attention: #d29922;
+ --fgColor-danger: #f85149;
+ --fgColor-done: #ab7df8;
+ --bgColor-default: #0d1117;
+ --bgColor-muted: #151b23;
+ --bgColor-neutral-muted: #656c7633;
+ --bgColor-attention-muted: #bb800926;
+ --borderColor-default: #3d444d;
+ --borderColor-muted: #3d444db3;
+ --borderColor-neutral-muted: #3d444db3;
+ --borderColor-accent-emphasis: #1f6feb;
+ --borderColor-success-emphasis: #238636;
+ --borderColor-attention-emphasis: #9e6a03;
+ --borderColor-danger-emphasis: #da3633;
+ --borderColor-done-emphasis: #8957e5;
+ --color-prettylights-syntax-comment: #9198a1;
+ --color-prettylights-syntax-constant: #79c0ff;
+ --color-prettylights-syntax-constant-other-reference-link: #a5d6ff;
+ --color-prettylights-syntax-entity: #d2a8ff;
+ --color-prettylights-syntax-storage-modifier-import: #f0f6fc;
+ --color-prettylights-syntax-entity-tag: #7ee787;
+ --color-prettylights-syntax-keyword: #ff7b72;
+ --color-prettylights-syntax-string: #a5d6ff;
+ --color-prettylights-syntax-variable: #ffa657;
+ --color-prettylights-syntax-brackethighlighter-unmatched: #f85149;
+ --color-prettylights-syntax-brackethighlighter-angle: #9198a1;
+ --color-prettylights-syntax-invalid-illegal-text: #f0f6fc;
+ --color-prettylights-syntax-invalid-illegal-bg: #8e1519;
+ --color-prettylights-syntax-carriage-return-text: #f0f6fc;
+ --color-prettylights-syntax-carriage-return-bg: #b62324;
+ --color-prettylights-syntax-string-regexp: #7ee787;
+ --color-prettylights-syntax-markup-list: #f2cc60;
+ --color-prettylights-syntax-markup-heading: #1f6feb;
+ --color-prettylights-syntax-markup-italic: #f0f6fc;
+ --color-prettylights-syntax-markup-bold: #f0f6fc;
+ --color-prettylights-syntax-markup-deleted-text: #ffdcd7;
+ --color-prettylights-syntax-markup-deleted-bg: #67060c;
+ --color-prettylights-syntax-markup-inserted-text: #aff5b4;
+ --color-prettylights-syntax-markup-inserted-bg: #033a16;
+ --color-prettylights-syntax-markup-changed-text: #ffdfb6;
+ --color-prettylights-syntax-markup-changed-bg: #5a1e02;
+ --color-prettylights-syntax-markup-ignored-text: #f0f6fc;
+ --color-prettylights-syntax-markup-ignored-bg: #1158c7;
+ --color-prettylights-syntax-meta-diff-range: #d2a8ff;
+ --color-prettylights-syntax-sublimelinter-gutter-mark: #3d444d;
+ }
+}
+
+@media (prefers-color-scheme: light) {
+
+ .markdown-reading-view,
+ [data-theme="light"] {
+ /* light */
+ color-scheme: light;
+ --focus-outlineColor: #0969da;
+ --fgColor-default: #1f2328;
+ --fgColor-muted: #59636e;
+ --fgColor-accent: #0969da;
+ --fgColor-success: #1a7f37;
+ --fgColor-attention: #9a6700;
+ --fgColor-danger: #d1242f;
+ --fgColor-done: #8250df;
+ --bgColor-default: #ffffff;
+ --bgColor-muted: #f6f8fa;
+ --bgColor-neutral-muted: #818b981f;
+ --bgColor-attention-muted: #fff8c5;
+ --borderColor-default: #d1d9e0;
+ --borderColor-muted: #d1d9e0b3;
+ --borderColor-neutral-muted: #d1d9e0b3;
+ --borderColor-accent-emphasis: #0969da;
+ --borderColor-success-emphasis: #1a7f37;
+ --borderColor-attention-emphasis: #9a6700;
+ --borderColor-danger-emphasis: #cf222e;
+ --borderColor-done-emphasis: #8250df;
+ --color-prettylights-syntax-comment: #59636e;
+ --color-prettylights-syntax-constant: #0550ae;
+ --color-prettylights-syntax-constant-other-reference-link: #0a3069;
+ --color-prettylights-syntax-entity: #6639ba;
+ --color-prettylights-syntax-storage-modifier-import: #1f2328;
+ --color-prettylights-syntax-entity-tag: #0550ae;
+ --color-prettylights-syntax-keyword: #cf222e;
+ --color-prettylights-syntax-string: #0a3069;
+ --color-prettylights-syntax-variable: #953800;
+ --color-prettylights-syntax-brackethighlighter-unmatched: #82071e;
+ --color-prettylights-syntax-brackethighlighter-angle: #59636e;
+ --color-prettylights-syntax-invalid-illegal-text: #f6f8fa;
+ --color-prettylights-syntax-invalid-illegal-bg: #82071e;
+ --color-prettylights-syntax-carriage-return-text: #f6f8fa;
+ --color-prettylights-syntax-carriage-return-bg: #cf222e;
+ --color-prettylights-syntax-string-regexp: #116329;
+ --color-prettylights-syntax-markup-list: #3b2300;
+ --color-prettylights-syntax-markup-heading: #0550ae;
+ --color-prettylights-syntax-markup-italic: #1f2328;
+ --color-prettylights-syntax-markup-bold: #1f2328;
+ --color-prettylights-syntax-markup-deleted-text: #82071e;
+ --color-prettylights-syntax-markup-deleted-bg: #ffebe9;
+ --color-prettylights-syntax-markup-inserted-text: #116329;
+ --color-prettylights-syntax-markup-inserted-bg: #dafbe1;
+ --color-prettylights-syntax-markup-changed-text: #953800;
+ --color-prettylights-syntax-markup-changed-bg: #ffd8b5;
+ --color-prettylights-syntax-markup-ignored-text: #d1d9e0;
+ --color-prettylights-syntax-markup-ignored-bg: #0550ae;
+ --color-prettylights-syntax-meta-diff-range: #8250df;
+ --color-prettylights-syntax-sublimelinter-gutter-mark: #818b98;
+ }
+}
+
+.markdown-reading-view {
+ -ms-text-size-adjust: 100%;
+ -webkit-text-size-adjust: 100%;
+ margin: 0;
+ color: var(--fgColor-default);
+ background-color: var(--bgColor-default);
+ font-family:
+ -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica,
+ Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
+ font-size: 16px;
+ line-height: 1.5;
+ word-wrap: break-word;
+}
+
+.markdown-reading-view .octicon {
+ display: inline-block;
+ fill: currentColor;
+ vertical-align: text-bottom;
+}
+
+.markdown-reading-view h1:hover .anchor .octicon-link:before,
+.markdown-reading-view h2:hover .anchor .octicon-link:before,
+.markdown-reading-view h3:hover .anchor .octicon-link:before,
+.markdown-reading-view h4:hover .anchor .octicon-link:before,
+.markdown-reading-view h5:hover .anchor .octicon-link:before,
+.markdown-reading-view h6:hover .anchor .octicon-link:before {
+ width: 16px;
+ height: 16px;
+ content: " ";
+ display: inline-block;
+ background-color: currentColor;
+ -webkit-mask-image: url("data:image/svg+xml, ");
+ mask-image: url("data:image/svg+xml, ");
+}
+
+.markdown-reading-view details,
+.markdown-reading-view figcaption,
+.markdown-reading-view figure {
+ display: block;
+}
+
+.markdown-reading-view summary {
+ display: list-item;
+}
+
+.markdown-reading-view [hidden] {
+ display: none !important;
+}
+
+.markdown-reading-view a {
+ background-color: transparent;
+ color: var(--fgColor-accent);
+ text-decoration: none;
+}
+
+.markdown-reading-view abbr[title] {
+ border-bottom: none;
+ -webkit-text-decoration: underline dotted;
+ text-decoration: underline dotted;
+}
+
+.markdown-reading-view b,
+.markdown-reading-view strong {
+ font-weight: var(--base-text-weight-semibold, 600);
+}
+
+.markdown-reading-view dfn {
+ font-style: italic;
+}
+
+.markdown-reading-view h1 {
+ margin: 0.67em 0;
+ font-weight: var(--base-text-weight-semibold, 600);
+ padding-bottom: 0.3em;
+ font-size: 2em;
+ border-bottom: 1px solid var(--borderColor-muted);
+}
+
+.markdown-reading-view mark {
+ background-color: var(--bgColor-attention-muted);
+ color: var(--fgColor-default);
+}
+
+.markdown-reading-view small {
+ font-size: 90%;
+}
+
+.markdown-reading-view sub,
+.markdown-reading-view sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+.markdown-reading-view sub {
+ bottom: -0.25em;
+}
+
+.markdown-reading-view sup {
+ top: -0.5em;
+}
+
+.markdown-reading-view img {
+ border-style: none;
+ max-width: 100%;
+ box-sizing: content-box;
+}
+
+.markdown-reading-view code,
+.markdown-reading-view kbd,
+.markdown-reading-view pre,
+.markdown-reading-view samp {
+ font-family: monospace;
+ font-size: 1em;
+}
+
+.markdown-reading-view figure {
+ margin: 1em var(--base-size-40);
+}
+
+.markdown-reading-view hr {
+ box-sizing: content-box;
+ overflow: hidden;
+ background: transparent;
+ border-bottom: 1px solid var(--borderColor-muted);
+ height: 0.25em;
+ padding: 0;
+ margin: var(--base-size-24) 0;
+ background-color: var(--borderColor-default);
+ border: 0;
+}
+
+.markdown-reading-view input {
+ font: inherit;
+ margin: 0;
+ overflow: visible;
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+}
+
+.markdown-reading-view [type="button"],
+.markdown-reading-view [type="reset"],
+.markdown-reading-view [type="submit"] {
+ -webkit-appearance: button;
+ appearance: button;
+}
+
+.markdown-reading-view [type="checkbox"],
+.markdown-reading-view [type="radio"] {
+ box-sizing: border-box;
+ padding: 0;
+}
+
+.markdown-reading-view [type="number"]::-webkit-inner-spin-button,
+.markdown-reading-view [type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+.markdown-reading-view [type="search"]::-webkit-search-cancel-button,
+.markdown-reading-view [type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+ appearance: none;
+}
+
+.markdown-reading-view ::-webkit-input-placeholder {
+ color: inherit;
+ opacity: 0.54;
+}
+
+.markdown-reading-view ::-webkit-file-upload-button {
+ -webkit-appearance: button;
+ appearance: button;
+ font: inherit;
+}
+
+.markdown-reading-view a:hover {
+ text-decoration: underline;
+}
+
+.markdown-reading-view ::placeholder {
+ color: var(--fgColor-muted);
+ opacity: 1;
+}
+
+.markdown-reading-view hr::before {
+ display: table;
+ content: "";
+}
+
+.markdown-reading-view hr::after {
+ display: table;
+ clear: both;
+ content: "";
+}
+
+.markdown-reading-view table {
+ border-spacing: 0;
+ border-collapse: collapse;
+ display: block;
+ width: max-content;
+ max-width: 100%;
+ overflow: auto;
+ font-variant: tabular-nums;
+}
+
+.markdown-reading-view td,
+.markdown-reading-view th {
+ padding: 0;
+}
+
+.markdown-reading-view details summary {
+ cursor: pointer;
+}
+
+.markdown-reading-view a:focus,
+.markdown-reading-view [role="button"]:focus,
+.markdown-reading-view input[type="radio"]:focus,
+.markdown-reading-view input[type="checkbox"]:focus {
+ outline: 2px solid var(--focus-outlineColor);
+ outline-offset: -2px;
+ box-shadow: none;
+}
+
+.markdown-reading-view a:focus:not(:focus-visible),
+.markdown-reading-view [role="button"]:focus:not(:focus-visible),
+.markdown-reading-view input[type="radio"]:focus:not(:focus-visible),
+.markdown-reading-view input[type="checkbox"]:focus:not(:focus-visible) {
+ outline: solid 1px transparent;
+}
+
+.markdown-reading-view a:focus-visible,
+.markdown-reading-view [role="button"]:focus-visible,
+.markdown-reading-view input[type="radio"]:focus-visible,
+.markdown-reading-view input[type="checkbox"]:focus-visible {
+ outline: 2px solid var(--focus-outlineColor);
+ outline-offset: -2px;
+ box-shadow: none;
+}
+
+.markdown-reading-view a:not([class]):focus,
+.markdown-reading-view a:not([class]):focus-visible,
+.markdown-reading-view input[type="radio"]:focus,
+.markdown-reading-view input[type="radio"]:focus-visible,
+.markdown-reading-view input[type="checkbox"]:focus,
+.markdown-reading-view input[type="checkbox"]:focus-visible {
+ outline-offset: 0;
+}
+
+.markdown-reading-view kbd {
+ display: inline-block;
+ padding: var(--base-size-4);
+ font: 11px var(--fontStack-monospace,
+ ui-monospace,
+ SFMono-Regular,
+ SF Mono,
+ Menlo,
+ Consolas,
+ Liberation Mono,
+ monospace);
+ line-height: 10px;
+ color: var(--fgColor-default);
+ vertical-align: middle;
+ background-color: var(--bgColor-muted);
+ border: solid 1px var(--borderColor-neutral-muted);
+ border-bottom-color: var(--borderColor-neutral-muted);
+ border-radius: 6px;
+ box-shadow: inset 0 -1px 0 var(--borderColor-neutral-muted);
+}
+
+.markdown-reading-view h1,
+.markdown-reading-view h2,
+.markdown-reading-view h3,
+.markdown-reading-view h4,
+.markdown-reading-view h5,
+.markdown-reading-view h6 {
+ margin-top: var(--base-size-24);
+ margin-bottom: var(--base-size-16);
+ font-weight: var(--base-text-weight-semibold, 600);
+ line-height: 1.25;
+}
+
+.markdown-reading-view h2 {
+ font-weight: var(--base-text-weight-semibold, 600);
+ padding-bottom: 0.3em;
+ font-size: 1.5em;
+ border-bottom: 1px solid var(--borderColor-muted);
+}
+
+.markdown-reading-view h3 {
+ font-weight: var(--base-text-weight-semibold, 600);
+ font-size: 1.25em;
+}
+
+.markdown-reading-view h4 {
+ font-weight: var(--base-text-weight-semibold, 600);
+ font-size: 1em;
+}
+
+.markdown-reading-view h5 {
+ font-weight: var(--base-text-weight-semibold, 600);
+ font-size: 0.875em;
+}
+
+.markdown-reading-view h6 {
+ font-weight: var(--base-text-weight-semibold, 600);
+ font-size: 0.85em;
+ color: var(--fgColor-muted);
+}
+
+.markdown-reading-view p {
+ margin-top: 0;
+ margin-bottom: 10px;
+}
+
+.markdown-reading-view blockquote {
+ margin: 0;
+ padding: 0 1em;
+ color: var(--fgColor-muted);
+ border-left: 0.25em solid var(--borderColor-default);
+}
+
+.markdown-reading-view ul,
+.markdown-reading-view ol {
+ margin-top: 0;
+ margin-bottom: 0;
+ padding-left: 2em;
+}
+
+.markdown-reading-view ol ol,
+.markdown-reading-view ul ol {
+ list-style-type: lower-roman;
+}
+
+.markdown-reading-view ul ul ol,
+.markdown-reading-view ul ol ol,
+.markdown-reading-view ol ul ol,
+.markdown-reading-view ol ol ol {
+ list-style-type: lower-alpha;
+}
+
+.markdown-reading-view dd {
+ margin-left: 0;
+}
+
+.markdown-reading-view tt,
+.markdown-reading-view code,
+.markdown-reading-view samp {
+ font-family: var(--fontStack-monospace,
+ ui-monospace,
+ SFMono-Regular,
+ SF Mono,
+ Menlo,
+ Consolas,
+ Liberation Mono,
+ monospace);
+ font-size: 12px;
+}
+
+.markdown-reading-view pre {
+ margin-top: 0;
+ margin-bottom: 0;
+ font-family: var(--fontStack-monospace,
+ ui-monospace,
+ SFMono-Regular,
+ SF Mono,
+ Menlo,
+ Consolas,
+ Liberation Mono,
+ monospace);
+ font-size: 12px;
+ word-wrap: normal;
+}
+
+.markdown-reading-view .octicon {
+ display: inline-block;
+ overflow: visible !important;
+ vertical-align: text-bottom;
+ fill: currentColor;
+}
+
+.markdown-reading-view input::-webkit-outer-spin-button,
+.markdown-reading-view input::-webkit-inner-spin-button {
+ margin: 0;
+ appearance: none;
+}
+
+.markdown-reading-view .mr-2 {
+ margin-right: var(--base-size-8, 8px) !important;
+}
+
+.markdown-reading-view::before {
+ display: table;
+ content: "";
+}
+
+.markdown-reading-view::after {
+ display: table;
+ clear: both;
+ content: "";
+}
+
+.markdown-reading-view>*:first-child {
+ margin-top: 0 !important;
+}
+
+.markdown-reading-view>*:last-child {
+ margin-bottom: 0 !important;
+}
+
+.markdown-reading-view a:not([href]) {
+ color: inherit;
+ text-decoration: none;
+}
+
+.markdown-reading-view .absent {
+ color: var(--fgColor-danger);
+}
+
+.markdown-reading-view .anchor {
+ float: left;
+ padding-right: var(--base-size-4);
+ margin-left: -20px;
+ line-height: 1;
+}
+
+.markdown-reading-view .anchor:focus {
+ outline: none;
+}
+
+.markdown-reading-view p,
+.markdown-reading-view blockquote,
+.markdown-reading-view ul,
+.markdown-reading-view ol,
+.markdown-reading-view dl,
+.markdown-reading-view table,
+.markdown-reading-view pre,
+.markdown-reading-view details {
+ margin-top: 0;
+ margin-bottom: var(--base-size-16);
+}
+
+.markdown-reading-view blockquote> :first-child {
+ margin-top: 0;
+}
+
+.markdown-reading-view blockquote> :last-child {
+ margin-bottom: 0;
+}
+
+.markdown-reading-view h1 .octicon-link,
+.markdown-reading-view h2 .octicon-link,
+.markdown-reading-view h3 .octicon-link,
+.markdown-reading-view h4 .octicon-link,
+.markdown-reading-view h5 .octicon-link,
+.markdown-reading-view h6 .octicon-link {
+ color: var(--fgColor-default);
+ vertical-align: middle;
+ visibility: hidden;
+}
+
+.markdown-reading-view h1:hover .anchor,
+.markdown-reading-view h2:hover .anchor,
+.markdown-reading-view h3:hover .anchor,
+.markdown-reading-view h4:hover .anchor,
+.markdown-reading-view h5:hover .anchor,
+.markdown-reading-view h6:hover .anchor {
+ text-decoration: none;
+}
+
+.markdown-reading-view h1:hover .anchor .octicon-link,
+.markdown-reading-view h2:hover .anchor .octicon-link,
+.markdown-reading-view h3:hover .anchor .octicon-link,
+.markdown-reading-view h4:hover .anchor .octicon-link,
+.markdown-reading-view h5:hover .anchor .octicon-link,
+.markdown-reading-view h6:hover .anchor .octicon-link {
+ visibility: visible;
+}
+
+.markdown-reading-view h1 tt,
+.markdown-reading-view h1 code,
+.markdown-reading-view h2 tt,
+.markdown-reading-view h2 code,
+.markdown-reading-view h3 tt,
+.markdown-reading-view h3 code,
+.markdown-reading-view h4 tt,
+.markdown-reading-view h4 code,
+.markdown-reading-view h5 tt,
+.markdown-reading-view h5 code,
+.markdown-reading-view h6 tt,
+.markdown-reading-view h6 code {
+ padding: 0 0.2em;
+ font-size: inherit;
+}
+
+.markdown-reading-view summary h1,
+.markdown-reading-view summary h2,
+.markdown-reading-view summary h3,
+.markdown-reading-view summary h4,
+.markdown-reading-view summary h5,
+.markdown-reading-view summary h6 {
+ display: inline-block;
+}
+
+.markdown-reading-view summary h1 .anchor,
+.markdown-reading-view summary h2 .anchor,
+.markdown-reading-view summary h3 .anchor,
+.markdown-reading-view summary h4 .anchor,
+.markdown-reading-view summary h5 .anchor,
+.markdown-reading-view summary h6 .anchor {
+ margin-left: -40px;
+}
+
+.markdown-reading-view summary h1,
+.markdown-reading-view summary h2 {
+ padding-bottom: 0;
+ border-bottom: 0;
+}
+
+.markdown-reading-view ul.no-list,
+.markdown-reading-view ol.no-list {
+ padding: 0;
+ list-style-type: none;
+}
+
+.markdown-reading-view ol[type="a s"] {
+ list-style-type: lower-alpha;
+}
+
+.markdown-reading-view ol[type="A s"] {
+ list-style-type: upper-alpha;
+}
+
+.markdown-reading-view ol[type="i s"] {
+ list-style-type: lower-roman;
+}
+
+.markdown-reading-view ol[type="I s"] {
+ list-style-type: upper-roman;
+}
+
+.markdown-reading-view ol[type="1"] {
+ list-style-type: decimal;
+}
+
+.markdown-reading-view div>ol:not([type]) {
+ list-style-type: decimal;
+}
+
+.markdown-reading-view ul ul,
+.markdown-reading-view ul ol,
+.markdown-reading-view ol ol,
+.markdown-reading-view ol ul {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.markdown-reading-view li>p {
+ margin-top: var(--base-size-16);
+}
+
+.markdown-reading-view li+li {
+ margin-top: 0.25em;
+}
+
+.markdown-reading-view dl {
+ padding: 0;
+}
+
+.markdown-reading-view dl dt {
+ padding: 0;
+ margin-top: var(--base-size-16);
+ font-size: 1em;
+ font-style: italic;
+ font-weight: var(--base-text-weight-semibold, 600);
+}
+
+.markdown-reading-view dl dd {
+ padding: 0 var(--base-size-16);
+ margin-bottom: var(--base-size-16);
+}
+
+.markdown-reading-view table th {
+ font-weight: var(--base-text-weight-semibold, 600);
+}
+
+.markdown-reading-view table th,
+.markdown-reading-view table td {
+ padding: 6px 13px;
+ border: 1px solid var(--borderColor-default);
+}
+
+.markdown-reading-view table td> :last-child {
+ margin-bottom: 0;
+}
+
+.markdown-reading-view table tr {
+ background-color: var(--bgColor-default);
+ border-top: 1px solid var(--borderColor-muted);
+}
+
+.markdown-reading-view table tr:nth-child(2n) {
+ background-color: var(--bgColor-muted);
+}
+
+.markdown-reading-view table img {
+ background-color: transparent;
+}
+
+.markdown-reading-view img[align="right"] {
+ padding-left: 20px;
+}
+
+.markdown-reading-view img[align="left"] {
+ padding-right: 20px;
+}
+
+.markdown-reading-view .emoji {
+ max-width: none;
+ vertical-align: text-top;
+ background-color: transparent;
+}
+
+.markdown-reading-view span.frame {
+ display: block;
+ overflow: hidden;
+}
+
+.markdown-reading-view span.frame>span {
+ display: block;
+ float: left;
+ width: auto;
+ padding: 7px;
+ margin: 13px 0 0;
+ overflow: hidden;
+ border: 1px solid var(--borderColor-default);
+}
+
+.markdown-reading-view span.frame span img {
+ display: block;
+ float: left;
+}
+
+.markdown-reading-view span.frame span span {
+ display: block;
+ padding: 5px 0 0;
+ clear: both;
+ color: var(--fgColor-default);
+}
+
+.markdown-reading-view span.align-center {
+ display: block;
+ overflow: hidden;
+ clear: both;
+}
+
+.markdown-reading-view span.align-center>span {
+ display: block;
+ margin: 13px auto 0;
+ overflow: hidden;
+ text-align: center;
+}
+
+.markdown-reading-view span.align-center span img {
+ margin: 0 auto;
+ text-align: center;
+}
+
+.markdown-reading-view span.align-right {
+ display: block;
+ overflow: hidden;
+ clear: both;
+}
+
+.markdown-reading-view span.align-right>span {
+ display: block;
+ margin: 13px 0 0;
+ overflow: hidden;
+ text-align: right;
+}
+
+.markdown-reading-view span.align-right span img {
+ margin: 0;
+ text-align: right;
+}
+
+.markdown-reading-view span.float-left {
+ display: block;
+ float: left;
+ margin-right: 13px;
+ overflow: hidden;
+}
+
+.markdown-reading-view span.float-left span {
+ margin: 13px 0 0;
+}
+
+.markdown-reading-view span.float-right {
+ display: block;
+ float: right;
+ margin-left: 13px;
+ overflow: hidden;
+}
+
+.markdown-reading-view span.float-right>span {
+ display: block;
+ margin: 13px auto 0;
+ overflow: hidden;
+ text-align: right;
+}
+
+.markdown-reading-view code,
+.markdown-reading-view tt {
+ padding: 0.2em 0.4em;
+ margin: 0;
+ font-size: 85%;
+ white-space: break-spaces;
+ background-color: var(--bgColor-neutral-muted);
+ border-radius: 6px;
+}
+
+.markdown-reading-view code br,
+.markdown-reading-view tt br {
+ display: none;
+}
+
+.markdown-reading-view del code {
+ text-decoration: inherit;
+}
+
+.markdown-reading-view samp {
+ font-size: 85%;
+}
+
+.markdown-reading-view pre code {
+ font-size: 100%;
+}
+
+.markdown-reading-view pre>code {
+ padding: 0;
+ margin: 0;
+ word-break: normal;
+ white-space: pre;
+ background: transparent;
+ border: 0;
+}
+
+.markdown-reading-view .highlight {
+ margin-bottom: var(--base-size-16);
+}
+
+.markdown-reading-view .highlight pre {
+ margin-bottom: 0;
+ word-break: normal;
+}
+
+.markdown-reading-view .highlight pre,
+.markdown-reading-view pre {
+ padding: var(--base-size-16);
+ overflow: auto;
+ font-size: 85%;
+ line-height: 1.45;
+ color: var(--fgColor-default);
+ background-color: var(--bgColor-muted);
+ border-radius: 6px;
+}
+
+.markdown-reading-view pre code,
+.markdown-reading-view pre tt {
+ display: inline;
+ max-width: auto;
+ padding: 0;
+ margin: 0;
+ overflow: visible;
+ line-height: inherit;
+ word-wrap: normal;
+ background-color: transparent;
+ border: 0;
+}
+
+.markdown-reading-view .csv-data td,
+.markdown-reading-view .csv-data th {
+ padding: 5px;
+ overflow: hidden;
+ font-size: 12px;
+ line-height: 1;
+ text-align: left;
+ white-space: nowrap;
+}
+
+.markdown-reading-view .csv-data .blob-num {
+ padding: 10px var(--base-size-8) 9px;
+ text-align: right;
+ background: var(--bgColor-default);
+ border: 0;
+}
+
+.markdown-reading-view .csv-data tr {
+ border-top: 0;
+}
+
+.markdown-reading-view .csv-data th {
+ font-weight: var(--base-text-weight-semibold, 600);
+ background: var(--bgColor-muted);
+ border-top: 0;
+}
+
+.markdown-reading-view [data-footnote-ref]::before {
+ content: "[";
+}
+
+.markdown-reading-view [data-footnote-ref]::after {
+ content: "]";
+}
+
+.markdown-reading-view .footnotes {
+ font-size: 12px;
+ color: var(--fgColor-muted);
+ border-top: 1px solid var(--borderColor-default);
+}
+
+.markdown-reading-view .footnotes ol {
+ padding-left: var(--base-size-16);
+}
+
+.markdown-reading-view .footnotes ol ul {
+ display: inline-block;
+ padding-left: var(--base-size-16);
+ margin-top: var(--base-size-16);
+}
+
+.markdown-reading-view .footnotes li {
+ position: relative;
+}
+
+.markdown-reading-view .footnotes li:target::before {
+ position: absolute;
+ top: calc(var(--base-size-8) * -1);
+ right: calc(var(--base-size-8) * -1);
+ bottom: calc(var(--base-size-8) * -1);
+ left: calc(var(--base-size-24) * -1);
+ pointer-events: none;
+ content: "";
+ border: 2px solid var(--borderColor-accent-emphasis);
+ border-radius: 6px;
+}
+
+.markdown-reading-view .footnotes li:target {
+ color: var(--fgColor-default);
+}
+
+.markdown-reading-view .footnotes .data-footnote-backref g-emoji {
+ font-family: monospace;
+}
+
+.markdown-reading-view body:has(:modal) {
+ padding-right: var(--dialog-scrollgutter) !important;
+}
+
+.markdown-reading-view .pl-c {
+ color: var(--color-prettylights-syntax-comment);
+}
+
+.markdown-reading-view .pl-c1,
+.markdown-reading-view .pl-s .pl-v {
+ color: var(--color-prettylights-syntax-constant);
+}
+
+.markdown-reading-view .pl-e,
+.markdown-reading-view .pl-en {
+ color: var(--color-prettylights-syntax-entity);
+}
+
+.markdown-reading-view .pl-smi,
+.markdown-reading-view .pl-s .pl-s1 {
+ color: var(--color-prettylights-syntax-storage-modifier-import);
+}
+
+.markdown-reading-view .pl-ent {
+ color: var(--color-prettylights-syntax-entity-tag);
+}
+
+.markdown-reading-view .pl-k {
+ color: var(--color-prettylights-syntax-keyword);
+}
+
+.markdown-reading-view .pl-s,
+.markdown-reading-view .pl-pds,
+.markdown-reading-view .pl-s .pl-pse .pl-s1,
+.markdown-reading-view .pl-sr,
+.markdown-reading-view .pl-sr .pl-cce,
+.markdown-reading-view .pl-sr .pl-sre,
+.markdown-reading-view .pl-sr .pl-sra {
+ color: var(--color-prettylights-syntax-string);
+}
+
+.markdown-reading-view .pl-v,
+.markdown-reading-view .pl-smw {
+ color: var(--color-prettylights-syntax-variable);
+}
+
+.markdown-reading-view .pl-bu {
+ color: var(--color-prettylights-syntax-brackethighlighter-unmatched);
+}
+
+.markdown-reading-view .pl-ii {
+ color: var(--color-prettylights-syntax-invalid-illegal-text);
+ background-color: var(--color-prettylights-syntax-invalid-illegal-bg);
+}
+
+.markdown-reading-view .pl-c2 {
+ color: var(--color-prettylights-syntax-carriage-return-text);
+ background-color: var(--color-prettylights-syntax-carriage-return-bg);
+}
+
+.markdown-reading-view .pl-sr .pl-cce {
+ font-weight: bold;
+ color: var(--color-prettylights-syntax-string-regexp);
+}
+
+.markdown-reading-view .pl-ml {
+ color: var(--color-prettylights-syntax-markup-list);
+}
+
+.markdown-reading-view .pl-mh,
+.markdown-reading-view .pl-mh .pl-en,
+.markdown-reading-view .pl-ms {
+ font-weight: bold;
+ color: var(--color-prettylights-syntax-markup-heading);
+}
+
+.markdown-reading-view .pl-mi {
+ font-style: italic;
+ color: var(--color-prettylights-syntax-markup-italic);
+}
+
+.markdown-reading-view .pl-mb {
+ font-weight: bold;
+ color: var(--color-prettylights-syntax-markup-bold);
+}
+
+.markdown-reading-view .pl-md {
+ color: var(--color-prettylights-syntax-markup-deleted-text);
+ background-color: var(--color-prettylights-syntax-markup-deleted-bg);
+}
+
+.markdown-reading-view .pl-mi1 {
+ color: var(--color-prettylights-syntax-markup-inserted-text);
+ background-color: var(--color-prettylights-syntax-markup-inserted-bg);
+}
+
+.markdown-reading-view .pl-mc {
+ color: var(--color-prettylights-syntax-markup-changed-text);
+ background-color: var(--color-prettylights-syntax-markup-changed-bg);
+}
+
+.markdown-reading-view .pl-mi2 {
+ color: var(--color-prettylights-syntax-markup-ignored-text);
+ background-color: var(--color-prettylights-syntax-markup-ignored-bg);
+}
+
+.markdown-reading-view .pl-mdr {
+ font-weight: bold;
+ color: var(--color-prettylights-syntax-meta-diff-range);
+}
+
+.markdown-reading-view .pl-ba {
+ color: var(--color-prettylights-syntax-brackethighlighter-angle);
+}
+
+.markdown-reading-view .pl-sg {
+ color: var(--color-prettylights-syntax-sublimelinter-gutter-mark);
+}
+
+.markdown-reading-view .pl-corl {
+ text-decoration: underline;
+ color: var(--color-prettylights-syntax-constant-other-reference-link);
+}
+
+.markdown-reading-view [role="button"]:focus:not(:focus-visible),
+.markdown-reading-view [role="tabpanel"][tabindex="0"]:focus:not(:focus-visible),
+.markdown-reading-view button:focus:not(:focus-visible),
+.markdown-reading-view summary:focus:not(:focus-visible),
+.markdown-reading-view a:focus:not(:focus-visible) {
+ outline: none;
+ box-shadow: none;
+}
+
+.markdown-reading-view [tabindex="0"]:focus:not(:focus-visible),
+.markdown-reading-view details-dialog:focus:not(:focus-visible) {
+ outline: none;
+}
+
+.markdown-reading-view g-emoji {
+ display: inline-block;
+ min-width: 1ch;
+ font-family: "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
+ font-size: 1em;
+ font-style: normal !important;
+ font-weight: var(--base-text-weight-normal, 400);
+ line-height: 1;
+ vertical-align: -0.075em;
+}
+
+.markdown-reading-view g-emoji img {
+ width: 1em;
+ height: 1em;
+}
+
+.markdown-reading-view .task-list-item {
+ list-style-type: none;
+}
+
+.markdown-reading-view .task-list-item label {
+ font-weight: var(--base-text-weight-normal, 400);
+}
+
+.markdown-reading-view .task-list-item.enabled label {
+ cursor: pointer;
+}
+
+.markdown-reading-view .task-list-item+.task-list-item {
+ margin-top: var(--base-size-4);
+}
+
+.markdown-reading-view .task-list-item .handle {
+ display: none;
+}
+
+.markdown-reading-view .task-list-item-checkbox {
+ margin: 0 0.2em 0.25em -1.4em;
+ vertical-align: middle;
+}
+
+.markdown-reading-view ul:dir(rtl) .task-list-item-checkbox {
+ margin: 0 -1.6em 0.25em 0.2em;
+}
+
+.markdown-reading-view ol:dir(rtl) .task-list-item-checkbox {
+ margin: 0 -1.6em 0.25em 0.2em;
+}
+
+.markdown-reading-view .contains-task-list:hover .task-list-item-convert-container,
+.markdown-reading-view .contains-task-list:focus-within .task-list-item-convert-container {
+ display: block;
+ width: auto;
+ height: 24px;
+ overflow: visible;
+ clip: auto;
+}
+
+.markdown-reading-view ::-webkit-calendar-picker-indicator {
+ filter: invert(50%);
+}
+
+.markdown-reading-view .markdown-alert {
+ padding: var(--base-size-8) var(--base-size-16);
+ margin-bottom: var(--base-size-16);
+ color: inherit;
+ border-left: 0.25em solid var(--borderColor-default);
+}
+
+.markdown-reading-view .markdown-alert> :first-child {
+ margin-top: 0;
+}
+
+.markdown-reading-view .markdown-alert> :last-child {
+ margin-bottom: 0;
+}
+
+.markdown-reading-view .markdown-alert .markdown-alert-title {
+ display: flex;
+ font-weight: var(--base-text-weight-medium, 500);
+ align-items: center;
+ line-height: 1;
+}
+
+.markdown-reading-view .markdown-alert.markdown-alert-note {
+ border-left-color: var(--borderColor-accent-emphasis);
+}
+
+.markdown-reading-view .markdown-alert.markdown-alert-note .markdown-alert-title {
+ color: var(--fgColor-accent);
+}
+
+.markdown-reading-view .markdown-alert.markdown-alert-important {
+ border-left-color: var(--borderColor-done-emphasis);
+}
+
+.markdown-reading-view .markdown-alert.markdown-alert-important .markdown-alert-title {
+ color: var(--fgColor-done);
+}
+
+.markdown-reading-view .markdown-alert.markdown-alert-warning {
+ border-left-color: var(--borderColor-attention-emphasis);
+}
+
+.markdown-reading-view .markdown-alert.markdown-alert-warning .markdown-alert-title {
+ color: var(--fgColor-attention);
+}
+
+.markdown-reading-view .markdown-alert.markdown-alert-tip {
+ border-left-color: var(--borderColor-success-emphasis);
+}
+
+.markdown-reading-view .markdown-alert.markdown-alert-tip .markdown-alert-title {
+ color: var(--fgColor-success);
+}
+
+.markdown-reading-view .markdown-alert.markdown-alert-caution {
+ border-left-color: var(--borderColor-danger-emphasis);
+}
+
+.markdown-reading-view .markdown-alert.markdown-alert-caution .markdown-alert-title {
+ color: var(--fgColor-danger);
+}
+
+.markdown-reading-view>*:first-child>.heading-element:first-child {
+ margin-top: 0 !important;
+}
+
+.markdown-reading-view .highlight pre:has(+ .zeroclipboard-container) {
+ min-height: 52px;
+}
diff --git a/app/static/css/github-markdown-source-view.css b/app/static/css/github-markdown-source-view.css
new file mode 100644
index 0000000..78ed9f0
--- /dev/null
+++ b/app/static/css/github-markdown-source-view.css
@@ -0,0 +1,1258 @@
+.markdown-source-view {
+ --base-size-4: 0.25rem;
+ --base-size-8: 0.5rem;
+ --base-size-16: 1rem;
+ --base-size-24: 1.5rem;
+ --base-size-40: 2.5rem;
+ --base-text-weight-normal: 400;
+ --base-text-weight-medium: 500;
+ --base-text-weight-semibold: 600;
+ --fontStack-monospace:
+ ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono,
+ monospace;
+ --fgColor-accent: Highlight;
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .markdown-source-view,
+ [data-theme="dark"] {
+ /* dark */
+ color-scheme: dark;
+ --focus-outlineColor: #1f6feb;
+ --fgColor-default: #f0f6fc;
+ --fgColor-muted: #9198a1;
+ --fgColor-accent: #4493f8;
+ --fgColor-success: #3fb950;
+ --fgColor-attention: #d29922;
+ --fgColor-danger: #f85149;
+ --fgColor-done: #ab7df8;
+ --bgColor-default: #0d1117;
+ --bgColor-muted: #151b23;
+ --bgColor-neutral-muted: #656c7633;
+ --bgColor-attention-muted: #bb800926;
+ --borderColor-default: #3d444d;
+ --borderColor-muted: #3d444db3;
+ --borderColor-neutral-muted: #3d444db3;
+ --borderColor-accent-emphasis: #1f6feb;
+ --borderColor-success-emphasis: #238636;
+ --borderColor-attention-emphasis: #9e6a03;
+ --borderColor-danger-emphasis: #da3633;
+ --borderColor-done-emphasis: #8957e5;
+ --color-prettylights-syntax-comment: #9198a1;
+ --color-prettylights-syntax-constant: #79c0ff;
+ --color-prettylights-syntax-constant-other-reference-link: #a5d6ff;
+ --color-prettylights-syntax-entity: #d2a8ff;
+ --color-prettylights-syntax-storage-modifier-import: #f0f6fc;
+ --color-prettylights-syntax-entity-tag: #7ee787;
+ --color-prettylights-syntax-keyword: #ff7b72;
+ --color-prettylights-syntax-string: #a5d6ff;
+ --color-prettylights-syntax-variable: #ffa657;
+ --color-prettylights-syntax-brackethighlighter-unmatched: #f85149;
+ --color-prettylights-syntax-brackethighlighter-angle: #9198a1;
+ --color-prettylights-syntax-invalid-illegal-text: #f0f6fc;
+ --color-prettylights-syntax-invalid-illegal-bg: #8e1519;
+ --color-prettylights-syntax-carriage-return-text: #f0f6fc;
+ --color-prettylights-syntax-carriage-return-bg: #b62324;
+ --color-prettylights-syntax-string-regexp: #7ee787;
+ --color-prettylights-syntax-markup-list: #f2cc60;
+ --color-prettylights-syntax-markup-heading: #1f6feb;
+ --color-prettylights-syntax-markup-italic: #f0f6fc;
+ --color-prettylights-syntax-markup-bold: #f0f6fc;
+ --color-prettylights-syntax-markup-deleted-text: #ffdcd7;
+ --color-prettylights-syntax-markup-deleted-bg: #67060c;
+ --color-prettylights-syntax-markup-inserted-text: #aff5b4;
+ --color-prettylights-syntax-markup-inserted-bg: #033a16;
+ --color-prettylights-syntax-markup-changed-text: #ffdfb6;
+ --color-prettylights-syntax-markup-changed-bg: #5a1e02;
+ --color-prettylights-syntax-markup-ignored-text: #f0f6fc;
+ --color-prettylights-syntax-markup-ignored-bg: #1158c7;
+ --color-prettylights-syntax-meta-diff-range: #d2a8ff;
+ --color-prettylights-syntax-sublimelinter-gutter-mark: #3d444d;
+ }
+}
+
+@media (prefers-color-scheme: light) {
+
+ .markdown-source-view,
+ [data-theme="light"] {
+ /* light */
+ color-scheme: light;
+ --focus-outlineColor: #0969da;
+ --fgColor-default: #1f2328;
+ --fgColor-muted: #59636e;
+ --fgColor-accent: #0969da;
+ --fgColor-success: #1a7f37;
+ --fgColor-attention: #9a6700;
+ --fgColor-danger: #d1242f;
+ --fgColor-done: #8250df;
+ --bgColor-default: #ffffff;
+ --bgColor-muted: #f6f8fa;
+ --bgColor-neutral-muted: #818b981f;
+ --bgColor-attention-muted: #fff8c5;
+ --borderColor-default: #d1d9e0;
+ --borderColor-muted: #d1d9e0b3;
+ --borderColor-neutral-muted: #d1d9e0b3;
+ --borderColor-accent-emphasis: #0969da;
+ --borderColor-success-emphasis: #1a7f37;
+ --borderColor-attention-emphasis: #9a6700;
+ --borderColor-danger-emphasis: #cf222e;
+ --borderColor-done-emphasis: #8250df;
+ --color-prettylights-syntax-comment: #59636e;
+ --color-prettylights-syntax-constant: #0550ae;
+ --color-prettylights-syntax-constant-other-reference-link: #0a3069;
+ --color-prettylights-syntax-entity: #6639ba;
+ --color-prettylights-syntax-storage-modifier-import: #1f2328;
+ --color-prettylights-syntax-entity-tag: #0550ae;
+ --color-prettylights-syntax-keyword: #cf222e;
+ --color-prettylights-syntax-string: #0a3069;
+ --color-prettylights-syntax-variable: #953800;
+ --color-prettylights-syntax-brackethighlighter-unmatched: #82071e;
+ --color-prettylights-syntax-brackethighlighter-angle: #59636e;
+ --color-prettylights-syntax-invalid-illegal-text: #f6f8fa;
+ --color-prettylights-syntax-invalid-illegal-bg: #82071e;
+ --color-prettylights-syntax-carriage-return-text: #f6f8fa;
+ --color-prettylights-syntax-carriage-return-bg: #cf222e;
+ --color-prettylights-syntax-string-regexp: #116329;
+ --color-prettylights-syntax-markup-list: #3b2300;
+ --color-prettylights-syntax-markup-heading: #0550ae;
+ --color-prettylights-syntax-markup-italic: #1f2328;
+ --color-prettylights-syntax-markup-bold: #1f2328;
+ --color-prettylights-syntax-markup-deleted-text: #82071e;
+ --color-prettylights-syntax-markup-deleted-bg: #ffebe9;
+ --color-prettylights-syntax-markup-inserted-text: #116329;
+ --color-prettylights-syntax-markup-inserted-bg: #dafbe1;
+ --color-prettylights-syntax-markup-changed-text: #953800;
+ --color-prettylights-syntax-markup-changed-bg: #ffd8b5;
+ --color-prettylights-syntax-markup-ignored-text: #d1d9e0;
+ --color-prettylights-syntax-markup-ignored-bg: #0550ae;
+ --color-prettylights-syntax-meta-diff-range: #8250df;
+ --color-prettylights-syntax-sublimelinter-gutter-mark: #818b98;
+ }
+}
+
+.markdown-source-view {
+ -ms-text-size-adjust: 100%;
+ -webkit-text-size-adjust: 100%;
+ margin: 0;
+ color: var(--fgColor-default);
+ background-color: var(--bgColor-default);
+ font-family:
+ -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica,
+ Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
+ font-size: 16px;
+ line-height: 1.5;
+ word-wrap: break-word;
+}
+
+.markdown-source-view .octicon {
+ display: inline-block;
+ fill: currentColor;
+ vertical-align: text-bottom;
+}
+
+.markdown-source-view h1:hover .anchor .octicon-link:before,
+.markdown-source-view h2:hover .anchor .octicon-link:before,
+.markdown-source-view h3:hover .anchor .octicon-link:before,
+.markdown-source-view h4:hover .anchor .octicon-link:before,
+.markdown-source-view h5:hover .anchor .octicon-link:before,
+.markdown-source-view h6:hover .anchor .octicon-link:before {
+ width: 16px;
+ height: 16px;
+ content: " ";
+ display: inline-block;
+ background-color: currentColor;
+ -webkit-mask-image: url("data:image/svg+xml, ");
+ mask-image: url("data:image/svg+xml, ");
+}
+
+.markdown-source-view details,
+.markdown-source-view figcaption,
+.markdown-source-view figure {
+ display: block;
+}
+
+.markdown-source-view summary {
+ display: list-item;
+}
+
+.markdown-source-view [hidden] {
+ display: none !important;
+}
+
+.markdown-source-view a {
+ background-color: transparent;
+ color: var(--fgColor-accent);
+ text-decoration: none;
+}
+
+.markdown-source-view abbr[title] {
+ border-bottom: none;
+ -webkit-text-decoration: underline dotted;
+ text-decoration: underline dotted;
+}
+
+.markdown-source-view b,
+.markdown-source-view strong {
+ font-weight: var(--base-text-weight-semibold, 600);
+}
+
+.markdown-source-view dfn {
+ font-style: italic;
+}
+
+.markdown-source-view h1 {
+ margin: 0.67em 0;
+ font-weight: var(--base-text-weight-semibold, 600);
+ padding-bottom: 0.3em;
+ font-size: 2em;
+ border-bottom: 1px solid var(--borderColor-muted);
+}
+
+.markdown-source-view mark {
+ background-color: var(--bgColor-attention-muted);
+ color: var(--fgColor-default);
+}
+
+.markdown-source-view small {
+ font-size: 90%;
+}
+
+.markdown-source-view sub,
+.markdown-source-view sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+.markdown-source-view sub {
+ bottom: -0.25em;
+}
+
+.markdown-source-view sup {
+ top: -0.5em;
+}
+
+.markdown-source-view img {
+ border-style: none;
+ max-width: 100%;
+ box-sizing: content-box;
+}
+
+.markdown-source-view code,
+.markdown-source-view kbd,
+.markdown-source-view pre,
+.markdown-source-view samp {
+ font-family: monospace;
+ font-size: 1em;
+}
+
+.markdown-source-view figure {
+ margin: 1em var(--base-size-40);
+}
+
+.markdown-source-view hr {
+ box-sizing: content-box;
+ overflow: hidden;
+ background: transparent;
+ border-bottom: 1px solid var(--borderColor-muted);
+ height: 0.25em;
+ padding: 0;
+ margin: var(--base-size-24) 0;
+ background-color: var(--borderColor-default);
+ border: 0;
+}
+
+.markdown-source-view input {
+ font: inherit;
+ margin: 0;
+ overflow: visible;
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+}
+
+.markdown-source-view [type="button"],
+.markdown-source-view [type="reset"],
+.markdown-source-view [type="submit"] {
+ -webkit-appearance: button;
+ appearance: button;
+}
+
+.markdown-source-view [type="checkbox"],
+.markdown-source-view [type="radio"] {
+ box-sizing: border-box;
+ padding: 0;
+}
+
+.markdown-source-view [type="number"]::-webkit-inner-spin-button,
+.markdown-source-view [type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+.markdown-source-view [type="search"]::-webkit-search-cancel-button,
+.markdown-source-view [type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+ appearance: none;
+}
+
+.markdown-source-view ::-webkit-input-placeholder {
+ color: inherit;
+ opacity: 0.54;
+}
+
+.markdown-source-view ::-webkit-file-upload-button {
+ -webkit-appearance: button;
+ appearance: button;
+ font: inherit;
+}
+
+.markdown-source-view a:hover {
+ text-decoration: underline;
+}
+
+.markdown-source-view ::placeholder {
+ color: var(--fgColor-muted);
+ opacity: 1;
+}
+
+.markdown-source-view hr::before {
+ display: table;
+ content: "";
+}
+
+.markdown-source-view hr::after {
+ display: table;
+ clear: both;
+ content: "";
+}
+
+.markdown-source-view table {
+ border-spacing: 0;
+ border-collapse: collapse;
+ display: block;
+ width: max-content;
+ max-width: 100%;
+ overflow: auto;
+ font-variant: tabular-nums;
+}
+
+.markdown-source-view td,
+.markdown-source-view th {
+ padding: 0;
+}
+
+.markdown-source-view details summary {
+ cursor: pointer;
+}
+
+.markdown-source-view a:focus,
+.markdown-source-view [role="button"]:focus,
+.markdown-source-view input[type="radio"]:focus,
+.markdown-source-view input[type="checkbox"]:focus {
+ outline: 2px solid var(--focus-outlineColor);
+ outline-offset: -2px;
+ box-shadow: none;
+}
+
+.markdown-source-view a:focus:not(:focus-visible),
+.markdown-source-view [role="button"]:focus:not(:focus-visible),
+.markdown-source-view input[type="radio"]:focus:not(:focus-visible),
+.markdown-source-view input[type="checkbox"]:focus:not(:focus-visible) {
+ outline: solid 1px transparent;
+}
+
+.markdown-source-view a:focus-visible,
+.markdown-source-view [role="button"]:focus-visible,
+.markdown-source-view input[type="radio"]:focus-visible,
+.markdown-source-view input[type="checkbox"]:focus-visible {
+ outline: 2px solid var(--focus-outlineColor);
+ outline-offset: -2px;
+ box-shadow: none;
+}
+
+.markdown-source-view a:not([class]):focus,
+.markdown-source-view a:not([class]):focus-visible,
+.markdown-source-view input[type="radio"]:focus,
+.markdown-source-view input[type="radio"]:focus-visible,
+.markdown-source-view input[type="checkbox"]:focus,
+.markdown-source-view input[type="checkbox"]:focus-visible {
+ outline-offset: 0;
+}
+
+.markdown-source-view kbd {
+ display: inline-block;
+ padding: var(--base-size-4);
+ font: 11px var(--fontStack-monospace,
+ ui-monospace,
+ SFMono-Regular,
+ SF Mono,
+ Menlo,
+ Consolas,
+ Liberation Mono,
+ monospace);
+ line-height: 10px;
+ color: var(--fgColor-default);
+ vertical-align: middle;
+ background-color: var(--bgColor-muted);
+ border: solid 1px var(--borderColor-neutral-muted);
+ border-bottom-color: var(--borderColor-neutral-muted);
+ border-radius: 6px;
+ box-shadow: inset 0 -1px 0 var(--borderColor-neutral-muted);
+}
+
+.markdown-source-view h1,
+.markdown-source-view h2,
+.markdown-source-view h3,
+.markdown-source-view h4,
+.markdown-source-view h5,
+.markdown-source-view h6 {
+ margin-top: var(--base-size-24);
+ margin-bottom: var(--base-size-16);
+ font-weight: var(--base-text-weight-semibold, 600);
+ line-height: 1.25;
+}
+
+.markdown-source-view h2 {
+ font-weight: var(--base-text-weight-semibold, 600);
+ padding-bottom: 0.3em;
+ font-size: 1.5em;
+ border-bottom: 1px solid var(--borderColor-muted);
+}
+
+.markdown-source-view h3 {
+ font-weight: var(--base-text-weight-semibold, 600);
+ font-size: 1.25em;
+}
+
+.markdown-source-view h4 {
+ font-weight: var(--base-text-weight-semibold, 600);
+ font-size: 1em;
+}
+
+.markdown-source-view h5 {
+ font-weight: var(--base-text-weight-semibold, 600);
+ font-size: 0.875em;
+}
+
+.markdown-source-view h6 {
+ font-weight: var(--base-text-weight-semibold, 600);
+ font-size: 0.85em;
+ color: var(--fgColor-muted);
+}
+
+.markdown-source-view p {
+ margin-top: 0;
+ margin-bottom: 10px;
+}
+
+.markdown-source-view blockquote {
+ margin: 0;
+ padding: 0 1em;
+ color: var(--fgColor-muted);
+ border-left: 0.25em solid var(--borderColor-default);
+}
+
+.markdown-source-view ul,
+.markdown-source-view ol {
+ margin-top: 0;
+ margin-bottom: 0;
+ padding-left: 2em;
+}
+
+.markdown-source-view ol ol,
+.markdown-source-view ul ol {
+ list-style-type: lower-roman;
+}
+
+.markdown-source-view ul ul ol,
+.markdown-source-view ul ol ol,
+.markdown-source-view ol ul ol,
+.markdown-source-view ol ol ol {
+ list-style-type: lower-alpha;
+}
+
+.markdown-source-view dd {
+ margin-left: 0;
+}
+
+.markdown-source-view tt,
+.markdown-source-view code,
+.markdown-source-view samp {
+ font-family: var(--fontStack-monospace,
+ ui-monospace,
+ SFMono-Regular,
+ SF Mono,
+ Menlo,
+ Consolas,
+ Liberation Mono,
+ monospace);
+ font-size: 12px;
+}
+
+.markdown-source-view pre {
+ margin-top: 0;
+ margin-bottom: 0;
+ font-family: var(--fontStack-monospace,
+ ui-monospace,
+ SFMono-Regular,
+ SF Mono,
+ Menlo,
+ Consolas,
+ Liberation Mono,
+ monospace);
+ font-size: 12px;
+ word-wrap: normal;
+}
+
+.markdown-source-view .octicon {
+ display: inline-block;
+ overflow: visible !important;
+ vertical-align: text-bottom;
+ fill: currentColor;
+}
+
+.markdown-source-view input::-webkit-outer-spin-button,
+.markdown-source-view input::-webkit-inner-spin-button {
+ margin: 0;
+ appearance: none;
+}
+
+.markdown-source-view .mr-2 {
+ margin-right: var(--base-size-8, 8px) !important;
+}
+
+.markdown-source-view::before {
+ display: table;
+ content: "";
+}
+
+.markdown-source-view::after {
+ display: table;
+ clear: both;
+ content: "";
+}
+
+.markdown-source-view>*:first-child {
+ margin-top: 0 !important;
+}
+
+.markdown-source-view>*:last-child {
+ margin-bottom: 0 !important;
+}
+
+.markdown-source-view a:not([href]) {
+ color: inherit;
+ text-decoration: none;
+}
+
+.markdown-source-view .absent {
+ color: var(--fgColor-danger);
+}
+
+.markdown-source-view .anchor {
+ float: left;
+ padding-right: var(--base-size-4);
+ margin-left: -20px;
+ line-height: 1;
+}
+
+.markdown-source-view .anchor:focus {
+ outline: none;
+}
+
+.markdown-source-view p,
+.markdown-source-view blockquote,
+.markdown-source-view ul,
+.markdown-source-view ol,
+.markdown-source-view dl,
+.markdown-source-view table,
+.markdown-source-view pre,
+.markdown-source-view details {
+ margin-top: 0;
+ margin-bottom: var(--base-size-16);
+}
+
+.markdown-source-view blockquote> :first-child {
+ margin-top: 0;
+}
+
+.markdown-source-view blockquote> :last-child {
+ margin-bottom: 0;
+}
+
+.markdown-source-view h1 .octicon-link,
+.markdown-source-view h2 .octicon-link,
+.markdown-source-view h3 .octicon-link,
+.markdown-source-view h4 .octicon-link,
+.markdown-source-view h5 .octicon-link,
+.markdown-source-view h6 .octicon-link {
+ color: var(--fgColor-default);
+ vertical-align: middle;
+ visibility: hidden;
+}
+
+.markdown-source-view h1:hover .anchor,
+.markdown-source-view h2:hover .anchor,
+.markdown-source-view h3:hover .anchor,
+.markdown-source-view h4:hover .anchor,
+.markdown-source-view h5:hover .anchor,
+.markdown-source-view h6:hover .anchor {
+ text-decoration: none;
+}
+
+.markdown-source-view h1:hover .anchor .octicon-link,
+.markdown-source-view h2:hover .anchor .octicon-link,
+.markdown-source-view h3:hover .anchor .octicon-link,
+.markdown-source-view h4:hover .anchor .octicon-link,
+.markdown-source-view h5:hover .anchor .octicon-link,
+.markdown-source-view h6:hover .anchor .octicon-link {
+ visibility: visible;
+}
+
+.markdown-source-view h1 tt,
+.markdown-source-view h1 code,
+.markdown-source-view h2 tt,
+.markdown-source-view h2 code,
+.markdown-source-view h3 tt,
+.markdown-source-view h3 code,
+.markdown-source-view h4 tt,
+.markdown-source-view h4 code,
+.markdown-source-view h5 tt,
+.markdown-source-view h5 code,
+.markdown-source-view h6 tt,
+.markdown-source-view h6 code {
+ padding: 0 0.2em;
+ font-size: inherit;
+}
+
+.markdown-source-view summary h1,
+.markdown-source-view summary h2,
+.markdown-source-view summary h3,
+.markdown-source-view summary h4,
+.markdown-source-view summary h5,
+.markdown-source-view summary h6 {
+ display: inline-block;
+}
+
+.markdown-source-view summary h1 .anchor,
+.markdown-source-view summary h2 .anchor,
+.markdown-source-view summary h3 .anchor,
+.markdown-source-view summary h4 .anchor,
+.markdown-source-view summary h5 .anchor,
+.markdown-source-view summary h6 .anchor {
+ margin-left: -40px;
+}
+
+.markdown-source-view summary h1,
+.markdown-source-view summary h2 {
+ padding-bottom: 0;
+ border-bottom: 0;
+}
+
+.markdown-source-view ul.no-list,
+.markdown-source-view ol.no-list {
+ padding: 0;
+ list-style-type: none;
+}
+
+.markdown-source-view ol[type="a s"] {
+ list-style-type: lower-alpha;
+}
+
+.markdown-source-view ol[type="A s"] {
+ list-style-type: upper-alpha;
+}
+
+.markdown-source-view ol[type="i s"] {
+ list-style-type: lower-roman;
+}
+
+.markdown-source-view ol[type="I s"] {
+ list-style-type: upper-roman;
+}
+
+.markdown-source-view ol[type="1"] {
+ list-style-type: decimal;
+}
+
+.markdown-source-view div>ol:not([type]) {
+ list-style-type: decimal;
+}
+
+.markdown-source-view ul ul,
+.markdown-source-view ul ol,
+.markdown-source-view ol ol,
+.markdown-source-view ol ul {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.markdown-source-view li>p {
+ margin-top: var(--base-size-16);
+}
+
+.markdown-source-view li+li {
+ margin-top: 0.25em;
+}
+
+.markdown-source-view dl {
+ padding: 0;
+}
+
+.markdown-source-view dl dt {
+ padding: 0;
+ margin-top: var(--base-size-16);
+ font-size: 1em;
+ font-style: italic;
+ font-weight: var(--base-text-weight-semibold, 600);
+}
+
+.markdown-source-view dl dd {
+ padding: 0 var(--base-size-16);
+ margin-bottom: var(--base-size-16);
+}
+
+.markdown-source-view table th {
+ font-weight: var(--base-text-weight-semibold, 600);
+}
+
+.markdown-source-view table th,
+.markdown-source-view table td {
+ padding: 6px 13px;
+ border: 1px solid var(--borderColor-default);
+}
+
+.markdown-source-view table td> :last-child {
+ margin-bottom: 0;
+}
+
+.markdown-source-view table tr {
+ background-color: var(--bgColor-default);
+ border-top: 1px solid var(--borderColor-muted);
+}
+
+.markdown-source-view table tr:nth-child(2n) {
+ background-color: var(--bgColor-muted);
+}
+
+.markdown-source-view table img {
+ background-color: transparent;
+}
+
+.markdown-source-view img[align="right"] {
+ padding-left: 20px;
+}
+
+.markdown-source-view img[align="left"] {
+ padding-right: 20px;
+}
+
+.markdown-source-view .emoji {
+ max-width: none;
+ vertical-align: text-top;
+ background-color: transparent;
+}
+
+.markdown-source-view span.frame {
+ display: block;
+ overflow: hidden;
+}
+
+.markdown-source-view span.frame>span {
+ display: block;
+ float: left;
+ width: auto;
+ padding: 7px;
+ margin: 13px 0 0;
+ overflow: hidden;
+ border: 1px solid var(--borderColor-default);
+}
+
+.markdown-source-view span.frame span img {
+ display: block;
+ float: left;
+}
+
+.markdown-source-view span.frame span span {
+ display: block;
+ padding: 5px 0 0;
+ clear: both;
+ color: var(--fgColor-default);
+}
+
+.markdown-source-view span.align-center {
+ display: block;
+ overflow: hidden;
+ clear: both;
+}
+
+.markdown-source-view span.align-center>span {
+ display: block;
+ margin: 13px auto 0;
+ overflow: hidden;
+ text-align: center;
+}
+
+.markdown-source-view span.align-center span img {
+ margin: 0 auto;
+ text-align: center;
+}
+
+.markdown-source-view span.align-right {
+ display: block;
+ overflow: hidden;
+ clear: both;
+}
+
+.markdown-source-view span.align-right>span {
+ display: block;
+ margin: 13px 0 0;
+ overflow: hidden;
+ text-align: right;
+}
+
+.markdown-source-view span.align-right span img {
+ margin: 0;
+ text-align: right;
+}
+
+.markdown-source-view span.float-left {
+ display: block;
+ float: left;
+ margin-right: 13px;
+ overflow: hidden;
+}
+
+.markdown-source-view span.float-left span {
+ margin: 13px 0 0;
+}
+
+.markdown-source-view span.float-right {
+ display: block;
+ float: right;
+ margin-left: 13px;
+ overflow: hidden;
+}
+
+.markdown-source-view span.float-right>span {
+ display: block;
+ margin: 13px auto 0;
+ overflow: hidden;
+ text-align: right;
+}
+
+.markdown-source-view code,
+.markdown-source-view tt {
+ padding: 0.2em 0.4em;
+ margin: 0;
+ font-size: 85%;
+ white-space: break-spaces;
+ background-color: var(--bgColor-neutral-muted);
+ border-radius: 6px;
+}
+
+.markdown-source-view code br,
+.markdown-source-view tt br {
+ display: none;
+}
+
+.markdown-source-view del code {
+ text-decoration: inherit;
+}
+
+.markdown-source-view samp {
+ font-size: 85%;
+}
+
+.markdown-source-view pre code {
+ font-size: 100%;
+}
+
+.markdown-source-view pre>code {
+ padding: 0;
+ margin: 0;
+ word-break: normal;
+ white-space: pre;
+ background: transparent;
+ border: 0;
+}
+
+.markdown-source-view .highlight {
+ margin-bottom: var(--base-size-16);
+}
+
+.markdown-source-view .highlight pre {
+ margin-bottom: 0;
+ word-break: normal;
+}
+
+.markdown-source-view .highlight pre,
+.markdown-source-view pre {
+ padding: var(--base-size-16);
+ overflow: auto;
+ font-size: 85%;
+ line-height: 1.45;
+ color: var(--fgColor-default);
+ background-color: var(--bgColor-muted);
+ border-radius: 6px;
+}
+
+.markdown-source-view pre code,
+.markdown-source-view pre tt {
+ display: inline;
+ max-width: auto;
+ padding: 0;
+ margin: 0;
+ overflow: visible;
+ line-height: inherit;
+ word-wrap: normal;
+ background-color: transparent;
+ border: 0;
+}
+
+.markdown-source-view .csv-data td,
+.markdown-source-view .csv-data th {
+ padding: 5px;
+ overflow: hidden;
+ font-size: 12px;
+ line-height: 1;
+ text-align: left;
+ white-space: nowrap;
+}
+
+.markdown-source-view .csv-data .blob-num {
+ padding: 10px var(--base-size-8) 9px;
+ text-align: right;
+ background: var(--bgColor-default);
+ border: 0;
+}
+
+.markdown-source-view .csv-data tr {
+ border-top: 0;
+}
+
+.markdown-source-view .csv-data th {
+ font-weight: var(--base-text-weight-semibold, 600);
+ background: var(--bgColor-muted);
+ border-top: 0;
+}
+
+.markdown-source-view [data-footnote-ref]::before {
+ content: "[";
+}
+
+.markdown-source-view [data-footnote-ref]::after {
+ content: "]";
+}
+
+.markdown-source-view .footnotes {
+ font-size: 12px;
+ color: var(--fgColor-muted);
+ border-top: 1px solid var(--borderColor-default);
+}
+
+.markdown-source-view .footnotes ol {
+ padding-left: var(--base-size-16);
+}
+
+.markdown-source-view .footnotes ol ul {
+ display: inline-block;
+ padding-left: var(--base-size-16);
+ margin-top: var(--base-size-16);
+}
+
+.markdown-source-view .footnotes li {
+ position: relative;
+}
+
+.markdown-source-view .footnotes li:target::before {
+ position: absolute;
+ top: calc(var(--base-size-8) * -1);
+ right: calc(var(--base-size-8) * -1);
+ bottom: calc(var(--base-size-8) * -1);
+ left: calc(var(--base-size-24) * -1);
+ pointer-events: none;
+ content: "";
+ border: 2px solid var(--borderColor-accent-emphasis);
+ border-radius: 6px;
+}
+
+.markdown-source-view .footnotes li:target {
+ color: var(--fgColor-default);
+}
+
+.markdown-source-view .footnotes .data-footnote-backref g-emoji {
+ font-family: monospace;
+}
+
+.markdown-source-view body:has(:modal) {
+ padding-right: var(--dialog-scrollgutter) !important;
+}
+
+.markdown-source-view .pl-c {
+ color: var(--color-prettylights-syntax-comment);
+}
+
+.markdown-source-view .pl-c1,
+.markdown-source-view .pl-s .pl-v {
+ color: var(--color-prettylights-syntax-constant);
+}
+
+.markdown-source-view .pl-e,
+.markdown-source-view .pl-en {
+ color: var(--color-prettylights-syntax-entity);
+}
+
+.markdown-source-view .pl-smi,
+.markdown-source-view .pl-s .pl-s1 {
+ color: var(--color-prettylights-syntax-storage-modifier-import);
+}
+
+.markdown-source-view .pl-ent {
+ color: var(--color-prettylights-syntax-entity-tag);
+}
+
+.markdown-source-view .pl-k {
+ color: var(--color-prettylights-syntax-keyword);
+}
+
+.markdown-source-view .pl-s,
+.markdown-source-view .pl-pds,
+.markdown-source-view .pl-s .pl-pse .pl-s1,
+.markdown-source-view .pl-sr,
+.markdown-source-view .pl-sr .pl-cce,
+.markdown-source-view .pl-sr .pl-sre,
+.markdown-source-view .pl-sr .pl-sra {
+ color: var(--color-prettylights-syntax-string);
+}
+
+.markdown-source-view .pl-v,
+.markdown-source-view .pl-smw {
+ color: var(--color-prettylights-syntax-variable);
+}
+
+.markdown-source-view .pl-bu {
+ color: var(--color-prettylights-syntax-brackethighlighter-unmatched);
+}
+
+.markdown-source-view .pl-ii {
+ color: var(--color-prettylights-syntax-invalid-illegal-text);
+ background-color: var(--color-prettylights-syntax-invalid-illegal-bg);
+}
+
+.markdown-source-view .pl-c2 {
+ color: var(--color-prettylights-syntax-carriage-return-text);
+ background-color: var(--color-prettylights-syntax-carriage-return-bg);
+}
+
+.markdown-source-view .pl-sr .pl-cce {
+ font-weight: bold;
+ color: var(--color-prettylights-syntax-string-regexp);
+}
+
+.markdown-source-view .pl-ml {
+ color: var(--color-prettylights-syntax-markup-list);
+}
+
+.markdown-source-view .pl-mh,
+.markdown-source-view .pl-mh .pl-en,
+.markdown-source-view .pl-ms {
+ font-weight: bold;
+ color: var(--color-prettylights-syntax-markup-heading);
+}
+
+.markdown-source-view .pl-mi {
+ font-style: italic;
+ color: var(--color-prettylights-syntax-markup-italic);
+}
+
+.markdown-source-view .pl-mb {
+ font-weight: bold;
+ color: var(--color-prettylights-syntax-markup-bold);
+}
+
+.markdown-source-view .pl-md {
+ color: var(--color-prettylights-syntax-markup-deleted-text);
+ background-color: var(--color-prettylights-syntax-markup-deleted-bg);
+}
+
+.markdown-source-view .pl-mi1 {
+ color: var(--color-prettylights-syntax-markup-inserted-text);
+ background-color: var(--color-prettylights-syntax-markup-inserted-bg);
+}
+
+.markdown-source-view .pl-mc {
+ color: var(--color-prettylights-syntax-markup-changed-text);
+ background-color: var(--color-prettylights-syntax-markup-changed-bg);
+}
+
+.markdown-source-view .pl-mi2 {
+ color: var(--color-prettylights-syntax-markup-ignored-text);
+ background-color: var(--color-prettylights-syntax-markup-ignored-bg);
+}
+
+.markdown-source-view .pl-mdr {
+ font-weight: bold;
+ color: var(--color-prettylights-syntax-meta-diff-range);
+}
+
+.markdown-source-view .pl-ba {
+ color: var(--color-prettylights-syntax-brackethighlighter-angle);
+}
+
+.markdown-source-view .pl-sg {
+ color: var(--color-prettylights-syntax-sublimelinter-gutter-mark);
+}
+
+.markdown-source-view .pl-corl {
+ text-decoration: underline;
+ color: var(--color-prettylights-syntax-constant-other-reference-link);
+}
+
+.markdown-source-view [role="button"]:focus:not(:focus-visible),
+.markdown-source-view [role="tabpanel"][tabindex="0"]:focus:not(:focus-visible),
+.markdown-source-view button:focus:not(:focus-visible),
+.markdown-source-view summary:focus:not(:focus-visible),
+.markdown-source-view a:focus:not(:focus-visible) {
+ outline: none;
+ box-shadow: none;
+}
+
+.markdown-source-view [tabindex="0"]:focus:not(:focus-visible),
+.markdown-source-view details-dialog:focus:not(:focus-visible) {
+ outline: none;
+}
+
+.markdown-source-view g-emoji {
+ display: inline-block;
+ min-width: 1ch;
+ font-family: "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
+ font-size: 1em;
+ font-style: normal !important;
+ font-weight: var(--base-text-weight-normal, 400);
+ line-height: 1;
+ vertical-align: -0.075em;
+}
+
+.markdown-source-view g-emoji img {
+ width: 1em;
+ height: 1em;
+}
+
+.markdown-source-view .task-list-item {
+ list-style-type: none;
+}
+
+.markdown-source-view .task-list-item label {
+ font-weight: var(--base-text-weight-normal, 400);
+}
+
+.markdown-source-view .task-list-item.enabled label {
+ cursor: pointer;
+}
+
+.markdown-source-view .task-list-item+.task-list-item {
+ margin-top: var(--base-size-4);
+}
+
+.markdown-source-view .task-list-item .handle {
+ display: none;
+}
+
+.markdown-source-view .task-list-item-checkbox {
+ margin: 0 0.2em 0.25em -1.4em;
+ vertical-align: middle;
+}
+
+.markdown-source-view ul:dir(rtl) .task-list-item-checkbox {
+ margin: 0 -1.6em 0.25em 0.2em;
+}
+
+.markdown-source-view ol:dir(rtl) .task-list-item-checkbox {
+ margin: 0 -1.6em 0.25em 0.2em;
+}
+
+.markdown-source-view .contains-task-list:hover .task-list-item-convert-container,
+.markdown-source-view .contains-task-list:focus-within .task-list-item-convert-container {
+ display: block;
+ width: auto;
+ height: 24px;
+ overflow: visible;
+ clip: auto;
+}
+
+.markdown-source-view ::-webkit-calendar-picker-indicator {
+ filter: invert(50%);
+}
+
+.markdown-source-view .markdown-alert {
+ padding: var(--base-size-8) var(--base-size-16);
+ margin-bottom: var(--base-size-16);
+ color: inherit;
+ border-left: 0.25em solid var(--borderColor-default);
+}
+
+.markdown-source-view .markdown-alert> :first-child {
+ margin-top: 0;
+}
+
+.markdown-source-view .markdown-alert> :last-child {
+ margin-bottom: 0;
+}
+
+.markdown-source-view .markdown-alert .markdown-alert-title {
+ display: flex;
+ font-weight: var(--base-text-weight-medium, 500);
+ align-items: center;
+ line-height: 1;
+}
+
+.markdown-source-view .markdown-alert.markdown-alert-note {
+ border-left-color: var(--borderColor-accent-emphasis);
+}
+
+.markdown-source-view .markdown-alert.markdown-alert-note .markdown-alert-title {
+ color: var(--fgColor-accent);
+}
+
+.markdown-source-view .markdown-alert.markdown-alert-important {
+ border-left-color: var(--borderColor-done-emphasis);
+}
+
+.markdown-source-view .markdown-alert.markdown-alert-important .markdown-alert-title {
+ color: var(--fgColor-done);
+}
+
+.markdown-source-view .markdown-alert.markdown-alert-warning {
+ border-left-color: var(--borderColor-attention-emphasis);
+}
+
+.markdown-source-view .markdown-alert.markdown-alert-warning .markdown-alert-title {
+ color: var(--fgColor-attention);
+}
+
+.markdown-source-view .markdown-alert.markdown-alert-tip {
+ border-left-color: var(--borderColor-success-emphasis);
+}
+
+.markdown-source-view .markdown-alert.markdown-alert-tip .markdown-alert-title {
+ color: var(--fgColor-success);
+}
+
+.markdown-source-view .markdown-alert.markdown-alert-caution {
+ border-left-color: var(--borderColor-danger-emphasis);
+}
+
+.markdown-source-view .markdown-alert.markdown-alert-caution .markdown-alert-title {
+ color: var(--fgColor-danger);
+}
+
+.markdown-source-view>*:first-child>.heading-element:first-child {
+ margin-top: 0 !important;
+}
+
+.markdown-source-view .highlight pre:has(+ .zeroclipboard-container) {
+ min-height: 52px;
+}
diff --git a/app/static/css/github-markdown.css b/app/static/css/github-markdown.css
deleted file mode 100644
index cff3bce..0000000
--- a/app/static/css/github-markdown.css
+++ /dev/null
@@ -1,14 +0,0 @@
-/* GitHub Markdown CSS (simplified version) */
-.markdown-body {
- box-sizing: border-box;
- min-width: 200px;
- max-width: 1000px;
- margin: 0 auto;
- padding: 45px;
-}
-
-@media (max-width: 767px) {
- .markdown-body {
- padding: 15px;
- }
-}
\ No newline at end of file
diff --git a/app/templates/dashboard/app_form.html b/app/templates/dashboard/app_form.html
index 9fe1666..73f80db 100644
--- a/app/templates/dashboard/app_form.html
+++ b/app/templates/dashboard/app_form.html
@@ -145,8 +145,15 @@
placeholder="Enter documentation in Markdown format">{{ app.documentation if app else '' }}
Use Markdown syntax
- to format your documentation. The content will be rendered when viewing the application.
+ to format your documentation. You can use GitHub-style alerts:
+
+ > [!NOTE] This is a note
+ > [!TIP] This is a tip
+ > [!IMPORTANT] Important info
+ > [!WARNING] Warning message
+ > [!CAUTION] Critical caution
+