reviw 1.2.0 → 1.3.0

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.
@@ -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: 4px;\n right: 4px;\n background: rgba(0,0,0,0.5);\n border: none;\n border-radius: 8px;\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n color: #fff;\n font-size: 16px;\n z-index: 5;\n transition: background 120ms ease;\n}\n.sidebar-viewer-settings-btn:hover {\n background: rgba(0,0,0,0.8);\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 _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1765 = ".mp4";
480
- const _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1766 = ".mov";
481
- const _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1767 = ".webm";
482
- const _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1768 = ".avi";
483
- const _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1769 = ".mkv";
484
- const _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1770 = ".m4v";
485
- const _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1771 = ".ogv";
486
- const _M0FP36kazuph5reviw2ui41collect__toggle__content_2e_2abind_7c1805 = "H";
479
+ const _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1800 = ".mp4";
480
+ const _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1801 = ".mov";
481
+ const _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1802 = ".webm";
482
+ const _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1803 = ".avi";
483
+ const _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1804 = ".mkv";
484
+ const _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1805 = ".m4v";
485
+ const _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1806 = ".ogv";
486
+ const _M0FP36kazuph5reviw2ui41collect__toggle__content_2e_2abind_7c1847 = "H";
487
487
  const _M0FP36kazuph5reviw2ui14submit__images = [];
488
- const _M0FP36kazuph5reviw2ui43get__heading__source__line_2e_2abind_7c1893 = "#";
489
- const _M0FP36kazuph5reviw2ui38setup__paste__handler_2e_2abind_7c1921 = "visible";
490
- const _M0FP36kazuph5reviw2ui38setup__paste__handler_2e_2abind_7c1920 = "visible";
491
- const _M0FP36kazuph5reviw2ui41find__code__block__range_2e_2abind_7c1923 = "```";
492
- const _M0FP36kazuph5reviw2ui41find__code__block__range_2e_2abind_7c1925 = "```";
493
- const _M0FP36kazuph5reviw2ui36split__table__cells_2e_2abind_7c1939 = "|";
494
- const _M0FP36kazuph5reviw2ui36split__table__cells_2e_2abind_7c1938 = "|";
495
- const _M0FP36kazuph5reviw2ui36split__table__cells_2e_2abind_7c1937 = "|";
496
- const _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1946 = "|";
497
- const _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1947 = "|";
498
- const _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1950 = "|";
499
- const _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1951 = "|";
500
- const _M0FP36kazuph5reviw2ui40setup__preview__mouseup_2e_2abind_7c1959 = "\n";
501
- const _M0FP36kazuph5reviw2ui40build__heading__anchors_2e_2abind_7c1972 = "#";
488
+ const _M0FP36kazuph5reviw2ui43get__heading__source__line_2e_2abind_7c1935 = "#";
489
+ const _M0FP36kazuph5reviw2ui38setup__paste__handler_2e_2abind_7c1963 = "visible";
490
+ const _M0FP36kazuph5reviw2ui38setup__paste__handler_2e_2abind_7c1962 = "visible";
491
+ const _M0FP36kazuph5reviw2ui41find__code__block__range_2e_2abind_7c1965 = "```";
492
+ const _M0FP36kazuph5reviw2ui41find__code__block__range_2e_2abind_7c1967 = "```";
493
+ const _M0FP36kazuph5reviw2ui36split__table__cells_2e_2abind_7c1981 = "|";
494
+ const _M0FP36kazuph5reviw2ui36split__table__cells_2e_2abind_7c1980 = "|";
495
+ const _M0FP36kazuph5reviw2ui36split__table__cells_2e_2abind_7c1979 = "|";
496
+ const _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1988 = "|";
497
+ const _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1989 = "|";
498
+ const _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1992 = "|";
499
+ const _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1993 = "|";
500
+ const _M0FP36kazuph5reviw2ui40setup__preview__mouseup_2e_2abind_7c2001 = "\n";
501
+ const _M0FP36kazuph5reviw2ui40build__heading__anchors_2e_2abind_7c2014 = "#";
502
502
  const _M0FP36kazuph5reviw2ui23heading__anchors__cache = [];
503
- const _M0FP36kazuph5reviw2ui39toggle__history__panel_2e_2abind_7c2006 = "open";
504
- const _M0FP36kazuph5reviw2ui39default__toggle__config_2erecord_2f1119 = { start_level: 1, end_level: 6, initially_open: true, animate: true };
503
+ const _M0FP36kazuph5reviw2ui39toggle__history__panel_2e_2abind_7c2048 = "open";
504
+ const _M0FP36kazuph5reviw2ui39default__toggle__config_2erecord_2f1167 = { 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 _M0FP36kazuph5reviw2ui35render__video__viewer_2etuple_2f998 = { _0: "少なめ", _1: 0.3 };
524
- const _M0FP36kazuph5reviw2ui35render__video__viewer_2etuple_2f999 = { _0: "やや少", _1: 0.1 };
525
- const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1000 = { _0: "標準", _1: 0.01 };
526
- const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1001 = { _0: "やや多", _1: 0.005 };
527
- const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1002 = { _0: "多め", _1: 0.001 };
528
- const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1003 = { _0: "弱め", _1: 0.5 };
529
- const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1004 = { _0: "やや弱", _1: 0.2 };
530
- const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1005 = { _0: "標準", _1: 0.1 };
531
- const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1006 = { _0: "やや強", _1: 0.05 };
532
- const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1007 = { _0: "強め", _1: 0.02 };
523
+ const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1049 = { _0: "少なめ", _1: 0.3 };
524
+ const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1050 = { _0: "やや少", _1: 0.1 };
525
+ const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1051 = { _0: "標準", _1: 0.01 };
526
+ const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1052 = { _0: "やや多", _1: 0.005 };
527
+ const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1053 = { _0: "多め", _1: 0.001 };
528
+ const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1054 = { _0: "弱め", _1: 0.5 };
529
+ const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1055 = { _0: "やや弱", _1: 0.2 };
530
+ const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1056 = { _0: "標準", _1: 0.1 };
531
+ const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1057 = { _0: "やや強", _1: 0.05 };
532
+ const _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1058 = { _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 _M0FP36kazuph5reviw2ui42get__mermaid__source__range_2etuple_2f1789 = { _0: -1, _1: -1 };
544
- const _M0FP36kazuph5reviw2ui42get__mermaid__source__range_2etuple_2f1790 = { _0: -1, _1: -1 };
545
- const _M0FP36kazuph5reviw2ui39find__code__block__range_2etuple_2f1717 = { _0: -1, _1: -1 };
543
+ const _M0FP36kazuph5reviw2ui42get__mermaid__source__range_2etuple_2f1820 = { _0: -1, _1: -1 };
544
+ const _M0FP36kazuph5reviw2ui42get__mermaid__source__range_2etuple_2f1821 = { _0: -1, _1: -1 };
545
+ const _M0FP36kazuph5reviw2ui39find__code__block__range_2etuple_2f1748 = { _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: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1765, start: 0, end: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1765.length }) || (_M0MP311moonbitlang4core6string6String11has__suffix(_M0MP311moonbitlang4core6string6String9to__lower(_p$6), { str: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1766, start: 0, end: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1766.length }) || (_M0MP311moonbitlang4core6string6String11has__suffix(_M0MP311moonbitlang4core6string6String9to__lower(_p$6), { str: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1767, start: 0, end: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1767.length }) || (_M0MP311moonbitlang4core6string6String11has__suffix(_M0MP311moonbitlang4core6string6String9to__lower(_p$6), { str: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1768, start: 0, end: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1768.length }) || (_M0MP311moonbitlang4core6string6String11has__suffix(_M0MP311moonbitlang4core6string6String9to__lower(_p$6), { str: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1769, start: 0, end: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1769.length }) || (_M0MP311moonbitlang4core6string6String11has__suffix(_M0MP311moonbitlang4core6string6String9to__lower(_p$6), { str: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1770, start: 0, end: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1770.length }) || _M0MP311moonbitlang4core6string6String11has__suffix(_M0MP311moonbitlang4core6string6String9to__lower(_p$6), { str: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1771, start: 0, end: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1771.length }))))));
3073
+ const _p$7 = _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 }) || (_M0MP311moonbitlang4core6string6String11has__suffix(_M0MP311moonbitlang4core6string6String9to__lower(_p$6), { str: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1805, start: 0, end: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1805.length }) || _M0MP311moonbitlang4core6string6String11has__suffix(_M0MP311moonbitlang4core6string6String9to__lower(_p$6), { str: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1806, start: 0, end: _M0FP36kazuph5reviw2ui38collect__media__items_2e_2abind_7c1806.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 _M0FP36kazuph5reviw2ui40render__image__viewer_2einit__zpv_7c1463(_env) {
3176
- const img = _env._5;
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
- const _p = zpv_ref.val;
3179
+ _M0FP36kazuph5reviw2ui21current__image__index.val = index;
3180
+ const _p = _M0FP36kazuph5reviw2ui14fs__image__zpv.val;
3188
3181
  if (!(_p === undefined)) {
3189
- const _p$2 = zpv_ref.val;
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
- _M0FP36kazuph5reviw2ui10set__style(img, "width", `${_M0MP311moonbitlang4core6double6Double10to__string(nw)}px`);
3200
- _M0FP36kazuph5reviw2ui10set__style(img, "height", `${_M0MP311moonbitlang4core6double6Double10to__string(nh)}px`);
3201
- const zpv = _M0FP36kazuph5reviw2ui34create__zoom__pan__viewer__moonbit(viewport, wrapper, nw, nh, zoom_info, false, _M0FP36kazuph5reviw2ui13null__element(), 184, 134, 8, 0.1, 20, true);
3202
- zpv_ref.val = zpv;
3203
- state.current_zpv = zpv_ref.val;
3204
- _M0FP36kazuph5reviw2ui39request__fit__to__viewport__when__ready(zpv, () => {
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_7c1495(_env) {
3231
+ const viewport = _env._6;
3232
+ const state = _env._5;
3233
+ const img = _env._4;
3234
+ const wrapper = _env._3;
3235
+ const content = _env._2;
3236
+ const zoom_info = _env._1;
3237
+ const zpv_ref = _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, "height", "calc(100vh - 140px)");
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, "&#9974;");
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: zpv_ref, _4: viewport, _5: img };
3379
+ const _env = { _0: zpv_ref, _1: zoom_info, _2: content, _3: wrapper, _4: img, _5: state, _6: viewport };
3234
3380
  const h = _M0FP36kazuph5reviw2ui24on__with__handle_2einner(img, "load", (e) => {
3235
- if (_M0FP36kazuph5reviw2ui18get__client__width(viewport) > 100) {
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_7c1495(_env);
3244
3382
  }, false, true);
3245
3383
  _M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw2ui14ListenerHandleE(state.handles, h);
3246
3384
  if (_M0FP36kazuph5reviw2ui19get__natural__width(img) > 0) {
3247
- _M0FP36kazuph5reviw2ui12set__timeout(() => {
3248
- _M0FP36kazuph5reviw2ui40render__image__viewer_2einit__zpv_7c1463(_env);
3249
- }, 500);
3385
+ _M0FP36kazuph5reviw2ui45render__image__viewer_2eschedule__init_7c1495(_env);
3250
3386
  }
3251
3387
  state.current_cleanup = () => {
3252
3388
  const _p = zpv_ref.val;
@@ -3372,7 +3508,7 @@ function _M0FP36kazuph5reviw2ui23render__mermaid__viewer(state, content, item) {
3372
3508
  _M0FP36kazuph5reviw2ui26destroy__zoom__pan__viewer(zpv);
3373
3509
  };
3374
3510
  }
3375
- function _M0FP36kazuph5reviw2ui49render__video__viewer_2ecreate__btn__group_7c1440(state, levels, cur_val, on_change) {
3511
+ function _M0FP36kazuph5reviw2ui49render__video__viewer_2ecreate__btn__group_7c1445(state, levels, cur_val, on_change) {
3376
3512
  const row = _M0FP36kazuph5reviw2ui15create__element("div");
3377
3513
  _M0FP36kazuph5reviw2ui16set__class__name(row, "video-settings-buttons");
3378
3514
  const _p = levels.length;
@@ -3389,7 +3525,23 @@ function _M0FP36kazuph5reviw2ui49render__video__viewer_2ecreate__btn__group_7c14
3389
3525
  _M0FP36kazuph5reviw2ui10add__class(_p$6, "selected");
3390
3526
  }
3391
3527
  const _p$7 = _M0FP36kazuph5reviw2ui24on__with__handle_2einner(_p$6, "click", (_p$8) => {
3528
+ _M0FP36kazuph5reviw2ui17stop__propagation(_p$8);
3392
3529
  on_change(_p$5);
3530
+ const _p$9 = _M0FP36kazuph5reviw2ui14query__all__in(row, "button");
3531
+ const _p$10 = _p$9.length;
3532
+ let _tmp$2 = 0;
3533
+ while (true) {
3534
+ const _p$11 = _tmp$2;
3535
+ if (_p$11 < _p$10) {
3536
+ const _p$12 = _p$9[_p$11];
3537
+ _M0FP36kazuph5reviw2ui13remove__class(_p$12, "selected");
3538
+ _tmp$2 = _p$11 + 1 | 0;
3539
+ continue;
3540
+ } else {
3541
+ break;
3542
+ }
3543
+ }
3544
+ _M0FP36kazuph5reviw2ui10add__class(_p$6, "selected");
3393
3545
  }, false, true);
3394
3546
  _M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw2ui14ListenerHandleE(state.handles, _p$7);
3395
3547
  _M0FP36kazuph5reviw2ui13append__child(row, _p$6);
@@ -3464,8 +3616,8 @@ function _M0FP36kazuph5reviw2ui21render__video__viewer(state, content, item) {
3464
3616
  const scene_title = _M0FP36kazuph5reviw2ui15create__element("h4");
3465
3617
  _M0FP36kazuph5reviw2ui18set__text__content(scene_title, "Scene Sensitivity");
3466
3618
  _M0FP36kazuph5reviw2ui13append__child(settings_panel, scene_title);
3467
- const scene_levels = [_M0FP36kazuph5reviw2ui35render__video__viewer_2etuple_2f998, _M0FP36kazuph5reviw2ui35render__video__viewer_2etuple_2f999, _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1000, _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1001, _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1002];
3468
- const stab_levels = [_M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1003, _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1004, _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1005, _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1006, _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1007];
3619
+ const scene_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];
3620
+ const stab_levels = [_M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1054, _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1055, _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1056, _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1057, _M0FP36kazuph5reviw2ui36render__video__viewer_2etuple_2f1058];
3469
3621
  const cur_scene = { val: 0.01 };
3470
3622
  const cur_stab = { val: 0.1 };
3471
3623
  const on_scene_change = (new_val) => {
@@ -3487,7 +3639,7 @@ function _M0FP36kazuph5reviw2ui21render__video__viewer(state, content, item) {
3487
3639
  return;
3488
3640
  }
3489
3641
  };
3490
- const scene_row = _M0FP36kazuph5reviw2ui49render__video__viewer_2ecreate__btn__group_7c1440(state, scene_levels, cur_scene.val, on_scene_change);
3642
+ const scene_row = _M0FP36kazuph5reviw2ui49render__video__viewer_2ecreate__btn__group_7c1445(state, scene_levels, cur_scene.val, on_scene_change);
3491
3643
  _M0FP36kazuph5reviw2ui13append__child(settings_panel, scene_row);
3492
3644
  const stab_title = _M0FP36kazuph5reviw2ui15create__element("h4");
3493
3645
  _M0FP36kazuph5reviw2ui18set__text__content(stab_title, "Stabilization");
@@ -3511,7 +3663,7 @@ function _M0FP36kazuph5reviw2ui21render__video__viewer(state, content, item) {
3511
3663
  return;
3512
3664
  }
3513
3665
  };
3514
- const stab_row = _M0FP36kazuph5reviw2ui49render__video__viewer_2ecreate__btn__group_7c1440(state, stab_levels, cur_stab.val, on_stab_change);
3666
+ const stab_row = _M0FP36kazuph5reviw2ui49render__video__viewer_2ecreate__btn__group_7c1445(state, stab_levels, cur_stab.val, on_stab_change);
3515
3667
  _M0FP36kazuph5reviw2ui13append__child(settings_panel, stab_row);
3516
3668
  const h2 = _M0FP36kazuph5reviw2ui24on__with__handle_2einner(settings_btn, "click", (e) => {
3517
3669
  _M0FP36kazuph5reviw2ui17stop__propagation(e);
@@ -3579,16 +3731,6 @@ function _M0FP36kazuph5reviw2ui12open__viewer(state, idx) {
3579
3731
  _M0FP36kazuph5reviw2ui10set__style(md_right, "display", "none");
3580
3732
  }
3581
3733
  _M0FP36kazuph5reviw2ui15clear__children(state.viewer_panel);
3582
- const close_btn = _M0FP36kazuph5reviw2ui15create__element("button");
3583
- _M0FP36kazuph5reviw2ui16set__class__name(close_btn, "media-sidebar-viewer-close");
3584
- _M0FP36kazuph5reviw2ui18set__text__content(close_btn, "✕");
3585
- _M0FP36kazuph5reviw2ui14set__attribute(close_btn, "title", "Close viewer (ESC)");
3586
- const h1 = _M0FP36kazuph5reviw2ui24on__with__handle_2einner(close_btn, "click", (e) => {
3587
- _M0FP36kazuph5reviw2ui17stop__propagation(e);
3588
- _M0FP36kazuph5reviw2ui13close__viewer(state);
3589
- }, false, true);
3590
- _M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw2ui14ListenerHandleE(state.handles, h1);
3591
- _M0FP36kazuph5reviw2ui13append__child(state.viewer_panel, close_btn);
3592
3734
  const content = _M0FP36kazuph5reviw2ui15create__element("div");
3593
3735
  _M0FP36kazuph5reviw2ui16set__class__name(content, "media-sidebar-viewer-content");
3594
3736
  const _bind$2 = item.type_;
@@ -3973,7 +4115,7 @@ function _M0FP36kazuph5reviw2ui24collect__toggle__content(heading, level) {
3973
4115
  while (true) {
3974
4116
  if (!_M0FP36kazuph5reviw2ui8is__null(current)) {
3975
4117
  const tag = _M0FP36kazuph5reviw2ui14get__tag__name(current);
3976
- if (_M0MP311moonbitlang4core6string6String11has__prefix(tag, { str: _M0FP36kazuph5reviw2ui41collect__toggle__content_2e_2abind_7c1805, start: 0, end: _M0FP36kazuph5reviw2ui41collect__toggle__content_2e_2abind_7c1805.length }) && tag.length === 2) {
4118
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(tag, { str: _M0FP36kazuph5reviw2ui41collect__toggle__content_2e_2abind_7c1847, start: 0, end: _M0FP36kazuph5reviw2ui41collect__toggle__content_2e_2abind_7c1847.length }) && tag.length === 2) {
3977
4119
  const h_level = _M0FP36kazuph5reviw4core16parse__int__safe(_M0MP311moonbitlang4core6string6String17substring_2einner(tag, 1, undefined));
3978
4120
  if (h_level <= level) {
3979
4121
  break;
@@ -4159,7 +4301,7 @@ function _M0FP36kazuph5reviw2ui24setup__heading__observer() {
4159
4301
  function _M0FP36kazuph5reviw2ui22init__heading__toggles(config) {
4160
4302
  let cfg;
4161
4303
  if (config === undefined) {
4162
- cfg = _M0FP36kazuph5reviw2ui39default__toggle__config_2erecord_2f1119;
4304
+ cfg = _M0FP36kazuph5reviw2ui39default__toggle__config_2erecord_2f1167;
4163
4305
  } else {
4164
4306
  const _Some = config;
4165
4307
  cfg = _Some;
@@ -5411,7 +5553,7 @@ function _M0FP36kazuph5reviw2ui26get__heading__source__line(heading_el) {
5411
5553
  const row = data[_i];
5412
5554
  if (row.length > 0) {
5413
5555
  const src_line = _M0MP311moonbitlang4core5array5Array2atGsE(row, 0);
5414
- if (_M0MP311moonbitlang4core6string6String11has__prefix(src_line, { str: _M0FP36kazuph5reviw2ui43get__heading__source__line_2e_2abind_7c1893, start: 0, end: _M0FP36kazuph5reviw2ui43get__heading__source__line_2e_2abind_7c1893.length })) {
5556
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(src_line, { str: _M0FP36kazuph5reviw2ui43get__heading__source__line_2e_2abind_7c1935, start: 0, end: _M0FP36kazuph5reviw2ui43get__heading__source__line_2e_2abind_7c1935.length })) {
5415
5557
  const stripped_src = _M0FP36kazuph5reviw2ui15strip__markdown(src_line);
5416
5558
  if (stripped_src === cleaned) {
5417
5559
  return _i;
@@ -5566,61 +5708,6 @@ function _M0FP36kazuph5reviw2ui33close__image__fullscreen__moonbit(overlay) {
5566
5708
  return;
5567
5709
  }
5568
5710
  }
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
5711
  function _M0FP36kazuph5reviw2ui36navigate__image__fullscreen__moonbit(direction, overlay, fs_content, fs_wrapper, fs_zoom_info, fs_counter) {
5625
5712
  const images = _M0FP36kazuph5reviw2ui24collect__preview__images();
5626
5713
  if (images.length === 0) {
@@ -6036,7 +6123,7 @@ function _M0FP36kazuph5reviw2ui21setup__paste__handler() {
6036
6123
  let submit_visible;
6037
6124
  if (!_M0FP36kazuph5reviw2ui8is__null(submit_modal)) {
6038
6125
  let _tmp;
6039
- if (_M0MP311moonbitlang4core6string6String8contains(_M0FP36kazuph5reviw2ui9get__attr(submit_modal, "class"), { str: _M0FP36kazuph5reviw2ui38setup__paste__handler_2e_2abind_7c1921, start: 0, end: _M0FP36kazuph5reviw2ui38setup__paste__handler_2e_2abind_7c1921.length })) {
6126
+ if (_M0MP311moonbitlang4core6string6String8contains(_M0FP36kazuph5reviw2ui9get__attr(submit_modal, "class"), { str: _M0FP36kazuph5reviw2ui38setup__paste__handler_2e_2abind_7c1963, start: 0, end: _M0FP36kazuph5reviw2ui38setup__paste__handler_2e_2abind_7c1963.length })) {
6040
6127
  _tmp = true;
6041
6128
  } else {
6042
6129
  const _p = _M0FP36kazuph5reviw2ui20get__computed__style(submit_modal, "display");
@@ -6050,7 +6137,7 @@ function _M0FP36kazuph5reviw2ui21setup__paste__handler() {
6050
6137
  let comment_visible;
6051
6138
  if (!_M0FP36kazuph5reviw2ui8is__null(comment_card)) {
6052
6139
  let _tmp;
6053
- if (_M0MP311moonbitlang4core6string6String8contains(_M0FP36kazuph5reviw2ui9get__attr(comment_card, "class"), { str: _M0FP36kazuph5reviw2ui38setup__paste__handler_2e_2abind_7c1920, start: 0, end: _M0FP36kazuph5reviw2ui38setup__paste__handler_2e_2abind_7c1920.length })) {
6140
+ if (_M0MP311moonbitlang4core6string6String8contains(_M0FP36kazuph5reviw2ui9get__attr(comment_card, "class"), { str: _M0FP36kazuph5reviw2ui38setup__paste__handler_2e_2abind_7c1962, start: 0, end: _M0FP36kazuph5reviw2ui38setup__paste__handler_2e_2abind_7c1962.length })) {
6054
6141
  _tmp = true;
6055
6142
  } else {
6056
6143
  const _p = _M0FP36kazuph5reviw2ui20get__computed__style(comment_card, "display");
@@ -6090,13 +6177,13 @@ function _M0FP36kazuph5reviw2ui24find__code__block__range(code_text) {
6090
6177
  let i = 0;
6091
6178
  while (true) {
6092
6179
  if (i < data.length) {
6093
- if (_M0MP311moonbitlang4core5array5Array2atGRP311moonbitlang4core7builtin5ArrayGsEE(data, i).length > 0 && _M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(_M0MP311moonbitlang4core5array5Array2atGRP311moonbitlang4core7builtin5ArrayGsEE(data, i), 0), { str: _M0FP36kazuph5reviw2ui41find__code__block__range_2e_2abind_7c1923, start: 0, end: _M0FP36kazuph5reviw2ui41find__code__block__range_2e_2abind_7c1923.length })) {
6180
+ if (_M0MP311moonbitlang4core5array5Array2atGRP311moonbitlang4core7builtin5ArrayGsEE(data, i).length > 0 && _M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(_M0MP311moonbitlang4core5array5Array2atGRP311moonbitlang4core7builtin5ArrayGsEE(data, i), 0), { str: _M0FP36kazuph5reviw2ui41find__code__block__range_2e_2abind_7c1965, start: 0, end: _M0FP36kazuph5reviw2ui41find__code__block__range_2e_2abind_7c1965.length })) {
6094
6181
  const block_start = i;
6095
6182
  i = i + 1 | 0;
6096
6183
  const code_buf = _M0MP311moonbitlang4core7builtin13StringBuilder11new_2einner(0);
6097
6184
  while (true) {
6098
6185
  if (i < data.length) {
6099
- if (_M0MP311moonbitlang4core5array5Array2atGRP311moonbitlang4core7builtin5ArrayGsEE(data, i).length > 0 && _M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(_M0MP311moonbitlang4core5array5Array2atGRP311moonbitlang4core7builtin5ArrayGsEE(data, i), 0), { str: _M0FP36kazuph5reviw2ui41find__code__block__range_2e_2abind_7c1925, start: 0, end: _M0FP36kazuph5reviw2ui41find__code__block__range_2e_2abind_7c1925.length })) {
6186
+ if (_M0MP311moonbitlang4core5array5Array2atGRP311moonbitlang4core7builtin5ArrayGsEE(data, i).length > 0 && _M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(_M0MP311moonbitlang4core5array5Array2atGRP311moonbitlang4core7builtin5ArrayGsEE(data, i), 0), { str: _M0FP36kazuph5reviw2ui41find__code__block__range_2e_2abind_7c1967, start: 0, end: _M0FP36kazuph5reviw2ui41find__code__block__range_2e_2abind_7c1967.length })) {
6100
6187
  break;
6101
6188
  }
6102
6189
  if (code_buf.val.length > 0) {
@@ -6125,7 +6212,7 @@ function _M0FP36kazuph5reviw2ui24find__code__block__range(code_text) {
6125
6212
  break;
6126
6213
  }
6127
6214
  }
6128
- return _M0FP36kazuph5reviw2ui39find__code__block__range_2etuple_2f1717;
6215
+ return _M0FP36kazuph5reviw2ui39find__code__block__range_2etuple_2f1748;
6129
6216
  }
6130
6217
  function _M0FP36kazuph5reviw2ui36find__media__source__line__in__block(block, start_from) {
6131
6218
  if (_M0FP36kazuph5reviw2ui8is__null(block)) {
@@ -6215,9 +6302,9 @@ function _M0FP36kazuph5reviw2ui18find__source__line(text, _element, start_from)
6215
6302
  function _M0FP36kazuph5reviw2ui19split__table__cells(line) {
6216
6303
  const cells = [];
6217
6304
  const normalized = _M0FP36kazuph5reviw2ui15normalize__text(line);
6218
- const inner = _M0MP311moonbitlang4core6string6String11has__prefix(normalized, { str: _M0FP36kazuph5reviw2ui36split__table__cells_2e_2abind_7c1939, start: 0, end: _M0FP36kazuph5reviw2ui36split__table__cells_2e_2abind_7c1939.length }) ? _M0FP36kazuph5reviw4core11safe__slice(normalized, 1) : normalized;
6219
- const trimmed = _M0MP311moonbitlang4core6string6String11has__suffix(inner, { str: _M0FP36kazuph5reviw2ui36split__table__cells_2e_2abind_7c1938, start: 0, end: _M0FP36kazuph5reviw2ui36split__table__cells_2e_2abind_7c1938.length }) ? _M0FP36kazuph5reviw4core18safe__slice__range(inner, 0, inner.length - 1 | 0) : inner;
6220
- const _it = _M0MP311moonbitlang4core6string6String5split(trimmed, { str: _M0FP36kazuph5reviw2ui36split__table__cells_2e_2abind_7c1937, start: 0, end: _M0FP36kazuph5reviw2ui36split__table__cells_2e_2abind_7c1937.length });
6305
+ const inner = _M0MP311moonbitlang4core6string6String11has__prefix(normalized, { str: _M0FP36kazuph5reviw2ui36split__table__cells_2e_2abind_7c1981, start: 0, end: _M0FP36kazuph5reviw2ui36split__table__cells_2e_2abind_7c1981.length }) ? _M0FP36kazuph5reviw4core11safe__slice(normalized, 1) : normalized;
6306
+ const trimmed = _M0MP311moonbitlang4core6string6String11has__suffix(inner, { str: _M0FP36kazuph5reviw2ui36split__table__cells_2e_2abind_7c1980, start: 0, end: _M0FP36kazuph5reviw2ui36split__table__cells_2e_2abind_7c1980.length }) ? _M0FP36kazuph5reviw4core18safe__slice__range(inner, 0, inner.length - 1 | 0) : inner;
6307
+ const _it = _M0MP311moonbitlang4core6string6String5split(trimmed, { str: _M0FP36kazuph5reviw2ui36split__table__cells_2e_2abind_7c1979, start: 0, end: _M0FP36kazuph5reviw2ui36split__table__cells_2e_2abind_7c1979.length });
6221
6308
  while (true) {
6222
6309
  const _bind$2 = _M0MP311moonbitlang4core7builtin4Iter4nextGRP311moonbitlang4core6string10StringViewE(_it);
6223
6310
  if (_bind$2 === undefined) {
@@ -6294,10 +6381,10 @@ function _M0FP36kazuph5reviw2ui25find__table__source__line(text, start_from) {
6294
6381
  if (i < data.length) {
6295
6382
  if (_M0MP311moonbitlang4core5array5Array2atGRP311moonbitlang4core7builtin5ArrayGsEE(data, i).length > 0) {
6296
6383
  const src = _M0MP311moonbitlang4core5array5Array2atGsE(_M0MP311moonbitlang4core5array5Array2atGRP311moonbitlang4core7builtin5ArrayGsEE(data, i), 0);
6297
- if (_M0MP311moonbitlang4core6string6String8contains(src, { str: _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1946, start: 0, end: _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1946.length }) && _M0FP36kazuph5reviw2ui29preview__table__line__matches(src, search, false)) {
6384
+ 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)) {
6298
6385
  return i + 1 | 0;
6299
6386
  }
6300
- if (allow_contains && (fuzzy_match < 0 && (_M0MP311moonbitlang4core6string6String8contains(src, { str: _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1947, start: 0, end: _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1947.length }) && _M0FP36kazuph5reviw2ui29preview__table__line__matches(src, search, true)))) {
6387
+ 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)))) {
6301
6388
  fuzzy_match = i + 1 | 0;
6302
6389
  }
6303
6390
  }
@@ -6314,10 +6401,10 @@ function _M0FP36kazuph5reviw2ui25find__table__source__line(text, start_from) {
6314
6401
  if (i < start) {
6315
6402
  if (_M0MP311moonbitlang4core5array5Array2atGRP311moonbitlang4core7builtin5ArrayGsEE(data, i).length > 0) {
6316
6403
  const src = _M0MP311moonbitlang4core5array5Array2atGsE(_M0MP311moonbitlang4core5array5Array2atGRP311moonbitlang4core7builtin5ArrayGsEE(data, i), 0);
6317
- if (_M0MP311moonbitlang4core6string6String8contains(src, { str: _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1950, start: 0, end: _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1950.length }) && _M0FP36kazuph5reviw2ui29preview__table__line__matches(src, search, false)) {
6404
+ if (_M0MP311moonbitlang4core6string6String8contains(src, { str: _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1992, start: 0, end: _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1992.length }) && _M0FP36kazuph5reviw2ui29preview__table__line__matches(src, search, false)) {
6318
6405
  return i + 1 | 0;
6319
6406
  }
6320
- if (allow_contains && (fuzzy_match < 0 && (_M0MP311moonbitlang4core6string6String8contains(src, { str: _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1951, start: 0, end: _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1951.length }) && _M0FP36kazuph5reviw2ui29preview__table__line__matches(src, search, true)))) {
6407
+ if (allow_contains && (fuzzy_match < 0 && (_M0MP311moonbitlang4core6string6String8contains(src, { str: _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1993, start: 0, end: _M0FP36kazuph5reviw2ui42find__table__source__line_2e_2abind_7c1993.length }) && _M0FP36kazuph5reviw2ui29preview__table__line__matches(src, search, true)))) {
6321
6408
  fuzzy_match = i + 1 | 0;
6322
6409
  }
6323
6410
  }
@@ -6333,7 +6420,7 @@ function _M0FP36kazuph5reviw2ui25find__table__source__line(text, start_from) {
6333
6420
  function _M0FP36kazuph5reviw2ui27get__mermaid__source__range(target) {
6334
6421
  const container = _M0FP36kazuph5reviw2ui7closest(target, ".mermaid-container");
6335
6422
  if (_M0FP36kazuph5reviw2ui8is__null(container)) {
6336
- return _M0FP36kazuph5reviw2ui42get__mermaid__source__range_2etuple_2f1789;
6423
+ return _M0FP36kazuph5reviw2ui42get__mermaid__source__range_2etuple_2f1820;
6337
6424
  }
6338
6425
  const start_line = _M0FP36kazuph5reviw2ui12str__to__int(_M0FP36kazuph5reviw2ui9get__attr(container, "data-source-start-line"));
6339
6426
  const end_line = _M0FP36kazuph5reviw2ui12str__to__int(_M0FP36kazuph5reviw2ui9get__attr(container, "data-source-end-line"));
@@ -6341,7 +6428,7 @@ function _M0FP36kazuph5reviw2ui27get__mermaid__source__range(target) {
6341
6428
  const actual_end = end_line >= start_line ? end_line : start_line;
6342
6429
  return { _0: start_line, _1: actual_end };
6343
6430
  } else {
6344
- return _M0FP36kazuph5reviw2ui42get__mermaid__source__range_2etuple_2f1790;
6431
+ return _M0FP36kazuph5reviw2ui42get__mermaid__source__range_2etuple_2f1821;
6345
6432
  }
6346
6433
  }
6347
6434
  function _M0FP36kazuph5reviw2ui29resolve__preview__block__text(block) {
@@ -6506,7 +6593,7 @@ function _M0FP36kazuph5reviw2ui23setup__preview__mouseup() {
6506
6593
  const heading = _M0FP36kazuph5reviw2ui29find__closest__heading__above(meaningful_container);
6507
6594
  const h_line = _M0FP36kazuph5reviw2ui26get__heading__source__line(heading);
6508
6595
  const lines_arr = [];
6509
- const _it = _M0MP311moonbitlang4core6string6String5split(text, { str: _M0FP36kazuph5reviw2ui40setup__preview__mouseup_2e_2abind_7c1959, start: 0, end: _M0FP36kazuph5reviw2ui40setup__preview__mouseup_2e_2abind_7c1959.length });
6596
+ const _it = _M0MP311moonbitlang4core6string6String5split(text, { str: _M0FP36kazuph5reviw2ui40setup__preview__mouseup_2e_2abind_7c2001, start: 0, end: _M0FP36kazuph5reviw2ui40setup__preview__mouseup_2e_2abind_7c2001.length });
6510
6597
  while (true) {
6511
6598
  const _bind$2 = _M0MP311moonbitlang4core7builtin4Iter4nextGRP311moonbitlang4core6string10StringViewE(_it);
6512
6599
  if (_bind$2 === undefined) {
@@ -6760,7 +6847,7 @@ function _M0FP36kazuph5reviw2ui23build__heading__anchors() {
6760
6847
  const row = data[_i$2];
6761
6848
  if (row.length > 0) {
6762
6849
  const src = _M0MP311moonbitlang4core5array5Array2atGsE(row, 0);
6763
- if (_M0MP311moonbitlang4core6string6String11has__prefix(src, { str: _M0FP36kazuph5reviw2ui40build__heading__anchors_2e_2abind_7c1972, start: 0, end: _M0FP36kazuph5reviw2ui40build__heading__anchors_2e_2abind_7c1972.length })) {
6850
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(src, { str: _M0FP36kazuph5reviw2ui40build__heading__anchors_2e_2abind_7c2014, start: 0, end: _M0FP36kazuph5reviw2ui40build__heading__anchors_2e_2abind_7c2014.length })) {
6764
6851
  const src_stripped = _M0FP36kazuph5reviw2ui15strip__markdown(src);
6765
6852
  if (src_stripped === stripped) {
6766
6853
  _M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw2ui13HeadingAnchorE(anchors, { line: _i$2, preview_el: h });
@@ -7630,7 +7717,7 @@ function _M0FP36kazuph5reviw2ui22toggle__history__panel() {
7630
7717
  return undefined;
7631
7718
  }
7632
7719
  const body = _M0FP36kazuph5reviw2ui5query("body");
7633
- const is_open = _M0MP311moonbitlang4core6string6String8contains(_M0FP36kazuph5reviw2ui9get__attr(panel, "class"), { str: _M0FP36kazuph5reviw2ui39toggle__history__panel_2e_2abind_7c2006, start: 0, end: _M0FP36kazuph5reviw2ui39toggle__history__panel_2e_2abind_7c2006.length });
7720
+ const is_open = _M0MP311moonbitlang4core6string6String8contains(_M0FP36kazuph5reviw2ui9get__attr(panel, "class"), { str: _M0FP36kazuph5reviw2ui39toggle__history__panel_2e_2abind_7c2048, start: 0, end: _M0FP36kazuph5reviw2ui39toggle__history__panel_2e_2abind_7c2048.length });
7634
7721
  if (is_open) {
7635
7722
  _M0FP36kazuph5reviw2ui13remove__class(panel, "open");
7636
7723
  if (!_M0FP36kazuph5reviw2ui8is__null(body)) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "reviw",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Lightweight file reviewer with in-browser comments for CSV, TSV, Markdown, and Git diffs.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -11,10 +11,7 @@
11
11
  ],
12
12
  "scripts": {
13
13
  "test": "npm run test:v2",
14
- "test:v1": "vitest run",
15
- "test:v2": "cd v2 && moon test --target js && moon build --target js --release && node e2e/smoke.mjs && node e2e/media_sidebar_regression.mjs && node e2e/preview_interaction_regression.mjs",
16
- "test:all": "npm run test:v2 && vitest run",
17
- "test:watch": "vitest",
14
+ "test:v2": "cd v2 && moon test --target js && moon build --target js --release && node --experimental-strip-types e2e/smoke.ts && node --experimental-strip-types e2e/media_sidebar_regression.ts && node --experimental-strip-types e2e/preview_interaction_regression.ts",
18
15
  "build": "cd v2 && moon build --target js --release",
19
16
  "prepack": "npm run build && mkdir -p dist/server dist/ui && echo '#!/usr/bin/env node' > dist/server/server.js && cat v2/_build/js/release/build/server/server.js >> dist/server/server.js && chmod +x dist/server/server.js && cp v2/_build/js/release/build/ui/ui.js dist/ui/"
20
17
  },
@@ -26,15 +23,8 @@
26
23
  "engines": {
27
24
  "node": ">=18"
28
25
  },
29
- "dependencies": {
30
- "chardet": "^2.0.0",
31
- "iconv-lite": "^0.6.3",
32
- "js-yaml": "^4.1.0",
33
- "marked": "^12.0.2"
34
- },
35
26
  "devDependencies": {
36
27
  "@playwright/test": "^1.57.0",
37
- "playwright": "^1.57.0",
38
- "vitest": "^4.0.14"
28
+ "playwright": "^1.57.0"
39
29
  }
40
30
  }