reviw 1.2.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server/server.js +1 -1
- package/dist/ui/ui.js +236 -155
- package/package.json +1 -1
package/dist/server/server.js
CHANGED
|
@@ -4073,7 +4073,7 @@ function _M0FP36kazuph5reviw4core26build__page__start_2einner(buf, filename, fil
|
|
|
4073
4073
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11/build/styles/github.min.css\" id=\"hljs-theme-light\">");
|
|
4074
4074
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<script src=\"https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11/build/highlight.min.js\"></script>");
|
|
4075
4075
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<style>");
|
|
4076
|
-
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "/* Dark theme (default) */\n:root {\n color-scheme: dark;\n --bg: #0f172a;\n --bg-gradient: radial-gradient(circle at 20% 20%, #1e293b 0%, #0b1224 35%, #0b1224 60%, #0f172a 100%);\n --panel: #111827;\n --panel-alpha: rgba(15, 23, 42, 0.9);\n --panel-solid: #0b1224;\n --card-bg: rgba(11, 18, 36, 0.95);\n --input-bg: rgba(15, 23, 42, 0.6);\n --border: #1f2937;\n --accent: #60a5fa;\n --accent-2: #f472b6;\n --text: #e5e7eb;\n --text-inverse: #0b1224;\n --muted: #94a3b8;\n --comment: #0f766e;\n --badge: #22c55e;\n --table-bg: rgba(15, 23, 42, 0.7);\n --row-even: rgba(30, 41, 59, 0.4);\n --row-odd: rgba(15, 23, 42, 0.2);\n --selected-bg: rgba(96,165,250,0.15);\n --hover-bg: rgba(96,165,250,0.08);\n --shadow-color: rgba(0,0,0,0.35);\n --code-bg: #1e293b;\n --error: #dc3545;\n}\n/* Light theme */\n[data-theme=\"light\"] {\n color-scheme: light;\n --bg: #f8fafc;\n --bg-gradient: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);\n --panel: #ffffff;\n --panel-alpha: rgba(255, 255, 255, 0.95);\n --panel-solid: #ffffff;\n --card-bg: rgba(255, 255, 255, 0.98);\n --input-bg: #f1f5f9;\n --border: #e2e8f0;\n --accent: #3b82f6;\n --accent-2: #ec4899;\n --text: #1e293b;\n --text-inverse: #ffffff;\n --muted: #64748b;\n --comment: #14b8a6;\n --badge: #22c55e;\n --table-bg: #ffffff;\n --row-even: #f8fafc;\n --row-odd: #ffffff;\n --selected-bg: rgba(59,130,246,0.12);\n --hover-bg: rgba(59,130,246,0.06);\n --shadow-color: rgba(0,0,0,0.1);\n --code-bg: #f1f5f9;\n --error: #dc3545;\n}\n* { box-sizing: border-box; }\nbody {\n margin: 0;\n font-family: \"Inter\", \"Hiragino Sans\", system-ui, -apple-system, sans-serif;\n background: var(--bg-gradient);\n color: var(--text);\n min-height: 100vh;\n transition: background 200ms ease, color 200ms ease;\n}\nheader {\n position: sticky;\n top: 0;\n z-index: 5;\n padding: 12px 16px;\n background: var(--panel-alpha);\n backdrop-filter: blur(8px);\n border-bottom: 1px solid var(--border);\n display: flex;\n gap: 12px;\n align-items: center;\n justify-content: space-between;\n transition: background 200ms ease, border-color 200ms ease;\n}\nheader .meta { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }\nheader .actions { display: flex; gap: 8px; align-items: center; }\nheader h1 { display: flex; flex-direction: column; margin: 0; line-height: 1.3; }\nheader h1 .title-path { font-size: 11px; font-weight: 400; color: var(--muted); }\nheader h1 .title-file { font-size: 16px; font-weight: 700; }\nheader .badge {\n background: var(--selected-bg);\n color: var(--text);\n padding: 6px 10px;\n border-radius: 8px;\n font-size: 12px;\n border: 1px solid var(--border);\n}\nheader button {\n background: linear-gradient(135deg, #38bdf8, #6366f1);\n color: var(--text-inverse);\n border: none;\n border-radius: 10px;\n padding: 10px 14px;\n font-weight: 700;\n cursor: pointer;\n box-shadow: 0 10px 30px var(--shadow-color);\n transition: transform 120ms ease, box-shadow 120ms ease;\n}\nheader button:hover { transform: translateY(-1px); box-shadow: 0 16px 36px var(--shadow-color); }\nheader button:active { transform: translateY(0); }\n/* Theme toggle button */\n.theme-toggle {\n background: var(--selected-bg);\n color: var(--text);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 8px 10px;\n font-size: 16px;\n cursor: pointer;\n transition: background 120ms ease, transform 120ms ease;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 38px;\n height: 38px;\n}\n.theme-toggle:hover { background: var(--hover-bg); transform: scale(1.05); }\n\n.wrap { padding: 12px 16px 12px; }\n.toolbar {\n display: flex;\n gap: 12px;\n align-items: center;\n flex-wrap: wrap;\n margin: 10px 0 12px;\n color: var(--muted);\n font-size: 13px;\n}\n.toolbar button {\n background: rgba(96,165,250,0.12);\n color: var(--text);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 8px 10px;\n font-size: 13px;\n cursor: pointer;\n}\n.toolbar button:hover { background: rgba(96,165,250,0.2); }\n\n.table-box {\n background: var(--table-bg);\n border: 1px solid var(--border);\n border-radius: 12px;\n overflow: auto;\n max-height: calc(100vh - 110px);\n box-shadow: 0 20px 50px var(--shadow-color);\n transition: background 200ms ease, border-color 200ms ease;\n}\ntable {\n border-collapse: collapse;\n width: 100%;\n min-width: 540px;\n table-layout: fixed;\n}\nthead th {\n position: sticky;\n top: 0;\n z-index: 3;\n background: var(--panel-solid) !important;\n color: var(--muted);\n font-size: 12px;\n text-align: center;\n padding: 0;\n border-bottom: 1px solid var(--border);\n border-right: 1px solid var(--border);\n white-space: nowrap;\n transition: background 200ms ease;\n}\nthead th:not(.selected) {\n background: var(--panel-solid) !important;\n}\nthead th:first-child,\ntbody th {\n width: 28px;\n min-width: 28px;\n max-width: 28px;\n}\nthead th .th-inner {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n padding: 8px 6px;\n position: relative;\n height: 100%;\n}\nthead th.filtered .th-inner {\n background: linear-gradient(135deg, rgba(96,165,250,0.18), rgba(34,197,94,0.18));\n color: #e5e7eb;\n border-radius: 6px;\n box-shadow: inset 0 -1px 0 rgba(255,255,255,0.05);\n}\nthead th.filtered .th-inner::after {\n content: 'FILTER';\n font-size: 10px;\n color: #c7d2fe;\n background: rgba(99,102,241,0.24);\n border: 1px solid rgba(99,102,241,0.45);\n padding: 1px 6px;\n border-radius: 999px;\n position: absolute;\n bottom: 4px;\n right: 6px;\n}\n.resizer {\n position: absolute;\n right: 2px;\n top: 0;\n width: 6px;\n height: 100%;\n cursor: col-resize;\n user-select: none;\n touch-action: none;\n opacity: 0.6;\n}\n.resizer::after {\n content: '';\n position: absolute;\n top: 10%;\n bottom: 10%;\n left: 2px;\n width: 2px;\n background: rgba(96,165,250,0.6);\n border-radius: 2px;\n opacity: 0;\n transition: opacity 120ms ease;\n}\nthead th:hover .resizer::after { opacity: 1; }\n\n.freeze {\n position: sticky !important;\n background: var(--panel-solid);\n z-index: 4;\n}\n.freeze-row {\n position: sticky !important;\n background: var(--panel-solid);\n}\n.freeze-row.freeze {\n z-index: 6;\n}\nth.freeze-row {\n z-index: 6;\n}\ntbody th {\n position: sticky;\n left: 0;\n z-index: 2;\n background: var(--panel-solid);\n color: var(--muted);\n text-align: right;\n padding: 8px 10px;\n font-size: 12px;\n border-right: 1px solid var(--border);\n border-bottom: 1px solid var(--border);\n transition: background 200ms ease;\n}\ntd {\n padding: 10px 10px;\n border-bottom: 1px solid var(--border);\n border-right: 1px solid var(--border);\n background: var(--row-odd);\n color: var(--text);\n font-size: 13px;\n line-height: 1.45;\n cursor: pointer;\n transition: background 120ms ease, box-shadow 120ms ease;\n position: relative;\n white-space: pre-wrap;\n word-break: break-word;\n max-width: 320px;\n}\ntr:nth-child(even) td:not(.selected):not(.has-comment) { background: var(--row-even); }\ntd:hover:not(.selected) { background: var(--hover-bg); box-shadow: inset 0 0 0 1px rgba(96,165,250,0.25); }\ntd.has-comment { background: rgba(34,197,94,0.12); box-shadow: inset 0 0 0 1px rgba(34,197,94,0.35); }\ntd.selected, tbody th.selected { background: rgba(99,102,241,0.22) !important; box-shadow: inset 0 0 0 1px rgba(99,102,241,0.45); }\n.preview-highlight { background: rgba(167,139,250,0.18) !important; box-shadow: inset 0 0 0 2px rgba(139,92,246,0.35); border-radius: 4px; transition: background 150ms ease, box-shadow 150ms ease; padding-left: 8px; margin-left: -8px; }\nthead th.selected { background: #c7d2fe !important; box-shadow: inset 0 0 0 1px rgba(99,102,241,0.45); }\n[data-theme=\"dark\"] thead th.selected { background: #3730a3 !important; }\nbody.dragging { user-select: none; cursor: crosshair; }\nbody.dragging td, body.dragging tbody th { cursor: crosshair; }\ntbody th { cursor: pointer; }\ntd .dot {\n position: absolute;\n right: 6px;\n top: 6px;\n width: 8px;\n height: 8px;\n border-radius: 99px;\n background: var(--badge);\n box-shadow: 0 0 0 4px rgba(34,197,94,0.15);\n}\n.floating {\n position: fixed;\n z-index: 10;\n background: var(--panel-solid);\n border: 1px solid var(--border);\n border-radius: 12px;\n padding: 12px;\n width: min(420px, calc(100vw - 32px));\n box-shadow: 0 20px 40px var(--shadow-color);\n display: none;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.card-close-x {\n position: absolute;\n top: 8px;\n right: 8px;\n width: 28px;\n height: 28px;\n padding: 0;\n background: transparent;\n border: none;\n color: var(--muted);\n font-size: 20px;\n line-height: 1;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n transition: background 120ms ease, color 120ms ease;\n}\n.card-close-x:hover { background: var(--border); color: var(--text);\n}\n.floating header {\n position: static;\n background: transparent;\n backdrop-filter: none;\n border: none;\n padding: 0 0 8px 0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.floating h2 { font-size: 14px; margin: 0; color: var(--text); }\n.floating button {\n margin-left: 8px;\n background: var(--accent);\n color: var(--text-inverse);\n border: 1px solid var(--accent);\n padding: 6px 10px;\n border-radius: 8px;\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n transition: background 120ms ease, opacity 120ms ease;\n}\n.floating button.icon-only {\n width: 32px;\n height: 32px;\n padding: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n line-height: 1;\n}\n.floating button:hover { opacity: 0.85; }\n.copy-btn-float {\n position: absolute;\n top: 4px;\n right: 4px;\n z-index: 2;\n background: var(--panel-solid) !important;\n border: 1px solid var(--border) !important;\n color: var(--muted) !important;\n opacity: 0.7;\n}\n.copy-btn-float:hover { opacity: 1 !important; }\n.card-actions-split {\n display: flex;\n justify-content: space-between !important;\n align-items: center;\n margin-top: 8px;\n}\n.danger-text {\n background: transparent !important;\n border: none !important;\n color: #ef4444 !important;\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n padding: 4px 8px;\n}\n.danger-text:hover { color: #dc2626 !important; text-decoration: underline; }\n.floating textarea {\n width: 100%;\n min-height: 70px;\n resize: vertical;\n border-radius: 8px;\n border: 1px solid var(--border);\n background: var(--input-bg);\n color: var(--text);\n padding: 10px;\n font-size: 13px;\n line-height: 1.4;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.floating textarea:focus {\n outline: none;\n border-color: var(--accent);\n}\n.floating .actions {\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n margin-top: 10px;\n}\n.floating .actions button.primary {\n background: linear-gradient(135deg, #22c55e, #16a34a);\n color: var(--text-inverse);\n border: none;\n font-weight: 700;\n box-shadow: 0 10px 30px rgba(22,163,74,0.35);\n}\n.comment-list {\n position: fixed;\n right: 14px;\n bottom: 14px;\n width: 320px;\n max-height: 60vh;\n overflow: auto;\n border: 1px solid var(--border);\n border-radius: 12px;\n background: var(--card-bg);\n box-shadow: 0 18px 40px var(--shadow-color);\n padding: 12px;\n backdrop-filter: blur(6px);\n transition: opacity 120ms ease, transform 120ms ease, background 200ms ease;\n}\n.comment-list h3 { margin: 0 0 8px 0; font-size: 13px; color: var(--muted); }\n.comment-list ol {\n margin: 0;\n padding-left: 18px;\n color: var(--text);\n font-size: 13px;\n line-height: 1.45;\n}\n.comment-list li { margin-bottom: 6px; }\n.comment-list .hint { color: var(--muted); font-size: 12px; }\n.pill { display: inline-flex; align-items: center; gap: 6px; padding: 4px 8px; border-radius: 999px; background: var(--selected-bg); border: 1px solid var(--border); font-size: 12px; color: var(--text); cursor: pointer; transition: background 150ms ease, border-color 150ms ease; }\n.pill:hover { background: var(--hover-bg); border-color: var(--accent); }\n.pill strong { color: var(--text); font-weight: 700; }\n.comment-list.collapsed {\n opacity: 0;\n pointer-events: none;\n transform: translateY(8px) scale(0.98);\n}\n.md-preview {\n background: var(--input-bg);\n border: 1px solid var(--border);\n border-radius: 12px;\n padding: 14px;\n margin-bottom: 12px;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.md-layout {\n display: flex;\n gap: 16px;\n align-items: stretch;\n margin-top: 8px;\n height: calc(100vh - 80px);\n}\n.md-left {\n flex: 1;\n min-width: 200px;\n overflow-y: auto;\n overflow-x: auto;\n overscroll-behavior: contain;\n}\n.md-left .md-preview {\n max-height: none;\n}\n.md-right {\n flex: 1;\n min-width: 0;\n overflow-y: auto;\n overflow-x: auto;\n overscroll-behavior: contain;\n}\n.md-right .table-box {\n max-width: none;\n min-width: 0;\n max-height: none;\n overflow: visible;\n}\n/* Ensure thead is opaque in md-right to prevent content showing through */\n.md-right thead th {\n background: var(--panel-solid) !important;\n}\n.md-right thead th.selected {\n background: #c7d2fe !important;\n}\n[data-theme=\"dark\"] .md-right thead th {\n background: var(--panel-solid) !important;\n}\n[data-theme=\"dark\"] .md-right thead th.selected {\n background: #3730a3 !important;\n}\n\n/* === Media Sidebar === */\n.media-sidebar {\n display: flex;\n flex-shrink: 0;\n height: calc(100vh - 80px);\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n position: relative;\n z-index: 10;\n max-width: 60%;\n}\n.media-sidebar.hidden {\n display: none;\n}\n.media-sidebar-thumbs {\n width: 96px;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 8px;\n border-right: 1px solid var(--border);\n display: flex;\n flex-direction: column;\n gap: 8px;\n background: var(--panel);\n scrollbar-width: thin;\n scrollbar-color: var(--border) transparent;\n}\n.media-sidebar-thumbs::-webkit-scrollbar {\n width: 4px;\n}\n.media-sidebar-thumbs::-webkit-scrollbar-track {\n background: transparent;\n}\n.media-sidebar-thumbs::-webkit-scrollbar-thumb {\n background: var(--border);\n border-radius: 4px;\n}\n.media-sidebar-thumb {\n width: 80px;\n height: 60px;\n border-radius: 6px;\n border: 2px solid var(--border);\n overflow: hidden;\n cursor: pointer;\n position: relative;\n flex-shrink: 0;\n background: var(--bg);\n transition: border-color 0.2s ease, transform 0.15s ease, box-shadow 0.2s ease;\n}\n.media-sidebar-thumb:hover {\n border-color: var(--accent);\n transform: scale(1.05);\n box-shadow: 0 2px 8px var(--shadow-color);\n}\n.media-sidebar-thumb.active {\n border-color: var(--accent);\n box-shadow: 0 0 0 2px var(--accent), 0 2px 8px var(--shadow-color);\n}\n.media-sidebar-thumb img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n}\n.media-sidebar-thumb svg {\n width: 100%;\n height: 100%;\n display: block;\n}\n.media-sidebar-thumb-video {\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #000;\n}\n.media-sidebar-thumb-video video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n.media-sidebar-thumb-video::after {\n content: '';\n position: absolute;\n width: 24px;\n height: 24px;\n background: rgba(255,255,255,0.85);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.media-sidebar-thumb-video::before {\n content: '';\n position: absolute;\n z-index: 1;\n width: 0;\n height: 0;\n border-style: solid;\n border-width: 5px 0 5px 9px;\n border-color: transparent transparent transparent #000;\n margin-left: 2px;\n}\n.media-sidebar-thumb-mermaid {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n padding: 2px;\n background: var(--panel);\n overflow: hidden;\n}\n.media-sidebar-thumb-mermaid svg {\n width: 100% !important;\n height: 100% !important;\n max-width: 100%;\n max-height: 100%;\n display: block;\n}\n.media-sidebar-thumb-index {\n position: absolute;\n top: 2px;\n left: 2px;\n background: rgba(0,0,0,0.6);\n color: #fff;\n font-size: 9px;\n font-weight: 600;\n padding: 1px 4px;\n border-radius: 3px;\n line-height: 1.2;\n pointer-events: none;\n z-index: 1;\n}\n.media-sidebar-viewer {\n width: 0;\n overflow: hidden;\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n background: var(--bg);\n position: relative;\n}\n.media-sidebar-viewer.open {\n width: 45vw;\n max-width: calc(100vw - 400px);\n overflow: hidden;\n padding: 16px;\n border-right: 1px solid var(--border);\n display: flex;\n flex-direction: column;\n}\n.media-sidebar-viewer-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n padding-top: 32px;\n}\n.media-sidebar-viewer-content img {\n max-width: 100%;\n max-height: calc(100vh - 170px);\n object-fit: contain;\n border-radius: 8px;\n}\n.media-sidebar-viewer-content video {\n max-width: 100%;\n max-height: calc(100vh - 170px);\n border-radius: 8px;\n background: #000;\n}\n.media-sidebar-viewer-content .viewer-mermaid-wrap {\n width: 100%;\n overflow: auto;\n display: flex;\n justify-content: center;\n background: var(--panel);\n border-radius: 8px;\n padding: 16px;\n}\n.media-sidebar-viewer-content .viewer-mermaid-wrap svg {\n width: 100% !important;\n height: auto !important;\n max-height: calc(100vh - 200px);\n}\n\n/* === Sidebar Rich Viewer: Mermaid zoom/pan/minimap === */\n.sidebar-mermaid-controls {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 10px;\n background: var(--panel-alpha);\n border: 1px solid var(--border);\n border-radius: 8px;\n margin-bottom: 8px;\n width: 100%;\n box-sizing: border-box;\n}\n.sidebar-mermaid-controls button {\n background: var(--selected-bg);\n border: 1px solid var(--border);\n border-radius: 5px;\n padding: 4px 10px;\n cursor: pointer;\n color: var(--text);\n font-size: 13px;\n line-height: 1;\n transition: background 0.15s ease;\n}\n.sidebar-mermaid-controls button:hover { background: var(--hover-bg); }\n.sidebar-mermaid-controls .sidebar-zoom-info {\n font-size: 11px;\n color: var(--muted);\n min-width: 40px;\n text-align: center;\n user-select: none;\n}\n.sidebar-mermaid-viewport {\n width: 100%;\n flex: 1;\n overflow: hidden;\n position: relative;\n cursor: grab;\n background: var(--panel);\n border-radius: 8px;\n border: 1px solid var(--border);\n}\n.sidebar-mermaid-viewport:active { cursor: grabbing; }\n.sidebar-mermaid-wrapper {\n position: absolute;\n transform-origin: 0 0;\n}\n.sidebar-mermaid-wrapper svg {\n display: block;\n}\n.sidebar-minimap {\n position: absolute;\n top: 12px;\n right: 8px;\n bottom: auto;\n left: auto;\n width: 140px;\n height: 100px;\n background: var(--panel-alpha);\n border: 1px solid var(--border);\n border-radius: 6px;\n overflow: hidden;\n box-shadow: 0 2px 8px rgba(0,0,0,0.12);\n z-index: 3;\n}\n.sidebar-minimap-content {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 6px;\n}\n.sidebar-minimap-content svg {\n max-width: 100%;\n max-height: 100%;\n opacity: 0.6;\n}\n.sidebar-minimap-viewport {\n position: absolute;\n border: 2px solid var(--accent);\n background: rgba(102, 126, 234, 0.2);\n pointer-events: none;\n border-radius: 2px;\n}\n\n/* === Sidebar Rich Viewer: Image zoom/pan === */\n.sidebar-image-viewport {\n width: 100%;\n flex: 1;\n overflow: hidden;\n position: relative;\n cursor: grab;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.sidebar-image-viewport.panning { cursor: grabbing; }\n.sidebar-image-viewport img {\n transform-origin: 0 0;\n max-width: none !important;\n max-height: none !important;\n border-radius: 0 !important;\n user-select: none;\n -webkit-user-drag: none;\n}\n.sidebar-zoom-indicator {\n position: absolute;\n bottom: 10px;\n left: 50%;\n transform: translateX(-50%);\n background: rgba(0, 0, 0, 0.65);\n color: #fff;\n font-size: 11px;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n pointer-events: none;\n z-index: 3;\n backdrop-filter: blur(4px);\n transition: opacity 0.3s ease;\n user-select: none;\n}\n.sidebar-zoom-indicator.hidden { opacity: 0; }\n.sidebar-image-hint {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 11px;\n color: var(--muted);\n pointer-events: none;\n opacity: 0;\n transition: opacity 0.4s ease;\n text-align: center;\n z-index: 2;\n}\n\n/* === Sidebar Rich Viewer: Video container (timeline uses shared .video-timeline classes) === */\n.sidebar-video-container {\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: 0;\n}\n.sidebar-video-container video {\n width: 100%;\n border-radius: 8px 8px 0 0;\n background: #000;\n max-height: calc(100vh - 260px);\n}\n\n.media-sidebar-viewer-label {\n margin-top: 12px;\n font-size: 12px;\n color: var(--muted);\n text-align: center;\n word-break: break-all;\n}\n.media-sidebar-viewer-close {\n position: absolute;\n top: 8px;\n right: 8px;\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 6px;\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n color: var(--text);\n font-size: 14px;\n z-index: 2;\n transition: background 0.15s ease;\n}\n.media-sidebar-viewer-close:hover {\n background: var(--hover-bg);\n}\n.sidebar-viewer-settings-btn {\n position: absolute;\n top: 8px;\n right: 44px;\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 6px;\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n color: var(--text);\n font-size: 14px;\n z-index: 2;\n transition: background 0.15s ease;\n}\n.sidebar-viewer-settings-btn:hover {\n background: var(--hover-bg);\n}\n.sidebar-viewer-settings-btn + .video-settings-panel {\n position: absolute;\n top: 44px;\n right: 8px;\n}\n\n.media-sidebar-toggle {\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 6px 10px;\n cursor: pointer;\n color: var(--text);\n font-size: 14px;\n transition: background 0.15s ease, border-color 0.15s ease;\n display: none;\n}\n.media-sidebar-toggle.has-media {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n.media-sidebar-toggle:hover {\n background: var(--hover-bg);\n border-color: var(--accent);\n}\n.media-sidebar-toggle .toggle-count {\n font-size: 10px;\n font-weight: 700;\n background: var(--accent);\n color: var(--text-inverse);\n padding: 1px 5px;\n border-radius: 8px;\n line-height: 1.4;\n}\n.view-toggle {\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 6px 10px;\n cursor: pointer;\n color: var(--text);\n font-size: 14px;\n transition: background 0.15s ease, border-color 0.15s ease;\n}\n.view-toggle:hover { background: rgba(96,165,250,0.2); }\n.view-toggle.active { background: var(--accent); color: #fff; }\n@media (max-width: 1200px) {\n .media-sidebar-viewer.open {\n width: 40vw;\n max-width: calc(100vw - 350px);\n }\n}\n@media (max-width: 900px) {\n .media-sidebar-thumbs {\n width: 72px;\n }\n .media-sidebar-thumb {\n width: 56px;\n height: 42px;\n }\n .media-sidebar-viewer.open {\n width: 35vw;\n max-width: calc(100vw - 300px);\n }\n}\n@media (prefers-reduced-motion: reduce) {\n .media-sidebar,\n .media-sidebar-viewer,\n .media-sidebar-thumb {\n transition: none !important;\n }\n}\n\n.md-preview h1, .md-preview h2, .md-preview h3, .md-preview h4 {\n margin: 0.4em 0 0.2em;\n}\n/* Heading toggle feature */\n.md-preview .md-heading-toggle {\n margin: 0;\n}\n.md-preview .heading-toggle-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 0.6em;\n transition: transform 150ms ease;\n color: var(--muted);\n flex-shrink: 0;\n cursor: pointer;\n padding: 4px 8px;\n margin: -4px 0 -4px -8px;\n border-radius: 4px;\n}\n.md-preview .heading-toggle-icon:hover {\n background: var(--hover-bg);\n color: var(--accent);\n}\n.md-preview .md-heading-toggle.collapsed .heading-toggle-icon {\n transform: rotate(-90deg);\n}\n.md-preview details.heading-toggle {\n margin: 0.2em 0;\n}\n.md-preview details.heading-toggle > summary {\n list-style: none;\n cursor: default;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.md-preview details.heading-toggle > summary::-webkit-details-marker {\n display: none;\n}\n.md-preview details.heading-toggle > summary > .md-heading-toggle {\n flex: 1;\n}\n.md-preview details.heading-toggle:not([open]) > .toggle-content {\n display: none;\n}\n.md-preview .heading-section-content {\n /* Content wrapper for collapsible sections */\n}\n.md-preview .heading-section-content.hidden {\n display: none;\n}\n.md-preview p { margin: 0.3em 0; line-height: 1.5; }\n.md-preview img { max-width: 100%; height: auto; border-radius: 8px; }\n.md-preview video.video-preview { max-width: 100%; height: auto; border-radius: 8px; background: #000; }\n.md-preview table video.video-preview {\n display: block;\n width: 100%;\n height: auto;\n}\n.md-preview code { background: rgba(255,255,255,0.08); padding: 2px 4px; border-radius: 4px; }\n.md-preview pre {\n background: var(--code-bg);\n padding: 12px 16px;\n border-radius: 8px;\n overflow: auto;\n border: 1px solid var(--border);\n}\n.md-preview pre code {\n background: none;\n padding: 0;\n font-size: 13px;\n line-height: 1.5;\n}\n.md-preview pre code.hljs {\n background: transparent;\n padding: 0;\n}\n/* YAML Frontmatter table */\n.frontmatter-table {\n margin-bottom: 20px;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--border);\n background: var(--panel);\n}\n.frontmatter-table table {\n width: 100%;\n border-collapse: collapse;\n table-layout: fixed;\n}\n.frontmatter-table thead th {\n background: linear-gradient(135deg, rgba(147, 51, 234, 0.15), rgba(96, 165, 250, 0.15));\n color: var(--text);\n font-size: 12px;\n font-weight: 600;\n padding: 10px 16px;\n text-align: left;\n border-bottom: 1px solid var(--border);\n}\n.frontmatter-table tbody th {\n background: rgba(147, 51, 234, 0.08);\n color: #c084fc;\n font-weight: 500;\n font-size: 12px;\n padding: 8px 10px;\n text-align: left;\n border-bottom: 1px solid var(--border);\n vertical-align: top;\n}\n.frontmatter-table tbody td {\n padding: 8px 14px;\n font-size: 13px;\n border-bottom: 1px solid var(--border);\n word-break: break-word;\n}\n.frontmatter-table tbody tr:last-child th,\n.frontmatter-table tbody tr:last-child td {\n border-bottom: none;\n}\n.frontmatter-table .fm-tag {\n display: inline-block;\n background: rgba(96, 165, 250, 0.15);\n color: var(--accent);\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 11px;\n margin-right: 4px;\n margin-bottom: 4px;\n}\n.frontmatter-table pre {\n margin: 0;\n background: var(--code-bg);\n padding: 8px;\n border-radius: 4px;\n font-size: 11px;\n}\n/* Reviw questions preview cards */\n.reviw-questions-preview {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.reviw-q-card {\n background: var(--code-bg);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 10px 12px;\n}\n.reviw-q-card.resolved {\n border-left: 3px solid #22c55e;\n}\n.reviw-q-card.pending {\n border-left: 3px solid #f59e0b;\n}\n.reviw-q-header {\n font-size: 12px;\n color: var(--text-dim);\n margin-bottom: 4px;\n}\n.reviw-q-header strong {\n color: var(--accent);\n}\n.reviw-q-question {\n font-size: 13px;\n color: var(--text);\n margin-bottom: 6px;\n}\n.reviw-q-options {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n margin-bottom: 6px;\n}\n.reviw-q-answer {\n font-size: 12px;\n color: #22c55e;\n background: rgba(34, 197, 94, 0.1);\n padding: 4px 8px;\n border-radius: 4px;\n}\n[data-theme=\"light\"] .frontmatter-table tbody th {\n color: #7c3aed;\n}\n/* Table scroll container and indicator */\n.table-scroll-container {\n position: relative;\n margin: 16px 0;\n}\n.table-scroll-wrapper {\n overflow-x: auto;\n border-radius: 8px;\n}\n.scroll-hint {\n text-align: right;\n font-size: 12px;\n color: var(--accent);\n padding: 4px 8px;\n margin-bottom: 4px;\n opacity: 0;\n visibility: hidden;\n transition: opacity 200ms ease;\n}\n.table-scroll-container.can-scroll .scroll-hint {\n opacity: 0.8;\n visibility: visible;\n}\n.table-scroll-container.scrolled-end .scroll-hint {\n opacity: 0;\n visibility: hidden;\n}\n/* Markdown tables in preview */\n.md-preview table:not(.frontmatter-table table) {\n min-width: 100%;\n width: max-content;\n border-collapse: collapse;\n border: 1px solid var(--border);\n border-radius: 8px;\n}\n.md-preview table:not(.frontmatter-table table) th,\n.md-preview table:not(.frontmatter-table table) td {\n padding: 10px 16px;\n text-align: left;\n border-bottom: 1px solid var(--border);\n vertical-align: top;\n word-break: break-word;\n overflow-wrap: anywhere;\n width: auto;\n}\n/* Force equal column widths when colgroup is not specified */\n.md-preview table:not(.frontmatter-table table) colgroup ~ * th,\n.md-preview table:not(.frontmatter-table table) colgroup ~ * td {\n width: auto;\n}\n.md-preview table:not(.frontmatter-table table) td:has(video),\n.md-preview table:not(.frontmatter-table table) td:has(img) {\n padding: 4px;\n line-height: 0;\n}\n.md-preview table:not(.frontmatter-table table) td video,\n.md-preview table:not(.frontmatter-table table) td img {\n width: 100%;\n max-width: 100%;\n height: auto;\n}\n.md-preview table:not(.frontmatter-table table) th {\n background: var(--panel);\n font-weight: 600;\n font-size: 13px;\n}\n.md-preview table:not(.frontmatter-table table) td {\n font-size: 13px;\n}\n.md-preview table:not(.frontmatter-table table) tr:last-child td {\n border-bottom: none;\n}\n.md-preview table:not(.frontmatter-table table) tr:hover td {\n background: var(--hover-bg);\n}\n/* Source table (右ペイン) */\n.table-box table {\n table-layout: fixed;\n width: 100%;\n}\n.table-box th,\n.table-box td {\n word-break: break-word;\n min-width: 140px;\n}\n.table-box th:first-child,\n.table-box td:first-child {\n min-width: 320px;\n max-width: 480px;\n}\n/* Image fullscreen overlay */\n.image-fullscreen-overlay {\n position: fixed;\n inset: 0;\n background: var(--bg);\n z-index: 1001;\n display: none;\n flex-direction: column;\n}\n.image-fullscreen-overlay.visible {\n display: flex;\n}\n.image-fs-content {\n flex: 1;\n overflow: hidden;\n position: relative;\n cursor: grab;\n touch-action: none;\n}\n.image-fs-content:active { cursor: grabbing; }\n.image-fs-content .image-fs-wrapper {\n position: absolute;\n transform-origin: 0 0;\n}\n.image-fs-content .image-fs-wrapper img {\n display: block;\n}\n/* Video fullscreen overlay */\n.video-fullscreen-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.95);\n z-index: 1001;\n display: none;\n justify-content: center;\n align-items: center;\n}\n.video-fullscreen-overlay.visible {\n display: flex;\n}\n.video-close-btn {\n position: absolute;\n top: 14px;\n right: 14px;\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.55);\n border: 1px solid rgba(255, 255, 255, 0.25);\n border-radius: 50%;\n cursor: pointer;\n color: #fff;\n font-size: 18px;\n z-index: 10;\n backdrop-filter: blur(4px);\n transition: background 120ms ease, transform 120ms ease;\n}\n.video-close-btn:hover {\n background: rgba(0, 0, 0, 0.75);\n transform: scale(1.04);\n}\n.video-container {\n width: 90vw;\n height: 90vh;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.video-container video {\n width: 100%;\n height: 100%;\n object-fit: contain;\n border-radius: 8px;\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);\n}\n/* Video Timeline - shared base styles (used by both fullscreen and sidebar) */\n.video-timeline {\n background: rgba(0, 0, 0, 0.85);\n display: flex;\n overflow-x: auto;\n backdrop-filter: blur(8px);\n height: 80px;\n padding: 8px;\n gap: 4px;\n}\n.video-timeline::-webkit-scrollbar {\n height: 6px;\n}\n.video-timeline::-webkit-scrollbar-track {\n background: rgba(255, 255, 255, 0.1);\n border-radius: 3px;\n}\n.video-timeline::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.3);\n border-radius: 3px;\n}\n.video-timeline::-webkit-scrollbar-thumb:hover {\n background: rgba(255, 255, 255, 0.5);\n}\n/* Fullscreen-specific video timeline positioning */\n.video-container .video-timeline {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 5;\n}\n/* Sidebar-specific video timeline sizing */\n.sidebar-video-container .video-timeline {\n width: 100%;\n height: 72px;\n padding: 6px;\n gap: 3px;\n border-radius: 0 0 8px 8px;\n background: rgba(0, 0, 0, 0.88);\n}\n.sidebar-video-container .video-timeline::-webkit-scrollbar { height: 5px; }\n.sidebar-video-container .video-timeline::-webkit-scrollbar-track { background: rgba(255, 255, 255, 0.08); }\n.sidebar-video-container .video-timeline::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.25); }\n.sidebar-video-container .video-timeline::-webkit-scrollbar-thumb:hover { background: rgba(255, 255, 255, 0.4); }\n.timeline-thumb {\n height: 64px;\n cursor: pointer;\n border: 2px solid transparent;\n border-radius: 4px;\n flex-shrink: 0;\n transition: border-color 0.2s, transform 0.15s;\n opacity: 0.85;\n}\n.sidebar-video-container .timeline-thumb {\n height: 52px;\n opacity: 0.8;\n}\n.timeline-thumb:hover {\n border-color: rgba(59, 130, 246, 0.5);\n opacity: 1;\n transform: scale(1.05);\n}\n.timeline-thumb.active {\n border-color: #3b82f6;\n opacity: 1;\n box-shadow: 0 0 12px rgba(59, 130, 246, 0.5);\n}\n.sidebar-video-container .timeline-thumb.active {\n box-shadow: 0 0 8px rgba(59, 130, 246, 0.4);\n}\n.timeline-loading {\n color: rgba(255, 255, 255, 0.6);\n font-size: 12px;\n padding: 8px 12px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.sidebar-video-container .timeline-loading {\n font-size: 11px;\n padding: 6px 10px;\n gap: 6px;\n color: rgba(255, 255, 255, 0.5);\n}\n.timeline-loading::before {\n content: '';\n width: 14px;\n height: 14px;\n border: 2px solid rgba(255, 255, 255, 0.3);\n border-top-color: #3b82f6;\n border-radius: 50%;\n animation: timeline-spin 0.8s linear infinite;\n}\n.sidebar-video-container .timeline-loading::before {\n width: 12px;\n height: 12px;\n border-width: 2px;\n border-color: rgba(255, 255, 255, 0.25);\n border-top-color: #3b82f6;\n}\n@keyframes timeline-spin {\n to { transform: rotate(360deg); }\n}\n.timeline-time {\n position: absolute;\n bottom: 2px;\n right: 4px;\n font-size: 9px;\n color: #fff;\n background: rgba(0, 0, 0, 0.7);\n padding: 1px 4px;\n border-radius: 2px;\n pointer-events: none;\n}\n.sidebar-video-container .timeline-time {\n font-size: 8px;\n right: 3px;\n padding: 1px 3px;\n}\n.timeline-thumb-wrapper {\n position: relative;\n flex-shrink: 0;\n}\n/* Video threshold settings panel */\n.video-settings-btn {\n position: absolute;\n top: 14px;\n right: 64px;\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.55);\n border: 1px solid rgba(255, 255, 255, 0.25);\n border-radius: 50%;\n cursor: pointer;\n color: #fff;\n font-size: 18px;\n z-index: 10;\n backdrop-filter: blur(4px);\n transition: background 120ms ease, transform 120ms ease;\n}\n.video-settings-btn:hover {\n background: rgba(0, 0, 0, 0.75);\n transform: scale(1.04);\n}\n.video-settings-panel {\n position: absolute;\n top: 60px;\n right: 14px;\n background: rgba(0, 0, 0, 0.9);\n border: 1px solid rgba(255, 255, 255, 0.2);\n border-radius: 12px;\n padding: 16px;\n z-index: 15;\n min-width: 280px;\n display: none;\n backdrop-filter: blur(8px);\n}\n.video-settings-panel.visible {\n display: block;\n}\n.video-settings-panel h4 {\n margin: 0 0 8px;\n color: #fff;\n font-size: 14px;\n font-weight: 500;\n}\n.video-settings-desc {\n margin: 0 0 12px;\n color: rgba(255, 255, 255, 0.6);\n font-size: 11px;\n line-height: 1.4;\n}\n.video-settings-buttons {\n display: flex;\n gap: 6px;\n margin-bottom: 12px;\n}\n.video-settings-buttons button {\n flex: 1;\n padding: 8px 4px;\n border: 1px solid rgba(255, 255, 255, 0.2);\n border-radius: 6px;\n background: rgba(255, 255, 255, 0.1);\n color: rgba(255, 255, 255, 0.8);\n font-size: 11px;\n cursor: pointer;\n transition: all 120ms ease;\n}\n.video-settings-buttons button:hover {\n background: rgba(255, 255, 255, 0.2);\n border-color: rgba(255, 255, 255, 0.3);\n}\n.video-settings-buttons button.selected {\n background: #3b82f6;\n border-color: #3b82f6;\n color: #fff;\n}\n.video-settings-actions {\n display: flex;\n gap: 8px;\n margin-top: 8px;\n}\n.video-settings-actions button {\n flex: 1;\n padding: 8px 12px;\n border: none;\n border-radius: 6px;\n font-size: 12px;\n cursor: pointer;\n transition: background 120ms ease;\n}\n.video-settings-actions .reset-btn {\n background: rgba(255, 255, 255, 0.15);\n color: #fff;\n}\n.video-settings-actions .reset-btn:hover {\n background: rgba(255, 255, 255, 0.25);\n}\n/* Video Shortcuts Help */\n.video-shortcuts-help {\n opacity: 0.85;\n transition: opacity 0.2s;\n}\n.video-shortcuts-help:hover {\n opacity: 1;\n}\n.video-shortcuts-help .shortcuts-title {\n font-weight: 600;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 10px;\n color: rgba(255, 255, 255, 0.7);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.video-shortcuts-help .shortcuts-title::before {\n content: '\\u2328';\n font-size: 14px;\n}\n.video-shortcuts-help .shortcut-item {\n margin-bottom: 6px;\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n.video-shortcuts-help .shortcut-item:last-child {\n margin-bottom: 0;\n}\n.video-shortcuts-help kbd {\n display: inline-block;\n background: rgba(255, 255, 255, 0.15);\n border: 1px solid rgba(255, 255, 255, 0.25);\n border-radius: 4px;\n padding: 2px 6px;\n font-family: system-ui, -apple-system, sans-serif;\n font-size: 10px;\n font-weight: 500;\n min-width: 18px;\n text-align: center;\n margin-right: 2px;\n}\n/* Reviw Questions Modal */\n.reviw-questions-overlay {\n display: none;\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.8);\n z-index: 1100;\n justify-content: center;\n align-items: center;\n}\n.reviw-questions-overlay.visible {\n display: flex;\n}\n.reviw-questions-modal {\n background: var(--card-bg);\n border: 1px solid var(--border);\n border-radius: 16px;\n width: 90%;\n max-width: 600px;\n max-height: 80vh;\n display: flex;\n flex-direction: column;\n box-shadow: 0 25px 80px rgba(0, 0, 0, 0.5);\n}\n.reviw-questions-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n border-bottom: 1px solid var(--border);\n}\n.reviw-questions-header h2 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--text);\n}\n.reviw-questions-header h2 span {\n font-size: 14px;\n color: var(--text-dim);\n font-weight: 400;\n}\n.reviw-questions-close {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n color: var(--text-dim);\n font-size: 18px;\n cursor: pointer;\n border-radius: 8px;\n transition: all 150ms ease;\n}\n.reviw-questions-close:hover {\n background: var(--border);\n color: var(--text);\n}\n.reviw-questions-body {\n flex: 1;\n overflow-y: auto;\n padding: 16px 20px;\n}\n.reviw-questions-footer {\n padding: 12px 20px;\n border-top: 1px solid var(--border);\n display: flex;\n justify-content: flex-end;\n}\n.reviw-questions-later {\n padding: 8px 16px;\n border: 1px solid var(--border);\n background: transparent;\n color: var(--text-dim);\n border-radius: 8px;\n cursor: pointer;\n font-size: 13px;\n transition: all 150ms ease;\n}\n.reviw-questions-later:hover {\n background: var(--border);\n color: var(--text);\n}\n/* Question Item */\n.reviw-question-item {\n margin-bottom: 20px;\n padding-bottom: 20px;\n border-bottom: 1px solid var(--border);\n}\n.reviw-question-item:last-child {\n margin-bottom: 0;\n padding-bottom: 0;\n border-bottom: none;\n}\n.reviw-question-text {\n font-size: 14px;\n color: var(--text);\n margin-bottom: 12px;\n line-height: 1.5;\n}\n.reviw-question-options {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin-bottom: 12px;\n}\n.reviw-question-option {\n padding: 8px 14px;\n border: 1px solid var(--border);\n background: transparent;\n color: var(--text);\n border-radius: 8px;\n cursor: pointer;\n font-size: 13px;\n transition: all 150ms ease;\n}\n.reviw-question-option:hover {\n border-color: var(--accent);\n background: rgba(96, 165, 250, 0.1);\n}\n.reviw-question-option.selected {\n border-color: var(--accent);\n background: var(--accent);\n color: var(--text-inverse);\n}\n.reviw-question-input {\n width: 100%;\n padding: 10px 12px;\n border: 1px solid var(--border);\n background: var(--input-bg);\n color: var(--text);\n border-radius: 8px;\n font-size: 13px;\n resize: vertical;\n min-height: 60px;\n}\n.reviw-question-input:focus {\n outline: none;\n border-color: var(--accent);\n}\n.reviw-question-input::placeholder {\n color: var(--text-dim);\n}\n.reviw-check-mark {\n color: #22c55e;\n font-weight: bold;\n}\n.reviw-question-item.answered {\n border-color: #22c55e;\n background: rgba(34, 197, 94, 0.05);\n}\n.reviw-question-submit {\n margin-top: 10px;\n padding: 8px 16px;\n border: none;\n background: var(--accent);\n color: var(--text-inverse);\n border-radius: 8px;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n transition: all 150ms ease;\n}\n.reviw-question-submit:hover {\n filter: brightness(1.1);\n}\n.reviw-question-submit:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n/* Resolved Section */\n.reviw-resolved-section {\n margin-top: 16px;\n border-top: 1px solid var(--border);\n padding-top: 12px;\n}\n.reviw-resolved-toggle {\n display: flex;\n align-items: center;\n gap: 8px;\n background: none;\n border: none;\n color: var(--text-dim);\n font-size: 13px;\n cursor: pointer;\n padding: 4px 0;\n}\n.reviw-resolved-toggle:hover {\n color: var(--text);\n}\n.reviw-resolved-toggle .arrow {\n transition: transform 150ms ease;\n}\n.reviw-resolved-toggle.open .arrow {\n transform: rotate(90deg);\n}\n.reviw-resolved-list {\n display: none;\n margin-top: 12px;\n}\n.reviw-resolved-list.visible {\n display: block;\n}\n.reviw-resolved-item {\n padding: 10px 12px;\n background: var(--input-bg);\n border-radius: 8px;\n margin-bottom: 8px;\n opacity: 0.7;\n}\n.reviw-resolved-item:last-child {\n margin-bottom: 0;\n}\n.reviw-resolved-q {\n font-size: 12px;\n color: var(--text-dim);\n margin-bottom: 4px;\n}\n.reviw-resolved-a {\n font-size: 13px;\n color: var(--text);\n}\n/* Notice Bar */\n.reviw-questions-bar {\n display: none;\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n background: var(--accent);\n color: var(--text-inverse);\n padding: 8px 16px;\n font-size: 13px;\n z-index: 1050;\n justify-content: center;\n align-items: center;\n gap: 12px;\n}\n.reviw-questions-bar.visible {\n display: flex;\n}\n.reviw-questions-bar button {\n padding: 4px 12px;\n border: 1px solid rgba(255, 255, 255, 0.3);\n background: rgba(255, 255, 255, 0.1);\n color: var(--text-inverse);\n border-radius: 6px;\n cursor: pointer;\n font-size: 12px;\n transition: all 150ms ease;\n}\n.reviw-questions-bar button:hover {\n background: rgba(255, 255, 255, 0.2);\n}\n/* Adjust layout when bar is visible */\nbody.has-questions-bar header {\n top: 36px;\n}\nbody.has-questions-bar .toolbar,\nbody.has-questions-bar .table-wrap {\n margin-top: 36px;\n}\n/* Copy notification toast */\n.copy-toast {\n position: fixed;\n bottom: 60px;\n left: 50%;\n transform: translateX(-50%) translateY(20px);\n background: var(--accent);\n color: var(--text-inverse);\n padding: 8px 16px;\n border-radius: 8px;\n font-size: 13px;\n opacity: 0;\n pointer-events: none;\n transition: opacity 200ms ease, transform 200ms ease;\n z-index: 1000;\n}\n.copy-toast.visible {\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n}\n@media (max-width: 960px) {\n .md-layout { flex-direction: column; }\n .md-left { max-width: 100%; flex: 1 1 0; min-height: 0; }\n .md-right { display: none; }\n .media-sidebar { display: none; }\n .media-sidebar-toggle { display: none !important; }\n}\n.md-layout.preview-only .md-right { display: none; }\n.md-layout.preview-only .md-left { flex: 1 1 0; min-height: 0; max-width: 100%; }\n.filter-menu {\n position: absolute;\n background: var(--panel-solid);\n border: 1px solid var(--border);\n border-radius: 10px;\n box-shadow: 0 14px 30px var(--shadow-color);\n padding: 8px;\n display: none;\n z-index: 12;\n width: 180px;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.filter-menu button {\n width: 100%;\n display: block;\n margin: 4px 0;\n padding: 8px 10px;\n background: var(--selected-bg);\n border: 1px solid var(--border);\n border-radius: 8px;\n color: var(--text);\n cursor: pointer;\n font-size: 13px;\n text-align: left;\n}\n.filter-menu button:hover { background: var(--hover-bg); }\n.modal-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0,0,0,0.6);\n display: none;\n align-items: center;\n justify-content: center;\n z-index: 100;\n}\n.modal-overlay.visible { display: flex; }\n/* Submit modal: top-right position, no blocking overlay */\n#submit-modal {\n background: transparent;\n pointer-events: none;\n align-items: flex-start;\n justify-content: flex-end;\n}\n#submit-modal.visible { display: flex; }\n#submit-modal .modal-dialog {\n pointer-events: auto;\n margin: 60px 20px 20px 20px; /* top margin avoids header button overlap */\n}\n.modal-dialog {\n background: var(--panel-solid);\n border: 1px solid var(--border);\n border-radius: 14px;\n padding: 20px;\n width: 90%;\n max-width: 480px;\n box-shadow: 0 20px 40px var(--shadow-color);\n transition: background 200ms ease, border-color 200ms ease;\n}\n.modal-dialog h3 { margin: 0 0 12px; font-size: 18px; color: var(--accent); }\n.modal-summary { color: var(--muted); font-size: 13px; margin-bottom: 12px; }\n.modal-dialog label { display: block; font-size: 13px; margin-bottom: 6px; color: var(--muted); }\n.modal-dialog textarea {\n width: 100%;\n min-height: 100px;\n background: var(--input-bg);\n border: 1px solid var(--border);\n border-radius: 8px;\n color: var(--text);\n padding: 10px;\n font-size: 14px;\n resize: vertical;\n box-sizing: border-box;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.modal-dialog textarea:focus { outline: none; border-color: var(--accent); }\n.modal-actions { display: flex; gap: 10px; justify-content: flex-end; margin-top: 16px; }\n.modal-actions button {\n padding: 8px 16px;\n border-radius: 8px;\n border: 1px solid var(--border);\n background: var(--selected-bg);\n color: var(--text);\n cursor: pointer;\n font-size: 14px;\n}\n.modal-actions button:hover { background: var(--hover-bg); }\n.modal-actions button.primary { background: var(--accent); color: var(--text-inverse); border-color: var(--accent); }\n.image-attach-area { margin: 12px 0; }\n.image-attach-area label { display: block; font-size: 12px; color: var(--muted); margin-bottom: 6px; }\n.image-attach-area.image-attach-small { margin: 8px 0; }\n.image-attach-area.image-attach-small label { font-size: 11px; }\n.image-preview-list { display: flex; flex-wrap: wrap; gap: 8px; min-height: 24px; }\n.image-preview-item { position: relative; }\n.image-preview-item img { max-width: 80px; max-height: 60px; border-radius: 4px; border: 1px solid var(--border); object-fit: cover; }\n.image-preview-item .remove-image { position: absolute; top: -6px; right: -6px; width: 18px; height: 18px; border-radius: 50%; background: var(--error, #ef4444); color: #fff; border: none; cursor: pointer; font-size: 12px; line-height: 1; display: flex; align-items: center; justify-content: center; }\n.image-preview-item .remove-image:hover { background: #dc2626; }\n.modal-actions button.primary:hover { background: #7dd3fc; }\n\n.modal-checkboxes { margin: 12px 0; }\n.modal-checkboxes label {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n font-size: 12px;\n color: var(--text);\n margin-bottom: 8px;\n cursor: pointer;\n}\n.modal-checkboxes input[type=\"checkbox\"] {\n margin-top: 2px;\n accent-color: var(--accent);\n}\n\nbody.dragging { user-select: none; cursor: crosshair; }\nbody.dragging .diff-line { cursor: crosshair; }\n@media (max-width: 840px) {\n header { flex-direction: column; align-items: flex-start; }\n .comment-list { width: calc(100% - 24px); right: 12px; }\n}\n/* Mermaid diagram styles */\n.mermaid-container {\n position: relative;\n margin: 16px 0;\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 16px;\n overflow: hidden;\n}\n.mermaid-container .mermaid {\n display: flex;\n justify-content: center;\n}\n.mermaid-container .mermaid svg {\n max-width: 100%;\n height: auto;\n cursor: pointer;\n pointer-events: auto;\n}\n.mermaid-error-banner {\n background: #fff3f3;\n color: #c33;\n border: 1px solid #e88;\n border-radius: 4px;\n padding: 6px 10px;\n margin-bottom: 8px;\n font-size: 12px;\n font-weight: 500;\n}\n[data-theme=\"dark\"] .mermaid-error-banner {\n background: #3a1a1a;\n color: #f88;\n border-color: #744;\n}\n.mermaid-fullscreen-btn {\n position: absolute;\n top: 8px;\n right: 8px;\n background: var(--selected-bg);\n border: 1px solid var(--border);\n border-radius: 6px;\n padding: 6px 10px;\n cursor: pointer;\n color: var(--text);\n font-size: 12px;\n z-index: 2;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n.mermaid-fullscreen-btn:hover { background: var(--hover-bg); }\n/* Fullscreen overlay */\n.fullscreen-overlay {\n position: fixed;\n inset: 0;\n background: var(--bg);\n z-index: 1000;\n display: none;\n flex-direction: column;\n}\n.fullscreen-overlay.visible { display: flex; }\n.fullscreen-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 20px;\n background: var(--panel-alpha);\n border-bottom: 1px solid var(--border);\n}\n.fullscreen-header h3 { margin: 0; font-size: 14px; }\n.fullscreen-controls { display: flex; gap: 8px; align-items: center; }\n.fullscreen-controls button {\n background: var(--selected-bg);\n border: 1px solid var(--border);\n border-radius: 6px;\n padding: 6px 12px;\n cursor: pointer;\n color: var(--text);\n font-size: 13px;\n}\n.fullscreen-controls button:hover { background: var(--hover-bg); }\n.fullscreen-controls .zoom-info { font-size: 12px; color: var(--muted); min-width: 50px; text-align: center; }\n.fullscreen-content {\n flex: 1;\n overflow: hidden;\n position: relative;\n cursor: grab;\n touch-action: none;\n}\n.fullscreen-content:active { cursor: grabbing; }\n.fullscreen-content .mermaid-wrapper {\n position: absolute;\n transform-origin: 0 0;\n padding: 40px;\n}\n.fullscreen-content .mermaid svg {\n display: block;\n}\n/* Minimap */\n.minimap {\n position: absolute;\n top: 70px;\n right: 20px;\n width: 200px;\n height: 150px;\n background: var(--panel-alpha);\n border: 1px solid var(--border);\n border-radius: 8px;\n overflow: hidden;\n box-shadow: 0 4px 12px rgba(0,0,0,0.15);\n}\n.minimap-content {\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 8px;\n}\n.minimap-content svg {\n max-width: 100%;\n max-height: 100%;\n opacity: 0.6;\n}\n.minimap-viewport {\n position: absolute;\n border: 2px solid var(--accent);\n background: rgba(102, 126, 234, 0.2);\n pointer-events: none;\n border-radius: 2px;\n}\n/* Error toast */\n.mermaid-error-toast {\n position: fixed;\n bottom: 20px;\n left: 50%;\n transform: translateX(-50%);\n background: var(--error);\n color: white;\n padding: 12px 24px;\n border-radius: 8px;\n font-size: 13px;\n max-width: 80%;\n z-index: 2000;\n display: none;\n box-shadow: 0 4px 12px rgba(0,0,0,0.3);\n white-space: pre-wrap;\n font-family: monospace;\n}\n.mermaid-error-toast.visible { display: block; }\n\n/* History Panel - Push layout */\nbody { transition: margin-right 0.25s ease; }\nbody.history-open { margin-right: 320px; }\nbody.history-open header { right: 320px; }\nheader { transition: right 0.25s ease; right: 0; }\n\n.history-toggle {\n background: var(--selected-bg);\n color: var(--text);\n border: 1px solid var(--border);\n border-radius: 6px;\n padding: 6px 8px;\n font-size: 14px;\n cursor: pointer;\n width: 34px;\n height: 34px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.history-toggle:hover { background: var(--border); }\n.history-panel {\n position: fixed;\n top: 0;\n right: 0;\n width: 320px;\n height: 100vh;\n background: var(--panel-solid);\n border-left: 1px solid var(--border);\n z-index: 90;\n transform: translateX(100%);\n transition: transform 0.25s ease;\n display: flex;\n flex-direction: column;\n}\n.history-panel.open { transform: translateX(0); }\n.history-panel-header {\n padding: 16px;\n border-bottom: 1px solid var(--border);\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.history-panel-header h3 { margin: 0; font-size: 14px; font-weight: 600; }\n.history-panel-close {\n background: transparent;\n border: none;\n color: var(--muted);\n cursor: pointer;\n font-size: 18px;\n padding: 4px;\n}\n.history-panel-close:hover { color: var(--text); }\n.history-panel-body {\n flex: 1;\n overflow-y: auto;\n padding: 12px;\n}\n.history-empty {\n color: var(--muted);\n font-size: 13px;\n text-align: center;\n padding: 40px 20px;\n}\n.history-date-group { margin-bottom: 16px; }\n.history-date {\n font-size: 11px;\n font-weight: 600;\n color: var(--muted);\n margin-bottom: 8px;\n text-transform: uppercase;\n}\n.history-item {\n background: var(--bg);\n border: 1px solid var(--border);\n border-radius: 6px;\n margin-bottom: 8px;\n overflow: hidden;\n}\n.history-item-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 10px;\n background: var(--selected-bg);\n cursor: pointer;\n}\n.history-item-header:hover { background: var(--hover-bg); }\n.history-item-file {\n font-size: 12px;\n font-weight: 600;\n color: var(--text);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 180px;\n}\n.history-item-time { font-size: 10px; color: var(--muted); }\n.history-item-body {\n display: none;\n padding: 10px;\n font-size: 12px;\n border-top: 1px solid var(--border);\n}\n.history-item.expanded .history-item-body { display: block; }\n.history-summary {\n color: var(--text);\n margin-bottom: 8px;\n padding-bottom: 8px;\n border-bottom: 1px solid var(--border);\n}\n.history-summary-label {\n font-size: 10px;\n font-weight: 600;\n color: var(--muted);\n margin-bottom: 4px;\n}\n.history-summary-text { white-space: pre-wrap; line-height: 1.4; }\n.history-comments-label {\n font-size: 10px;\n font-weight: 600;\n color: var(--muted);\n margin-bottom: 6px;\n}\n.history-comment {\n padding: 6px 0;\n border-bottom: 1px solid var(--border);\n}\n.history-comment:last-child { border-bottom: none; }\n.history-comment-line {\n font-size: 10px;\n color: var(--accent);\n font-weight: 600;\n margin-bottom: 2px;\n}\n.history-comment-quote {\n background: rgba(0, 0, 0, 0.3);\n border-left: 2px solid var(--accent);\n padding: 4px 8px;\n margin: 4px 0;\n font-family: 'SF Mono', Monaco, Consolas, monospace;\n font-size: 11px;\n color: var(--muted);\n white-space: pre-wrap;\n word-break: break-all;\n max-height: 80px;\n overflow-y: auto;\n}\n.history-comment-text {\n color: var(--text);\n line-height: 1.4;\n white-space: pre-wrap;\n}\n.history-badge {\n display: inline-block;\n background: var(--accent);\n color: var(--text-inverse);\n font-size: 10px;\n padding: 2px 6px;\n border-radius: 10px;\n margin-left: 6px;\n}\n/* Table scroll container */\n.table-container {\n overflow-x: auto;\n margin: 16px 0;\n border-radius: 8px;\n border: 1px solid var(--border);\n}\n.table-container table {\n margin: 0;\n border: none;\n border-radius: 0;\n}\n.table-container::-webkit-scrollbar {\n height: 6px;\n}\n.table-container::-webkit-scrollbar-track {\n background: var(--bg);\n border-radius: 3px;\n}\n.table-container::-webkit-scrollbar-thumb {\n background: var(--border);\n border-radius: 3px;\n}\n.table-container::-webkit-scrollbar-thumb:hover {\n background: var(--muted);\n}\n/* Media sidebar */\n.media-sidebar {\n display: flex;\n flex-shrink: 0;\n height: calc(100vh - 80px);\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n position: relative;\n z-index: 10;\n max-width: 60%;\n}\n.media-sidebar.hidden { display: none; }\n.media-sidebar-thumbs {\n width: 96px;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 8px;\n border-right: 1px solid var(--border);\n display: flex;\n flex-direction: column;\n gap: 8px;\n background: var(--panel);\n scrollbar-width: thin;\n scrollbar-color: var(--border) transparent;\n}\n.media-sidebar-thumbs::-webkit-scrollbar { width: 4px; }\n.media-sidebar-thumbs::-webkit-scrollbar-track { background: transparent; }\n.media-sidebar-thumbs::-webkit-scrollbar-thumb { background: var(--border); border-radius: 4px; }\n.media-sidebar-thumb {\n width: 80px;\n height: 60px;\n border-radius: 6px;\n border: 2px solid var(--border);\n overflow: hidden;\n cursor: pointer;\n position: relative;\n flex-shrink: 0;\n background: var(--bg);\n transition: border-color 0.2s ease, transform 0.15s ease, box-shadow 0.2s ease;\n}\n.media-sidebar-thumb:hover { border-color: var(--accent); transform: scale(1.05); box-shadow: 0 2px 8px var(--shadow-color); }\n.media-sidebar-thumb.active { border-color: var(--accent); box-shadow: 0 0 0 2px var(--accent), 0 2px 8px var(--shadow-color); }\n.media-sidebar-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }\n.media-sidebar-thumb svg { width: 100%; height: 100%; display: block; }\n.media-sidebar-thumb-video {\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #000;\n}\n.media-sidebar-thumb-video video { width: 100%; height: 100%; object-fit: cover; }\n.media-sidebar-thumb-video::after {\n content: '';\n position: absolute;\n width: 24px;\n height: 24px;\n background: rgba(255,255,255,0.85);\n border-radius: 50%;\n}\n.media-sidebar-thumb-video::before {\n content: '';\n position: absolute;\n z-index: 1;\n width: 0;\n height: 0;\n border-style: solid;\n border-width: 5px 0 5px 9px;\n border-color: transparent transparent transparent #000;\n margin-left: 2px;\n}\n.media-sidebar-thumb-mermaid {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n padding: 2px;\n background: var(--panel);\n overflow: hidden;\n}\n.media-sidebar-thumb-mermaid svg { width: 100% !important; height: 100% !important; max-width: 100%; max-height: 100%; display: block; }\n.media-sidebar-thumb-index {\n position: absolute;\n top: 2px;\n left: 2px;\n background: rgba(0,0,0,0.6);\n color: #fff;\n font-size: 9px;\n font-weight: 600;\n padding: 1px 4px;\n border-radius: 3px;\n line-height: 1.2;\n pointer-events: none;\n z-index: 1;\n}\n.media-sidebar-viewer {\n width: 0;\n overflow: hidden;\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n background: var(--bg);\n position: relative;\n}\n.media-sidebar-viewer.open {\n width: 45vw;\n max-width: calc(100vw - 400px);\n overflow: hidden;\n padding: 16px;\n border-right: 1px solid var(--border);\n display: flex;\n flex-direction: column;\n}\n.media-sidebar-viewer-close {\n position: absolute;\n top: 8px;\n right: 8px;\n z-index: 2;\n background: var(--selected-bg);\n border: 1px solid var(--border);\n color: var(--text);\n width: 28px;\n height: 28px;\n border-radius: 50%;\n cursor: pointer;\n font-size: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.media-sidebar-viewer-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n.media-sidebar-viewer-content img { max-width: 100%; max-height: calc(100vh - 140px); object-fit: contain; border-radius: 8px; }\n.media-sidebar-viewer-content video { max-width: 100%; max-height: calc(100vh - 140px); border-radius: 8px; background: #000; }\n.media-sidebar-viewer-label {\n margin-top: 8px;\n font-size: 12px;\n color: var(--muted);\n text-align: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100%;\n}\n.sidebar-zoom-indicator {\n position: absolute;\n bottom: 12px;\n right: 12px;\n background: rgba(0,0,0,0.7);\n color: #fff;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 11px;\n pointer-events: none;\n transition: opacity 0.3s ease;\n}\n.sidebar-zoom-indicator.hidden { opacity: 0; }\n.sidebar-mermaid-viewport { overflow: hidden; position: relative; cursor: grab; }\n.sidebar-mermaid-wrapper { position: absolute; left: 0; top: 0; transform-origin: 0 0; }\n.sidebar-video-container { width: 100%; }\n.sidebar-video-container video { width: 100%; max-height: calc(100vh - 200px); border-radius: 8px; background: #000; }\n/* Video timeline */\n.video-timeline {\n display: flex;\n gap: 8px;\n padding: 8px;\n overflow-x: auto;\n background: var(--panel);\n border-radius: 8px;\n margin-top: 8px;\n scrollbar-width: thin;\n scrollbar-color: var(--border) transparent;\n}\n.timeline-loading { color: var(--muted); font-size: 12px; padding: 8px; }\n.timeline-thumb-wrapper {\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n cursor: pointer;\n}\n.timeline-thumb {\n width: 80px;\n height: 60px;\n object-fit: cover;\n border-radius: 4px;\n border: 2px solid transparent;\n transition: border-color 0.2s ease;\n}\n.timeline-thumb.active { border-color: var(--accent); }\n.timeline-thumb:hover { border-color: var(--accent); opacity: 0.8; }\n.timeline-time { font-size: 10px; color: var(--muted); }\n/* Fullscreen overlay */\n.fullscreen-overlay {\n display: none;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0,0,0,0.9);\n z-index: 1000;\n flex-direction: column;\n}\n.fullscreen-overlay.visible { display: flex; }\n.fullscreen-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: rgba(0,0,0,0.8);\n border-bottom: 1px solid rgba(255,255,255,0.1);\n}\n.fullscreen-header h3 { margin: 0; color: #fff; font-size: 14px; }\n.fullscreen-controls { display: flex; gap: 6px; align-items: center; }\n.fullscreen-controls button {\n background: rgba(255,255,255,0.1);\n border: 1px solid rgba(255,255,255,0.2);\n color: #fff;\n padding: 6px 12px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 12px;\n}\n.fullscreen-controls button:hover { background: rgba(255,255,255,0.2); }\n.fullscreen-controls .zoom-info { color: #fff; font-size: 12px; min-width: 40px; text-align: center; }\n@media (max-width: 960px) {\n .media-sidebar { display: none !important; }\n .media-sidebar-toggle { display: none !important; }\n}\n.video-overlay-wrapper {\n position: relative;\n display: inline-block;\n}\n.video-fs-overlay-btn {\n position: absolute;\n top: 8px;\n right: 8px;\n width: 36px;\n height: 36px;\n padding: 0;\n background: rgba(0,0,0,0.6);\n border: 1px solid rgba(255,255,255,0.3);\n color: #fff;\n font-size: 18px;\n line-height: 1;\n cursor: pointer;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 5;\n transition: background 120ms ease;\n}\n.video-fs-overlay-btn:hover { background: rgba(0,0,0,0.8); }\n@media (max-width: 600px) {\n .minimap { display: none !important; }\n .fullscreen-header { padding: 8px 12px; }\n .fullscreen-controls { gap: 4px; }\n .fullscreen-controls button { padding: 6px 8px; font-size: 11px; }\n .fullscreen-controls .zoom-info { font-size: 11px; min-width: 32px; }\n .history-panel { width: 100vw; }\n body.history-open header { right: 0; }\n}");
|
|
4076
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "/* Dark theme (default) */\n:root {\n color-scheme: dark;\n --bg: #0f172a;\n --bg-gradient: radial-gradient(circle at 20% 20%, #1e293b 0%, #0b1224 35%, #0b1224 60%, #0f172a 100%);\n --panel: #111827;\n --panel-alpha: rgba(15, 23, 42, 0.9);\n --panel-solid: #0b1224;\n --card-bg: rgba(11, 18, 36, 0.95);\n --input-bg: rgba(15, 23, 42, 0.6);\n --border: #1f2937;\n --accent: #60a5fa;\n --accent-2: #f472b6;\n --text: #e5e7eb;\n --text-inverse: #0b1224;\n --muted: #94a3b8;\n --comment: #0f766e;\n --badge: #22c55e;\n --table-bg: rgba(15, 23, 42, 0.7);\n --row-even: rgba(30, 41, 59, 0.4);\n --row-odd: rgba(15, 23, 42, 0.2);\n --selected-bg: rgba(96,165,250,0.15);\n --hover-bg: rgba(96,165,250,0.08);\n --shadow-color: rgba(0,0,0,0.35);\n --code-bg: #1e293b;\n --error: #dc3545;\n}\n/* Light theme */\n[data-theme=\"light\"] {\n color-scheme: light;\n --bg: #f8fafc;\n --bg-gradient: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);\n --panel: #ffffff;\n --panel-alpha: rgba(255, 255, 255, 0.95);\n --panel-solid: #ffffff;\n --card-bg: rgba(255, 255, 255, 0.98);\n --input-bg: #f1f5f9;\n --border: #e2e8f0;\n --accent: #3b82f6;\n --accent-2: #ec4899;\n --text: #1e293b;\n --text-inverse: #ffffff;\n --muted: #64748b;\n --comment: #14b8a6;\n --badge: #22c55e;\n --table-bg: #ffffff;\n --row-even: #f8fafc;\n --row-odd: #ffffff;\n --selected-bg: rgba(59,130,246,0.12);\n --hover-bg: rgba(59,130,246,0.06);\n --shadow-color: rgba(0,0,0,0.1);\n --code-bg: #f1f5f9;\n --error: #dc3545;\n}\n* { box-sizing: border-box; }\nbody {\n margin: 0;\n font-family: \"Inter\", \"Hiragino Sans\", system-ui, -apple-system, sans-serif;\n background: var(--bg-gradient);\n color: var(--text);\n min-height: 100vh;\n transition: background 200ms ease, color 200ms ease;\n}\nheader {\n position: sticky;\n top: 0;\n z-index: 5;\n padding: 12px 16px;\n background: var(--panel-alpha);\n backdrop-filter: blur(8px);\n border-bottom: 1px solid var(--border);\n display: flex;\n gap: 12px;\n align-items: center;\n justify-content: space-between;\n transition: background 200ms ease, border-color 200ms ease;\n}\nheader .meta { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }\nheader .actions { display: flex; gap: 8px; align-items: center; }\nheader h1 { display: flex; flex-direction: column; margin: 0; line-height: 1.3; }\nheader h1 .title-path { font-size: 11px; font-weight: 400; color: var(--muted); }\nheader h1 .title-file { font-size: 16px; font-weight: 700; }\nheader .badge {\n background: var(--selected-bg);\n color: var(--text);\n padding: 6px 10px;\n border-radius: 8px;\n font-size: 12px;\n border: 1px solid var(--border);\n}\nheader button {\n background: linear-gradient(135deg, #38bdf8, #6366f1);\n color: var(--text-inverse);\n border: none;\n border-radius: 10px;\n padding: 10px 14px;\n font-weight: 700;\n cursor: pointer;\n box-shadow: 0 10px 30px var(--shadow-color);\n transition: transform 120ms ease, box-shadow 120ms ease;\n}\nheader button:hover { transform: translateY(-1px); box-shadow: 0 16px 36px var(--shadow-color); }\nheader button:active { transform: translateY(0); }\n/* Theme toggle button */\n.theme-toggle {\n background: var(--selected-bg);\n color: var(--text);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 8px 10px;\n font-size: 16px;\n cursor: pointer;\n transition: background 120ms ease, transform 120ms ease;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 38px;\n height: 38px;\n}\n.theme-toggle:hover { background: var(--hover-bg); transform: scale(1.05); }\n\n.wrap { padding: 12px 16px 12px; }\n.toolbar {\n display: flex;\n gap: 12px;\n align-items: center;\n flex-wrap: wrap;\n margin: 10px 0 12px;\n color: var(--muted);\n font-size: 13px;\n}\n.toolbar button {\n background: rgba(96,165,250,0.12);\n color: var(--text);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 8px 10px;\n font-size: 13px;\n cursor: pointer;\n}\n.toolbar button:hover { background: rgba(96,165,250,0.2); }\n\n.table-box {\n background: var(--table-bg);\n border: 1px solid var(--border);\n border-radius: 12px;\n overflow: auto;\n max-height: calc(100vh - 110px);\n box-shadow: 0 20px 50px var(--shadow-color);\n transition: background 200ms ease, border-color 200ms ease;\n}\ntable {\n border-collapse: collapse;\n width: 100%;\n min-width: 540px;\n table-layout: fixed;\n}\nthead th {\n position: sticky;\n top: 0;\n z-index: 3;\n background: var(--panel-solid) !important;\n color: var(--muted);\n font-size: 12px;\n text-align: center;\n padding: 0;\n border-bottom: 1px solid var(--border);\n border-right: 1px solid var(--border);\n white-space: nowrap;\n transition: background 200ms ease;\n}\nthead th:not(.selected) {\n background: var(--panel-solid) !important;\n}\nthead th:first-child,\ntbody th {\n width: 28px;\n min-width: 28px;\n max-width: 28px;\n}\nthead th .th-inner {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n padding: 8px 6px;\n position: relative;\n height: 100%;\n}\nthead th.filtered .th-inner {\n background: linear-gradient(135deg, rgba(96,165,250,0.18), rgba(34,197,94,0.18));\n color: #e5e7eb;\n border-radius: 6px;\n box-shadow: inset 0 -1px 0 rgba(255,255,255,0.05);\n}\nthead th.filtered .th-inner::after {\n content: 'FILTER';\n font-size: 10px;\n color: #c7d2fe;\n background: rgba(99,102,241,0.24);\n border: 1px solid rgba(99,102,241,0.45);\n padding: 1px 6px;\n border-radius: 999px;\n position: absolute;\n bottom: 4px;\n right: 6px;\n}\n.resizer {\n position: absolute;\n right: 2px;\n top: 0;\n width: 6px;\n height: 100%;\n cursor: col-resize;\n user-select: none;\n touch-action: none;\n opacity: 0.6;\n}\n.resizer::after {\n content: '';\n position: absolute;\n top: 10%;\n bottom: 10%;\n left: 2px;\n width: 2px;\n background: rgba(96,165,250,0.6);\n border-radius: 2px;\n opacity: 0;\n transition: opacity 120ms ease;\n}\nthead th:hover .resizer::after { opacity: 1; }\n\n.freeze {\n position: sticky !important;\n background: var(--panel-solid);\n z-index: 4;\n}\n.freeze-row {\n position: sticky !important;\n background: var(--panel-solid);\n}\n.freeze-row.freeze {\n z-index: 6;\n}\nth.freeze-row {\n z-index: 6;\n}\ntbody th {\n position: sticky;\n left: 0;\n z-index: 2;\n background: var(--panel-solid);\n color: var(--muted);\n text-align: right;\n padding: 8px 10px;\n font-size: 12px;\n border-right: 1px solid var(--border);\n border-bottom: 1px solid var(--border);\n transition: background 200ms ease;\n}\ntd {\n padding: 10px 10px;\n border-bottom: 1px solid var(--border);\n border-right: 1px solid var(--border);\n background: var(--row-odd);\n color: var(--text);\n font-size: 13px;\n line-height: 1.45;\n cursor: pointer;\n transition: background 120ms ease, box-shadow 120ms ease;\n position: relative;\n white-space: pre-wrap;\n word-break: break-word;\n max-width: 320px;\n}\ntr:nth-child(even) td:not(.selected):not(.has-comment) { background: var(--row-even); }\ntd:hover:not(.selected) { background: var(--hover-bg); box-shadow: inset 0 0 0 1px rgba(96,165,250,0.25); }\ntd.has-comment { background: rgba(34,197,94,0.12); box-shadow: inset 0 0 0 1px rgba(34,197,94,0.35); }\ntd.selected, tbody th.selected { background: rgba(99,102,241,0.22) !important; box-shadow: inset 0 0 0 1px rgba(99,102,241,0.45); }\n.preview-highlight { background: rgba(167,139,250,0.18) !important; box-shadow: inset 0 0 0 2px rgba(139,92,246,0.35); border-radius: 4px; transition: background 150ms ease, box-shadow 150ms ease; padding-left: 8px; margin-left: -8px; }\nthead th.selected { background: #c7d2fe !important; box-shadow: inset 0 0 0 1px rgba(99,102,241,0.45); }\n[data-theme=\"dark\"] thead th.selected { background: #3730a3 !important; }\nbody.dragging { user-select: none; cursor: crosshair; }\nbody.dragging td, body.dragging tbody th { cursor: crosshair; }\ntbody th { cursor: pointer; }\ntd .dot {\n position: absolute;\n right: 6px;\n top: 6px;\n width: 8px;\n height: 8px;\n border-radius: 99px;\n background: var(--badge);\n box-shadow: 0 0 0 4px rgba(34,197,94,0.15);\n}\n.floating {\n position: fixed;\n z-index: 10;\n background: var(--panel-solid);\n border: 1px solid var(--border);\n border-radius: 12px;\n padding: 12px;\n width: min(420px, calc(100vw - 32px));\n box-shadow: 0 20px 40px var(--shadow-color);\n display: none;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.card-close-x {\n position: absolute;\n top: 8px;\n right: 8px;\n width: 28px;\n height: 28px;\n padding: 0;\n background: transparent;\n border: none;\n color: var(--muted);\n font-size: 20px;\n line-height: 1;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n transition: background 120ms ease, color 120ms ease;\n}\n.card-close-x:hover { background: var(--border); color: var(--text);\n}\n.floating header {\n position: static;\n background: transparent;\n backdrop-filter: none;\n border: none;\n padding: 0 0 8px 0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.floating h2 { font-size: 14px; margin: 0; color: var(--text); }\n.floating button {\n margin-left: 8px;\n background: var(--accent);\n color: var(--text-inverse);\n border: 1px solid var(--accent);\n padding: 6px 10px;\n border-radius: 8px;\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n transition: background 120ms ease, opacity 120ms ease;\n}\n.floating button.icon-only {\n width: 32px;\n height: 32px;\n padding: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n line-height: 1;\n}\n.floating button:hover { opacity: 0.85; }\n.copy-btn-float {\n position: absolute;\n top: 4px;\n right: 4px;\n z-index: 2;\n background: var(--panel-solid) !important;\n border: 1px solid var(--border) !important;\n color: var(--muted) !important;\n opacity: 0.7;\n}\n.copy-btn-float:hover { opacity: 1 !important; }\n.card-actions-split {\n display: flex;\n justify-content: space-between !important;\n align-items: center;\n margin-top: 8px;\n}\n.danger-text {\n background: transparent !important;\n border: none !important;\n color: #ef4444 !important;\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n padding: 4px 8px;\n}\n.danger-text:hover { color: #dc2626 !important; text-decoration: underline; }\n.floating textarea {\n width: 100%;\n min-height: 70px;\n resize: vertical;\n border-radius: 8px;\n border: 1px solid var(--border);\n background: var(--input-bg);\n color: var(--text);\n padding: 10px;\n font-size: 13px;\n line-height: 1.4;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.floating textarea:focus {\n outline: none;\n border-color: var(--accent);\n}\n.floating .actions {\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n margin-top: 10px;\n}\n.floating .actions button.primary {\n background: linear-gradient(135deg, #22c55e, #16a34a);\n color: var(--text-inverse);\n border: none;\n font-weight: 700;\n box-shadow: 0 10px 30px rgba(22,163,74,0.35);\n}\n.comment-list {\n position: fixed;\n right: 14px;\n bottom: 14px;\n width: 320px;\n max-height: 60vh;\n overflow: auto;\n border: 1px solid var(--border);\n border-radius: 12px;\n background: var(--card-bg);\n box-shadow: 0 18px 40px var(--shadow-color);\n padding: 12px;\n backdrop-filter: blur(6px);\n transition: opacity 120ms ease, transform 120ms ease, background 200ms ease;\n}\n.comment-list h3 { margin: 0 0 8px 0; font-size: 13px; color: var(--muted); }\n.comment-list ol {\n margin: 0;\n padding-left: 18px;\n color: var(--text);\n font-size: 13px;\n line-height: 1.45;\n}\n.comment-list li { margin-bottom: 6px; }\n.comment-list .hint { color: var(--muted); font-size: 12px; }\n.pill { display: inline-flex; align-items: center; gap: 6px; padding: 4px 8px; border-radius: 999px; background: var(--selected-bg); border: 1px solid var(--border); font-size: 12px; color: var(--text); cursor: pointer; transition: background 150ms ease, border-color 150ms ease; }\n.pill:hover { background: var(--hover-bg); border-color: var(--accent); }\n.pill strong { color: var(--text); font-weight: 700; }\n.comment-list.collapsed {\n opacity: 0;\n pointer-events: none;\n transform: translateY(8px) scale(0.98);\n}\n.md-preview {\n background: var(--input-bg);\n border: 1px solid var(--border);\n border-radius: 12px;\n padding: 14px;\n margin-bottom: 12px;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.md-layout {\n display: flex;\n gap: 16px;\n align-items: stretch;\n margin-top: 8px;\n height: calc(100vh - 80px);\n}\n.md-left {\n flex: 1;\n min-width: 200px;\n overflow-y: auto;\n overflow-x: auto;\n overscroll-behavior: contain;\n}\n.md-left .md-preview {\n max-height: none;\n}\n.md-right {\n flex: 1;\n min-width: 0;\n overflow-y: auto;\n overflow-x: auto;\n overscroll-behavior: contain;\n}\n.md-right .table-box {\n max-width: none;\n min-width: 0;\n max-height: none;\n overflow: visible;\n}\n/* Ensure thead is opaque in md-right to prevent content showing through */\n.md-right thead th {\n background: var(--panel-solid) !important;\n}\n.md-right thead th.selected {\n background: #c7d2fe !important;\n}\n[data-theme=\"dark\"] .md-right thead th {\n background: var(--panel-solid) !important;\n}\n[data-theme=\"dark\"] .md-right thead th.selected {\n background: #3730a3 !important;\n}\n\n/* === Media Sidebar === */\n.media-sidebar {\n display: flex;\n flex-shrink: 0;\n height: calc(100vh - 80px);\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n position: relative;\n z-index: 10;\n max-width: 60%;\n}\n.media-sidebar.hidden {\n display: none;\n}\n.media-sidebar-thumbs {\n width: 96px;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 8px;\n border-right: 1px solid var(--border);\n display: flex;\n flex-direction: column;\n gap: 8px;\n background: var(--panel);\n scrollbar-width: thin;\n scrollbar-color: var(--border) transparent;\n}\n.media-sidebar-thumbs::-webkit-scrollbar {\n width: 4px;\n}\n.media-sidebar-thumbs::-webkit-scrollbar-track {\n background: transparent;\n}\n.media-sidebar-thumbs::-webkit-scrollbar-thumb {\n background: var(--border);\n border-radius: 4px;\n}\n.media-sidebar-thumb {\n width: 80px;\n height: 60px;\n border-radius: 6px;\n border: 2px solid var(--border);\n overflow: hidden;\n cursor: pointer;\n position: relative;\n flex-shrink: 0;\n background: var(--bg);\n transition: border-color 0.2s ease, transform 0.15s ease, box-shadow 0.2s ease;\n}\n.media-sidebar-thumb:hover {\n border-color: var(--accent);\n transform: scale(1.05);\n box-shadow: 0 2px 8px var(--shadow-color);\n}\n.media-sidebar-thumb.active {\n border-color: var(--accent);\n box-shadow: 0 0 0 2px var(--accent), 0 2px 8px var(--shadow-color);\n}\n.media-sidebar-thumb img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n}\n.media-sidebar-thumb svg {\n width: 100%;\n height: 100%;\n display: block;\n}\n.media-sidebar-thumb-video {\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #000;\n}\n.media-sidebar-thumb-video video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n.media-sidebar-thumb-video::after {\n content: '';\n position: absolute;\n width: 24px;\n height: 24px;\n background: rgba(255,255,255,0.85);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.media-sidebar-thumb-video::before {\n content: '';\n position: absolute;\n z-index: 1;\n width: 0;\n height: 0;\n border-style: solid;\n border-width: 5px 0 5px 9px;\n border-color: transparent transparent transparent #000;\n margin-left: 2px;\n}\n.media-sidebar-thumb-mermaid {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n padding: 2px;\n background: var(--panel);\n overflow: hidden;\n}\n.media-sidebar-thumb-mermaid svg {\n width: 100% !important;\n height: 100% !important;\n max-width: 100%;\n max-height: 100%;\n display: block;\n}\n.media-sidebar-thumb-index {\n position: absolute;\n top: 2px;\n left: 2px;\n background: rgba(0,0,0,0.6);\n color: #fff;\n font-size: 9px;\n font-weight: 600;\n padding: 1px 4px;\n border-radius: 3px;\n line-height: 1.2;\n pointer-events: none;\n z-index: 1;\n}\n.media-sidebar-viewer {\n width: 0;\n overflow: hidden;\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n background: var(--bg);\n position: relative;\n}\n.media-sidebar-viewer.open {\n width: 45vw;\n max-width: calc(100vw - 400px);\n overflow: hidden;\n padding: 0;\n border-right: 1px solid var(--border);\n display: flex;\n flex-direction: column;\n}\n.media-sidebar-viewer-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n padding: 0;\n}\n.media-sidebar-viewer-content img {\n max-width: none;\n max-height: none;\n border-radius: 0;\n}\n.media-sidebar-viewer-content video {\n max-width: 100%;\n max-height: 100vh;\n border-radius: 8px;\n background: #000;\n}\n.media-sidebar-viewer-content .viewer-mermaid-wrap {\n width: 100%;\n overflow: auto;\n display: flex;\n justify-content: center;\n background: var(--panel);\n border-radius: 8px;\n padding: 16px;\n}\n.media-sidebar-viewer-content .viewer-mermaid-wrap svg {\n width: 100% !important;\n height: auto !important;\n max-height: calc(100vh - 200px);\n}\n\n/* === Sidebar Rich Viewer: Mermaid zoom/pan/minimap === */\n.sidebar-mermaid-controls {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 10px;\n background: var(--panel-alpha);\n border: 1px solid var(--border);\n border-radius: 8px;\n margin-bottom: 8px;\n width: 100%;\n box-sizing: border-box;\n}\n.sidebar-mermaid-controls button {\n background: var(--selected-bg);\n border: 1px solid var(--border);\n border-radius: 5px;\n padding: 4px 10px;\n cursor: pointer;\n color: var(--text);\n font-size: 13px;\n line-height: 1;\n transition: background 0.15s ease;\n}\n.sidebar-mermaid-controls button:hover { background: var(--hover-bg); }\n.sidebar-mermaid-controls .sidebar-zoom-info {\n font-size: 11px;\n color: var(--muted);\n min-width: 40px;\n text-align: center;\n user-select: none;\n}\n.sidebar-mermaid-viewport {\n width: 100%;\n flex: 1;\n overflow: hidden;\n position: relative;\n cursor: grab;\n background: var(--panel);\n border-radius: 8px;\n border: 1px solid var(--border);\n}\n.sidebar-mermaid-viewport:active { cursor: grabbing; }\n.sidebar-mermaid-wrapper {\n position: absolute;\n transform-origin: 0 0;\n}\n.sidebar-mermaid-wrapper svg {\n display: block;\n}\n.sidebar-minimap {\n position: absolute;\n top: 12px;\n right: 8px;\n bottom: auto;\n left: auto;\n width: 140px;\n height: 100px;\n background: var(--panel-alpha);\n border: 1px solid var(--border);\n border-radius: 6px;\n overflow: hidden;\n box-shadow: 0 2px 8px rgba(0,0,0,0.12);\n z-index: 3;\n}\n.sidebar-minimap-content {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 6px;\n}\n.sidebar-minimap-content svg {\n max-width: 100%;\n max-height: 100%;\n opacity: 0.6;\n}\n.sidebar-minimap-viewport {\n position: absolute;\n border: 2px solid var(--accent);\n background: rgba(102, 126, 234, 0.2);\n pointer-events: none;\n border-radius: 2px;\n}\n\n/* === Sidebar Rich Viewer: Image zoom/pan === */\n.sidebar-image-viewport {\n width: 100%;\n flex: 1;\n overflow: hidden;\n position: relative;\n cursor: grab;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.sidebar-image-viewport.panning { cursor: grabbing; }\n.sidebar-image-viewport img {\n transform-origin: 0 0;\n max-width: none !important;\n max-height: none !important;\n border-radius: 0 !important;\n user-select: none;\n -webkit-user-drag: none;\n}\n.sidebar-zoom-indicator {\n position: absolute;\n bottom: 10px;\n left: 50%;\n transform: translateX(-50%);\n background: rgba(0, 0, 0, 0.65);\n color: #fff;\n font-size: 11px;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n pointer-events: none;\n z-index: 3;\n backdrop-filter: blur(4px);\n transition: opacity 0.3s ease;\n user-select: none;\n}\n.sidebar-zoom-indicator.hidden { opacity: 0; }\n.sidebar-image-hint {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 11px;\n color: var(--muted);\n pointer-events: none;\n opacity: 0;\n transition: opacity 0.4s ease;\n text-align: center;\n z-index: 2;\n}\n\n/* === Sidebar Rich Viewer: Video container (timeline uses shared .video-timeline classes) === */\n.sidebar-video-container {\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: 0;\n}\n.sidebar-video-container video {\n width: 100%;\n border-radius: 8px 8px 0 0;\n background: #000;\n max-height: calc(100vh - 260px);\n}\n\n.media-sidebar-viewer-label {\n margin-top: 12px;\n font-size: 12px;\n color: var(--muted);\n text-align: center;\n word-break: break-all;\n}\n.media-sidebar-viewer-close {\n position: absolute;\n top: 8px;\n left: 8px;\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 6px;\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n color: var(--text);\n font-size: 14px;\n z-index: 2;\n transition: background 0.15s ease;\n}\n.media-sidebar-viewer-close:hover {\n background: var(--hover-bg);\n}\n.sidebar-viewer-settings-btn {\n position: absolute;\n top: 8px;\n right: 44px;\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 6px;\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n color: var(--text);\n font-size: 14px;\n z-index: 2;\n transition: background 0.15s ease;\n}\n.sidebar-viewer-settings-btn:hover {\n background: var(--hover-bg);\n}\n.sidebar-viewer-settings-btn + .video-settings-panel {\n position: absolute;\n top: 44px;\n right: 8px;\n}\n\n.media-sidebar-toggle {\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 6px 10px;\n cursor: pointer;\n color: var(--text);\n font-size: 14px;\n transition: background 0.15s ease, border-color 0.15s ease;\n display: none;\n}\n.media-sidebar-toggle.has-media {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n.media-sidebar-toggle:hover {\n background: var(--hover-bg);\n border-color: var(--accent);\n}\n.media-sidebar-toggle .toggle-count {\n font-size: 10px;\n font-weight: 700;\n background: var(--accent);\n color: var(--text-inverse);\n padding: 1px 5px;\n border-radius: 8px;\n line-height: 1.4;\n}\n.view-toggle {\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 6px 10px;\n cursor: pointer;\n color: var(--text);\n font-size: 14px;\n transition: background 0.15s ease, border-color 0.15s ease;\n}\n.view-toggle:hover { background: rgba(96,165,250,0.2); }\n.view-toggle.active { background: var(--accent); color: #fff; }\n@media (max-width: 1200px) {\n .media-sidebar-viewer.open {\n width: 40vw;\n max-width: calc(100vw - 350px);\n }\n}\n@media (max-width: 900px) {\n .media-sidebar-thumbs {\n width: 72px;\n }\n .media-sidebar-thumb {\n width: 56px;\n height: 42px;\n }\n .media-sidebar-viewer.open {\n width: 35vw;\n max-width: calc(100vw - 300px);\n }\n}\n@media (prefers-reduced-motion: reduce) {\n .media-sidebar,\n .media-sidebar-viewer,\n .media-sidebar-thumb {\n transition: none !important;\n }\n}\n\n.md-preview h1, .md-preview h2, .md-preview h3, .md-preview h4 {\n margin: 0.4em 0 0.2em;\n}\n/* Heading toggle feature */\n.md-preview .md-heading-toggle {\n margin: 0;\n}\n.md-preview .heading-toggle-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 0.6em;\n transition: transform 150ms ease;\n color: var(--muted);\n flex-shrink: 0;\n cursor: pointer;\n padding: 4px 8px;\n margin: -4px 0 -4px -8px;\n border-radius: 4px;\n}\n.md-preview .heading-toggle-icon:hover {\n background: var(--hover-bg);\n color: var(--accent);\n}\n.md-preview .md-heading-toggle.collapsed .heading-toggle-icon {\n transform: rotate(-90deg);\n}\n.md-preview details.heading-toggle {\n margin: 0.2em 0;\n}\n.md-preview details.heading-toggle > summary {\n list-style: none;\n cursor: default;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.md-preview details.heading-toggle > summary::-webkit-details-marker {\n display: none;\n}\n.md-preview details.heading-toggle > summary > .md-heading-toggle {\n flex: 1;\n}\n.md-preview details.heading-toggle:not([open]) > .toggle-content {\n display: none;\n}\n.md-preview .heading-section-content {\n /* Content wrapper for collapsible sections */\n}\n.md-preview .heading-section-content.hidden {\n display: none;\n}\n.md-preview p { margin: 0.3em 0; line-height: 1.5; }\n.md-preview img { max-width: 100%; height: auto; border-radius: 8px; }\n.md-preview video.video-preview { max-width: 100%; height: auto; border-radius: 8px; background: #000; }\n.md-preview table video.video-preview {\n display: block;\n width: 100%;\n height: auto;\n}\n.md-preview code { background: rgba(255,255,255,0.08); padding: 2px 4px; border-radius: 4px; }\n.md-preview pre {\n background: var(--code-bg);\n padding: 12px 16px;\n border-radius: 8px;\n overflow: auto;\n border: 1px solid var(--border);\n}\n.md-preview pre code {\n background: none;\n padding: 0;\n font-size: 13px;\n line-height: 1.5;\n}\n.md-preview pre code.hljs {\n background: transparent;\n padding: 0;\n}\n/* YAML Frontmatter table */\n.frontmatter-table {\n margin-bottom: 20px;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--border);\n background: var(--panel);\n}\n.frontmatter-table table {\n width: 100%;\n border-collapse: collapse;\n table-layout: fixed;\n}\n.frontmatter-table thead th {\n background: linear-gradient(135deg, rgba(147, 51, 234, 0.15), rgba(96, 165, 250, 0.15));\n color: var(--text);\n font-size: 12px;\n font-weight: 600;\n padding: 10px 16px;\n text-align: left;\n border-bottom: 1px solid var(--border);\n}\n.frontmatter-table tbody th {\n background: rgba(147, 51, 234, 0.08);\n color: #c084fc;\n font-weight: 500;\n font-size: 12px;\n padding: 8px 10px;\n text-align: left;\n border-bottom: 1px solid var(--border);\n vertical-align: top;\n}\n.frontmatter-table tbody td {\n padding: 8px 14px;\n font-size: 13px;\n border-bottom: 1px solid var(--border);\n word-break: break-word;\n}\n.frontmatter-table tbody tr:last-child th,\n.frontmatter-table tbody tr:last-child td {\n border-bottom: none;\n}\n.frontmatter-table .fm-tag {\n display: inline-block;\n background: rgba(96, 165, 250, 0.15);\n color: var(--accent);\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 11px;\n margin-right: 4px;\n margin-bottom: 4px;\n}\n.frontmatter-table pre {\n margin: 0;\n background: var(--code-bg);\n padding: 8px;\n border-radius: 4px;\n font-size: 11px;\n}\n/* Reviw questions preview cards */\n.reviw-questions-preview {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.reviw-q-card {\n background: var(--code-bg);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 10px 12px;\n}\n.reviw-q-card.resolved {\n border-left: 3px solid #22c55e;\n}\n.reviw-q-card.pending {\n border-left: 3px solid #f59e0b;\n}\n.reviw-q-header {\n font-size: 12px;\n color: var(--text-dim);\n margin-bottom: 4px;\n}\n.reviw-q-header strong {\n color: var(--accent);\n}\n.reviw-q-question {\n font-size: 13px;\n color: var(--text);\n margin-bottom: 6px;\n}\n.reviw-q-options {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n margin-bottom: 6px;\n}\n.reviw-q-answer {\n font-size: 12px;\n color: #22c55e;\n background: rgba(34, 197, 94, 0.1);\n padding: 4px 8px;\n border-radius: 4px;\n}\n[data-theme=\"light\"] .frontmatter-table tbody th {\n color: #7c3aed;\n}\n/* Table scroll container and indicator */\n.table-scroll-container {\n position: relative;\n margin: 16px 0;\n}\n.table-scroll-wrapper {\n overflow-x: auto;\n border-radius: 8px;\n}\n.scroll-hint {\n text-align: right;\n font-size: 12px;\n color: var(--accent);\n padding: 4px 8px;\n margin-bottom: 4px;\n opacity: 0;\n visibility: hidden;\n transition: opacity 200ms ease;\n}\n.table-scroll-container.can-scroll .scroll-hint {\n opacity: 0.8;\n visibility: visible;\n}\n.table-scroll-container.scrolled-end .scroll-hint {\n opacity: 0;\n visibility: hidden;\n}\n/* Markdown tables in preview */\n.md-preview table:not(.frontmatter-table table) {\n min-width: 100%;\n width: max-content;\n border-collapse: collapse;\n border: 1px solid var(--border);\n border-radius: 8px;\n}\n.md-preview table:not(.frontmatter-table table) th,\n.md-preview table:not(.frontmatter-table table) td {\n padding: 10px 16px;\n text-align: left;\n border-bottom: 1px solid var(--border);\n vertical-align: top;\n word-break: break-word;\n overflow-wrap: anywhere;\n width: auto;\n}\n/* Force equal column widths when colgroup is not specified */\n.md-preview table:not(.frontmatter-table table) colgroup ~ * th,\n.md-preview table:not(.frontmatter-table table) colgroup ~ * td {\n width: auto;\n}\n.md-preview table:not(.frontmatter-table table) td:has(video),\n.md-preview table:not(.frontmatter-table table) td:has(img) {\n padding: 4px;\n line-height: 0;\n}\n.md-preview table:not(.frontmatter-table table) td video,\n.md-preview table:not(.frontmatter-table table) td img {\n width: 100%;\n max-width: 100%;\n height: auto;\n}\n.md-preview table:not(.frontmatter-table table) th {\n background: var(--panel);\n font-weight: 600;\n font-size: 13px;\n}\n.md-preview table:not(.frontmatter-table table) td {\n font-size: 13px;\n}\n.md-preview table:not(.frontmatter-table table) tr:last-child td {\n border-bottom: none;\n}\n.md-preview table:not(.frontmatter-table table) tr:hover td {\n background: var(--hover-bg);\n}\n/* Source table (右ペイン) */\n.table-box table {\n table-layout: fixed;\n width: 100%;\n}\n.table-box th,\n.table-box td {\n word-break: break-word;\n min-width: 140px;\n}\n.table-box th:first-child,\n.table-box td:first-child {\n min-width: 320px;\n max-width: 480px;\n}\n/* Image fullscreen overlay */\n.image-fullscreen-overlay {\n position: fixed;\n inset: 0;\n background: var(--bg);\n z-index: 1001;\n display: none;\n flex-direction: column;\n}\n.image-fullscreen-overlay.visible {\n display: flex;\n}\n.image-fs-content {\n flex: 1;\n overflow: hidden;\n position: relative;\n cursor: grab;\n touch-action: none;\n}\n.image-fs-content:active { cursor: grabbing; }\n.image-fs-content .image-fs-wrapper {\n position: absolute;\n transform-origin: 0 0;\n}\n.image-fs-content .image-fs-wrapper img {\n display: block;\n}\n/* Video fullscreen overlay */\n.video-fullscreen-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.95);\n z-index: 1001;\n display: none;\n justify-content: center;\n align-items: center;\n}\n.video-fullscreen-overlay.visible {\n display: flex;\n}\n.video-close-btn {\n position: absolute;\n top: 14px;\n right: 14px;\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.55);\n border: 1px solid rgba(255, 255, 255, 0.25);\n border-radius: 50%;\n cursor: pointer;\n color: #fff;\n font-size: 18px;\n z-index: 10;\n backdrop-filter: blur(4px);\n transition: background 120ms ease, transform 120ms ease;\n}\n.video-close-btn:hover {\n background: rgba(0, 0, 0, 0.75);\n transform: scale(1.04);\n}\n.video-container {\n width: 90vw;\n height: 90vh;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.video-container video {\n width: 100%;\n height: 100%;\n object-fit: contain;\n border-radius: 8px;\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);\n}\n/* Video Timeline - shared base styles (used by both fullscreen and sidebar) */\n.video-timeline {\n background: rgba(0, 0, 0, 0.85);\n display: flex;\n overflow-x: auto;\n backdrop-filter: blur(8px);\n height: 80px;\n padding: 8px;\n gap: 4px;\n}\n.video-timeline::-webkit-scrollbar {\n height: 6px;\n}\n.video-timeline::-webkit-scrollbar-track {\n background: rgba(255, 255, 255, 0.1);\n border-radius: 3px;\n}\n.video-timeline::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.3);\n border-radius: 3px;\n}\n.video-timeline::-webkit-scrollbar-thumb:hover {\n background: rgba(255, 255, 255, 0.5);\n}\n/* Fullscreen-specific video timeline positioning */\n.video-container .video-timeline {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 5;\n}\n/* Sidebar-specific video timeline sizing */\n.sidebar-video-container .video-timeline {\n width: 100%;\n height: 72px;\n padding: 6px;\n gap: 3px;\n border-radius: 0 0 8px 8px;\n background: rgba(0, 0, 0, 0.88);\n}\n.sidebar-video-container .video-timeline::-webkit-scrollbar { height: 5px; }\n.sidebar-video-container .video-timeline::-webkit-scrollbar-track { background: rgba(255, 255, 255, 0.08); }\n.sidebar-video-container .video-timeline::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.25); }\n.sidebar-video-container .video-timeline::-webkit-scrollbar-thumb:hover { background: rgba(255, 255, 255, 0.4); }\n.timeline-thumb {\n height: 64px;\n cursor: pointer;\n border: 2px solid transparent;\n border-radius: 4px;\n flex-shrink: 0;\n transition: border-color 0.2s, transform 0.15s;\n opacity: 0.85;\n}\n.sidebar-video-container .timeline-thumb {\n height: 52px;\n opacity: 0.8;\n}\n.timeline-thumb:hover {\n border-color: rgba(59, 130, 246, 0.5);\n opacity: 1;\n transform: scale(1.05);\n}\n.timeline-thumb.active {\n border-color: #3b82f6;\n opacity: 1;\n box-shadow: 0 0 12px rgba(59, 130, 246, 0.5);\n}\n.sidebar-video-container .timeline-thumb.active {\n box-shadow: 0 0 8px rgba(59, 130, 246, 0.4);\n}\n.timeline-loading {\n color: rgba(255, 255, 255, 0.6);\n font-size: 12px;\n padding: 8px 12px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.sidebar-video-container .timeline-loading {\n font-size: 11px;\n padding: 6px 10px;\n gap: 6px;\n color: rgba(255, 255, 255, 0.5);\n}\n.timeline-loading::before {\n content: '';\n width: 14px;\n height: 14px;\n border: 2px solid rgba(255, 255, 255, 0.3);\n border-top-color: #3b82f6;\n border-radius: 50%;\n animation: timeline-spin 0.8s linear infinite;\n}\n.sidebar-video-container .timeline-loading::before {\n width: 12px;\n height: 12px;\n border-width: 2px;\n border-color: rgba(255, 255, 255, 0.25);\n border-top-color: #3b82f6;\n}\n@keyframes timeline-spin {\n to { transform: rotate(360deg); }\n}\n.timeline-time {\n position: absolute;\n bottom: 2px;\n right: 4px;\n font-size: 9px;\n color: #fff;\n background: rgba(0, 0, 0, 0.7);\n padding: 1px 4px;\n border-radius: 2px;\n pointer-events: none;\n}\n.sidebar-video-container .timeline-time {\n font-size: 8px;\n right: 3px;\n padding: 1px 3px;\n}\n.timeline-thumb-wrapper {\n position: relative;\n flex-shrink: 0;\n}\n/* Video threshold settings panel */\n.video-settings-btn {\n position: absolute;\n top: 14px;\n right: 64px;\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.55);\n border: 1px solid rgba(255, 255, 255, 0.25);\n border-radius: 50%;\n cursor: pointer;\n color: #fff;\n font-size: 18px;\n z-index: 10;\n backdrop-filter: blur(4px);\n transition: background 120ms ease, transform 120ms ease;\n}\n.video-settings-btn:hover {\n background: rgba(0, 0, 0, 0.75);\n transform: scale(1.04);\n}\n.video-settings-panel {\n position: absolute;\n top: 60px;\n right: 14px;\n background: rgba(0, 0, 0, 0.9);\n border: 1px solid rgba(255, 255, 255, 0.2);\n border-radius: 12px;\n padding: 16px;\n z-index: 15;\n min-width: 280px;\n display: none;\n backdrop-filter: blur(8px);\n}\n.video-settings-panel.visible {\n display: block;\n}\n.video-settings-panel h4 {\n margin: 0 0 8px;\n color: #fff;\n font-size: 14px;\n font-weight: 500;\n}\n.video-settings-desc {\n margin: 0 0 12px;\n color: rgba(255, 255, 255, 0.6);\n font-size: 11px;\n line-height: 1.4;\n}\n.video-settings-buttons {\n display: flex;\n gap: 6px;\n margin-bottom: 12px;\n}\n.video-settings-buttons button {\n flex: 1;\n padding: 8px 4px;\n border: 1px solid rgba(255, 255, 255, 0.2);\n border-radius: 6px;\n background: rgba(255, 255, 255, 0.1);\n color: rgba(255, 255, 255, 0.8);\n font-size: 11px;\n cursor: pointer;\n transition: all 120ms ease;\n}\n.video-settings-buttons button:hover {\n background: rgba(255, 255, 255, 0.2);\n border-color: rgba(255, 255, 255, 0.3);\n}\n.video-settings-buttons button.selected {\n background: #3b82f6;\n border-color: #3b82f6;\n color: #fff;\n}\n.video-settings-actions {\n display: flex;\n gap: 8px;\n margin-top: 8px;\n}\n.video-settings-actions button {\n flex: 1;\n padding: 8px 12px;\n border: none;\n border-radius: 6px;\n font-size: 12px;\n cursor: pointer;\n transition: background 120ms ease;\n}\n.video-settings-actions .reset-btn {\n background: rgba(255, 255, 255, 0.15);\n color: #fff;\n}\n.video-settings-actions .reset-btn:hover {\n background: rgba(255, 255, 255, 0.25);\n}\n/* Video Shortcuts Help */\n.video-shortcuts-help {\n opacity: 0.85;\n transition: opacity 0.2s;\n}\n.video-shortcuts-help:hover {\n opacity: 1;\n}\n.video-shortcuts-help .shortcuts-title {\n font-weight: 600;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 10px;\n color: rgba(255, 255, 255, 0.7);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.video-shortcuts-help .shortcuts-title::before {\n content: '\\u2328';\n font-size: 14px;\n}\n.video-shortcuts-help .shortcut-item {\n margin-bottom: 6px;\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n.video-shortcuts-help .shortcut-item:last-child {\n margin-bottom: 0;\n}\n.video-shortcuts-help kbd {\n display: inline-block;\n background: rgba(255, 255, 255, 0.15);\n border: 1px solid rgba(255, 255, 255, 0.25);\n border-radius: 4px;\n padding: 2px 6px;\n font-family: system-ui, -apple-system, sans-serif;\n font-size: 10px;\n font-weight: 500;\n min-width: 18px;\n text-align: center;\n margin-right: 2px;\n}\n/* Reviw Questions Modal */\n.reviw-questions-overlay {\n display: none;\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.8);\n z-index: 1100;\n justify-content: center;\n align-items: center;\n}\n.reviw-questions-overlay.visible {\n display: flex;\n}\n.reviw-questions-modal {\n background: var(--card-bg);\n border: 1px solid var(--border);\n border-radius: 16px;\n width: 90%;\n max-width: 600px;\n max-height: 80vh;\n display: flex;\n flex-direction: column;\n box-shadow: 0 25px 80px rgba(0, 0, 0, 0.5);\n}\n.reviw-questions-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n border-bottom: 1px solid var(--border);\n}\n.reviw-questions-header h2 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--text);\n}\n.reviw-questions-header h2 span {\n font-size: 14px;\n color: var(--text-dim);\n font-weight: 400;\n}\n.reviw-questions-close {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n color: var(--text-dim);\n font-size: 18px;\n cursor: pointer;\n border-radius: 8px;\n transition: all 150ms ease;\n}\n.reviw-questions-close:hover {\n background: var(--border);\n color: var(--text);\n}\n.reviw-questions-body {\n flex: 1;\n overflow-y: auto;\n padding: 16px 20px;\n}\n.reviw-questions-footer {\n padding: 12px 20px;\n border-top: 1px solid var(--border);\n display: flex;\n justify-content: flex-end;\n}\n.reviw-questions-later {\n padding: 8px 16px;\n border: 1px solid var(--border);\n background: transparent;\n color: var(--text-dim);\n border-radius: 8px;\n cursor: pointer;\n font-size: 13px;\n transition: all 150ms ease;\n}\n.reviw-questions-later:hover {\n background: var(--border);\n color: var(--text);\n}\n/* Question Item */\n.reviw-question-item {\n margin-bottom: 20px;\n padding-bottom: 20px;\n border-bottom: 1px solid var(--border);\n}\n.reviw-question-item:last-child {\n margin-bottom: 0;\n padding-bottom: 0;\n border-bottom: none;\n}\n.reviw-question-text {\n font-size: 14px;\n color: var(--text);\n margin-bottom: 12px;\n line-height: 1.5;\n}\n.reviw-question-options {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin-bottom: 12px;\n}\n.reviw-question-option {\n padding: 8px 14px;\n border: 1px solid var(--border);\n background: transparent;\n color: var(--text);\n border-radius: 8px;\n cursor: pointer;\n font-size: 13px;\n transition: all 150ms ease;\n}\n.reviw-question-option:hover {\n border-color: var(--accent);\n background: rgba(96, 165, 250, 0.1);\n}\n.reviw-question-option.selected {\n border-color: var(--accent);\n background: var(--accent);\n color: var(--text-inverse);\n}\n.reviw-question-input {\n width: 100%;\n padding: 10px 12px;\n border: 1px solid var(--border);\n background: var(--input-bg);\n color: var(--text);\n border-radius: 8px;\n font-size: 13px;\n resize: vertical;\n min-height: 60px;\n}\n.reviw-question-input:focus {\n outline: none;\n border-color: var(--accent);\n}\n.reviw-question-input::placeholder {\n color: var(--text-dim);\n}\n.reviw-check-mark {\n color: #22c55e;\n font-weight: bold;\n}\n.reviw-question-item.answered {\n border-color: #22c55e;\n background: rgba(34, 197, 94, 0.05);\n}\n.reviw-question-submit {\n margin-top: 10px;\n padding: 8px 16px;\n border: none;\n background: var(--accent);\n color: var(--text-inverse);\n border-radius: 8px;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n transition: all 150ms ease;\n}\n.reviw-question-submit:hover {\n filter: brightness(1.1);\n}\n.reviw-question-submit:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n/* Resolved Section */\n.reviw-resolved-section {\n margin-top: 16px;\n border-top: 1px solid var(--border);\n padding-top: 12px;\n}\n.reviw-resolved-toggle {\n display: flex;\n align-items: center;\n gap: 8px;\n background: none;\n border: none;\n color: var(--text-dim);\n font-size: 13px;\n cursor: pointer;\n padding: 4px 0;\n}\n.reviw-resolved-toggle:hover {\n color: var(--text);\n}\n.reviw-resolved-toggle .arrow {\n transition: transform 150ms ease;\n}\n.reviw-resolved-toggle.open .arrow {\n transform: rotate(90deg);\n}\n.reviw-resolved-list {\n display: none;\n margin-top: 12px;\n}\n.reviw-resolved-list.visible {\n display: block;\n}\n.reviw-resolved-item {\n padding: 10px 12px;\n background: var(--input-bg);\n border-radius: 8px;\n margin-bottom: 8px;\n opacity: 0.7;\n}\n.reviw-resolved-item:last-child {\n margin-bottom: 0;\n}\n.reviw-resolved-q {\n font-size: 12px;\n color: var(--text-dim);\n margin-bottom: 4px;\n}\n.reviw-resolved-a {\n font-size: 13px;\n color: var(--text);\n}\n/* Notice Bar */\n.reviw-questions-bar {\n display: none;\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n background: var(--accent);\n color: var(--text-inverse);\n padding: 8px 16px;\n font-size: 13px;\n z-index: 1050;\n justify-content: center;\n align-items: center;\n gap: 12px;\n}\n.reviw-questions-bar.visible {\n display: flex;\n}\n.reviw-questions-bar button {\n padding: 4px 12px;\n border: 1px solid rgba(255, 255, 255, 0.3);\n background: rgba(255, 255, 255, 0.1);\n color: var(--text-inverse);\n border-radius: 6px;\n cursor: pointer;\n font-size: 12px;\n transition: all 150ms ease;\n}\n.reviw-questions-bar button:hover {\n background: rgba(255, 255, 255, 0.2);\n}\n/* Adjust layout when bar is visible */\nbody.has-questions-bar header {\n top: 36px;\n}\nbody.has-questions-bar .toolbar,\nbody.has-questions-bar .table-wrap {\n margin-top: 36px;\n}\n/* Copy notification toast */\n.copy-toast {\n position: fixed;\n bottom: 60px;\n left: 50%;\n transform: translateX(-50%) translateY(20px);\n background: var(--accent);\n color: var(--text-inverse);\n padding: 8px 16px;\n border-radius: 8px;\n font-size: 13px;\n opacity: 0;\n pointer-events: none;\n transition: opacity 200ms ease, transform 200ms ease;\n z-index: 1000;\n}\n.copy-toast.visible {\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n}\n@media (max-width: 960px) {\n .md-layout { flex-direction: column; }\n .md-left { max-width: 100%; flex: 1 1 0; min-height: 0; }\n .md-right { display: none; }\n .media-sidebar { display: none; }\n .media-sidebar-toggle { display: none !important; }\n}\n.md-layout.preview-only .md-right { display: none; }\n.md-layout.preview-only .md-left { flex: 1 1 0; min-height: 0; max-width: 100%; }\n.filter-menu {\n position: absolute;\n background: var(--panel-solid);\n border: 1px solid var(--border);\n border-radius: 10px;\n box-shadow: 0 14px 30px var(--shadow-color);\n padding: 8px;\n display: none;\n z-index: 12;\n width: 180px;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.filter-menu button {\n width: 100%;\n display: block;\n margin: 4px 0;\n padding: 8px 10px;\n background: var(--selected-bg);\n border: 1px solid var(--border);\n border-radius: 8px;\n color: var(--text);\n cursor: pointer;\n font-size: 13px;\n text-align: left;\n}\n.filter-menu button:hover { background: var(--hover-bg); }\n.modal-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0,0,0,0.6);\n display: none;\n align-items: center;\n justify-content: center;\n z-index: 100;\n}\n.modal-overlay.visible { display: flex; }\n/* Submit modal: top-right position, no blocking overlay */\n#submit-modal {\n background: transparent;\n pointer-events: none;\n align-items: flex-start;\n justify-content: flex-end;\n}\n#submit-modal.visible { display: flex; }\n#submit-modal .modal-dialog {\n pointer-events: auto;\n margin: 60px 20px 20px 20px; /* top margin avoids header button overlap */\n}\n.modal-dialog {\n background: var(--panel-solid);\n border: 1px solid var(--border);\n border-radius: 14px;\n padding: 20px;\n width: 90%;\n max-width: 480px;\n box-shadow: 0 20px 40px var(--shadow-color);\n transition: background 200ms ease, border-color 200ms ease;\n}\n.modal-dialog h3 { margin: 0 0 12px; font-size: 18px; color: var(--accent); }\n.modal-summary { color: var(--muted); font-size: 13px; margin-bottom: 12px; }\n.modal-dialog label { display: block; font-size: 13px; margin-bottom: 6px; color: var(--muted); }\n.modal-dialog textarea {\n width: 100%;\n min-height: 100px;\n background: var(--input-bg);\n border: 1px solid var(--border);\n border-radius: 8px;\n color: var(--text);\n padding: 10px;\n font-size: 14px;\n resize: vertical;\n box-sizing: border-box;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.modal-dialog textarea:focus { outline: none; border-color: var(--accent); }\n.modal-actions { display: flex; gap: 10px; justify-content: flex-end; margin-top: 16px; }\n.modal-actions button {\n padding: 8px 16px;\n border-radius: 8px;\n border: 1px solid var(--border);\n background: var(--selected-bg);\n color: var(--text);\n cursor: pointer;\n font-size: 14px;\n}\n.modal-actions button:hover { background: var(--hover-bg); }\n.modal-actions button.primary { background: var(--accent); color: var(--text-inverse); border-color: var(--accent); }\n.image-attach-area { margin: 12px 0; }\n.image-attach-area label { display: block; font-size: 12px; color: var(--muted); margin-bottom: 6px; }\n.image-attach-area.image-attach-small { margin: 8px 0; }\n.image-attach-area.image-attach-small label { font-size: 11px; }\n.image-preview-list { display: flex; flex-wrap: wrap; gap: 8px; min-height: 24px; }\n.image-preview-item { position: relative; }\n.image-preview-item img { max-width: 80px; max-height: 60px; border-radius: 4px; border: 1px solid var(--border); object-fit: cover; }\n.image-preview-item .remove-image { position: absolute; top: -6px; right: -6px; width: 18px; height: 18px; border-radius: 50%; background: var(--error, #ef4444); color: #fff; border: none; cursor: pointer; font-size: 12px; line-height: 1; display: flex; align-items: center; justify-content: center; }\n.image-preview-item .remove-image:hover { background: #dc2626; }\n.modal-actions button.primary:hover { background: #7dd3fc; }\n\n.modal-checkboxes { margin: 12px 0; }\n.modal-checkboxes label {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n font-size: 12px;\n color: var(--text);\n margin-bottom: 8px;\n cursor: pointer;\n}\n.modal-checkboxes input[type=\"checkbox\"] {\n margin-top: 2px;\n accent-color: var(--accent);\n}\n\nbody.dragging { user-select: none; cursor: crosshair; }\nbody.dragging .diff-line { cursor: crosshair; }\n@media (max-width: 840px) {\n header { flex-direction: column; align-items: flex-start; }\n .comment-list { width: calc(100% - 24px); right: 12px; }\n}\n/* Mermaid diagram styles */\n.mermaid-container {\n position: relative;\n margin: 16px 0;\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 16px;\n overflow: hidden;\n}\n.mermaid-container .mermaid {\n display: flex;\n justify-content: center;\n}\n.mermaid-container .mermaid svg {\n max-width: 100%;\n height: auto;\n cursor: pointer;\n pointer-events: auto;\n}\n.mermaid-error-banner {\n background: #fff3f3;\n color: #c33;\n border: 1px solid #e88;\n border-radius: 4px;\n padding: 6px 10px;\n margin-bottom: 8px;\n font-size: 12px;\n font-weight: 500;\n}\n[data-theme=\"dark\"] .mermaid-error-banner {\n background: #3a1a1a;\n color: #f88;\n border-color: #744;\n}\n.mermaid-fullscreen-btn {\n position: absolute;\n top: 8px;\n right: 8px;\n background: var(--selected-bg);\n border: 1px solid var(--border);\n border-radius: 6px;\n padding: 6px 10px;\n cursor: pointer;\n color: var(--text);\n font-size: 12px;\n z-index: 2;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n.mermaid-fullscreen-btn:hover { background: var(--hover-bg); }\n/* Fullscreen overlay */\n.fullscreen-overlay {\n position: fixed;\n inset: 0;\n background: var(--bg);\n z-index: 1000;\n display: none;\n flex-direction: column;\n}\n.fullscreen-overlay.visible { display: flex; }\n.fullscreen-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 20px;\n background: var(--panel-alpha);\n border-bottom: 1px solid var(--border);\n}\n.fullscreen-header h3 { margin: 0; font-size: 14px; }\n.fullscreen-controls { display: flex; gap: 8px; align-items: center; }\n.fullscreen-controls button {\n background: var(--selected-bg);\n border: 1px solid var(--border);\n border-radius: 6px;\n padding: 6px 12px;\n cursor: pointer;\n color: var(--text);\n font-size: 13px;\n}\n.fullscreen-controls button:hover { background: var(--hover-bg); }\n.fullscreen-controls .zoom-info { font-size: 12px; color: var(--muted); min-width: 50px; text-align: center; }\n.fullscreen-content {\n flex: 1;\n overflow: hidden;\n position: relative;\n cursor: grab;\n touch-action: none;\n}\n.fullscreen-content:active { cursor: grabbing; }\n.fullscreen-content .mermaid-wrapper {\n position: absolute;\n transform-origin: 0 0;\n padding: 40px;\n}\n.fullscreen-content .mermaid svg {\n display: block;\n}\n/* Minimap */\n.minimap {\n position: absolute;\n top: 70px;\n right: 20px;\n width: 200px;\n height: 150px;\n background: var(--panel-alpha);\n border: 1px solid var(--border);\n border-radius: 8px;\n overflow: hidden;\n box-shadow: 0 4px 12px rgba(0,0,0,0.15);\n}\n.minimap-content {\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 8px;\n}\n.minimap-content svg {\n max-width: 100%;\n max-height: 100%;\n opacity: 0.6;\n}\n.minimap-viewport {\n position: absolute;\n border: 2px solid var(--accent);\n background: rgba(102, 126, 234, 0.2);\n pointer-events: none;\n border-radius: 2px;\n}\n/* Error toast */\n.mermaid-error-toast {\n position: fixed;\n bottom: 20px;\n left: 50%;\n transform: translateX(-50%);\n background: var(--error);\n color: white;\n padding: 12px 24px;\n border-radius: 8px;\n font-size: 13px;\n max-width: 80%;\n z-index: 2000;\n display: none;\n box-shadow: 0 4px 12px rgba(0,0,0,0.3);\n white-space: pre-wrap;\n font-family: monospace;\n}\n.mermaid-error-toast.visible { display: block; }\n\n/* History Panel - Push layout */\nbody { transition: margin-right 0.25s ease; }\nbody.history-open { margin-right: 320px; }\nbody.history-open header { right: 320px; }\nheader { transition: right 0.25s ease; right: 0; }\n\n.history-toggle {\n background: var(--selected-bg);\n color: var(--text);\n border: 1px solid var(--border);\n border-radius: 6px;\n padding: 6px 8px;\n font-size: 14px;\n cursor: pointer;\n width: 34px;\n height: 34px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.history-toggle:hover { background: var(--border); }\n.history-panel {\n position: fixed;\n top: 0;\n right: 0;\n width: 320px;\n height: 100vh;\n background: var(--panel-solid);\n border-left: 1px solid var(--border);\n z-index: 90;\n transform: translateX(100%);\n transition: transform 0.25s ease;\n display: flex;\n flex-direction: column;\n}\n.history-panel.open { transform: translateX(0); }\n.history-panel-header {\n padding: 16px;\n border-bottom: 1px solid var(--border);\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.history-panel-header h3 { margin: 0; font-size: 14px; font-weight: 600; }\n.history-panel-close {\n background: transparent;\n border: none;\n color: var(--muted);\n cursor: pointer;\n font-size: 18px;\n padding: 4px;\n}\n.history-panel-close:hover { color: var(--text); }\n.history-panel-body {\n flex: 1;\n overflow-y: auto;\n padding: 12px;\n}\n.history-empty {\n color: var(--muted);\n font-size: 13px;\n text-align: center;\n padding: 40px 20px;\n}\n.history-date-group { margin-bottom: 16px; }\n.history-date {\n font-size: 11px;\n font-weight: 600;\n color: var(--muted);\n margin-bottom: 8px;\n text-transform: uppercase;\n}\n.history-item {\n background: var(--bg);\n border: 1px solid var(--border);\n border-radius: 6px;\n margin-bottom: 8px;\n overflow: hidden;\n}\n.history-item-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 10px;\n background: var(--selected-bg);\n cursor: pointer;\n}\n.history-item-header:hover { background: var(--hover-bg); }\n.history-item-file {\n font-size: 12px;\n font-weight: 600;\n color: var(--text);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 180px;\n}\n.history-item-time { font-size: 10px; color: var(--muted); }\n.history-item-body {\n display: none;\n padding: 10px;\n font-size: 12px;\n border-top: 1px solid var(--border);\n}\n.history-item.expanded .history-item-body { display: block; }\n.history-summary {\n color: var(--text);\n margin-bottom: 8px;\n padding-bottom: 8px;\n border-bottom: 1px solid var(--border);\n}\n.history-summary-label {\n font-size: 10px;\n font-weight: 600;\n color: var(--muted);\n margin-bottom: 4px;\n}\n.history-summary-text { white-space: pre-wrap; line-height: 1.4; }\n.history-comments-label {\n font-size: 10px;\n font-weight: 600;\n color: var(--muted);\n margin-bottom: 6px;\n}\n.history-comment {\n padding: 6px 0;\n border-bottom: 1px solid var(--border);\n}\n.history-comment:last-child { border-bottom: none; }\n.history-comment-line {\n font-size: 10px;\n color: var(--accent);\n font-weight: 600;\n margin-bottom: 2px;\n}\n.history-comment-quote {\n background: rgba(0, 0, 0, 0.3);\n border-left: 2px solid var(--accent);\n padding: 4px 8px;\n margin: 4px 0;\n font-family: 'SF Mono', Monaco, Consolas, monospace;\n font-size: 11px;\n color: var(--muted);\n white-space: pre-wrap;\n word-break: break-all;\n max-height: 80px;\n overflow-y: auto;\n}\n.history-comment-text {\n color: var(--text);\n line-height: 1.4;\n white-space: pre-wrap;\n}\n.history-badge {\n display: inline-block;\n background: var(--accent);\n color: var(--text-inverse);\n font-size: 10px;\n padding: 2px 6px;\n border-radius: 10px;\n margin-left: 6px;\n}\n/* Table scroll container */\n.table-container {\n overflow-x: auto;\n margin: 16px 0;\n border-radius: 8px;\n border: 1px solid var(--border);\n}\n.table-container table {\n margin: 0;\n border: none;\n border-radius: 0;\n}\n.table-container::-webkit-scrollbar {\n height: 6px;\n}\n.table-container::-webkit-scrollbar-track {\n background: var(--bg);\n border-radius: 3px;\n}\n.table-container::-webkit-scrollbar-thumb {\n background: var(--border);\n border-radius: 3px;\n}\n.table-container::-webkit-scrollbar-thumb:hover {\n background: var(--muted);\n}\n/* Media sidebar */\n.media-sidebar {\n display: flex;\n flex-shrink: 0;\n height: calc(100vh - 80px);\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n position: relative;\n z-index: 10;\n max-width: 60%;\n}\n.media-sidebar.hidden { display: none; }\n.media-sidebar-thumbs {\n width: 96px;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 8px;\n border-right: 1px solid var(--border);\n display: flex;\n flex-direction: column;\n gap: 8px;\n background: var(--panel);\n scrollbar-width: thin;\n scrollbar-color: var(--border) transparent;\n}\n.media-sidebar-thumbs::-webkit-scrollbar { width: 4px; }\n.media-sidebar-thumbs::-webkit-scrollbar-track { background: transparent; }\n.media-sidebar-thumbs::-webkit-scrollbar-thumb { background: var(--border); border-radius: 4px; }\n.media-sidebar-thumb {\n width: 80px;\n height: 60px;\n border-radius: 6px;\n border: 2px solid var(--border);\n overflow: hidden;\n cursor: pointer;\n position: relative;\n flex-shrink: 0;\n background: var(--bg);\n transition: border-color 0.2s ease, transform 0.15s ease, box-shadow 0.2s ease;\n}\n.media-sidebar-thumb:hover { border-color: var(--accent); transform: scale(1.05); box-shadow: 0 2px 8px var(--shadow-color); }\n.media-sidebar-thumb.active { border-color: var(--accent); box-shadow: 0 0 0 2px var(--accent), 0 2px 8px var(--shadow-color); }\n.media-sidebar-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }\n.media-sidebar-thumb svg { width: 100%; height: 100%; display: block; }\n.media-sidebar-thumb-video {\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #000;\n}\n.media-sidebar-thumb-video video { width: 100%; height: 100%; object-fit: cover; }\n.media-sidebar-thumb-video::after {\n content: '';\n position: absolute;\n width: 24px;\n height: 24px;\n background: rgba(255,255,255,0.85);\n border-radius: 50%;\n}\n.media-sidebar-thumb-video::before {\n content: '';\n position: absolute;\n z-index: 1;\n width: 0;\n height: 0;\n border-style: solid;\n border-width: 5px 0 5px 9px;\n border-color: transparent transparent transparent #000;\n margin-left: 2px;\n}\n.media-sidebar-thumb-mermaid {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n padding: 2px;\n background: var(--panel);\n overflow: hidden;\n}\n.media-sidebar-thumb-mermaid svg { width: 100% !important; height: 100% !important; max-width: 100%; max-height: 100%; display: block; }\n.media-sidebar-thumb-index {\n position: absolute;\n top: 2px;\n left: 2px;\n background: rgba(0,0,0,0.6);\n color: #fff;\n font-size: 9px;\n font-weight: 600;\n padding: 1px 4px;\n border-radius: 3px;\n line-height: 1.2;\n pointer-events: none;\n z-index: 1;\n}\n.media-sidebar-viewer {\n width: 0;\n overflow: hidden;\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n background: var(--bg);\n position: relative;\n}\n.media-sidebar-viewer.open {\n width: 45vw;\n max-width: calc(100vw - 400px);\n overflow: hidden;\n padding: 0;\n border-right: 1px solid var(--border);\n display: flex;\n flex-direction: column;\n}\n.media-sidebar-viewer-close {\n position: absolute;\n top: 4px;\n left: 4px;\n z-index: 10;\n background: rgba(0,0,0,0.5);\n border: none;\n color: #fff;\n width: 28px;\n height: 28px;\n border-radius: 50%;\n cursor: pointer;\n font-size: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.media-sidebar-viewer-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n padding: 0;\n}\n.media-sidebar-viewer-content img { max-width: none; max-height: none; border-radius: 0; }\n.media-sidebar-viewer-content video { max-width: 100%; max-height: 100vh; border-radius: 0; background: #000; }\n.media-sidebar-viewer-label {\n margin-top: 8px;\n font-size: 12px;\n color: var(--muted);\n text-align: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100%;\n}\n.sidebar-zoom-indicator {\n position: absolute;\n bottom: 12px;\n right: 12px;\n background: rgba(0,0,0,0.7);\n color: #fff;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 11px;\n pointer-events: none;\n transition: opacity 0.3s ease;\n}\n.sidebar-zoom-indicator.hidden { opacity: 0; }\n.sidebar-maximize-btn {\n position: absolute;\n top: 4px;\n right: 4px;\n width: 36px;\n height: 36px;\n padding: 0;\n background: rgba(0,0,0,0.6);\n border: 1px solid rgba(255,255,255,0.3);\n color: #fff;\n font-size: 18px;\n line-height: 1;\n cursor: pointer;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 5;\n transition: background 120ms ease;\n}\n.sidebar-maximize-btn:hover { background: rgba(0,0,0,0.8); }\n.sidebar-mermaid-viewport { overflow: hidden; position: relative; cursor: grab; }\n.sidebar-mermaid-wrapper { position: absolute; left: 0; top: 0; transform-origin: 0 0; }\n.sidebar-video-container { width: 100%; }\n.sidebar-video-container video { width: 100%; max-height: calc(100vh - 200px); border-radius: 8px; background: #000; }\n/* Video timeline */\n.video-timeline {\n display: flex;\n gap: 8px;\n padding: 8px;\n overflow-x: auto;\n background: var(--panel);\n border-radius: 8px;\n margin-top: 8px;\n scrollbar-width: thin;\n scrollbar-color: var(--border) transparent;\n}\n.timeline-loading { color: var(--muted); font-size: 12px; padding: 8px; }\n.timeline-thumb-wrapper {\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n cursor: pointer;\n}\n.timeline-thumb {\n width: 80px;\n height: 60px;\n object-fit: cover;\n border-radius: 4px;\n border: 2px solid transparent;\n transition: border-color 0.2s ease;\n}\n.timeline-thumb.active { border-color: var(--accent); }\n.timeline-thumb:hover { border-color: var(--accent); opacity: 0.8; }\n.timeline-time { font-size: 10px; color: var(--muted); }\n/* Fullscreen overlay */\n.fullscreen-overlay {\n display: none;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0,0,0,0.9);\n z-index: 1000;\n flex-direction: column;\n}\n.fullscreen-overlay.visible { display: flex; }\n.fullscreen-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: rgba(0,0,0,0.8);\n border-bottom: 1px solid rgba(255,255,255,0.1);\n}\n.fullscreen-header h3 { margin: 0; color: #fff; font-size: 14px; }\n.fullscreen-controls { display: flex; gap: 6px; align-items: center; }\n.fullscreen-controls button {\n background: rgba(255,255,255,0.1);\n border: 1px solid rgba(255,255,255,0.2);\n color: #fff;\n padding: 6px 12px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 12px;\n}\n.fullscreen-controls button:hover { background: rgba(255,255,255,0.2); }\n.fullscreen-controls .zoom-info { color: #fff; font-size: 12px; min-width: 40px; text-align: center; }\n@media (max-width: 960px) {\n .media-sidebar { display: none !important; }\n .media-sidebar-toggle { display: none !important; }\n}\n.video-overlay-wrapper {\n position: relative;\n display: inline-block;\n}\n.video-fs-overlay-btn {\n position: absolute;\n top: 8px;\n right: 8px;\n width: 36px;\n height: 36px;\n padding: 0;\n background: rgba(0,0,0,0.6);\n border: 1px solid rgba(255,255,255,0.3);\n color: #fff;\n font-size: 18px;\n line-height: 1;\n cursor: pointer;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 5;\n transition: background 120ms ease;\n}\n.video-fs-overlay-btn:hover { background: rgba(0,0,0,0.8); }\n@media (max-width: 600px) {\n .minimap { display: none !important; }\n .fullscreen-header { padding: 8px 12px; }\n .fullscreen-controls { gap: 4px; }\n .fullscreen-controls button { padding: 6px 8px; font-size: 11px; }\n .fullscreen-controls .zoom-info { font-size: 11px; min-width: 32px; }\n .history-panel { width: 100vw; }\n body.history-open header { right: 0; }\n}");
|
|
4077
4077
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</style></head><body>");
|
|
4078
4078
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<header><div class=\"meta\">");
|
|
4079
4079
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<h1>");
|
package/dist/ui/ui.js
CHANGED
|
@@ -149,10 +149,17 @@ const _M0FP36kazuph5reviw2ui18replace__all__text = (text, search, replacement) =
|
|
|
149
149
|
const _M0FP36kazuph5reviw2ui15clear__children = (el) => { if (el) el.innerHTML = ''; };
|
|
150
150
|
const _M0FP36kazuph5reviw2ui10event__key = (e) => e.key || "";
|
|
151
151
|
const _M0FP36kazuph5reviw2ui21event__property__name = (e) => e.propertyName || "";
|
|
152
|
+
const _M0FP36kazuph5reviw2ui19get__client__height = (el) => el?.clientHeight || 0;
|
|
152
153
|
const _M0FP36kazuph5reviw2ui18get__client__width = (el) => el?.clientWidth || 0;
|
|
153
154
|
const _M0FP36kazuph5reviw2ui20get__natural__height = (el) => el?.naturalHeight || 0;
|
|
154
155
|
const _M0FP36kazuph5reviw2ui19get__natural__width = (el) => el?.naturalWidth || 0;
|
|
156
|
+
const _M0FP36kazuph5reviw2ui2on = (el, event, handler) => el?.addEventListener(event, handler);
|
|
157
|
+
const _M0FP36kazuph5reviw2ui5query = (s) => document.querySelector(s);
|
|
155
158
|
const _M0FP36kazuph5reviw2ui14set__draggable = (el, v) => { if (el) el.draggable = v; };
|
|
159
|
+
const _M0FP36kazuph5reviw2ui16set__inner__html = (el, html) => { if (el) el.innerHTML = html; };
|
|
160
|
+
const _M0FP36kazuph5reviw2ui25request__animation__frame = (cb) => requestAnimationFrame(cb);
|
|
161
|
+
const _M0FP36kazuph5reviw2ui15set__visibility = (el, v) => { if (el) el.style.visibility = v ? 'visible' : 'hidden'; };
|
|
162
|
+
const _M0FP36kazuph5reviw2ui13show__overlay = (el) => { if (el) el.classList.add('visible'); };
|
|
156
163
|
const _M0FP36kazuph5reviw2ui23get__svg__natural__size = (svg) => {
|
|
157
164
|
if (!svg) return [800, 600];
|
|
158
165
|
var vb = svg.getAttribute('viewBox');
|
|
@@ -163,7 +170,6 @@ const _M0FP36kazuph5reviw2ui23get__svg__natural__size = (svg) => {
|
|
|
163
170
|
return [parseFloat(svg.getAttribute('width')) || svg.getBoundingClientRect().width || 800,
|
|
164
171
|
parseFloat(svg.getAttribute('height')) || svg.getBoundingClientRect().height || 600];
|
|
165
172
|
};
|
|
166
|
-
const _M0FP36kazuph5reviw2ui5query = (s) => document.querySelector(s);
|
|
167
173
|
const _M0FP36kazuph5reviw2ui17video__is__paused = (el) => el?.paused !== false;
|
|
168
174
|
const _M0FP36kazuph5reviw2ui12video__pause = (el) => { if (el) el.pause(); };
|
|
169
175
|
const _M0FP36kazuph5reviw2ui11video__play = (el) => { if (el) el.play(); };
|
|
@@ -202,10 +208,8 @@ const _M0FP36kazuph5reviw2ui29setup__intersection__observer = (target, callback,
|
|
|
202
208
|
const _M0FP36kazuph5reviw2ui18scroll__into__view = (el) => { if (el) el.scrollIntoView({ behavior: 'smooth', block: 'center' }); };
|
|
203
209
|
const _M0FP36kazuph5reviw2ui10query__all = (s) => [...document.querySelectorAll(s)];
|
|
204
210
|
const _M0FP36kazuph5reviw2ui9get__attr = (el, name) => el?.getAttribute(name) || "";
|
|
205
|
-
const _M0FP36kazuph5reviw2ui16set__inner__html = (el, html) => { if (el) el.innerHTML = html; };
|
|
206
211
|
const _M0FP36kazuph5reviw2ui10get__value = (el) => el?.value || "";
|
|
207
212
|
const _M0FP36kazuph5reviw2ui10set__value = (el, val) => { if (el) el.value = val; };
|
|
208
|
-
const _M0FP36kazuph5reviw2ui2on = (el, event, handler) => el?.addEventListener(event, handler);
|
|
209
213
|
const _M0FP36kazuph5reviw2ui7on__doc = (event, handler) => document.addEventListener(event, handler);
|
|
210
214
|
const _M0FP36kazuph5reviw2ui21window__inner__height = () => window.innerHeight;
|
|
211
215
|
const _M0FP36kazuph5reviw2ui10get__theme = () => document.documentElement.getAttribute("data-theme") || "dark";
|
|
@@ -287,8 +291,6 @@ const _M0FP36kazuph5reviw2ui16location__reload = () => location.reload();
|
|
|
287
291
|
const _M0FP36kazuph5reviw2ui16get__scroll__top = (el) => el?.scrollTop || 0;
|
|
288
292
|
const _M0FP36kazuph5reviw2ui16set__scroll__top = (el, val) => { if (el) el.scrollTop = val; };
|
|
289
293
|
const _M0FP36kazuph5reviw2ui19get__scroll__height = (el) => el?.scrollHeight || 0;
|
|
290
|
-
const _M0FP36kazuph5reviw2ui19get__client__height = (el) => el?.clientHeight || 0;
|
|
291
|
-
const _M0FP36kazuph5reviw2ui25request__animation__frame = (cb) => requestAnimationFrame(cb);
|
|
292
294
|
const _M0FP36kazuph5reviw2ui24cancel__animation__frame = (id) => cancelAnimationFrame(id);
|
|
293
295
|
const _M0FP36kazuph5reviw2ui9date__now = () => Date.now();
|
|
294
296
|
const _M0FP36kazuph5reviw2ui10on__window = (event, handler) => window.addEventListener(event, handler);
|
|
@@ -342,9 +344,7 @@ const _M0FP36kazuph5reviw2ui22create__video__element = (src) => {
|
|
|
342
344
|
return v;
|
|
343
345
|
};
|
|
344
346
|
const _M0FP36kazuph5reviw2ui8elem__eq = (a, b) => a === b;
|
|
345
|
-
const _M0FP36kazuph5reviw2ui15set__visibility = (el, v) => { if (el) el.style.visibility = v ? 'visible' : 'hidden'; };
|
|
346
347
|
const _M0FP36kazuph5reviw2ui19has__class__visible = (el) => el?.classList.contains('visible') || false;
|
|
347
|
-
const _M0FP36kazuph5reviw2ui13show__overlay = (el) => { if (el) el.classList.add('visible'); };
|
|
348
348
|
const _M0FP36kazuph5reviw2ui13hide__overlay = (el) => { if (el) el.classList.remove('visible'); };
|
|
349
349
|
const _M0FP36kazuph5reviw2ui20get__computed__style = (el, prop) => { if (!el) return ''; return el.style[prop] || getComputedStyle(el)[prop] || ''; };
|
|
350
350
|
const _M0FP36kazuph5reviw2ui23collect__reviw__answers = () => {
|
|
@@ -476,32 +476,32 @@ const _M0FP36kazuph5reviw2ui33log__mermaid__errors__to__console = () => {
|
|
|
476
476
|
}
|
|
477
477
|
};
|
|
478
478
|
const _M0FP095_40moonbitlang_2fcore_2fbuiltin_2eStringBuilder_24as_24_40moonbitlang_2fcore_2fbuiltin_2eLogger = { method_0: _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string, method_1: _M0IP016_24default__implP311moonbitlang4core7builtin6Logger16write__substringGRP311moonbitlang4core7builtin13StringBuilderE, method_2: _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__view, method_3: _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__char };
|
|
479
|
-
const
|
|
480
|
-
const
|
|
481
|
-
const
|
|
482
|
-
const
|
|
483
|
-
const
|
|
484
|
-
const
|
|
485
|
-
const
|
|
486
|
-
const
|
|
479
|
+
const _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1798 = ".mp4";
|
|
480
|
+
const _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1799 = ".mov";
|
|
481
|
+
const _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1800 = ".webm";
|
|
482
|
+
const _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1801 = ".avi";
|
|
483
|
+
const _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1802 = ".mkv";
|
|
484
|
+
const _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1803 = ".m4v";
|
|
485
|
+
const _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1804 = ".ogv";
|
|
486
|
+
const _M0FP36kazuph5reviw2ui41collect__toggle__content_2e_2abind_7c1843 = "H";
|
|
487
487
|
const _M0FP36kazuph5reviw2ui14submit__images = [];
|
|
488
|
-
const
|
|
489
|
-
const
|
|
490
|
-
const
|
|
491
|
-
const
|
|
492
|
-
const
|
|
493
|
-
const
|
|
494
|
-
const
|
|
495
|
-
const
|
|
496
|
-
const
|
|
497
|
-
const
|
|
498
|
-
const
|
|
499
|
-
const
|
|
500
|
-
const
|
|
501
|
-
const
|
|
488
|
+
const _M0FP36kazuph5reviw2ui43get__heading__source__line_2e_2abind_7c1931 = "#";
|
|
489
|
+
const _M0FP36kazuph5reviw2ui38setup__paste__handler_2e_2abind_7c1959 = "visible";
|
|
490
|
+
const _M0FP36kazuph5reviw2ui38setup__paste__handler_2e_2abind_7c1958 = "visible";
|
|
491
|
+
const _M0FP36kazuph5reviw2ui41find__code__block__range_2e_2abind_7c1961 = "```";
|
|
492
|
+
const _M0FP36kazuph5reviw2ui41find__code__block__range_2e_2abind_7c1963 = "```";
|
|
493
|
+
const _M0FP36kazuph5reviw2ui36split__table__cells_2e_2abind_7c1977 = "|";
|
|
494
|
+
const _M0FP36kazuph5reviw2ui36split__table__cells_2e_2abind_7c1976 = "|";
|
|
495
|
+
const _M0FP36kazuph5reviw2ui36split__table__cells_2e_2abind_7c1975 = "|";
|
|
496
|
+
const _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1984 = "|";
|
|
497
|
+
const _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1985 = "|";
|
|
498
|
+
const _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1988 = "|";
|
|
499
|
+
const _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1989 = "|";
|
|
500
|
+
const _M0FP36kazuph5reviw2ui40setup__preview__mouseup_2e_2abind_7c1997 = "\n";
|
|
501
|
+
const _M0FP36kazuph5reviw2ui40build__heading__anchors_2e_2abind_7c2010 = "#";
|
|
502
502
|
const _M0FP36kazuph5reviw2ui23heading__anchors__cache = [];
|
|
503
|
-
const
|
|
504
|
-
const
|
|
503
|
+
const _M0FP36kazuph5reviw2ui39toggle__history__panel_2e_2abind_7c2044 = "open";
|
|
504
|
+
const _M0FP36kazuph5reviw2ui39default__toggle__config_2erecord_2f1165 = { start_level: 1, end_level: 6, initially_open: true, animate: true };
|
|
505
505
|
const _M0FP36kazuph5reviw2ui14fs__image__zpv = _M0MP311moonbitlang4core3ref3Ref3newGORP36kazuph5reviw2ui8ZPVStateE(undefined);
|
|
506
506
|
const _M0FP36kazuph5reviw2ui21current__image__index = _M0MP311moonbitlang4core3ref3Ref3newGiE(-1);
|
|
507
507
|
const _M0FP311moonbitlang4core7builtin33brute__force__find_2econstr_2f264 = 0;
|
|
@@ -520,16 +520,16 @@ const _M0FP36kazuph5reviw2ui19fs__video__timeline = _M0MP311moonbitlang4core3ref
|
|
|
520
520
|
const _M0FP36kazuph5reviw2ui25current__scene__threshold = _M0MP311moonbitlang4core3ref3Ref3newGdE(0.01);
|
|
521
521
|
const _M0FP36kazuph5reviw2ui24current__stab__threshold = _M0MP311moonbitlang4core3ref3Ref3newGdE(0.1);
|
|
522
522
|
const _M0FP36kazuph5reviw2ui15active__toggles = _M0MP311moonbitlang4core3ref3Ref3newGRP311moonbitlang4core7builtin5ArrayGRP36kazuph5reviw2ui13HeadingToggleEE([]);
|
|
523
|
-
const
|
|
524
|
-
const
|
|
525
|
-
const
|
|
526
|
-
const
|
|
527
|
-
const
|
|
528
|
-
const
|
|
529
|
-
const
|
|
530
|
-
const
|
|
531
|
-
const
|
|
532
|
-
const
|
|
523
|
+
const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1044 = { _0: "少なめ", _1: 0.3 };
|
|
524
|
+
const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1045 = { _0: "やや少", _1: 0.1 };
|
|
525
|
+
const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1046 = { _0: "標準", _1: 0.01 };
|
|
526
|
+
const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1047 = { _0: "やや多", _1: 0.005 };
|
|
527
|
+
const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1048 = { _0: "多め", _1: 0.001 };
|
|
528
|
+
const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1049 = { _0: "弱め", _1: 0.5 };
|
|
529
|
+
const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1050 = { _0: "やや弱", _1: 0.2 };
|
|
530
|
+
const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1051 = { _0: "標準", _1: 0.1 };
|
|
531
|
+
const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1052 = { _0: "やや強", _1: 0.05 };
|
|
532
|
+
const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1053 = { _0: "強め", _1: 0.02 };
|
|
533
533
|
const _M0FP36kazuph5reviw2ui15global__sidebar = _M0MP311moonbitlang4core3ref3Ref3newGORP36kazuph5reviw2ui17MediaSidebarStateE(undefined);
|
|
534
534
|
const _M0FP36kazuph5reviw2ui23heading__anchors__built = _M0MP311moonbitlang4core3ref3Ref3newGbE(false);
|
|
535
535
|
const _M0FP36kazuph5reviw2ui12is__dragging = _M0MP311moonbitlang4core3ref3Ref3newGbE(false);
|
|
@@ -540,9 +540,9 @@ const _M0FP36kazuph5reviw2ui18page__instance__id = _M0MP311moonbitlang4core3ref3
|
|
|
540
540
|
const _M0FP36kazuph5reviw2ui15review__tab__id = _M0MP311moonbitlang4core3ref3Ref3newGsE("");
|
|
541
541
|
const _M0FP36kazuph5reviw2ui18submit__in__flight = _M0MP311moonbitlang4core3ref3Ref3newGbE(false);
|
|
542
542
|
const _M0FP36kazuph5reviw2ui19close__report__sent = _M0MP311moonbitlang4core3ref3Ref3newGbE(false);
|
|
543
|
-
const
|
|
544
|
-
const
|
|
545
|
-
const
|
|
543
|
+
const _M0FP36kazuph5reviw2ui42get__mermaid__source__range_2etuple_2f1818 = { _0: -1, _1: -1 };
|
|
544
|
+
const _M0FP36kazuph5reviw2ui42get__mermaid__source__range_2etuple_2f1819 = { _0: -1, _1: -1 };
|
|
545
|
+
const _M0FP36kazuph5reviw2ui39find__code__block__range_2etuple_2f1746 = { _0: -1, _1: -1 };
|
|
546
546
|
function _M0FP311moonbitlang4core5abort5abortGsE(msg) {
|
|
547
547
|
return $panic();
|
|
548
548
|
}
|
|
@@ -3070,7 +3070,7 @@ function _M0FP36kazuph5reviw2ui21collect__media__items(preview) {
|
|
|
3070
3070
|
} else {
|
|
3071
3071
|
if (_p$4 === "VIDEO" && _p$5) {
|
|
3072
3072
|
const _p$6 = _M0FP36kazuph5reviw2ui14get__attribute(_p$3, "src");
|
|
3073
|
-
const _p$7 = _M0MP311moonbitlang4core6string6String11has__suffix(_M0MP311moonbitlang4core6string6String9to__lower(_p$6), { str:
|
|
3073
|
+
const _p$7 = _M0MP311moonbitlang4core6string6String11has__suffix(_M0MP311moonbitlang4core6string6String9to__lower(_p$6), { str: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1798, start: 0, end: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1798.length }) || (_M0MP311moonbitlang4core6string6String11has__suffix(_M0MP311moonbitlang4core6string6String9to__lower(_p$6), { str: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1799, start: 0, end: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1799.length }) || (_M0MP311moonbitlang4core6string6String11has__suffix(_M0MP311moonbitlang4core6string6String9to__lower(_p$6), { str: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1800, start: 0, end: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1800.length }) || (_M0MP311moonbitlang4core6string6String11has__suffix(_M0MP311moonbitlang4core6string6String9to__lower(_p$6), { str: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1801, start: 0, end: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1801.length }) || (_M0MP311moonbitlang4core6string6String11has__suffix(_M0MP311moonbitlang4core6string6String9to__lower(_p$6), { str: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1802, start: 0, end: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1802.length }) || (_M0MP311moonbitlang4core6string6String11has__suffix(_M0MP311moonbitlang4core6string6String9to__lower(_p$6), { str: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1803, start: 0, end: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1803.length }) || _M0MP311moonbitlang4core6string6String11has__suffix(_M0MP311moonbitlang4core6string6String9to__lower(_p$6), { str: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1804, start: 0, end: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1804.length }))))));
|
|
3074
3074
|
if (_p$7) {
|
|
3075
3075
|
video_count.val = video_count.val + 1 | 0;
|
|
3076
3076
|
const _p$8 = _M0FP36kazuph5reviw2ui14get__attribute(_p$3, "title");
|
|
@@ -3172,21 +3172,14 @@ function _M0FP36kazuph5reviw2ui15is__video__type(type_) {
|
|
|
3172
3172
|
return false;
|
|
3173
3173
|
}
|
|
3174
3174
|
}
|
|
3175
|
-
function
|
|
3176
|
-
|
|
3177
|
-
const viewport = _env._4;
|
|
3178
|
-
const zpv_ref = _env._3;
|
|
3179
|
-
const wrapper = _env._2;
|
|
3180
|
-
const zoom_info = _env._1;
|
|
3181
|
-
const state = _env._0;
|
|
3182
|
-
const nw = _M0FP36kazuph5reviw2ui19get__natural__width(img);
|
|
3183
|
-
const nh = _M0FP36kazuph5reviw2ui20get__natural__height(img);
|
|
3184
|
-
if (nw <= 0 || nh <= 0) {
|
|
3175
|
+
function _M0FP36kazuph5reviw2ui32show__image__fullscreen__moonbit(images, index, overlay, fs_content, fs_wrapper, fs_zoom_info, fs_counter) {
|
|
3176
|
+
if (index < 0 || index >= images.length) {
|
|
3185
3177
|
return undefined;
|
|
3186
3178
|
}
|
|
3187
|
-
|
|
3179
|
+
_M0FP36kazuph5reviw2ui21current__image__index.val = index;
|
|
3180
|
+
const _p = _M0FP36kazuph5reviw2ui14fs__image__zpv.val;
|
|
3188
3181
|
if (!(_p === undefined)) {
|
|
3189
|
-
const _p$2 =
|
|
3182
|
+
const _p$2 = _M0FP36kazuph5reviw2ui14fs__image__zpv.val;
|
|
3190
3183
|
let _tmp;
|
|
3191
3184
|
if (_p$2 === undefined) {
|
|
3192
3185
|
_tmp = $panic();
|
|
@@ -3195,20 +3188,94 @@ function _M0FP36kazuph5reviw2ui40render__image__viewer_2einit__zpv_7c1463(_env)
|
|
|
3195
3188
|
_tmp = _p$3;
|
|
3196
3189
|
}
|
|
3197
3190
|
_M0FP36kazuph5reviw2ui26destroy__zoom__pan__viewer(_tmp);
|
|
3191
|
+
_M0FP36kazuph5reviw2ui14fs__image__zpv.val = undefined;
|
|
3192
|
+
}
|
|
3193
|
+
_M0FP36kazuph5reviw2ui15clear__children(fs_wrapper);
|
|
3194
|
+
const img = _M0MP311moonbitlang4core5array5Array2atGRP36kazuph5reviw2ui7ElementE(images, index);
|
|
3195
|
+
const cloned = _M0FP36kazuph5reviw2ui17clone__node__deep(img);
|
|
3196
|
+
_M0FP36kazuph5reviw2ui10set__style(cloned, "maxWidth", "none");
|
|
3197
|
+
_M0FP36kazuph5reviw2ui10set__style(cloned, "maxHeight", "none");
|
|
3198
|
+
_M0FP36kazuph5reviw2ui10set__style(cloned, "cursor", "");
|
|
3199
|
+
_M0FP36kazuph5reviw2ui10set__style(cloned, "display", "block");
|
|
3200
|
+
_M0FP36kazuph5reviw2ui14set__draggable(cloned, false);
|
|
3201
|
+
const nw = _M0FP36kazuph5reviw2ui19get__natural__width(img);
|
|
3202
|
+
const nh = _M0FP36kazuph5reviw2ui20get__natural__height(img);
|
|
3203
|
+
const nat_w = nw > 0 ? nw : 800;
|
|
3204
|
+
const nat_h = nh > 0 ? nh : 600;
|
|
3205
|
+
_M0FP36kazuph5reviw2ui10set__style(cloned, "width", `${_M0MP311moonbitlang4core6double6Double10to__string(nat_w)}px`);
|
|
3206
|
+
_M0FP36kazuph5reviw2ui10set__style(cloned, "height", `${_M0MP311moonbitlang4core6double6Double10to__string(nat_h)}px`);
|
|
3207
|
+
_M0FP36kazuph5reviw2ui13append__child(fs_wrapper, cloned);
|
|
3208
|
+
if (!_M0FP36kazuph5reviw2ui8is__null(fs_counter)) {
|
|
3209
|
+
_M0FP36kazuph5reviw2ui18set__text__content(fs_counter, `${_M0MP311moonbitlang4core3int3Int18to__string_2einner(index + 1 | 0, 10)} / ${_M0MP311moonbitlang4core3int3Int18to__string_2einner(images.length, 10)}`);
|
|
3210
|
+
}
|
|
3211
|
+
_M0FP36kazuph5reviw2ui15set__visibility(fs_wrapper, false);
|
|
3212
|
+
const img_minimap_content = _M0FP36kazuph5reviw2ui5query("#image-fs-minimap-content");
|
|
3213
|
+
const img_minimap_viewport = _M0FP36kazuph5reviw2ui5query("#image-fs-minimap-viewport");
|
|
3214
|
+
if (!_M0FP36kazuph5reviw2ui8is__null(img_minimap_content)) {
|
|
3215
|
+
_M0FP36kazuph5reviw2ui15clear__children(img_minimap_content);
|
|
3216
|
+
const minimap_img = _M0FP36kazuph5reviw2ui17clone__node__deep(cloned);
|
|
3217
|
+
_M0FP36kazuph5reviw2ui10set__style(minimap_img, "width", "100%");
|
|
3218
|
+
_M0FP36kazuph5reviw2ui10set__style(minimap_img, "height", "100%");
|
|
3219
|
+
_M0FP36kazuph5reviw2ui10set__style(minimap_img, "objectFit", "contain");
|
|
3220
|
+
_M0FP36kazuph5reviw2ui13append__child(img_minimap_content, minimap_img);
|
|
3198
3221
|
}
|
|
3199
|
-
|
|
3200
|
-
|
|
3201
|
-
|
|
3202
|
-
|
|
3203
|
-
|
|
3204
|
-
|
|
3205
|
-
_M0FP36kazuph5reviw2ui10set__style(wrapper, "visibility", "visible");
|
|
3222
|
+
const zpv = _M0FP36kazuph5reviw2ui34create__zoom__pan__viewer__moonbit(fs_content, fs_wrapper, nat_w, nat_h, fs_zoom_info, true, img_minimap_viewport, 184, 134, 8, 0.1, 20, true);
|
|
3223
|
+
_M0FP36kazuph5reviw2ui14fs__image__zpv.val = zpv;
|
|
3224
|
+
_M0FP36kazuph5reviw2ui13show__overlay(overlay);
|
|
3225
|
+
_M0FP36kazuph5reviw2ui25request__animation__frame(() => {
|
|
3226
|
+
_M0FP36kazuph5reviw2ui17fit__to__viewport(zpv);
|
|
3227
|
+
_M0FP36kazuph5reviw2ui15set__visibility(fs_wrapper, true);
|
|
3206
3228
|
});
|
|
3207
3229
|
}
|
|
3230
|
+
function _M0FP36kazuph5reviw2ui45render__image__viewer_2eschedule__init_7c1490(_env) {
|
|
3231
|
+
const img = _env._6;
|
|
3232
|
+
const viewport = _env._5;
|
|
3233
|
+
const zpv_ref = _env._4;
|
|
3234
|
+
const content = _env._3;
|
|
3235
|
+
const wrapper = _env._2;
|
|
3236
|
+
const zoom_info = _env._1;
|
|
3237
|
+
const state = _env._0;
|
|
3238
|
+
_M0FP36kazuph5reviw2ui12set__timeout(() => {
|
|
3239
|
+
const nw = _M0FP36kazuph5reviw2ui19get__natural__width(img);
|
|
3240
|
+
const nh = _M0FP36kazuph5reviw2ui20get__natural__height(img);
|
|
3241
|
+
if (nw <= 0 || nh <= 0) {
|
|
3242
|
+
return;
|
|
3243
|
+
}
|
|
3244
|
+
const _p = zpv_ref.val;
|
|
3245
|
+
if (!(_p === undefined)) {
|
|
3246
|
+
const _p$2 = zpv_ref.val;
|
|
3247
|
+
let _tmp;
|
|
3248
|
+
if (_p$2 === undefined) {
|
|
3249
|
+
_tmp = $panic();
|
|
3250
|
+
} else {
|
|
3251
|
+
const _p$3 = _p$2;
|
|
3252
|
+
_tmp = _p$3;
|
|
3253
|
+
}
|
|
3254
|
+
_M0FP36kazuph5reviw2ui26destroy__zoom__pan__viewer(_tmp);
|
|
3255
|
+
}
|
|
3256
|
+
_M0FP36kazuph5reviw2ui10set__style(img, "width", `${_M0MP311moonbitlang4core6double6Double10to__string(nw)}px`);
|
|
3257
|
+
_M0FP36kazuph5reviw2ui10set__style(img, "height", `${_M0MP311moonbitlang4core6double6Double10to__string(nh)}px`);
|
|
3258
|
+
const vp_w = _M0FP36kazuph5reviw2ui18get__client__width(viewport);
|
|
3259
|
+
if (vp_w > 0) {
|
|
3260
|
+
const scale = vp_w / nw;
|
|
3261
|
+
const fitted_h = nh * scale;
|
|
3262
|
+
const max_h = _M0FP36kazuph5reviw2ui19get__client__height(content);
|
|
3263
|
+
const target_h = fitted_h < max_h ? fitted_h : max_h;
|
|
3264
|
+
_M0FP36kazuph5reviw2ui10set__style(viewport, "height", `${_M0MP311moonbitlang4core6double6Double10to__string(target_h)}px`);
|
|
3265
|
+
_M0FP36kazuph5reviw2ui10set__style(viewport, "flex", "none");
|
|
3266
|
+
}
|
|
3267
|
+
const zpv = _M0FP36kazuph5reviw2ui34create__zoom__pan__viewer__moonbit(viewport, wrapper, nw, nh, zoom_info, false, _M0FP36kazuph5reviw2ui13null__element(), 184, 134, 8, 0.1, 20, true);
|
|
3268
|
+
zpv_ref.val = zpv;
|
|
3269
|
+
state.current_zpv = zpv_ref.val;
|
|
3270
|
+
_M0FP36kazuph5reviw2ui39request__fit__to__viewport__when__ready(zpv, () => {
|
|
3271
|
+
_M0FP36kazuph5reviw2ui10set__style(wrapper, "visibility", "visible");
|
|
3272
|
+
});
|
|
3273
|
+
}, 400);
|
|
3274
|
+
}
|
|
3208
3275
|
function _M0FP36kazuph5reviw2ui21render__image__viewer(state, content, item) {
|
|
3209
3276
|
const viewport = _M0FP36kazuph5reviw2ui15create__element("div");
|
|
3210
3277
|
_M0FP36kazuph5reviw2ui10set__style(viewport, "width", "100%");
|
|
3211
|
-
_M0FP36kazuph5reviw2ui10set__style(viewport, "
|
|
3278
|
+
_M0FP36kazuph5reviw2ui10set__style(viewport, "flex", "1");
|
|
3212
3279
|
_M0FP36kazuph5reviw2ui10set__style(viewport, "overflow", "hidden");
|
|
3213
3280
|
_M0FP36kazuph5reviw2ui10set__style(viewport, "position", "relative");
|
|
3214
3281
|
_M0FP36kazuph5reviw2ui10set__style(viewport, "cursor", "grab");
|
|
@@ -3227,26 +3294,95 @@ function _M0FP36kazuph5reviw2ui21render__image__viewer(state, content, item) {
|
|
|
3227
3294
|
_M0FP36kazuph5reviw2ui16set__class__name(zoom_info, "sidebar-zoom-indicator");
|
|
3228
3295
|
_M0FP36kazuph5reviw2ui18set__text__content(zoom_info, "100%");
|
|
3229
3296
|
_M0FP36kazuph5reviw2ui13append__child(viewport, zoom_info);
|
|
3297
|
+
const fs_btn = _M0FP36kazuph5reviw2ui15create__element("button");
|
|
3298
|
+
_M0FP36kazuph5reviw2ui16set__class__name(fs_btn, "sidebar-maximize-btn");
|
|
3299
|
+
_M0FP36kazuph5reviw2ui16set__inner__html(fs_btn, "⛶");
|
|
3300
|
+
_M0FP36kazuph5reviw2ui14set__attribute(fs_btn, "title", "Fullscreen");
|
|
3301
|
+
_M0FP36kazuph5reviw2ui2on(fs_btn, "click", (e) => {
|
|
3302
|
+
_M0FP36kazuph5reviw2ui16prevent__default(e);
|
|
3303
|
+
_M0FP36kazuph5reviw2ui17stop__propagation(e);
|
|
3304
|
+
const preview = _M0FP36kazuph5reviw2ui5query("#md-preview");
|
|
3305
|
+
if (_M0FP36kazuph5reviw2ui8is__null(preview)) {
|
|
3306
|
+
return undefined;
|
|
3307
|
+
}
|
|
3308
|
+
const all_images = _M0FP36kazuph5reviw2ui14query__all__in(preview, "img");
|
|
3309
|
+
const images = [];
|
|
3310
|
+
const _len = all_images.length;
|
|
3311
|
+
let _tmp = 0;
|
|
3312
|
+
while (true) {
|
|
3313
|
+
const _i = _tmp;
|
|
3314
|
+
if (_i < _len) {
|
|
3315
|
+
const im = all_images[_i];
|
|
3316
|
+
if (_M0FP36kazuph5reviw2ui8is__null(_M0FP36kazuph5reviw2ui7closest(im, ".mermaid-container"))) {
|
|
3317
|
+
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw2ui7ElementE(images, im);
|
|
3318
|
+
}
|
|
3319
|
+
_tmp = _i + 1 | 0;
|
|
3320
|
+
continue;
|
|
3321
|
+
} else {
|
|
3322
|
+
break;
|
|
3323
|
+
}
|
|
3324
|
+
}
|
|
3325
|
+
const target_src = item.src;
|
|
3326
|
+
let idx = -1;
|
|
3327
|
+
const _len$2 = images.length;
|
|
3328
|
+
let _tmp$2 = 0;
|
|
3329
|
+
while (true) {
|
|
3330
|
+
const _i = _tmp$2;
|
|
3331
|
+
if (_i < _len$2) {
|
|
3332
|
+
const im = images[_i];
|
|
3333
|
+
let _tmp$3;
|
|
3334
|
+
if (_M0FP36kazuph5reviw2ui8get__src(im) === target_src) {
|
|
3335
|
+
_tmp$3 = true;
|
|
3336
|
+
} else {
|
|
3337
|
+
let _tmp$4;
|
|
3338
|
+
if (_M0MP311moonbitlang4core6string6String11has__suffix(_M0FP36kazuph5reviw2ui8get__src(im), { str: target_src, start: 0, end: target_src.length })) {
|
|
3339
|
+
_tmp$4 = true;
|
|
3340
|
+
} else {
|
|
3341
|
+
const _bind$2 = _M0FP36kazuph5reviw2ui8get__src(im);
|
|
3342
|
+
_tmp$4 = _M0MP311moonbitlang4core6string6String11has__suffix(target_src, { str: _bind$2, start: 0, end: _bind$2.length });
|
|
3343
|
+
}
|
|
3344
|
+
_tmp$3 = _tmp$4;
|
|
3345
|
+
}
|
|
3346
|
+
if (_tmp$3) {
|
|
3347
|
+
idx = _i;
|
|
3348
|
+
break;
|
|
3349
|
+
}
|
|
3350
|
+
_tmp$2 = _i + 1 | 0;
|
|
3351
|
+
continue;
|
|
3352
|
+
} else {
|
|
3353
|
+
break;
|
|
3354
|
+
}
|
|
3355
|
+
}
|
|
3356
|
+
if (idx < 0 && images.length > 0) {
|
|
3357
|
+
idx = 0;
|
|
3358
|
+
}
|
|
3359
|
+
if (idx >= 0) {
|
|
3360
|
+
const overlay = _M0FP36kazuph5reviw2ui5query("#image-fullscreen");
|
|
3361
|
+
const fs_content = _M0FP36kazuph5reviw2ui5query("#image-fs-content");
|
|
3362
|
+
const fs_wrapper = _M0FP36kazuph5reviw2ui5query("#image-fs-wrapper");
|
|
3363
|
+
const fs_zoom_info = _M0FP36kazuph5reviw2ui5query("#img-fs-zoom-info");
|
|
3364
|
+
const fs_counter = _M0FP36kazuph5reviw2ui5query("#img-fs-counter");
|
|
3365
|
+
if (!_M0FP36kazuph5reviw2ui8is__null(overlay) && (!_M0FP36kazuph5reviw2ui8is__null(fs_content) && !_M0FP36kazuph5reviw2ui8is__null(fs_wrapper))) {
|
|
3366
|
+
_M0FP36kazuph5reviw2ui32show__image__fullscreen__moonbit(images, idx, overlay, fs_content, fs_wrapper, fs_zoom_info, fs_counter);
|
|
3367
|
+
return;
|
|
3368
|
+
} else {
|
|
3369
|
+
return;
|
|
3370
|
+
}
|
|
3371
|
+
} else {
|
|
3372
|
+
return;
|
|
3373
|
+
}
|
|
3374
|
+
});
|
|
3375
|
+
_M0FP36kazuph5reviw2ui13append__child(viewport, fs_btn);
|
|
3230
3376
|
_M0FP36kazuph5reviw2ui13append__child(content, viewport);
|
|
3231
3377
|
_M0FP36kazuph5reviw2ui10set__style(wrapper, "visibility", "hidden");
|
|
3232
3378
|
const zpv_ref = { val: undefined };
|
|
3233
|
-
const _env = { _0: state, _1: zoom_info, _2: wrapper, _3:
|
|
3379
|
+
const _env = { _0: state, _1: zoom_info, _2: wrapper, _3: content, _4: zpv_ref, _5: viewport, _6: img };
|
|
3234
3380
|
const h = _M0FP36kazuph5reviw2ui24on__with__handle_2einner(img, "load", (e) => {
|
|
3235
|
-
|
|
3236
|
-
_M0FP36kazuph5reviw2ui40render__image__viewer_2einit__zpv_7c1463(_env);
|
|
3237
|
-
return;
|
|
3238
|
-
} else {
|
|
3239
|
-
_M0FP36kazuph5reviw2ui12set__timeout(() => {
|
|
3240
|
-
_M0FP36kazuph5reviw2ui40render__image__viewer_2einit__zpv_7c1463(_env);
|
|
3241
|
-
}, 500);
|
|
3242
|
-
return;
|
|
3243
|
-
}
|
|
3381
|
+
_M0FP36kazuph5reviw2ui45render__image__viewer_2eschedule__init_7c1490(_env);
|
|
3244
3382
|
}, false, true);
|
|
3245
3383
|
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw2ui14ListenerHandleE(state.handles, h);
|
|
3246
3384
|
if (_M0FP36kazuph5reviw2ui19get__natural__width(img) > 0) {
|
|
3247
|
-
|
|
3248
|
-
_M0FP36kazuph5reviw2ui40render__image__viewer_2einit__zpv_7c1463(_env);
|
|
3249
|
-
}, 500);
|
|
3385
|
+
_M0FP36kazuph5reviw2ui45render__image__viewer_2eschedule__init_7c1490(_env);
|
|
3250
3386
|
}
|
|
3251
3387
|
state.current_cleanup = () => {
|
|
3252
3388
|
const _p = zpv_ref.val;
|
|
@@ -3464,8 +3600,8 @@ function _M0FP36kazuph5reviw2ui21render__video__viewer(state, content, item) {
|
|
|
3464
3600
|
const scene_title = _M0FP36kazuph5reviw2ui15create__element("h4");
|
|
3465
3601
|
_M0FP36kazuph5reviw2ui18set__text__content(scene_title, "Scene Sensitivity");
|
|
3466
3602
|
_M0FP36kazuph5reviw2ui13append__child(settings_panel, scene_title);
|
|
3467
|
-
const scene_levels = [
|
|
3468
|
-
const stab_levels = [
|
|
3603
|
+
const scene_levels = [_M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1044, _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1045, _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1046, _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1047, _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1048];
|
|
3604
|
+
const stab_levels = [_M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1049, _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1050, _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1051, _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1052, _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1053];
|
|
3469
3605
|
const cur_scene = { val: 0.01 };
|
|
3470
3606
|
const cur_stab = { val: 0.1 };
|
|
3471
3607
|
const on_scene_change = (new_val) => {
|
|
@@ -3973,7 +4109,7 @@ function _M0FP36kazuph5reviw2ui24collect__toggle__content(heading, level) {
|
|
|
3973
4109
|
while (true) {
|
|
3974
4110
|
if (!_M0FP36kazuph5reviw2ui8is__null(current)) {
|
|
3975
4111
|
const tag = _M0FP36kazuph5reviw2ui14get__tag__name(current);
|
|
3976
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(tag, { str:
|
|
4112
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(tag, { str: _M0FP36kazuph5reviw2ui41collect__toggle__content_2e_2abind_7c1843, start: 0, end: _M0FP36kazuph5reviw2ui41collect__toggle__content_2e_2abind_7c1843.length }) && tag.length === 2) {
|
|
3977
4113
|
const h_level = _M0FP36kazuph5reviw4core16parse__int__safe(_M0MP311moonbitlang4core6string6String17substring_2einner(tag, 1, undefined));
|
|
3978
4114
|
if (h_level <= level) {
|
|
3979
4115
|
break;
|
|
@@ -4159,7 +4295,7 @@ function _M0FP36kazuph5reviw2ui24setup__heading__observer() {
|
|
|
4159
4295
|
function _M0FP36kazuph5reviw2ui22init__heading__toggles(config) {
|
|
4160
4296
|
let cfg;
|
|
4161
4297
|
if (config === undefined) {
|
|
4162
|
-
cfg =
|
|
4298
|
+
cfg = _M0FP36kazuph5reviw2ui39default__toggle__config_2erecord_2f1165;
|
|
4163
4299
|
} else {
|
|
4164
4300
|
const _Some = config;
|
|
4165
4301
|
cfg = _Some;
|
|
@@ -5411,7 +5547,7 @@ function _M0FP36kazuph5reviw2ui26get__heading__source__line(heading_el) {
|
|
|
5411
5547
|
const row = data[_i];
|
|
5412
5548
|
if (row.length > 0) {
|
|
5413
5549
|
const src_line = _M0MP311moonbitlang4core5array5Array2atGsE(row, 0);
|
|
5414
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(src_line, { str:
|
|
5550
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(src_line, { str: _M0FP36kazuph5reviw2ui43get__heading__source__line_2e_2abind_7c1931, start: 0, end: _M0FP36kazuph5reviw2ui43get__heading__source__line_2e_2abind_7c1931.length })) {
|
|
5415
5551
|
const stripped_src = _M0FP36kazuph5reviw2ui15strip__markdown(src_line);
|
|
5416
5552
|
if (stripped_src === cleaned) {
|
|
5417
5553
|
return _i;
|
|
@@ -5566,61 +5702,6 @@ function _M0FP36kazuph5reviw2ui33close__image__fullscreen__moonbit(overlay) {
|
|
|
5566
5702
|
return;
|
|
5567
5703
|
}
|
|
5568
5704
|
}
|
|
5569
|
-
function _M0FP36kazuph5reviw2ui32show__image__fullscreen__moonbit(images, index, overlay, fs_content, fs_wrapper, fs_zoom_info, fs_counter) {
|
|
5570
|
-
if (index < 0 || index >= images.length) {
|
|
5571
|
-
return undefined;
|
|
5572
|
-
}
|
|
5573
|
-
_M0FP36kazuph5reviw2ui21current__image__index.val = index;
|
|
5574
|
-
const _p = _M0FP36kazuph5reviw2ui14fs__image__zpv.val;
|
|
5575
|
-
if (!(_p === undefined)) {
|
|
5576
|
-
const _p$2 = _M0FP36kazuph5reviw2ui14fs__image__zpv.val;
|
|
5577
|
-
let _tmp;
|
|
5578
|
-
if (_p$2 === undefined) {
|
|
5579
|
-
_tmp = $panic();
|
|
5580
|
-
} else {
|
|
5581
|
-
const _p$3 = _p$2;
|
|
5582
|
-
_tmp = _p$3;
|
|
5583
|
-
}
|
|
5584
|
-
_M0FP36kazuph5reviw2ui26destroy__zoom__pan__viewer(_tmp);
|
|
5585
|
-
_M0FP36kazuph5reviw2ui14fs__image__zpv.val = undefined;
|
|
5586
|
-
}
|
|
5587
|
-
_M0FP36kazuph5reviw2ui15clear__children(fs_wrapper);
|
|
5588
|
-
const img = _M0MP311moonbitlang4core5array5Array2atGRP36kazuph5reviw2ui7ElementE(images, index);
|
|
5589
|
-
const cloned = _M0FP36kazuph5reviw2ui17clone__node__deep(img);
|
|
5590
|
-
_M0FP36kazuph5reviw2ui10set__style(cloned, "maxWidth", "none");
|
|
5591
|
-
_M0FP36kazuph5reviw2ui10set__style(cloned, "maxHeight", "none");
|
|
5592
|
-
_M0FP36kazuph5reviw2ui10set__style(cloned, "cursor", "");
|
|
5593
|
-
_M0FP36kazuph5reviw2ui10set__style(cloned, "display", "block");
|
|
5594
|
-
_M0FP36kazuph5reviw2ui14set__draggable(cloned, false);
|
|
5595
|
-
const nw = _M0FP36kazuph5reviw2ui19get__natural__width(img);
|
|
5596
|
-
const nh = _M0FP36kazuph5reviw2ui20get__natural__height(img);
|
|
5597
|
-
const nat_w = nw > 0 ? nw : 800;
|
|
5598
|
-
const nat_h = nh > 0 ? nh : 600;
|
|
5599
|
-
_M0FP36kazuph5reviw2ui10set__style(cloned, "width", `${_M0MP311moonbitlang4core6double6Double10to__string(nat_w)}px`);
|
|
5600
|
-
_M0FP36kazuph5reviw2ui10set__style(cloned, "height", `${_M0MP311moonbitlang4core6double6Double10to__string(nat_h)}px`);
|
|
5601
|
-
_M0FP36kazuph5reviw2ui13append__child(fs_wrapper, cloned);
|
|
5602
|
-
if (!_M0FP36kazuph5reviw2ui8is__null(fs_counter)) {
|
|
5603
|
-
_M0FP36kazuph5reviw2ui18set__text__content(fs_counter, `${_M0MP311moonbitlang4core3int3Int18to__string_2einner(index + 1 | 0, 10)} / ${_M0MP311moonbitlang4core3int3Int18to__string_2einner(images.length, 10)}`);
|
|
5604
|
-
}
|
|
5605
|
-
_M0FP36kazuph5reviw2ui15set__visibility(fs_wrapper, false);
|
|
5606
|
-
const img_minimap_content = _M0FP36kazuph5reviw2ui5query("#image-fs-minimap-content");
|
|
5607
|
-
const img_minimap_viewport = _M0FP36kazuph5reviw2ui5query("#image-fs-minimap-viewport");
|
|
5608
|
-
if (!_M0FP36kazuph5reviw2ui8is__null(img_minimap_content)) {
|
|
5609
|
-
_M0FP36kazuph5reviw2ui15clear__children(img_minimap_content);
|
|
5610
|
-
const minimap_img = _M0FP36kazuph5reviw2ui17clone__node__deep(cloned);
|
|
5611
|
-
_M0FP36kazuph5reviw2ui10set__style(minimap_img, "width", "100%");
|
|
5612
|
-
_M0FP36kazuph5reviw2ui10set__style(minimap_img, "height", "100%");
|
|
5613
|
-
_M0FP36kazuph5reviw2ui10set__style(minimap_img, "objectFit", "contain");
|
|
5614
|
-
_M0FP36kazuph5reviw2ui13append__child(img_minimap_content, minimap_img);
|
|
5615
|
-
}
|
|
5616
|
-
const zpv = _M0FP36kazuph5reviw2ui34create__zoom__pan__viewer__moonbit(fs_content, fs_wrapper, nat_w, nat_h, fs_zoom_info, true, img_minimap_viewport, 184, 134, 8, 0.1, 20, true);
|
|
5617
|
-
_M0FP36kazuph5reviw2ui14fs__image__zpv.val = zpv;
|
|
5618
|
-
_M0FP36kazuph5reviw2ui13show__overlay(overlay);
|
|
5619
|
-
_M0FP36kazuph5reviw2ui25request__animation__frame(() => {
|
|
5620
|
-
_M0FP36kazuph5reviw2ui17fit__to__viewport(zpv);
|
|
5621
|
-
_M0FP36kazuph5reviw2ui15set__visibility(fs_wrapper, true);
|
|
5622
|
-
});
|
|
5623
|
-
}
|
|
5624
5705
|
function _M0FP36kazuph5reviw2ui36navigate__image__fullscreen__moonbit(direction, overlay, fs_content, fs_wrapper, fs_zoom_info, fs_counter) {
|
|
5625
5706
|
const images = _M0FP36kazuph5reviw2ui24collect__preview__images();
|
|
5626
5707
|
if (images.length === 0) {
|
|
@@ -6036,7 +6117,7 @@ function _M0FP36kazuph5reviw2ui21setup__paste__handler() {
|
|
|
6036
6117
|
let submit_visible;
|
|
6037
6118
|
if (!_M0FP36kazuph5reviw2ui8is__null(submit_modal)) {
|
|
6038
6119
|
let _tmp;
|
|
6039
|
-
if (_M0MP311moonbitlang4core6string6String8contains(_M0FP36kazuph5reviw2ui9get__attr(submit_modal, "class"), { str:
|
|
6120
|
+
if (_M0MP311moonbitlang4core6string6String8contains(_M0FP36kazuph5reviw2ui9get__attr(submit_modal, "class"), { str: _M0FP36kazuph5reviw2ui38setup__paste__handler_2e_2abind_7c1959, start: 0, end: _M0FP36kazuph5reviw2ui38setup__paste__handler_2e_2abind_7c1959.length })) {
|
|
6040
6121
|
_tmp = true;
|
|
6041
6122
|
} else {
|
|
6042
6123
|
const _p = _M0FP36kazuph5reviw2ui20get__computed__style(submit_modal, "display");
|
|
@@ -6050,7 +6131,7 @@ function _M0FP36kazuph5reviw2ui21setup__paste__handler() {
|
|
|
6050
6131
|
let comment_visible;
|
|
6051
6132
|
if (!_M0FP36kazuph5reviw2ui8is__null(comment_card)) {
|
|
6052
6133
|
let _tmp;
|
|
6053
|
-
if (_M0MP311moonbitlang4core6string6String8contains(_M0FP36kazuph5reviw2ui9get__attr(comment_card, "class"), { str:
|
|
6134
|
+
if (_M0MP311moonbitlang4core6string6String8contains(_M0FP36kazuph5reviw2ui9get__attr(comment_card, "class"), { str: _M0FP36kazuph5reviw2ui38setup__paste__handler_2e_2abind_7c1958, start: 0, end: _M0FP36kazuph5reviw2ui38setup__paste__handler_2e_2abind_7c1958.length })) {
|
|
6054
6135
|
_tmp = true;
|
|
6055
6136
|
} else {
|
|
6056
6137
|
const _p = _M0FP36kazuph5reviw2ui20get__computed__style(comment_card, "display");
|
|
@@ -6090,13 +6171,13 @@ function _M0FP36kazuph5reviw2ui24find__code__block__range(code_text) {
|
|
|
6090
6171
|
let i = 0;
|
|
6091
6172
|
while (true) {
|
|
6092
6173
|
if (i < data.length) {
|
|
6093
|
-
if (_M0MP311moonbitlang4core5array5Array2atGRP311moonbitlang4core7builtin5ArrayGsEE(data, i).length > 0 && _M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(_M0MP311moonbitlang4core5array5Array2atGRP311moonbitlang4core7builtin5ArrayGsEE(data, i), 0), { str:
|
|
6174
|
+
if (_M0MP311moonbitlang4core5array5Array2atGRP311moonbitlang4core7builtin5ArrayGsEE(data, i).length > 0 && _M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(_M0MP311moonbitlang4core5array5Array2atGRP311moonbitlang4core7builtin5ArrayGsEE(data, i), 0), { str: _M0FP36kazuph5reviw2ui41find__code__block__range_2e_2abind_7c1961, start: 0, end: _M0FP36kazuph5reviw2ui41find__code__block__range_2e_2abind_7c1961.length })) {
|
|
6094
6175
|
const block_start = i;
|
|
6095
6176
|
i = i + 1 | 0;
|
|
6096
6177
|
const code_buf = _M0MP311moonbitlang4core7builtin13StringBuilder11new_2einner(0);
|
|
6097
6178
|
while (true) {
|
|
6098
6179
|
if (i < data.length) {
|
|
6099
|
-
if (_M0MP311moonbitlang4core5array5Array2atGRP311moonbitlang4core7builtin5ArrayGsEE(data, i).length > 0 && _M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(_M0MP311moonbitlang4core5array5Array2atGRP311moonbitlang4core7builtin5ArrayGsEE(data, i), 0), { str:
|
|
6180
|
+
if (_M0MP311moonbitlang4core5array5Array2atGRP311moonbitlang4core7builtin5ArrayGsEE(data, i).length > 0 && _M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(_M0MP311moonbitlang4core5array5Array2atGRP311moonbitlang4core7builtin5ArrayGsEE(data, i), 0), { str: _M0FP36kazuph5reviw2ui41find__code__block__range_2e_2abind_7c1963, start: 0, end: _M0FP36kazuph5reviw2ui41find__code__block__range_2e_2abind_7c1963.length })) {
|
|
6100
6181
|
break;
|
|
6101
6182
|
}
|
|
6102
6183
|
if (code_buf.val.length > 0) {
|
|
@@ -6125,7 +6206,7 @@ function _M0FP36kazuph5reviw2ui24find__code__block__range(code_text) {
|
|
|
6125
6206
|
break;
|
|
6126
6207
|
}
|
|
6127
6208
|
}
|
|
6128
|
-
return
|
|
6209
|
+
return _M0FP36kazuph5reviw2ui39find__code__block__range_2etuple_2f1746;
|
|
6129
6210
|
}
|
|
6130
6211
|
function _M0FP36kazuph5reviw2ui36find__media__source__line__in__block(block, start_from) {
|
|
6131
6212
|
if (_M0FP36kazuph5reviw2ui8is__null(block)) {
|
|
@@ -6215,9 +6296,9 @@ function _M0FP36kazuph5reviw2ui18find__source__line(text, _element, start_from)
|
|
|
6215
6296
|
function _M0FP36kazuph5reviw2ui19split__table__cells(line) {
|
|
6216
6297
|
const cells = [];
|
|
6217
6298
|
const normalized = _M0FP36kazuph5reviw2ui15normalize__text(line);
|
|
6218
|
-
const inner = _M0MP311moonbitlang4core6string6String11has__prefix(normalized, { str:
|
|
6219
|
-
const trimmed = _M0MP311moonbitlang4core6string6String11has__suffix(inner, { str:
|
|
6220
|
-
const _it = _M0MP311moonbitlang4core6string6String5split(trimmed, { str:
|
|
6299
|
+
const inner = _M0MP311moonbitlang4core6string6String11has__prefix(normalized, { str: _M0FP36kazuph5reviw2ui36split__table__cells_2e_2abind_7c1977, start: 0, end: _M0FP36kazuph5reviw2ui36split__table__cells_2e_2abind_7c1977.length }) ? _M0FP36kazuph5reviw4core11safe__slice(normalized, 1) : normalized;
|
|
6300
|
+
const trimmed = _M0MP311moonbitlang4core6string6String11has__suffix(inner, { str: _M0FP36kazuph5reviw2ui36split__table__cells_2e_2abind_7c1976, start: 0, end: _M0FP36kazuph5reviw2ui36split__table__cells_2e_2abind_7c1976.length }) ? _M0FP36kazuph5reviw4core18safe__slice__range(inner, 0, inner.length - 1 | 0) : inner;
|
|
6301
|
+
const _it = _M0MP311moonbitlang4core6string6String5split(trimmed, { str: _M0FP36kazuph5reviw2ui36split__table__cells_2e_2abind_7c1975, start: 0, end: _M0FP36kazuph5reviw2ui36split__table__cells_2e_2abind_7c1975.length });
|
|
6221
6302
|
while (true) {
|
|
6222
6303
|
const _bind$2 = _M0MP311moonbitlang4core7builtin4Iter4nextGRP311moonbitlang4core6string10StringViewE(_it);
|
|
6223
6304
|
if (_bind$2 === undefined) {
|
|
@@ -6294,10 +6375,10 @@ function _M0FP36kazuph5reviw2ui25find__table__source__line(text, start_from) {
|
|
|
6294
6375
|
if (i < data.length) {
|
|
6295
6376
|
if (_M0MP311moonbitlang4core5array5Array2atGRP311moonbitlang4core7builtin5ArrayGsEE(data, i).length > 0) {
|
|
6296
6377
|
const src = _M0MP311moonbitlang4core5array5Array2atGsE(_M0MP311moonbitlang4core5array5Array2atGRP311moonbitlang4core7builtin5ArrayGsEE(data, i), 0);
|
|
6297
|
-
if (_M0MP311moonbitlang4core6string6String8contains(src, { str:
|
|
6378
|
+
if (_M0MP311moonbitlang4core6string6String8contains(src, { str: _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1984, start: 0, end: _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1984.length }) && _M0FP36kazuph5reviw2ui29preview__table__line__matches(src, search, false)) {
|
|
6298
6379
|
return i + 1 | 0;
|
|
6299
6380
|
}
|
|
6300
|
-
if (allow_contains && (fuzzy_match < 0 && (_M0MP311moonbitlang4core6string6String8contains(src, { str:
|
|
6381
|
+
if (allow_contains && (fuzzy_match < 0 && (_M0MP311moonbitlang4core6string6String8contains(src, { str: _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1985, start: 0, end: _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1985.length }) && _M0FP36kazuph5reviw2ui29preview__table__line__matches(src, search, true)))) {
|
|
6301
6382
|
fuzzy_match = i + 1 | 0;
|
|
6302
6383
|
}
|
|
6303
6384
|
}
|
|
@@ -6314,10 +6395,10 @@ function _M0FP36kazuph5reviw2ui25find__table__source__line(text, start_from) {
|
|
|
6314
6395
|
if (i < start) {
|
|
6315
6396
|
if (_M0MP311moonbitlang4core5array5Array2atGRP311moonbitlang4core7builtin5ArrayGsEE(data, i).length > 0) {
|
|
6316
6397
|
const src = _M0MP311moonbitlang4core5array5Array2atGsE(_M0MP311moonbitlang4core5array5Array2atGRP311moonbitlang4core7builtin5ArrayGsEE(data, i), 0);
|
|
6317
|
-
if (_M0MP311moonbitlang4core6string6String8contains(src, { str:
|
|
6398
|
+
if (_M0MP311moonbitlang4core6string6String8contains(src, { str: _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1988, start: 0, end: _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1988.length }) && _M0FP36kazuph5reviw2ui29preview__table__line__matches(src, search, false)) {
|
|
6318
6399
|
return i + 1 | 0;
|
|
6319
6400
|
}
|
|
6320
|
-
if (allow_contains && (fuzzy_match < 0 && (_M0MP311moonbitlang4core6string6String8contains(src, { str:
|
|
6401
|
+
if (allow_contains && (fuzzy_match < 0 && (_M0MP311moonbitlang4core6string6String8contains(src, { str: _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1989, start: 0, end: _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1989.length }) && _M0FP36kazuph5reviw2ui29preview__table__line__matches(src, search, true)))) {
|
|
6321
6402
|
fuzzy_match = i + 1 | 0;
|
|
6322
6403
|
}
|
|
6323
6404
|
}
|
|
@@ -6333,7 +6414,7 @@ function _M0FP36kazuph5reviw2ui25find__table__source__line(text, start_from) {
|
|
|
6333
6414
|
function _M0FP36kazuph5reviw2ui27get__mermaid__source__range(target) {
|
|
6334
6415
|
const container = _M0FP36kazuph5reviw2ui7closest(target, ".mermaid-container");
|
|
6335
6416
|
if (_M0FP36kazuph5reviw2ui8is__null(container)) {
|
|
6336
|
-
return
|
|
6417
|
+
return _M0FP36kazuph5reviw2ui42get__mermaid__source__range_2etuple_2f1818;
|
|
6337
6418
|
}
|
|
6338
6419
|
const start_line = _M0FP36kazuph5reviw2ui12str__to__int(_M0FP36kazuph5reviw2ui9get__attr(container, "data-source-start-line"));
|
|
6339
6420
|
const end_line = _M0FP36kazuph5reviw2ui12str__to__int(_M0FP36kazuph5reviw2ui9get__attr(container, "data-source-end-line"));
|
|
@@ -6341,7 +6422,7 @@ function _M0FP36kazuph5reviw2ui27get__mermaid__source__range(target) {
|
|
|
6341
6422
|
const actual_end = end_line >= start_line ? end_line : start_line;
|
|
6342
6423
|
return { _0: start_line, _1: actual_end };
|
|
6343
6424
|
} else {
|
|
6344
|
-
return
|
|
6425
|
+
return _M0FP36kazuph5reviw2ui42get__mermaid__source__range_2etuple_2f1819;
|
|
6345
6426
|
}
|
|
6346
6427
|
}
|
|
6347
6428
|
function _M0FP36kazuph5reviw2ui29resolve__preview__block__text(block) {
|
|
@@ -6506,7 +6587,7 @@ function _M0FP36kazuph5reviw2ui23setup__preview__mouseup() {
|
|
|
6506
6587
|
const heading = _M0FP36kazuph5reviw2ui29find__closest__heading__above(meaningful_container);
|
|
6507
6588
|
const h_line = _M0FP36kazuph5reviw2ui26get__heading__source__line(heading);
|
|
6508
6589
|
const lines_arr = [];
|
|
6509
|
-
const _it = _M0MP311moonbitlang4core6string6String5split(text, { str:
|
|
6590
|
+
const _it = _M0MP311moonbitlang4core6string6String5split(text, { str: _M0FP36kazuph5reviw2ui40setup__preview__mouseup_2e_2abind_7c1997, start: 0, end: _M0FP36kazuph5reviw2ui40setup__preview__mouseup_2e_2abind_7c1997.length });
|
|
6510
6591
|
while (true) {
|
|
6511
6592
|
const _bind$2 = _M0MP311moonbitlang4core7builtin4Iter4nextGRP311moonbitlang4core6string10StringViewE(_it);
|
|
6512
6593
|
if (_bind$2 === undefined) {
|
|
@@ -6760,7 +6841,7 @@ function _M0FP36kazuph5reviw2ui23build__heading__anchors() {
|
|
|
6760
6841
|
const row = data[_i$2];
|
|
6761
6842
|
if (row.length > 0) {
|
|
6762
6843
|
const src = _M0MP311moonbitlang4core5array5Array2atGsE(row, 0);
|
|
6763
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(src, { str:
|
|
6844
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(src, { str: _M0FP36kazuph5reviw2ui40build__heading__anchors_2e_2abind_7c2010, start: 0, end: _M0FP36kazuph5reviw2ui40build__heading__anchors_2e_2abind_7c2010.length })) {
|
|
6764
6845
|
const src_stripped = _M0FP36kazuph5reviw2ui15strip__markdown(src);
|
|
6765
6846
|
if (src_stripped === stripped) {
|
|
6766
6847
|
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw2ui13HeadingAnchorE(anchors, { line: _i$2, preview_el: h });
|
|
@@ -7630,7 +7711,7 @@ function _M0FP36kazuph5reviw2ui22toggle__history__panel() {
|
|
|
7630
7711
|
return undefined;
|
|
7631
7712
|
}
|
|
7632
7713
|
const body = _M0FP36kazuph5reviw2ui5query("body");
|
|
7633
|
-
const is_open = _M0MP311moonbitlang4core6string6String8contains(_M0FP36kazuph5reviw2ui9get__attr(panel, "class"), { str:
|
|
7714
|
+
const is_open = _M0MP311moonbitlang4core6string6String8contains(_M0FP36kazuph5reviw2ui9get__attr(panel, "class"), { str: _M0FP36kazuph5reviw2ui39toggle__history__panel_2e_2abind_7c2044, start: 0, end: _M0FP36kazuph5reviw2ui39toggle__history__panel_2e_2abind_7c2044.length });
|
|
7634
7715
|
if (is_open) {
|
|
7635
7716
|
_M0FP36kazuph5reviw2ui13remove__class(panel, "open");
|
|
7636
7717
|
if (!_M0FP36kazuph5reviw2ui8is__null(body)) {
|