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)": '

Note

\\1
', - r"> \[!TIP\](.*?)(?:\n\n|\Z)": '

Tip

\\1
', - r"> \[!IMPORTANT\](.*?)(?:\n\n|\Z)": '

Important

\\1
', - r"> \[!WARNING\](.*?)(?:\n\n|\Z)": '

Warning

\\1
', - r"> \[!CAUTION\](.*?)(?:\n\n|\Z)": '

Caution

\\1
', - } - - 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 +