collabmd 0.1.36 → 0.1.38

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.
Files changed (44) hide show
  1. package/README.md +1 -0
  2. package/dist/client/assets/{drawio-editor-D4Qoluwz.js → drawio-editor-BHI0pLby.js} +1 -1
  3. package/dist/client/assets/{drawioEditor-B65FWq-b.js → drawioEditor-DOaXwaY2.js} +2 -2
  4. package/dist/client/assets/{editor-session-DV80PhYL.js → editor-session-BFsA-WRc.js} +1 -1
  5. package/dist/client/assets/{excalidraw-editor-hiJQt1cX.js → excalidraw-editor-6pgH2kf5.js} +1 -1
  6. package/dist/client/assets/{excalidrawEditor-BnbblxK4.js → excalidrawEditor-Ck9hgrTa.js} +2 -2
  7. package/dist/client/assets/export-page-4M8Zo-AL.js +39 -0
  8. package/dist/client/assets/exportDocument-BAqaHlIn.css +1 -0
  9. package/dist/client/assets/{exportDocument-CULEGKmb.js → exportDocument-mlXOym-R.js} +2 -2
  10. package/dist/client/assets/{index-BjdYZiBM.js → index-CCfHrm_9.js} +2 -2
  11. package/dist/client/assets/{index-BryqP9QY.css → index-maPm_Kvk.css} +1 -1
  12. package/dist/client/assets/main-BQMPQ4CW.js +1410 -0
  13. package/dist/client/assets/preview-render-compiler-9SmLUP5V.js +1 -0
  14. package/dist/client/assets/{preview-render-compiler-Tkc6JX1O.js → preview-render-compiler-IUtgIlOM.js} +1 -1
  15. package/dist/client/assets/{preview-render-worker-1LBLqgKu.js → preview-render-worker-BwQ5sPy9.js} +1 -1
  16. package/dist/client/assets/runtime-config-BcUbZKho.js +1 -0
  17. package/dist/client/assets/{vault-api-client-DSx3mWkH.js → vault-api-client-BDKKvtOF.js} +1 -1
  18. package/dist/client/drawio-editor.html +1 -1
  19. package/dist/client/excalidraw-editor.html +1 -1
  20. package/dist/client/export-document.html +2 -2
  21. package/dist/client/index.html +2 -2
  22. package/docker-compose.yml +1 -0
  23. package/package.json +12 -9
  24. package/src/client/application/app-shell/ui-feature-shell.js +237 -0
  25. package/src/client/application/preview-render-compiler.js +120 -1
  26. package/src/client/application/preview-render-executor.js +4 -0
  27. package/src/client/application/preview-render-worker.js +2 -0
  28. package/src/client/application/preview-renderer.js +5 -2
  29. package/src/client/application/wiki-link-file-controller.js +7 -0
  30. package/src/client/application/workspace-route-controller.js +9 -0
  31. package/src/client/bootstrap/collabmd-app-shell.js +13 -0
  32. package/src/client/domain/hash-routes.js +49 -0
  33. package/src/client/domain/runtime-paths.js +1 -0
  34. package/src/client/export/export-pipeline.js +100 -26
  35. package/src/client/infrastructure/runtime-config.js +22 -24
  36. package/src/client/presentation/outline-controller.js +28 -7
  37. package/src/client/styles/features/preview-markdown.css +51 -0
  38. package/src/server/config/env.js +1 -0
  39. package/src/server/infrastructure/http/create-static-handler.js +2 -0
  40. package/dist/client/assets/export-page-BKDarp9x.js +0 -39
  41. package/dist/client/assets/exportDocument-BbkN85c4.css +0 -1
  42. package/dist/client/assets/main-QJcxyvDa.js +0 -1404
  43. package/dist/client/assets/preview-render-compiler-BCB8u6iM.js +0 -1
  44. package/dist/client/assets/runtime-config-DWTejofP.js +0 -1
@@ -1,39 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./mermaid-runtime-BGlnoUXY.js","./preload-helper-Bo9GmnuQ.js","./chunk-U2HBQHQK-BBXgsocS.js","./src-BuiVcSz-.js","./chunk-YHkbxXgt.js","./chunk-5PVQY5BW-ciE7eHID.js","./dist-wkd-N1L5.js","./chunk-ICPOFSXX-DqJi89rc.js","./_baseFor-BSErPbF2.js","./isEmpty-CpfhGGBo.js","./chunk-336JU56O-DvrrHsJT.js","./chunk-5FUZZQ4R-CxIIxXPy.js","./chunk-X2U36JSP-D3OEPG7k.js","./chunk-ZZ45TVLE-DGIhE_ST.js","./rough.esm-BU2knLt9.js","./chunk-ENJZ2VHE-BQj_1YA_.js","./line-BCItEgq3.js","./path-DIlZIGue.js","./array-B3agRrCs.js","./chunk-BSJP7CBP-D2KkrA_B.js","./chunk-426QAEUC-CEbmCgux.js","./chunk-XPW4576I-BUfyrOtN.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-Bo9GmnuQ.js";import{f as t}from"./file-kind-DmKq2MvD.js";import{t as n}from"./preview-render-compiler-Tkc6JX1O.js";import{d as r,l as i}from"./runtime-config-DWTejofP.js";import{a,l as o,o as s}from"./excalidraw-scene-MyNAJi2A.js";import{p as c}from"./preview-diagram-utils-Nqpp4FNV.js";var l=`collabmd-export-page`,u=`collabmd-export-host`,d=Object.freeze({htmlLabels:!1,flowchart:{defaultRenderer:`dagre-wrapper`,useMaxWidth:!0},class:{defaultRenderer:`dagre-wrapper`,useMaxWidth:!0},startOnLoad:!1,theme:`default`}),f=1e4,p=10*1024*1024,m=1e4,ee=1e4,te=1,h=null,g=0;function _(e=`asset`){return g+=1,`${e}-${g.toString(36)}`}function v(e,n=``){return String(n??``).trim()||t(String(e??``).split(`/`).filter(Boolean).pop()||`document`)||`document`}function y(e){return`data:image/svg+xml;charset=utf-8,${encodeURIComponent(e)}`}function b(){return new Promise(e=>requestAnimationFrame(()=>e()))}function ne(e){return new Promise((t,n)=>{let r=new FileReader;r.addEventListener(`load`,()=>t(String(r.result??``))),r.addEventListener(`error`,()=>n(r.error??Error(`Failed to read blob`))),r.readAsDataURL(e)})}function x(e){return new Promise((t,n)=>{let r=new Image;r.decoding=`async`,r.addEventListener(`load`,()=>t(r),{once:!0}),r.addEventListener(`error`,()=>n(Error(`Failed to load image: ${e}`)),{once:!0}),r.src=e})}function S(e){let t=Number.parseFloat(e.getAttribute(`width`)||``),n=Number.parseFloat(e.getAttribute(`height`)||``),r=(e.getAttribute(`viewBox`)||``).split(/\s+/).map(e=>Number.parseFloat(e)),i=Number.isFinite(t)&&t>0?t:Number.isFinite(r[2])&&r[2]>0?r[2]:1200;return{height:Number.isFinite(n)&&n>0?n:Number.isFinite(r[3])&&r[3]>0?r[3]:800,width:i}}function re(e,{padding:t=16}={}){let n=document.createElement(`div`);n.style.position=`fixed`,n.style.left=`-10000px`,n.style.top=`0`,n.style.visibility=`hidden`,n.style.pointerEvents=`none`,n.innerHTML=e,document.body.appendChild(n);try{let r=n.querySelector(`svg`);if(!(r instanceof SVGSVGElement))return e;let i=null;try{i=r.getBBox()}catch{return e}if(!i||i.width<=0||i.height<=0)return e;let a=Math.max(0,Number(t)||0),o=[Math.floor(i.x-a),Math.floor(i.y-a),Math.ceil(i.width+a*2),Math.ceil(i.height+a*2)],s=Math.ceil(i.width+a*2),c=Math.ceil(i.height+a*2);return r.setAttribute(`viewBox`,o.join(` `)),r.setAttribute(`preserveAspectRatio`,`xMidYMid meet`),r.setAttribute(`width`,String(s)),r.setAttribute(`height`,String(c)),r.outerHTML}finally{n.remove()}}function C(e,t={}){return re(c(e),t)}async function w(e){let t=await x(y(e)),n=document.createElement(`div`);n.innerHTML=e;let r=n.querySelector(`svg`),{width:i,height:a}=r?S(r):{height:t.naturalHeight||800,width:t.naturalWidth||1200},o=document.createElement(`canvas`);o.width=Math.max(1,Math.ceil(i)),o.height=Math.max(1,Math.ceil(a));let s=o.getContext(`2d`);if(!s)throw Error(`Canvas is unavailable`);return s.fillStyle=`#ffffff`,s.fillRect(0,0,o.width,o.height),s.drawImage(t,0,0,o.width,o.height),o.toDataURL(`image/png`)}async function T(e){let t=await x(e),n=document.createElement(`canvas`);n.width=Math.max(1,t.naturalWidth||t.width||1),n.height=Math.max(1,t.naturalHeight||t.height||1);let r=n.getContext(`2d`);if(!r)throw Error(`Canvas is unavailable`);return r.drawImage(t,0,0,n.width,n.height),n.toDataURL(`image/png`)}async function E(e,{timeoutMs:t=m}={}){e instanceof HTMLImageElement&&e.getAttribute(`src`)&&(e.complete||await new Promise(n=>{let r=!1,i=()=>{r||(r=!0,window.clearTimeout(o),e.removeEventListener(`load`,a),e.removeEventListener(`error`,a))},a=()=>{i(),n()},o=window.setTimeout(a,t);e.addEventListener(`load`,a,{once:!0}),e.addEventListener(`error`,a,{once:!0}),e.complete&&a()}),typeof e.decode==`function`&&await e.decode().catch(()=>{}))}async function D(e,t={}){let n=await fetch(e,{headers:{Accept:`application/json`,...t.headers??{}},...t}),r=await n.json().catch(()=>null);if(!n.ok)throw Error(r?.error||`Request failed: ${n.status}`);return r}async function O(e){let t=await D(i(`/file?path=${encodeURIComponent(e)}`));if(typeof t?.content!=`string`)throw Error(`Failed to load ${e}`);return t.content}async function k(e,{maxBytes:t=p,timeoutMs:n=f}={}){let r=new URL(e,window.location.href),i=new AbortController,a=window.setTimeout(()=>i.abort(),n),o;try{o=await fetch(r.toString(),{credentials:r.origin===window.location.origin?`same-origin`:`omit`,signal:i.signal})}catch(e){throw e instanceof DOMException&&e.name===`AbortError`?Error(`Timed out while fetching asset: ${r.toString()}`,{cause:e}):e}finally{window.clearTimeout(a)}if(!o.ok)throw Error(`Failed to fetch asset: ${r.toString()}`);let s=Number.parseInt(o.headers.get(`content-length`)||``,10);if(Number.isFinite(s)&&s>t)throw Error(`Asset is too large to inline: ${r.toString()}`);let c=await o.blob();if(c.size>t)throw Error(`Asset is too large to inline: ${r.toString()}`);return ne(c)}function ie(e){let t=new URL(r(`/`),window.location.origin);return t.hash=new URLSearchParams({file:e}).toString(),t.toString()}function A(e=``){let t;try{t=new URL(String(e||``).trim())}catch{return``}let n=t.hostname.toLowerCase();if(n===`youtu.be`||n===`www.youtu.be`)return t.pathname.split(`/`).filter(Boolean)[0]||``;if(n.includes(`youtube`)||n.includes(`youtube-nocookie`)){if(t.pathname===`/watch`)return t.searchParams.get(`v`)||``;if(t.pathname.startsWith(`/embed/`))return t.pathname.split(`/`).filter(Boolean)[1]||``}return``}function j(e,{assetId:t=``,docxPosterDataUrl:n=``,posterDataUrl:r=``}={}){let i=document.createElement(`figure`);i.className=`export-video-poster`,t&&i.setAttribute(`data-export-asset-id`,t);let a=document.createElement(`div`);if(a.className=`export-video-poster-card`,r){let t=document.createElement(`div`);t.className=`export-video-poster-media`;let i=document.createElement(`img`);i.alt=`${e.dataset.videoEmbedLabel||`Embedded video`} poster`,i.className=`export-video-poster-image`,i.src=r,i.setAttribute(`data-export-docx-src`,n||r),t.appendChild(i);let o=document.createElement(`span`);o.className=`export-video-play-badge`,o.setAttribute(`aria-hidden`,`true`),o.textContent=`Play`,t.appendChild(o),a.appendChild(t)}let o=document.createElement(`div`);o.className=`export-video-poster-copy`;let s=document.createElement(`strong`);s.textContent=e.dataset.videoEmbedLabel||`Embedded video`;let c=document.createElement(`span`);c.className=`export-video-poster-meta`,c.textContent=e.dataset.videoEmbedKind===`youtube`?`YouTube video`:`Video link`,o.append(s,c),a.appendChild(o);let l=document.createElement(`a`);return l.className=`export-video-link`,l.href=e.dataset.videoEmbedOriginalUrl||e.dataset.videoEmbedSource||e.dataset.videoEmbedUrl||`#`,l.target=`_blank`,l.rel=`noopener noreferrer`,l.textContent=l.href,i.append(a,l),i}async function ae(e){let t=document.createElement(`video`);return t.muted=!0,t.playsInline=!0,t.preload=`metadata`,t.crossOrigin=`anonymous`,t.style.position=`fixed`,t.style.left=`-10000px`,t.style.top=`0`,t.style.width=`1px`,t.style.height=`1px`,new Promise((n,r)=>{let i=!1,a=e=>{i||(i=!0,window.clearTimeout(d),t.pause?.(),t.removeEventListener(`error`,c),t.removeEventListener(`loadeddata`,u),t.removeEventListener(`seeked`,l),t.remove(),e())},o=e=>{a(()=>r(Error(e)))},s=()=>{if(t.videoWidth<=0||t.videoHeight<=0){o(`Video poster capture returned no frame: ${e}`);return}try{let e=document.createElement(`canvas`);e.width=t.videoWidth,e.height=t.videoHeight;let r=e.getContext(`2d`);if(!r){o(`Canvas is unavailable`);return}r.drawImage(t,0,0,e.width,e.height);let i=e.toDataURL(`image/png`);a(()=>n(i))}catch(t){o(t instanceof Error?t.message:`Failed to capture video poster: ${e}`)}},c=()=>{o(`Failed to load video poster: ${e}`)},l=()=>{s()},u=()=>{let e=Number.isFinite(t.duration)?t.duration:0,n=e>0?Math.min(te,Math.max(e*.1,0)):0;if(n>.05)try{t.currentTime=n;return}catch{}s()},d=window.setTimeout(()=>{o(`Timed out while loading video poster: ${e}`)},ee);t.addEventListener(`error`,c,{once:!0}),t.addEventListener(`loadeddata`,u,{once:!0}),t.addEventListener(`seeked`,l,{once:!0}),document.body.appendChild(t),t.src=e,t.load()})}async function M(e){let t=e.dataset.videoEmbedOriginalUrl||e.dataset.videoEmbedSource||``,n=e.dataset.videoEmbedUrl||``;if((e.dataset.videoEmbedKind||``)===`youtube`){let e=A(t)||A(n);if(!e)throw Error(`Failed to resolve YouTube video id for export`);let r=[`https://i.ytimg.com/vi_webp/${e}/maxresdefault.webp`,`https://i.ytimg.com/vi_webp/${e}/hqdefault.webp`,`https://i.ytimg.com/vi/${e}/maxresdefault.jpg`,`https://i.ytimg.com/vi/${e}/hqdefault.jpg`],i=null;for(let e of r)try{return await k(e,{maxBytes:3*1024*1024,timeoutMs:f})}catch(e){i=e}throw i instanceof Error?i:Error(`Failed to fetch YouTube thumbnail`)}if(!t)throw Error(`Missing video source for export poster`);return ae(t)}async function N(e,t){let n=await M(t),r=await T(n).catch(()=>n),i=H(e,{dataUrl:n,id:_(`video-poster`),kind:`video-poster`,mimeType:n.startsWith(`data:image/webp`)?`image/webp`:`image/png`,variants:{docx:r}});t.replaceWith(j(t,{assetId:i,docxPosterDataUrl:r,posterDataUrl:n}))}function P({alt:e=``,message:t=``,src:n=``}={}){let r=document.createElement(`span`);if(r.className=`export-warning export-image-fallback`,r.textContent=t||`Image export failed`,!n)return r;r.append(` `);let i=document.createElement(`a`);return i.href=n,i.rel=`noopener noreferrer`,i.target=`_blank`,i.textContent=e||n,r.append(i),r}function F({alt:e,assetId:t,className:n,dataUrl:r,docxDataUrl:i,svgMarkup:a=``}){let o=document.createElement(`figure`);if(o.className=`export-diagram ${n}`.trim(),o.setAttribute(`data-export-asset-id`,t),o.setAttribute(`data-export-label`,e),i&&o.setAttribute(`data-export-docx-src`,i),a){let t=document.createElement(`div`);t.className=`export-diagram-surface`,t.innerHTML=a;let n=t.querySelector(`svg`);if(n){let{width:r}=S(n);t.style.width=`100%`,t.style.maxWidth=`${Math.ceil(r)}px`,n.classList.add(`export-diagram-svg`),n.setAttribute(`role`,`img`),n.setAttribute(`aria-label`,e),n.removeAttribute(`width`),n.removeAttribute(`height`)}return o.appendChild(t),o}let s=document.createElement(`img`);return s.alt=e,s.className=`export-diagram-image`,s.src=r,i&&s.setAttribute(`data-export-docx-src`,i),o.appendChild(s),o}async function I(){return h||(h=e(()=>import(`./mermaid-runtime-BGlnoUXY.js`).then(e=>{let t=e?.default;if(!t)throw Error(`Mermaid runtime failed to initialize`);return t.initialize(d),t}),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]),import.meta.url),h)}function L(e){let t=String(e??``);if(/%%\{[\s\S]*?\binit\s*:/m.test(t)||(/^\s*stateDiagram(?:-v2)?\b/m.test(t)||/^\s*classDiagram\b/m.test(t)||/^\s*gantt\b/m.test(t))&&(t=`%%{init: ${JSON.stringify({htmlLabels:!1})}}%%\n${t}`),/^\s*gantt\b/m.test(t)&&!/\btodayMarker\b/.test(t)){let e=t.split(`
3
- `),n=e.findIndex(e=>/^\s*gantt\b/.test(e));n!==-1&&(e.splice(n+1,0,` todayMarker off`),t=e.join(`
4
- `))}return t}async function R(e){let t=await I();t.initialize(d);let n=document.createElement(`div`);n.style.position=`fixed`,n.style.left=`-10000px`,n.style.top=`0`,n.style.width=`1200px`,document.body.appendChild(n);try{let r=document.createElement(`div`);r.className=`mermaid`,r.id=_(`mermaid-render`),r.textContent=L(e),n.appendChild(r),await t.run({nodes:[r]});let i=r.querySelector(`svg`);if(!i)throw Error(`Mermaid render returned no SVG`);return C(i.outerHTML,{padding:24})}finally{n.remove()}}async function z(e){let t=await D(i(`/plantuml/render`),{body:JSON.stringify({source:e}),headers:{"Content-Type":`application/json`},method:`POST`});if(typeof t?.svg!=`string`||!t.svg.includes(`<svg`))throw Error(`PlantUML render returned no SVG`);return C(t.svg,{padding:16})}async function B(e){let t=s(a(await O(e)),{theme:`light`});return C((await o({appState:{...t.appState,exportBackground:!0,exportWithDarkMode:!1},elements:t.elements.filter(e=>!e.isDeleted),exportPadding:24,files:t.files||null})).outerHTML,{padding:24})}async function V(e){let t=_(`drawio-export`);return new Promise((n,i)=>{let a=document.createElement(`iframe`);a.className=`drawio-export-iframe`,a.src=(()=>{let n=new URL(r(`/drawio-editor.html`),window.location.origin);return n.searchParams.set(`file`,e),n.searchParams.set(`hostMode`,`export-image`),n.searchParams.set(`instanceId`,t),n.searchParams.set(`mode`,`view`),n.searchParams.set(`theme`,`light`),n.searchParams.set(`previewWidth`,`1200`),n.toString()})();let o=window.setTimeout(()=>{c(),i(Error(`Timed out while exporting draw.io diagram`))},2e4),s=e=>{if(e.origin!==window.location.origin)return;let r=e.data;if(!(!r||r.source!==`drawio-editor`||r.instanceId!==t)){if(r.type===`export-image`&&typeof r.data==`string`&&r.data){c(),n(r.data);return}(r.type===`error`||r.type===`fallback-text`)&&(c(),i(Error(r.message||`Failed to export draw.io diagram`)))}},c=()=>{window.clearTimeout(o),window.removeEventListener(`message`,s),a.remove()};window.addEventListener(`message`,s),document.body.appendChild(a)})}function H(e,t){return e.assets[t.id]=t,t.id}async function U(e,t,{label:n,prefix:r,render:i}){let a=t.querySelector(`.${r}-source`)?.textContent??``,o=t.dataset[`${r}Target`];if(!a.trim()&&o&&(a=await O(o)),!a.trim())throw Error(`${n} source is empty`);let s=await i(a,o),c=y(s),l=await w(s),u=H(e,{dataUrl:c,id:_(r),kind:`svg`,mimeType:`image/svg+xml`,text:s,variants:{docx:l}});t.replaceWith(F({alt:n,assetId:u,className:`export-diagram--${r}`,dataUrl:c,docxDataUrl:l,svgMarkup:s}))}async function W(e,t){let n=String(t.dataset.embedTarget??``).trim();if(!n)throw Error(`Missing Excalidraw file path`);let r=await B(n),i=y(r),a=await w(r),o=H(e,{dataUrl:i,id:_(`excalidraw`),kind:`svg`,mimeType:`image/svg+xml`,text:r,variants:{docx:a}});t.replaceWith(F({alt:t.dataset.embedLabel||`Excalidraw diagram`,assetId:o,className:`export-diagram--excalidraw`,dataUrl:i,docxDataUrl:a,svgMarkup:r}))}async function G(e,t){let n=String(t.dataset.drawioTarget??``).trim();if(!n)throw Error(`Missing draw.io file path`);let r=await V(n),i=H(e,{dataUrl:r,id:_(`drawio`),kind:`png`,mimeType:`image/png`});t.replaceWith(F({alt:t.dataset.drawioLabel||`draw.io diagram`,assetId:i,className:`export-diagram--drawio`,dataUrl:r,docxDataUrl:r}))}async function K(e,t){let n=Array.from(t.querySelectorAll(`img`));for(let t of n){let n=t.getAttribute(`src`)||``;if(!(!n||n.startsWith(`data:`)))try{let r=await k(new URL(n,window.location.href).toString()),i=H(e,{dataUrl:r,id:_(`image`),kind:`image`,mimeType:r.startsWith(`data:image/svg+xml`)?`image/svg+xml`:`image/png`});t.src=r,t.setAttribute(`data-export-asset-id`,i),t.setAttribute(`data-export-docx-src`,r)}catch(r){let i=r instanceof Error?r.message:`Failed to inline ${n}`;e.warnings.push(i),t.replaceWith(P({alt:t.getAttribute(`alt`)||``,message:`Image export failed: ${i}. Source:`,src:n}))}}}function q(e){Array.from(e.querySelectorAll(`.wiki-link[data-wiki-target]`)).forEach(e=>{let t=String(e.getAttribute(`data-wiki-target`)||``).trim();t&&(e.setAttribute(`href`,ie(t)),e.setAttribute(`target`,`_blank`),e.setAttribute(`rel`,`noopener noreferrer`))})}function oe(e){Array.from(e.querySelectorAll(`.task-list-item input[type="checkbox"]`)).forEach(e=>{e.setAttribute(`disabled`,`true`)})}async function se(e,{container:t}={}){q(t),oe(t);let n=Array.from(t.querySelectorAll(`.video-embed-placeholder[data-video-embed-key]`));for(let t of n)try{await N(e,t)}catch(n){e.warnings.push(n instanceof Error?n.message:`Failed to render video poster`),t.replaceWith(j(t))}let r=Array.from(t.querySelectorAll(`.mermaid-shell[data-mermaid-key]`));for(let t of r)try{await U(e,t,{label:t.dataset.mermaidLabel||`Mermaid diagram`,prefix:`mermaid`,render:e=>R(e)})}catch(n){e.warnings.push(n instanceof Error?n.message:`Failed to render Mermaid diagram`),t.replaceWith(Object.assign(document.createElement(`p`),{className:`export-warning`,textContent:`Mermaid export failed: ${n instanceof Error?n.message:`Unknown error`}`}))}let i=Array.from(t.querySelectorAll(`.plantuml-shell[data-plantuml-key]`));for(let t of i)try{await U(e,t,{label:t.dataset.plantumlLabel||`PlantUML diagram`,prefix:`plantuml`,render:e=>z(e)})}catch(n){e.warnings.push(n instanceof Error?n.message:`Failed to render PlantUML diagram`),t.replaceWith(Object.assign(document.createElement(`p`),{className:`export-warning`,textContent:`PlantUML export failed: ${n instanceof Error?n.message:`Unknown error`}`}))}let a=Array.from(t.querySelectorAll(`.excalidraw-embed-placeholder[data-embed-key]`));for(let t of a)try{await W(e,t)}catch(n){e.warnings.push(n instanceof Error?n.message:`Failed to render Excalidraw diagram`),t.replaceWith(Object.assign(document.createElement(`p`),{className:`export-warning`,textContent:`Excalidraw export failed: ${n instanceof Error?n.message:`Unknown error`}`}))}let o=Array.from(t.querySelectorAll(`.drawio-embed-placeholder[data-drawio-key]`));for(let t of o)try{await G(e,t)}catch(n){e.warnings.push(n instanceof Error?n.message:`Failed to render draw.io diagram`),t.replaceWith(Object.assign(document.createElement(`p`),{className:`export-warning`,textContent:`draw.io export failed: ${n instanceof Error?n.message:`Unknown error`}`}))}return await K(e,t),e}async function ce({fileList:e=[],filePath:t,markdownText:r=``,title:a=``}={}){let o=String(t??``).trim(),s=String(r??``),c={assets:{},filePath:o,generatedAt:new Date().toISOString(),html:``,sourceMarkdown:s,title:v(o,a),warnings:[]},l=n({attachmentApiPath:i(`/attachment`),fileList:e,markdownText:s,sourceFilePath:o}),u=document.createElement(`div`);return u.className=`preview-content export-content`,u.innerHTML=l.html,await se(c,{container:u}),c.html=u.innerHTML,c}function J(e,{borderColor:t=`#d1d5db`,cellPadding:n=`8px 10px`,headerBackground:r=`#f3f4f6`}={}){e.setAttribute(`border`,`1`),e.setAttribute(`cellpadding`,`0`),e.setAttribute(`cellspacing`,`0`),e.style.width=`100%`,e.style.borderCollapse=`collapse`,e.style.border=`1px solid ${t}`,e.style.margin=`0 0 16px`,Array.from(e.querySelectorAll(`th`)).forEach(e=>{e.style.border=`1px solid ${t}`,e.style.padding=n,e.style.background=r,e.style.textAlign=`left`,e.style.verticalAlign=`top`}),Array.from(e.querySelectorAll(`td`)).forEach(e=>{e.style.border=`1px solid ${t}`,e.style.padding=n,e.style.textAlign=`left`,e.style.verticalAlign=`top`})}function Y({contentNodes:e=[],borderColor:t=`#d1d5db`,padding:n=`12px`,shade:r=``}={}){let i=document.createElement(`table`);i.setAttribute(`border`,`1`),i.setAttribute(`cellpadding`,`0`),i.setAttribute(`cellspacing`,`0`),i.style.width=`100%`,i.style.borderCollapse=`collapse`,i.style.border=`1px solid ${t}`,i.style.margin=`0 0 16px`;let a=document.createElement(`tr`),o=document.createElement(`td`);return o.style.border=`1px solid ${t}`,o.style.padding=n,o.style.verticalAlign=`top`,r&&(o.style.background=r),e.forEach(e=>{e&&o.appendChild(e)}),a.appendChild(o),i.appendChild(a),i}function le(e){let t=document.createElement(`table`);t.setAttribute(`role`,`presentation`),t.setAttribute(`cellpadding`,`0`),t.setAttribute(`cellspacing`,`0`),t.style.width=`100%`,t.style.borderCollapse=`collapse`,t.style.margin=`0 0 16px`,t.style.tableLayout=`fixed`;let n=document.createElement(`colgroup`),r=document.createElement(`col`);r.style.width=`6px`;let i=document.createElement(`col`);n.append(r,i),t.appendChild(n);let a=document.createElement(`tr`),o=document.createElement(`td`);o.style.background=`#6366f1`,o.style.width=`6px`,o.style.padding=`0`,o.style.fontSize=`0`,o.style.lineHeight=`0`,o.innerHTML=`&nbsp;`;let s=document.createElement(`td`);s.style.background=`#f8fafc`,s.style.padding=`12px 16px`,s.style.verticalAlign=`top`,s.style.color=`#4b5563`,Array.from(e.childNodes).forEach(e=>{s.appendChild(e.cloneNode(!0))});let c=s.querySelector(`p`);c&&(c.style.marginTop=`0`),Array.from(s.querySelectorAll(`p`)).forEach(e=>{e.style.margin=`0 0 10px`});let l=s.querySelector(`p:last-of-type`);return l&&(l.style.marginBottom=`0`),a.append(o,s),t.appendChild(a),t}function ue(e){let t=(e.textContent||``).replace(/\r\n/g,`
5
- `).split(`
6
- `),n=[];return t.forEach((e,r)=>{let i=document.createElement(`p`);i.style.margin=`0`,r<t.length-1&&(i.style.marginBottom=`2px`),i.style.fontFamily=`'JetBrains Mono', 'Courier New', monospace`,i.style.fontSize=`12px`,i.style.lineHeight=`1.55`,i.style.color=`#111827`;let a=(e||``).replace(/\t/g,` `);a?(i.textContent=a,i.innerHTML=i.innerHTML.replace(/ /g,`&nbsp;`)):i.innerHTML=`&nbsp;`,n.push(i)}),Y({borderColor:`#d1d5db`,contentNodes:n,padding:`12px 14px`,shade:`#f8fafc`})}function de(e){let t=document.createElement(`template`);return t.innerHTML=e.html,Array.from(t.content.querySelectorAll(`.table-wrapper`)).forEach(e=>{let t=e.querySelector(`:scope > table`);t&&(J(t),e.replaceWith(t))}),Array.from(t.content.querySelectorAll(`table`)).forEach(e=>{J(e)}),Array.from(t.content.querySelectorAll(`pre`)).forEach(e=>{e.replaceWith(ue(e))}),Array.from(t.content.querySelectorAll(`figure.export-diagram[data-export-docx-src]`)).forEach(e=>{let t=e.getAttribute(`data-export-docx-src`),n=e.querySelector(`svg`);if(!t||!n)return;let r=document.createElement(`img`);r.alt=e.getAttribute(`data-export-label`)||`Diagram`,r.className=`export-diagram-image`,r.src=t,r.style.display=`block`,r.style.width=`100%`,r.style.height=`auto`,e.replaceWith(Y({contentNodes:[r],padding:`12px`}))}),Array.from(t.content.querySelectorAll(`figure.export-video-poster`)).forEach(e=>{let t=e.querySelector(`.export-video-poster-card`),n=e.querySelector(`.export-video-poster-image`),r=e.querySelector(`.export-video-link`),i=e.querySelector(`.export-video-poster-copy strong`),a=e.querySelector(`.export-video-poster-meta`),o=document.createElement(`div`);if(o.className=`export-video-poster-docx`,n instanceof HTMLImageElement){let e=document.createElement(`img`);e.alt=n.alt||i?.textContent||`Embedded video poster`,e.className=`export-video-poster-image`,e.src=n.getAttribute(`data-export-docx-src`)||n.getAttribute(`src`)||``,o.appendChild(e)}if(i?.textContent){let e=document.createElement(`p`),t=document.createElement(`strong`);t.textContent=i.textContent,e.appendChild(t),o.appendChild(e)}if(a?.textContent){let e=document.createElement(`p`);e.className=`export-video-poster-meta`,e.textContent=a.textContent,o.appendChild(e)}if(r instanceof HTMLAnchorElement&&r.href){let e=document.createElement(`p`),t=document.createElement(`a`);t.href=r.href,t.textContent=r.textContent||r.href,e.appendChild(t),o.appendChild(e)}if(!o.childNodes.length&&t?.textContent){let e=document.createElement(`p`);e.textContent=t.textContent,o.appendChild(e)}e.replaceWith(Y({contentNodes:[o],padding:`12px`}))}),Array.from(t.content.querySelectorAll(`[data-export-docx-src]`)).forEach(e=>{if(!(e instanceof HTMLImageElement))return;let t=e.getAttribute(`data-export-docx-src`);t&&e.setAttribute(`src`,t)}),Array.from(t.content.querySelectorAll(`blockquote`)).forEach(e=>{e.replaceWith(le(e))}),Array.from(t.content.querySelectorAll(`figure`)).forEach(e=>{if(e.closest(`table`))return;let t=e.querySelector(`img`);if(!(t instanceof HTMLImageElement))return;let n=t.cloneNode(!0);n.style.display=`block`,n.style.width=`100%`,n.style.height=`auto`,e.replaceWith(Y({contentNodes:[n],padding:`12px`}))}),`<!DOCTYPE html>
7
- <html lang="en">
8
- <head>
9
- <meta charset="UTF-8">
10
- <title>${e.title}</title>
11
- <style>
12
- body { font-family: Arial, sans-serif; color: #111827; line-height: 1.6; }
13
- main { max-width: 760px; margin: 0 auto; }
14
- h1, h2, h3, h4, h5, h6 { color: #111827; margin: 1.3em 0 0.6em; line-height: 1.2; }
15
- h1 { font-size: 28px; border-bottom: 1px solid #d1d5db; padding-bottom: 8px; }
16
- h2 { font-size: 22px; }
17
- h3 { font-size: 18px; }
18
- p, ul, ol, blockquote, pre, table, figure { margin: 0 0 16px; }
19
- a { color: #4338ca; text-decoration: underline; }
20
- pre { padding: 12px; border: 1px solid #d1d5db; background: #f8fafc; overflow: hidden; }
21
- code { font-family: 'JetBrains Mono', 'Courier New', monospace; background: #f3f4f6; padding: 2px 4px; }
22
- pre code { background: transparent; padding: 0; display: block; white-space: pre-wrap; }
23
- blockquote { padding-left: 14px; border-left: 3px solid #6366f1; color: #4b5563; }
24
- table { width: 100%; border-collapse: collapse; border: 1px solid #d1d5db; }
25
- th, td { border: 1px solid #d1d5db; padding: 8px 10px; text-align: left; vertical-align: top; }
26
- th { background: #f3f4f6; }
27
- img { max-width: 100%; height: auto; }
28
- .export-video-poster-docx { margin: 0 0 16px; }
29
- .export-video-poster-card { padding: 14px 16px; border: 1px solid #d1d5db; background: #f8fafc; }
30
- .export-video-poster-image { display: block; margin: 0 0 12px; }
31
- .export-video-poster-meta { display: block; color: #6b7280; font-size: 12px; margin-top: 4px; }
32
- .export-video-link { display: block; margin-top: 8px; word-break: break-word; }
33
- .export-warning { color: #b45309; }
34
- </style>
35
- </head>
36
- <body>
37
- <main>${t.innerHTML}</main>
38
- </body>
39
- </html>`}async function fe(e){let t=await fetch(i(`/export/docx`),{body:JSON.stringify({filePath:e.filePath,html:de(e),title:e.title}),headers:{"Content-Type":`application/json`},method:`POST`});if(!t.ok){let e=await t.json().catch(()=>null);throw Error(e?.error||`Failed to export DOCX`)}let n=await t.blob(),r=URL.createObjectURL(n),a=document.createElement(`a`);a.href=r,a.download=`${v(e.filePath,e.title)}.docx`,document.body.appendChild(a),a.click(),a.remove(),window.setTimeout(()=>URL.revokeObjectURL(r),1e3)}async function pe(){await b(),await b(),await new Promise(e=>{let t=window.setTimeout(e,1500),n=()=>{window.clearTimeout(t),window.removeEventListener(`afterprint`,n),e()};window.addEventListener(`afterprint`,n,{once:!0}),window.print()})}async function me(e,{settleFrames:t=2,timeoutMs:n=m}={}){if(!e)return``;let r=Array.from(e.querySelectorAll(`img`)).map(e=>E(e,{timeoutMs:n})),i=document.fonts?.ready?Promise.resolve(document.fonts.ready).catch(()=>{}):Promise.resolve();await Promise.allSettled([i,...r]);for(let e=0;e<t;e+=1)await b();return e.innerHTML}async function he(e,t){if(t===`pdf`){await pe(e);return}await fe(e)}function X(e,t={}){!window.opener||window.opener.closed||window.opener.postMessage({...t,source:l,type:e},window.location.origin)}async function Z(){let e=new URL(window.location.href),t=e.searchParams.get(`action`)===`pdf`?`pdf`:`docx`,n=e.searchParams.get(`file`)||``,r=e.searchParams.get(`job`)||``;return r&&window.opener&&!window.opener.closed?(X(`ready`,{jobId:r}),new Promise((e,i)=>{let a=window.setTimeout(()=>{o(),i(Error(`Timed out waiting for export data`))},1e4),o=()=>{window.clearTimeout(a),window.removeEventListener(`message`,s)},s=i=>{if(i.origin!==window.location.origin)return;let a=i.data;!a||a.source!==u||a.type!==`bootstrap`||a.jobId!==r||(o(),e({action:t,fileList:Array.isArray(a.fileList)?a.fileList:[],filePath:a.filePath||n,title:a.title||``,markdownText:a.markdownText||``}))};window.addEventListener(`message`,s)})):{action:t,fileList:[],filePath:n,markdownText:n?await O(n):``,title:``}}var ge=`h1, h2, h3, h4, h5, h6`,_e=[`figure`,`pre`,`blockquote`,`table`].join(`, `);function Q(e){return!!e?.matches?.(_e)}function ve(e){e&&Array.from(e.querySelectorAll(ge)).forEach(e=>{if(e.parentElement?.classList.contains(`export-keep-with-next`))return;let t=e.nextElementSibling;if(!t||t.classList.contains(`export-keep-with-next`))return;let n=[e],r=t;if(r.tagName===`P`){let e=r.nextElementSibling;if(!e||!Q(e))return;n.push(r),r=e}else if(!Q(r))return;n.push(r);let i=document.createElement(`section`);i.className=`export-keep-with-next`,e.before(i),n.forEach(e=>i.appendChild(e))})}function $(e){let t=document.getElementById(`exportStatus`);t&&(t.textContent=e)}function ye(e){let t=document.getElementById(`exportWarnings`),n=document.getElementById(`exportWarningsSection`);if(!t||!n)return;t.replaceChildren();let r=e.warnings??[];n.hidden=r.length===0,r.forEach(e=>{let n=document.createElement(`li`);n.textContent=e,t.appendChild(n)})}function be(e){let t=document.getElementById(`exportContent`);return t?(document.title=`${e.title} — Export`,t.innerHTML=e.html,ve(t),ye(e),t):null}async function xe(){try{$(`Loading export content…`);let e=await Z(),t=await ce(e);t.html=await me(be(t)),$(e.action===`pdf`?`Opening print dialog…`:`Preparing DOCX download…`),await he(t,e.action),$(e.action===`pdf`?`Print dialog opened.`:`DOCX download started.`),X(`complete`,{jobId:new URL(window.location.href).searchParams.get(`job`)||``})}catch(e){let t=e instanceof Error?e.message:`Export failed`;$(t),X(`error`,{jobId:new URL(window.location.href).searchParams.get(`job`)||``,message:t})}}xe();
@@ -1 +0,0 @@
1
- :root{--text-xs:clamp(.75rem, .7rem + .25vw, .875rem);--text-sm:clamp(.875rem, .8rem + .35vw, 1rem);--text-base:clamp(1rem, .9rem + .5vw, 1.125rem);--text-lg:clamp(1.125rem, .95rem + .85vw, 1.5rem);--text-xl:clamp(1.5rem, 1rem + 1.5vw, 2.25rem);--text-2xl:clamp(2rem, 1.2rem + 2.5vw, 3.5rem);--text-label:12px;--text-meta:11px;--text-caption:10px;--text-micro:9px;--text-code-sm:11.5px;--text-ui-sm:13px;--text-ui-md:14px;--text-title-sm:15px;--text-title-md:18px;--font-body:"Inter Variable", "Inter", system-ui, sans-serif;--font-display:"Inter Variable", "Inter", system-ui, sans-serif;--font-prose:system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:"JetBrains Mono", ui-monospace, "SFMono-Regular", "SF Mono", monospace;--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-5:1.25rem;--space-6:1.5rem;--space-8:2rem;--space-10:2.5rem;--space-12:3rem;--space-16:4rem;--space-20:5rem;--space-24:6rem;--space-32:8rem;--radius-sm:.375rem;--radius-md:.5rem;--radius-lg:.75rem;--radius-xl:1rem;--radius-2xs:2px;--radius-xs:4px;--radius-lg-plus:10px;--radius-xl-plus:18px;--radius-full:9999px;--transition-interactive:.18s cubic-bezier(.16, 1, .3, 1);--content-narrow:640px;--content-default:960px;--content-wide:1200px;--preview-content-width:720px;--panel-comments-width:min(300px, 34vw);--panel-comments-min-width:240px;--panel-outline-width:220px;--toolbar-h:48px;--control-h-xs:28px;--control-h-sm:30px;--control-h-md:36px;--control-h-lg:44px;--control-icon-sm:14px;--control-icon-md:16px;--panel-border-width:1px}:root,[data-theme=light]{--color-bg:#f5f5f7;--color-surface:#fff;--color-surface-2:#fafafe;--color-surface-offset:#eeeef2;--color-surface-offset-2:#e6e6eb;--color-surface-dynamic:#dddde3;--color-surface-raised:#fff;--color-surface-ink:#0f1117;--color-divider:#d1d1d8;--color-border:#c4c4ce;--color-text:#1a1a2e;--color-text-muted:#6b6b80;--color-text-faint:#a0a0b0;--color-text-inverse:#f5f5f7;--color-primary:#4f46e5;--color-primary-hover:#4338ca;--color-primary-active:#3730a3;--color-primary-contrast:#f5f5f7;--color-primary-highlight:#e0e0ff;--color-comment:#4f46e5;--color-comment-soft:#4f46e514;--color-comment-strong:#4f46e524;--color-comment-text:#3730a3;--color-error:#dc2626;--color-danger:#dc2626;--color-error-highlight:#fce8e8;--color-success:#16a34a;--color-success-highlight:#dcfce7;--color-warning:#d97706;--color-warning-highlight:#fef3c7;--diff-add-bg:#16a34a0f;--diff-add-line-bg:#16a34a24;--diff-add-text:#16a34a;--diff-del-bg:#dc26260f;--diff-del-line-bg:#dc262624;--diff-del-text:#dc2626;--diff-hunk-bg:#4f46e514;--diff-hunk-text:#4f46e5;--diff-gutter:#a0a0b0;--surface-fill-subtle:color-mix(in oklab, var(--color-surface) 92%, var(--color-surface-offset) 8%);--surface-fill-strong:color-mix(in oklab, var(--color-surface-offset) 72%, var(--color-surface-offset-2) 28%);--surface-overlay:color-mix(in srgb, var(--color-surface) 84%, var(--color-surface-offset) 16%);--surface-overlay-soft:color-mix(in srgb, var(--color-surface) 88%, var(--color-surface-offset) 12%);--surface-overlay-strong:color-mix(in srgb, var(--color-surface) 90%, var(--color-surface-offset) 10%);--surface-overlay-raised:color-mix(in oklab, var(--color-surface) 94%, transparent);--surface-overlay-header:color-mix(in srgb, var(--color-surface-offset) 76%, var(--color-bg) 24%);--surface-overlay-offset:color-mix(in oklab, var(--color-surface-offset) 82%, transparent);--surface-scrim:oklch(10% 0 0/.42);--surface-scrim-strong:oklch(8% .01 260/.82);--surface-inverse-glass:oklch(18% .02 260/.68);--surface-inverse-glass-hover:oklch(24% .02 260/.82);--surface-media-canvas:#000;--surface-embed-canvas:#fff;--surface-avatar-muted:#ffffff38;--surface-avatar-label:#0f1117d6;--surface-accent-subtle:color-mix(in oklab, var(--color-primary) 8%, var(--color-surface));--surface-accent-soft:color-mix(in oklab, var(--color-primary) 16%, transparent);--surface-accent-strong:color-mix(in oklab, var(--color-primary) 22%, transparent);--surface-success-soft:color-mix(in oklab, var(--color-success) 14%, transparent);--surface-warning-soft:color-mix(in oklab, var(--color-warning) 14%, transparent);--surface-danger-soft:color-mix(in oklab, var(--color-error) 14%, transparent);--surface-comment-shell:linear-gradient(180deg, oklch(from var(--color-comment) l c h / .035), transparent 120px), color-mix(in srgb, var(--color-surface) 96%, var(--color-comment) 4%);--surface-comment-shell-header:color-mix(in srgb, var(--color-surface) 97%, var(--color-comment) 3%);--surface-comment-record:linear-gradient(180deg, oklch(from var(--color-comment) l c h / .028), transparent 70%), color-mix(in srgb, var(--color-surface-2) 95%, var(--color-comment) 5%);--surface-comment-record-hover:linear-gradient(180deg, oklch(from var(--color-comment) l c h / .042), transparent 70%), color-mix(in srgb, var(--color-surface-2) 92%, var(--color-comment) 8%);--surface-comment-record-active:linear-gradient(180deg, oklch(from var(--color-comment) l c h / .055), transparent 72%), color-mix(in srgb, var(--color-surface-2) 90%, var(--color-comment) 10%);--surface-comment-subtle:color-mix(in srgb, var(--color-surface-2) 95%, var(--color-comment) 5%);--surface-comment-subtle-strong:color-mix(in srgb, var(--color-surface-2) 92%, var(--color-comment) 8%);--surface-comment-card:color-mix(in srgb, var(--color-surface) 94%, var(--color-comment) 6%);--surface-comment-elevated:color-mix(in srgb, var(--color-surface) 96%, var(--color-comment) 4%);--surface-comment-offset:color-mix(in srgb, var(--color-surface-offset) 90%, var(--color-comment) 10%);--surface-comment-offset-soft:color-mix(in srgb, var(--color-surface-offset) 88%, var(--color-comment) 12%);--surface-comment-offset-strong:color-mix(in srgb, var(--color-surface-offset) 84%, var(--color-comment) 16%);--surface-comment-offset-active:color-mix(in srgb, var(--color-surface-offset) 72%, var(--color-comment) 28%);--surface-comment-highlight-hover:color-mix(in srgb, var(--color-comment-soft) 74%, var(--color-comment) 26%);--surface-comment-highlight-active:color-mix(in srgb, var(--color-comment-soft) 62%, var(--color-comment) 38%);--surface-comment-selection:color-mix(in srgb, var(--color-surface) 25%, var(--color-comment) 75%);--surface-comment-preview-fade:linear-gradient(180deg, oklch(0% 0 0/0), color-mix(in srgb, var(--color-surface-2) 95%, var(--color-comment) 5%));--border-comment-soft:color-mix(in srgb, var(--color-divider) 90%, var(--color-comment) 10%);--border-comment-muted:color-mix(in srgb, var(--color-divider) 88%, var(--color-comment) 12%);--border-comment-strong:color-mix(in srgb, var(--color-border) 82%, var(--color-comment) 18%);--border-comment-active:color-mix(in srgb, var(--color-border) 78%, var(--color-comment) 22%);--shadow-comment-outline:0 0 0 1px oklch(from var(--color-comment) l c h / .14);--surface-warning-toast:linear-gradient(135deg, oklab(94.9166% -.0018052 .0644112), oklab(99.8777% .00026585 .000908241) 42%), #fff8e7;--border-warning-toast:oklab(73.4461% .062398 .147608);--text-warning-toast:#422006;--shadow-warning-toast:0 16px 30px #542e0a2e, 0 0 0 1px #f59e0b1f;--border-accent-soft:color-mix(in oklab, var(--color-primary) 22%, transparent);--border-accent-muted:color-mix(in oklab, var(--color-primary) 24%, var(--color-border));--border-accent-strong:color-mix(in oklab, var(--color-primary) 34%, var(--color-border));--border-accent-stronger:color-mix(in oklab, var(--color-primary) 40%, var(--color-border));--shadow-accent-inset:inset 0 0 0 1px color-mix(in oklab, var(--color-primary) 14%, transparent);--shadow-accent-outline:0 0 0 1px color-mix(in oklab, var(--color-primary) 16%, transparent);--shadow-accent-halo:0 0 0 3px oklch(from var(--color-primary) l c h / .16);--shadow-accent-ring:0 0 0 2px var(--color-surface), 0 0 0 4px oklch(from var(--color-primary) l c h / .18);--shadow-accent-ring-strong:0 0 0 2px var(--color-bg), 0 0 0 4px oklch(from var(--color-primary) l c h / .45);--shadow-accent-ring-solid:0 0 0 2px var(--color-primary), 0 0 0 4px oklch(from var(--color-primary) l c h / .2);--shadow-elevated-soft:0 10px 24px color-mix(in oklab, var(--color-surface-ink) 10%, transparent);--shadow-floating-soft:0 14px 34px oklch(0% 0 0/.18);--shadow-floating-hover:0 18px 40px oklch(0% 0 0/.2);--shadow-media-soft:0 16px 40px oklch(0% 0 0/.24);--shadow-media-stage:0 28px 80px oklch(0% 0 0/.28);--shadow-media-modal:0 10px 40px #00000059;--shadow-card-strong:0 20px 56px oklch(0% 0 0/.24);--shadow-sheet-inset:inset 0 1px 0 color-mix(in oklab, var(--color-text) 4%, transparent);--shadow-focus:0 0 0 3px oklch(from var(--color-primary) l c h / .15);--shadow-focus-compact:0 0 0 2px oklch(from var(--color-primary) l c h / .45);--interactive-border:color-mix(in oklab, var(--color-primary) 22%, transparent);--interactive-surface:color-mix(in oklab, var(--color-primary) 14%, transparent);--color-text-on-dark:#fff;--shadow-sm:0 1px 2px oklch(20% .02 260/.06);--shadow-md:0 4px 12px oklch(20% .02 260/.08);--shadow-lg:0 12px 32px oklch(20% .02 260/.12)}[data-theme=dark]{--color-bg:#0f1117;--color-surface:#161822;--color-surface-2:#1c1e2c;--color-surface-offset:#1a1c28;--color-surface-offset-2:#22243a;--color-surface-dynamic:#2a2c3e;--color-surface-raised:#202330;--color-surface-ink:#050608;--color-divider:#2e3044;--color-border:#383a50;--color-text:#e2e2ea;--color-text-muted:#8b8ba0;--color-text-faint:#5a5a70;--color-text-inverse:#0f1117;--color-primary:#818cf8;--color-primary-hover:#6366f1;--color-primary-active:#4f46e5;--color-primary-contrast:#0f1117;--color-primary-highlight:#1e1e3a;--color-comment:#818cf8;--color-comment-soft:#818cf81a;--color-comment-strong:#818cf829;--color-comment-text:#c7d2fe;--color-error:#f87171;--color-danger:#f87171;--color-error-highlight:#2a1a1a;--color-success:#4ade80;--color-success-highlight:#1a2a1a;--color-warning:#fbbf24;--color-warning-highlight:#2a261a;--diff-add-bg:#4ade8014;--diff-add-line-bg:#4ade8026;--diff-add-text:#4ade80;--diff-del-bg:#f8717114;--diff-del-line-bg:#f8717126;--diff-del-text:#f87171;--diff-hunk-bg:#818cf81a;--diff-hunk-text:#818cf8;--diff-gutter:#5a5a70;--surface-fill-subtle:color-mix(in oklab, var(--color-surface) 88%, var(--color-surface-offset) 12%);--surface-fill-strong:color-mix(in oklab, var(--color-surface-offset) 60%, var(--color-surface-offset-2) 40%);--surface-overlay:color-mix(in srgb, var(--color-surface) 84%, var(--color-surface-offset) 16%);--surface-overlay-soft:color-mix(in srgb, var(--color-surface) 88%, var(--color-surface-offset) 12%);--surface-overlay-strong:color-mix(in srgb, var(--color-surface) 90%, var(--color-surface-offset) 10%);--surface-overlay-raised:color-mix(in oklab, var(--color-surface) 94%, transparent);--surface-overlay-header:color-mix(in srgb, var(--color-surface-offset) 76%, var(--color-bg) 24%);--surface-overlay-offset:color-mix(in oklab, var(--color-surface-offset) 82%, transparent);--surface-scrim:oklch(10% 0 0/.42);--surface-scrim-strong:oklch(8% .01 260/.82);--surface-inverse-glass:oklch(18% .02 260/.68);--surface-inverse-glass-hover:oklch(24% .02 260/.82);--surface-media-canvas:#000;--surface-embed-canvas:#121212;--surface-avatar-muted:#ffffff38;--surface-avatar-label:#0f1117d6;--surface-accent-subtle:color-mix(in oklab, var(--color-primary) 8%, var(--color-surface));--surface-accent-soft:color-mix(in oklab, var(--color-primary) 16%, transparent);--surface-accent-strong:color-mix(in oklab, var(--color-primary) 22%, transparent);--surface-success-soft:color-mix(in oklab, var(--color-success) 14%, transparent);--surface-warning-soft:color-mix(in oklab, var(--color-warning) 14%, transparent);--surface-danger-soft:color-mix(in oklab, var(--color-error) 14%, transparent);--surface-comment-shell:linear-gradient(180deg, oklch(from var(--color-comment) l c h / .035), transparent 120px), color-mix(in srgb, var(--color-surface) 96%, var(--color-comment) 4%);--surface-comment-shell-header:color-mix(in srgb, var(--color-surface) 97%, var(--color-comment) 3%);--surface-comment-record:linear-gradient(180deg, oklch(from var(--color-comment) l c h / .028), transparent 70%), color-mix(in srgb, var(--color-surface-2) 95%, var(--color-comment) 5%);--surface-comment-record-hover:linear-gradient(180deg, oklch(from var(--color-comment) l c h / .042), transparent 70%), color-mix(in srgb, var(--color-surface-2) 92%, var(--color-comment) 8%);--surface-comment-record-active:linear-gradient(180deg, oklch(from var(--color-comment) l c h / .055), transparent 72%), color-mix(in srgb, var(--color-surface-2) 90%, var(--color-comment) 10%);--surface-comment-subtle:color-mix(in srgb, var(--color-surface-2) 95%, var(--color-comment) 5%);--surface-comment-subtle-strong:color-mix(in srgb, var(--color-surface-2) 92%, var(--color-comment) 8%);--surface-comment-card:color-mix(in srgb, var(--color-surface) 94%, var(--color-comment) 6%);--surface-comment-elevated:color-mix(in srgb, var(--color-surface) 96%, var(--color-comment) 4%);--surface-comment-offset:color-mix(in srgb, var(--color-surface-offset) 90%, var(--color-comment) 10%);--surface-comment-offset-soft:color-mix(in srgb, var(--color-surface-offset) 88%, var(--color-comment) 12%);--surface-comment-offset-strong:color-mix(in srgb, var(--color-surface-offset) 84%, var(--color-comment) 16%);--surface-comment-offset-active:color-mix(in srgb, var(--color-surface-offset) 72%, var(--color-comment) 28%);--surface-comment-highlight-hover:color-mix(in srgb, var(--color-comment-soft) 74%, var(--color-comment) 26%);--surface-comment-highlight-active:color-mix(in srgb, var(--color-comment-soft) 62%, var(--color-comment) 38%);--surface-comment-selection:color-mix(in srgb, var(--color-surface) 25%, var(--color-comment) 75%);--surface-comment-preview-fade:linear-gradient(180deg, oklch(0% 0 0/0), color-mix(in srgb, var(--color-surface-2) 95%, var(--color-comment) 5%));--border-comment-soft:color-mix(in srgb, var(--color-divider) 90%, var(--color-comment) 10%);--border-comment-muted:color-mix(in srgb, var(--color-divider) 88%, var(--color-comment) 12%);--border-comment-strong:color-mix(in srgb, var(--color-border) 82%, var(--color-comment) 18%);--border-comment-active:color-mix(in srgb, var(--color-border) 78%, var(--color-comment) 22%);--shadow-comment-outline:0 0 0 1px oklch(from var(--color-comment) l c h / .14);--surface-warning-toast:linear-gradient(135deg, oklab(76.8591% .0560995 .154808/.32), color-mix(in oklab, var(--color-surface) 86%, #0b1022 14%) 42%), color-mix(in oklab, var(--color-surface) 74%, #1b1320 26%);--border-warning-toast:oklab(79.4887% .0497246 .137216/.88);--text-warning-toast:oklab(99.6952% -.000454402 .00461993);--shadow-warning-toast:0 18px 34px #00000061, 0 0 0 1px oklab(76.8591% .0560995 .154808/.18);--border-accent-soft:color-mix(in oklab, var(--color-primary) 22%, transparent);--border-accent-muted:color-mix(in oklab, var(--color-primary) 24%, var(--color-border));--border-accent-strong:color-mix(in oklab, var(--color-primary) 34%, var(--color-border));--border-accent-stronger:color-mix(in oklab, var(--color-primary) 40%, var(--color-border));--shadow-accent-inset:inset 0 0 0 1px color-mix(in oklab, var(--color-primary) 14%, transparent);--shadow-accent-outline:0 0 0 1px color-mix(in oklab, var(--color-primary) 16%, transparent);--shadow-accent-halo:0 0 0 3px oklch(from var(--color-primary) l c h / .16);--shadow-accent-ring:0 0 0 2px var(--color-surface), 0 0 0 4px oklch(from var(--color-primary) l c h / .18);--shadow-accent-ring-strong:0 0 0 2px var(--color-bg), 0 0 0 4px oklch(from var(--color-primary) l c h / .45);--shadow-accent-ring-solid:0 0 0 2px var(--color-primary), 0 0 0 4px oklch(from var(--color-primary) l c h / .2);--shadow-elevated-soft:0 10px 24px color-mix(in oklab, var(--color-surface-ink) 10%, transparent);--shadow-floating-soft:0 14px 34px oklch(0% 0 0/.18);--shadow-floating-hover:0 18px 40px oklch(0% 0 0/.2);--shadow-media-soft:0 16px 40px oklch(0% 0 0/.24);--shadow-media-stage:0 28px 80px oklch(0% 0 0/.28);--shadow-media-modal:0 16px 48px #0009;--shadow-card-strong:0 20px 56px oklch(0% 0 0/.24);--shadow-sheet-inset:inset 0 1px 0 color-mix(in oklab, var(--color-text) 4%, transparent);--shadow-focus:0 0 0 3px oklch(from var(--color-primary) l c h / .15);--shadow-focus-compact:0 0 0 2px oklch(from var(--color-primary) l c h / .45);--interactive-border:color-mix(in oklab, var(--color-primary) 32%, transparent);--interactive-surface:color-mix(in oklab, var(--color-primary) 18%, transparent);--color-text-on-dark:#fff;--shadow-sm:0 1px 2px oklch(0% 0 0/.25);--shadow-md:0 4px 12px oklch(0% 0 0/.35);--shadow-lg:0 12px 32px oklch(0% 0 0/.5)}@media (prefers-color-scheme:dark){:root:not([data-theme]){--color-bg:#0f1117;--color-surface:#161822;--color-surface-2:#1c1e2c;--color-surface-offset:#1a1c28;--color-surface-offset-2:#22243a;--color-surface-dynamic:#2a2c3e;--color-surface-raised:#202330;--color-surface-ink:#050608;--color-divider:#2e3044;--color-border:#383a50;--color-text:#e2e2ea;--color-text-muted:#8b8ba0;--color-text-faint:#5a5a70;--color-text-inverse:#0f1117;--color-primary:#818cf8;--color-primary-hover:#6366f1;--color-primary-active:#4f46e5;--color-primary-highlight:#1e1e3a;--color-comment:#818cf8;--color-comment-soft:#818cf81a;--color-comment-strong:#818cf829;--color-comment-text:#c7d2fe;--color-error:#f87171;--color-error-highlight:#2a1a1a;--color-success:#4ade80;--color-success-highlight:#1a2a1a;--color-warning:#fbbf24;--color-warning-highlight:#2a261a;--surface-fill-subtle:color-mix(in oklab, var(--color-surface) 88%, var(--color-surface-offset) 12%);--surface-fill-strong:color-mix(in oklab, var(--color-surface-offset) 60%, var(--color-surface-offset-2) 40%);--surface-overlay:color-mix(in srgb, var(--color-surface) 84%, var(--color-surface-offset) 16%);--surface-overlay-soft:color-mix(in srgb, var(--color-surface) 88%, var(--color-surface-offset) 12%);--surface-overlay-strong:color-mix(in srgb, var(--color-surface) 90%, var(--color-surface-offset) 10%);--surface-overlay-raised:color-mix(in oklab, var(--color-surface) 94%, transparent);--surface-overlay-header:color-mix(in srgb, var(--color-surface-offset) 76%, var(--color-bg) 24%);--surface-overlay-offset:color-mix(in oklab, var(--color-surface-offset) 82%, transparent);--surface-scrim:oklch(10% 0 0/.42);--surface-scrim-strong:oklch(8% .01 260/.82);--surface-inverse-glass:oklch(18% .02 260/.68);--surface-inverse-glass-hover:oklch(24% .02 260/.82);--surface-media-canvas:#000;--surface-embed-canvas:#121212;--surface-avatar-muted:#ffffff38;--surface-avatar-label:#0f1117d6;--surface-accent-subtle:color-mix(in oklab, var(--color-primary) 8%, var(--color-surface));--surface-accent-soft:color-mix(in oklab, var(--color-primary) 16%, transparent);--surface-accent-strong:color-mix(in oklab, var(--color-primary) 22%, transparent);--surface-success-soft:color-mix(in oklab, var(--color-success) 14%, transparent);--surface-warning-soft:color-mix(in oklab, var(--color-warning) 14%, transparent);--surface-danger-soft:color-mix(in oklab, var(--color-error) 14%, transparent);--surface-comment-shell:linear-gradient(180deg, oklch(from var(--color-comment) l c h / .035), transparent 120px), color-mix(in srgb, var(--color-surface) 96%, var(--color-comment) 4%);--surface-comment-shell-header:color-mix(in srgb, var(--color-surface) 97%, var(--color-comment) 3%);--surface-comment-record:linear-gradient(180deg, oklch(from var(--color-comment) l c h / .028), transparent 70%), color-mix(in srgb, var(--color-surface-2) 95%, var(--color-comment) 5%);--surface-comment-record-hover:linear-gradient(180deg, oklch(from var(--color-comment) l c h / .042), transparent 70%), color-mix(in srgb, var(--color-surface-2) 92%, var(--color-comment) 8%);--surface-comment-record-active:linear-gradient(180deg, oklch(from var(--color-comment) l c h / .055), transparent 72%), color-mix(in srgb, var(--color-surface-2) 90%, var(--color-comment) 10%);--surface-comment-subtle:color-mix(in srgb, var(--color-surface-2) 95%, var(--color-comment) 5%);--surface-comment-subtle-strong:color-mix(in srgb, var(--color-surface-2) 92%, var(--color-comment) 8%);--surface-comment-card:color-mix(in srgb, var(--color-surface) 94%, var(--color-comment) 6%);--surface-comment-elevated:color-mix(in srgb, var(--color-surface) 96%, var(--color-comment) 4%);--surface-comment-offset:color-mix(in srgb, var(--color-surface-offset) 90%, var(--color-comment) 10%);--surface-comment-offset-soft:color-mix(in srgb, var(--color-surface-offset) 88%, var(--color-comment) 12%);--surface-comment-offset-strong:color-mix(in srgb, var(--color-surface-offset) 84%, var(--color-comment) 16%);--surface-comment-offset-active:color-mix(in srgb, var(--color-surface-offset) 72%, var(--color-comment) 28%);--surface-comment-highlight-hover:color-mix(in srgb, var(--color-comment-soft) 74%, var(--color-comment) 26%);--surface-comment-highlight-active:color-mix(in srgb, var(--color-comment-soft) 62%, var(--color-comment) 38%);--surface-comment-selection:color-mix(in srgb, var(--color-surface) 25%, var(--color-comment) 75%);--surface-comment-preview-fade:linear-gradient(180deg, oklch(0% 0 0/0), color-mix(in srgb, var(--color-surface-2) 95%, var(--color-comment) 5%));--border-comment-soft:color-mix(in srgb, var(--color-divider) 90%, var(--color-comment) 10%);--border-comment-muted:color-mix(in srgb, var(--color-divider) 88%, var(--color-comment) 12%);--border-comment-strong:color-mix(in srgb, var(--color-border) 82%, var(--color-comment) 18%);--border-comment-active:color-mix(in srgb, var(--color-border) 78%, var(--color-comment) 22%);--shadow-comment-outline:0 0 0 1px oklch(from var(--color-comment) l c h / .14);--surface-warning-toast:linear-gradient(135deg, oklab(76.8591% .0560995 .154808/.32), color-mix(in oklab, var(--color-surface) 86%, #0b1022 14%) 42%), color-mix(in oklab, var(--color-surface) 74%, #1b1320 26%);--border-warning-toast:oklab(79.4887% .0497246 .137216/.88);--text-warning-toast:oklab(99.6952% -.000454402 .00461993);--shadow-warning-toast:0 18px 34px #00000061, 0 0 0 1px oklab(76.8591% .0560995 .154808/.18);--border-accent-soft:color-mix(in oklab, var(--color-primary) 22%, transparent);--border-accent-muted:color-mix(in oklab, var(--color-primary) 24%, var(--color-border));--border-accent-strong:color-mix(in oklab, var(--color-primary) 34%, var(--color-border));--border-accent-stronger:color-mix(in oklab, var(--color-primary) 40%, var(--color-border));--shadow-accent-inset:inset 0 0 0 1px color-mix(in oklab, var(--color-primary) 14%, transparent);--shadow-accent-outline:0 0 0 1px color-mix(in oklab, var(--color-primary) 16%, transparent);--shadow-accent-halo:0 0 0 3px oklch(from var(--color-primary) l c h / .16);--shadow-accent-ring:0 0 0 2px var(--color-surface), 0 0 0 4px oklch(from var(--color-primary) l c h / .18);--shadow-accent-ring-strong:0 0 0 2px var(--color-bg), 0 0 0 4px oklch(from var(--color-primary) l c h / .45);--shadow-accent-ring-solid:0 0 0 2px var(--color-primary), 0 0 0 4px oklch(from var(--color-primary) l c h / .2);--shadow-elevated-soft:0 10px 24px color-mix(in oklab, var(--color-surface-ink) 10%, transparent);--shadow-floating-soft:0 14px 34px oklch(0% 0 0/.18);--shadow-floating-hover:0 18px 40px oklch(0% 0 0/.2);--shadow-media-soft:0 16px 40px oklch(0% 0 0/.24);--shadow-media-stage:0 28px 80px oklch(0% 0 0/.28);--shadow-media-modal:0 16px 48px #0009;--shadow-card-strong:0 20px 56px oklch(0% 0 0/.24);--shadow-sheet-inset:inset 0 1px 0 color-mix(in oklab, var(--color-text) 4%, transparent);--shadow-focus:0 0 0 3px oklch(from var(--color-primary) l c h / .15);--shadow-focus-compact:0 0 0 2px oklch(from var(--color-primary) l c h / .45);--interactive-border:color-mix(in oklab, var(--color-primary) 32%, transparent);--interactive-surface:color-mix(in oklab, var(--color-primary) 18%, transparent);--color-text-on-dark:#fff;--shadow-sm:0 1px 2px oklch(0% 0 0/.25);--shadow-md:0 4px 12px oklch(0% 0 0/.35);--shadow-lg:0 12px 32px oklch(0% 0 0/.5)}}.preview-content,.preview-content h1,.preview-content h2,.preview-content h3,.preview-content h4,.preview-content h5,.preview-content h6{font-family:var(--font-prose)}.preview-content h1{margin:var(--space-8) 0 var(--space-4);padding-bottom:var(--space-2);border-bottom:1px solid var(--color-divider);font-size:var(--text-xl);letter-spacing:-.02em;font-weight:700}.preview-content h1:first-child,.preview-content .frontmatter-block+h1{margin-top:0}.preview-content h2{margin:var(--space-6) 0 var(--space-3);font-size:var(--text-lg);letter-spacing:-.01em;font-weight:600}.preview-content h3{margin:var(--space-5) 0 var(--space-2);font-size:var(--text-base);font-weight:600}.preview-content h4,.preview-content h5,.preview-content h6{margin:var(--space-4) 0 var(--space-2);color:var(--color-text-muted);font-size:var(--text-sm);font-weight:600}.preview-content p{max-width:72ch;margin-bottom:var(--space-4)}.preview-content .frontmatter-block{max-width:72ch;margin:0 0 var(--space-5);padding:var(--space-4);border:1px solid var(--color-border);border-radius:var(--radius-lg);background:color-mix(in oklab, var(--color-surface-offset) 72%, var(--color-surface))}.preview-content .frontmatter-label{color:var(--color-text-muted);font-size:var(--text-ui-sm);letter-spacing:.04em;text-transform:uppercase;font-weight:600}.preview-content .frontmatter-block>.frontmatter-label{margin-bottom:var(--space-3);display:block}.preview-content .frontmatter-header{justify-content:space-between;align-items:center;gap:var(--space-3);margin-bottom:var(--space-3);display:flex}.preview-content .frontmatter-toggle{min-height:30px;padding:0 var(--space-3);border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text);font:inherit;font-size:var(--text-ui-sm);cursor:pointer;border-radius:999px;flex-shrink:0}.preview-content .frontmatter-toggle:hover{background:var(--color-surface-offset)}.preview-content .frontmatter-toggle:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.preview-content .frontmatter-summary{margin-bottom:var(--space-1);color:var(--color-text-muted);font-size:var(--text-ui-sm)}.preview-content .frontmatter-properties{gap:var(--space-3);margin:0;display:grid}.preview-content .frontmatter-property{gap:var(--space-3);grid-template-columns:minmax(0,160px) minmax(0,1fr);align-items:start;display:grid}.preview-content .frontmatter-key{color:var(--color-text-muted);font-size:var(--text-ui-sm);margin:0;font-weight:600}.preview-content .frontmatter-value{min-width:0;margin:0}.preview-content .frontmatter-value-text{color:var(--color-text);overflow-wrap:anywhere;display:inline-block}.preview-content .frontmatter-value-list{gap:var(--space-2);flex-wrap:wrap;display:flex}.preview-content .frontmatter-value-pill{min-height:28px;padding:0 var(--space-3);border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text);font-size:var(--text-ui-sm);border-radius:999px;align-items:center;display:inline-flex}.preview-content .frontmatter-value-code{border-radius:var(--radius-md);margin:0}.preview-content .frontmatter-value-code code{white-space:pre-wrap;word-break:break-word}.preview-content .frontmatter-empty{color:var(--color-text-muted);font-size:var(--text-ui-sm)}:is(.preview-content p:has(>.excalidraw-embed-placeholder:only-child),.preview-content p:has(>.bases-embed-placeholder:only-child),.preview-content p:has(>.video-embed-placeholder:only-child),.preview-content p:has(>.plantuml-shell:only-child)){max-width:none;margin-bottom:0}.preview-content .bases-shell{width:100%;margin:0 0 var(--space-5);border:1px solid var(--color-divider);border-radius:calc(var(--radius-lg) + 2px);background:var(--color-surface);box-shadow:var(--shadow-md);overflow:hidden}.preview-content .bases-embed-placeholder>.bases-shell{margin:0}.preview-content .bases-toolbar{gap:var(--space-3);padding:var(--space-4);border-bottom:1px solid var(--color-divider);border-radius:calc(var(--radius-lg) + 1px) calc(var(--radius-lg) + 1px) 0 0;background:var(--color-surface);display:grid}.preview-content .bases-toolbar-main,.preview-content .bases-toolbar-actions,.preview-content .bases-summaries,.preview-content .bases-value-list{gap:var(--space-2);flex-wrap:wrap;align-items:center;display:flex}.preview-content .bases-toolbar-main{justify-content:space-between;gap:var(--space-3);min-width:0}.preview-content .bases-tabs{border:1px solid color-mix(in oklab, var(--color-divider) 82%, transparent);border-radius:var(--radius-full);background:color-mix(in oklab, var(--color-surface-offset) 78%, var(--color-surface));scrollbar-width:none;flex-wrap:nowrap;flex:auto;min-width:0;max-width:100%;padding:3px;overflow:auto hidden}.preview-content .bases-tabs::-webkit-scrollbar{display:none}.preview-content .bases-export-btn,.preview-content .bases-link-button{flex-shrink:0}.preview-content .bases-toolbar-actions{justify-content:space-between;gap:var(--space-3);width:100%}.preview-content .bases-toolbar-edit-actions,.preview-content .bases-panel-title-row,.preview-content .bases-toggle-row,.preview-content .bases-filter-group-header,.preview-content .bases-filter-actions-row{gap:var(--space-2);flex-wrap:wrap;align-items:center;display:flex}.preview-content .bases-toolbar-edit-actions{border:1px solid var(--color-divider);border-radius:var(--radius-full);background:color-mix(in oklab, var(--color-surface) 72%, var(--color-surface-offset));box-shadow:inset 0 1px 0 oklch(from var(--color-text) l c h / .04);padding:3px;display:inline-flex}.preview-content .bases-panel-title-row,.preview-content .bases-filter-group-header{justify-content:space-between}.preview-content .bases-sort-row,.preview-content .bases-filter-row{gap:var(--space-2);align-items:stretch;width:100%;display:grid}.preview-content .bases-panel-section>.bases-sort-row{grid-template-columns:minmax(180px,1.35fr) minmax(140px,1fr) auto}.preview-content .bases-sort-list>.bases-sort-row{grid-template-columns:minmax(180px,1.35fr) minmax(140px,1fr) repeat(3,auto)}.preview-content .bases-filter-row{grid-template-columns:minmax(180px,1.2fr) minmax(160px,1fr) minmax(200px,1.35fr) auto}.preview-content .bases-sort-row>.ui-button,.preview-content .bases-filter-row>.ui-button,.preview-content .bases-filter-group-header>.ui-button,.preview-content .bases-filter-actions-row>.ui-button{align-self:stretch}.preview-content .bases-panels{padding:var(--space-3) var(--space-4) var(--space-4);background:var(--color-surface)}.preview-content .bases-panel-card{gap:var(--space-4);padding:var(--space-4);border:1px solid var(--color-divider);border-radius:calc(var(--radius-lg) + 1px);background:var(--color-surface);box-shadow:var(--shadow-sm);display:grid}.preview-content .bases-panel-section{gap:var(--space-2);display:grid}.preview-content .bases-panel-section+.bases-panel-section{padding-top:var(--space-3);border-top:1px solid color-mix(in oklab, var(--color-divider) 86%, transparent)}.preview-content .bases-panel-title,.preview-content .bases-readonly-note{font-size:var(--text-ui-sm);color:var(--color-text-muted)}.preview-content .bases-panel-title{font-weight:600}.preview-content .bases-readonly-note{line-height:1.5}.preview-content .bases-select,.preview-content .bases-filter-value,.preview-content .bases-properties-search-input,.preview-content .bases-filter-advanced{width:100%;min-width:0}.preview-content .bases-select,.preview-content .bases-filter-value,.preview-content .bases-filter-value-combobox{min-height:var(--control-h-md)}.preview-content .bases-select{appearance:none;padding-right:calc(var(--space-6) + var(--space-3));background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M4 6l4 4 4-4' stroke='%23838ea4' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-position:right var(--space-3) center;background-repeat:no-repeat;background-size:16px 16px}.preview-content .bases-filter-value-combobox{min-width:0;position:relative}.preview-content .bases-filter-value{padding-right:var(--space-3)}.preview-content .bases-filter-value--suggestions{padding-right:calc(var(--space-6) + var(--space-3));background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M4 6l4 4 4-4' stroke='%23838ea4' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-position:right var(--space-3) center;background-repeat:no-repeat;background-size:16px 16px}.preview-content .bases-filter-suggestion-list{top:calc(100% + var(--space-1));z-index:3;max-height:224px;padding:var(--space-1);border:1px solid var(--color-border);border-radius:var(--radius-lg);background:var(--color-surface);box-shadow:var(--shadow-lg);gap:2px;display:grid;position:absolute;left:0;right:0;overflow:auto}.preview-content .bases-filter-suggestion{gap:var(--space-2);width:100%;min-height:36px;padding:var(--space-2) var(--space-3);border-radius:calc(var(--radius-md) - 2px);color:var(--color-text);text-align:left;cursor:pointer;background:0 0;border:0;grid-template-columns:minmax(0,1fr) auto;align-items:center;display:grid}.preview-content .bases-filter-suggestion:hover,.preview-content .bases-filter-suggestion:focus-visible{background:var(--surface-fill-subtle);outline:none}.preview-content .bases-filter-suggestion[aria-selected=true]{background:color-mix(in oklab, var(--color-primary) 10%, var(--color-surface));color:var(--color-primary)}.preview-content .bases-filter-suggestion-label,.preview-content .bases-filter-suggestion-meta{min-width:0}.preview-content .bases-filter-suggestion-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.preview-content .bases-filter-suggestion-meta{color:var(--color-text-muted);font-size:var(--text-ui-sm)}.preview-content .bases-filter-group{gap:var(--space-3);padding:var(--space-3);border:1px solid color-mix(in oklab, var(--color-divider) 88%, transparent);border-radius:calc(var(--radius-lg) + 1px);background:var(--color-surface);box-shadow:inset 0 1px 0 oklch(from var(--color-text) l c h / .04);display:grid}.preview-content .bases-filter-children,.preview-content .bases-sort-list{gap:var(--space-3);display:grid}.preview-content .bases-properties-search,.preview-content .bases-filter-advanced-label{width:100%;display:block}.preview-content .bases-properties-list{gap:var(--space-2);max-height:320px;padding:var(--space-1);border:1px solid color-mix(in oklab, var(--color-divider) 86%, transparent);border-radius:var(--radius-lg);background:color-mix(in oklab, var(--color-surface-offset) 54%, var(--color-surface));display:grid;overflow:auto}.preview-content .bases-property-option{gap:var(--space-2);padding:var(--space-2) var(--space-3);border:1px solid var(--color-divider);border-radius:var(--radius-md);background:var(--color-surface);transition:transform var(--transition-interactive), border-color var(--transition-interactive), box-shadow var(--transition-interactive), background var(--transition-interactive);grid-template-columns:auto minmax(0,1fr) auto;align-items:center;display:grid}.preview-content .bases-property-option:hover{border-color:color-mix(in oklab, var(--color-divider) 55%, var(--color-primary) 45%);background:var(--surface-fill-subtle);box-shadow:var(--shadow-sm);transform:translateY(-1px)}.preview-content .bases-property-option input[type=checkbox]{width:16px;height:16px;accent-color:var(--color-primary);margin:0}.preview-content .bases-property-option-label{min-width:0;font-weight:500}.preview-content .bases-property-option-meta{font-size:var(--text-ui-sm);color:var(--color-text-faint);text-transform:capitalize}.preview-content .bases-filter-advanced{min-height:180px;padding:var(--space-3);resize:vertical;line-height:1.5}.preview-content .bases-search-shell{border:1px solid color-mix(in oklab, var(--color-border) 82%, var(--color-primary) 18%);border-radius:var(--radius-lg);background:var(--color-surface);width:100%;min-width:min(320px,100%);max-width:min(420px,100%);box-shadow:inset 0 1px 0 oklch(from var(--color-text) l c h / .04);transition:border-color var(--transition-interactive), box-shadow var(--transition-interactive), background var(--transition-interactive);flex:320px;align-items:center;margin-left:auto;display:flex;position:relative}.preview-content .bases-search-shell:focus-within{border-color:var(--color-primary);box-shadow:var(--shadow-focus), inset 0 1px 0 oklch(from var(--color-text) l c h / .04)}.preview-content .bases-search-icon{left:var(--space-3);color:var(--color-text-faint);pointer-events:none;position:absolute}.preview-content .bases-search-input{border-radius:inherit;min-width:0;box-shadow:none;padding-left:calc(var(--space-3) * 2 + 16px);background:0 0;border:0}.preview-content .bases-search-input:focus{box-shadow:none;border-color:#0000}.preview-content .bases-export-btn{min-height:var(--control-h-md);padding-inline:var(--space-4);font-size:var(--text-sm);font-weight:600}.preview-content .bases-export-btn:hover{border-color:color-mix(in oklab, var(--color-border) 45%, var(--color-primary) 55%)}.preview-content .bases-meta,.preview-content .bases-summary-label,.preview-content .bases-card-label{color:var(--color-text-muted);font-size:var(--text-ui-sm)}.preview-content .bases-meta{min-height:28px;padding:0 var(--space-3);border:1px solid color-mix(in oklab, var(--color-divider) 84%, transparent);border-radius:var(--radius-full);background:color-mix(in oklab, var(--color-surface-offset) 72%, var(--color-surface));box-shadow:inset 0 1px 0 oklch(from var(--color-text) l c h / .04);white-space:nowrap;align-items:center;display:inline-flex}.preview-content .bases-summaries{padding:var(--space-3) var(--space-4);border-top:1px solid color-mix(in oklab, var(--color-divider) 78%, transparent);border-bottom:1px solid var(--color-divider);background:var(--color-surface)}.preview-content .bases-summary{align-items:center;gap:var(--space-2);min-height:30px;padding:0 var(--space-3);border:1px solid color-mix(in oklab, var(--color-divider) 84%, transparent);background:var(--color-surface);box-shadow:inset 0 1px 0 oklch(from var(--color-text) l c h / .04);border-radius:999px;display:inline-flex}.preview-content .bases-summary-value{font-weight:600}.preview-content .bases-content{padding:var(--space-4)}.preview-content .bases-group+.bases-group{margin-top:var(--space-5)}.preview-content .bases-group-header{justify-content:space-between;align-items:center;gap:var(--space-2);margin-bottom:var(--space-3);flex-wrap:wrap;display:flex}.preview-content .bases-group-header h3{margin:0}.preview-content .bases-table-shell{border:1px solid color-mix(in oklab, var(--color-divider) 88%, transparent);border-radius:calc(var(--radius-lg) + 1px);background:var(--color-surface);box-shadow:inset 0 1px 0 oklch(from var(--color-text) l c h / .04);overflow-x:auto}.preview-content .bases-table{border-collapse:separate;border-spacing:0;width:100%;min-width:620px}.preview-content .bases-table th,.preview-content .bases-table td{padding:var(--space-3);border-bottom:1px solid var(--color-divider);text-align:left;vertical-align:top}.preview-content .bases-table th{z-index:1;background:color-mix(in oklab, var(--color-surface-offset) 72%, var(--color-surface));color:var(--color-text-muted);font-size:var(--text-ui-sm);white-space:nowrap;font-weight:600;position:sticky;top:0}.preview-content .bases-table tbody tr{transition:background var(--transition-interactive)}.preview-content .bases-table tbody tr:nth-child(2n){background:color-mix(in oklab, var(--color-surface-offset) 24%, transparent)}.preview-content .bases-table tbody tr:hover{background:color-mix(in oklab, var(--color-primary) 6%, var(--color-surface-offset))}.preview-content .bases-table tbody tr:last-child td{border-bottom:0}.preview-content .bases-list,.preview-content .bases-cards{max-width:none;margin:0;padding:0}.preview-content .bases-list{gap:var(--space-2);list-style:none;display:grid}.preview-content .bases-list-item{gap:var(--space-3);padding:var(--space-3);border:1px solid color-mix(in oklab, var(--color-divider) 88%, transparent);border-radius:var(--radius-lg);background:var(--color-surface);box-shadow:inset 0 1px 0 oklch(from var(--color-text) l c h / .04);flex-wrap:wrap;display:flex}.preview-content .bases-list-field{gap:2px;min-width:min(220px,100%);display:grid}.preview-content .bases-cards{gap:var(--space-3);grid-template-columns:repeat(auto-fit,minmax(240px,1fr));display:grid}.preview-content .bases-card{border:1px solid var(--color-border);border-radius:calc(var(--radius-lg) + 2px);background:var(--color-surface);box-shadow:var(--shadow-sm);transition:transform var(--transition-interactive), box-shadow var(--transition-interactive), border-color var(--transition-interactive);grid-template-rows:auto 1fr;display:grid;overflow:hidden}.preview-content .bases-card:hover{border-color:color-mix(in oklab, var(--color-border) 58%, var(--color-primary) 42%);box-shadow:var(--shadow-md);transform:translateY(-1px)}.preview-content .bases-card-media{object-fit:cover;background:color-mix(in oklab, var(--color-surface-offset) 50%, var(--color-surface));width:100%;height:140px;display:block}.preview-content .bases-card-media-color{background:var(--bases-card-swatch)}.preview-content .bases-card-body{gap:var(--space-3);padding:var(--space-4);display:grid}.preview-content .bases-card-field+.bases-card-field{padding-top:var(--space-3);border-top:1px solid color-mix(in oklab, var(--color-divider) 84%, transparent);margin-top:0}.preview-content .bases-link-button{min-height:auto;box-shadow:none;color:var(--color-primary);font-size:inherit;font-weight:600;line-height:inherit;background:0 0;border:0;border-radius:0;padding:0}.preview-content .bases-link-button:hover,.preview-content .bases-link-button:focus-visible{box-shadow:none;color:var(--color-primary);background:0 0;border-color:#0000}.preview-content .bases-value-pill{min-height:26px;padding:0 var(--space-3);border:1px solid var(--color-border);background:color-mix(in oklab, var(--color-surface-offset) 44%, var(--color-surface));box-shadow:inset 0 1px 0 oklch(from var(--color-text) l c h / .04);font-size:var(--text-ui-sm);border-radius:999px;align-items:center;display:inline-flex}.preview-content .bases-inline-image{border:1px solid color-mix(in oklab, var(--color-divider) 84%, transparent);border-radius:var(--radius-md);max-width:120px;max-height:80px;box-shadow:var(--shadow-sm);display:block}.preview-content .bases-unsupported{padding:var(--space-4);border:1px dashed var(--color-border);border-radius:var(--radius-lg);color:var(--color-text-muted);background:color-mix(in oklab, var(--color-surface-offset) 52%, var(--color-surface))}@media (width<=900px){.preview-content .bases-toolbar-actions{justify-content:flex-start}.preview-content .bases-search-shell{max-width:none;margin-left:0}.preview-content .bases-panel-section>.bases-sort-row,.preview-content .bases-sort-list>.bases-sort-row,.preview-content .bases-filter-row{grid-template-columns:1fr}.preview-content .bases-sort-row>.ui-button,.preview-content .bases-filter-row>.ui-button{width:100%}}@media (width<=640px){.preview-content .bases-toolbar,.preview-content .bases-panels,.preview-content .bases-summaries,.preview-content .bases-content{padding-inline:var(--space-3)}.preview-content .bases-toolbar-edit-actions,.preview-content .bases-toggle-row,.preview-content .bases-filter-actions-row{width:100%}.preview-content .bases-toolbar-edit-actions{box-shadow:none;background:0 0;border:0;border-radius:0;grid-template-columns:repeat(2,minmax(0,1fr));padding:0;display:grid}.preview-content .bases-toolbar-edit-actions>.ui-button,.preview-content .bases-toggle-row>.ui-button,.preview-content .bases-filter-actions-row>.ui-button{flex:140px}.preview-content .bases-toolbar-edit-actions>.ui-button{width:100%;min-width:0}.preview-content .bases-toolbar-edit-actions>.ui-button:last-child:nth-child(odd){grid-column:1/-1}.preview-content .bases-property-option{grid-template-columns:auto minmax(0,1fr)}.preview-content .bases-property-option-meta{grid-column:2}.preview-content .bases-table{min-width:540px}}.preview-content a{color:var(--color-primary);border-bottom:1px solid oklch(from var(--color-primary) l c h / .3);transition:border-color var(--transition-interactive);text-decoration:none}.preview-content a:hover{border-bottom-color:var(--color-primary)}.preview-content strong{font-weight:600}.preview-content em{font-style:italic}.preview-content del{color:var(--color-text-muted);text-decoration:line-through}.preview-content ul,.preview-content ol{margin-bottom:var(--space-4);padding-left:var(--space-6)}.preview-content li{margin-bottom:var(--space-1)}.preview-content li>ul,.preview-content li>ol{margin-top:var(--space-1);margin-bottom:0}.preview-content .task-list-item{list-style:none;position:relative}.preview-content .task-list-item input[type=checkbox]{top:.5em;left:calc(var(--space-5) * -1);accent-color:var(--color-primary);cursor:pointer;vertical-align:top;margin:0;position:absolute}.preview-content blockquote{margin:var(--space-4) 0;padding:var(--space-3) var(--space-5);border-left:3px solid var(--color-primary);border-radius:0 var(--radius-md) var(--radius-md) 0;background:var(--color-surface);color:var(--color-text-muted)}.preview-content blockquote p:last-child{margin-bottom:0}.preview-content code{border-radius:var(--radius-sm);background:var(--color-surface-offset);color:var(--color-primary);font-family:var(--font-mono);padding:2px 6px;font-size:.875em}.preview-content pre{max-width:100%;margin:var(--space-4) 0;border:1px solid var(--color-border);border-radius:var(--radius-lg);background:var(--color-surface);-webkit-overflow-scrolling:touch;overflow-x:auto}.preview-content pre code{width:fit-content;min-width:100%;padding:var(--space-4);color:var(--color-text);font-size:var(--text-ui-sm);white-space:pre;word-wrap:normal;overflow-wrap:normal;background:0 0;line-height:1.6;display:block}.preview-content .table-wrapper{margin:var(--space-4) 0;border:1px solid var(--color-border);border-radius:var(--radius-md);-webkit-overflow-scrolling:touch;overflow-x:auto}.preview-content table{border-collapse:collapse;white-space:nowrap;width:100%;min-width:100%}.preview-content th,.preview-content td{padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--color-divider);text-align:left;font-size:var(--text-sm)}.preview-content th{background:var(--color-surface-offset);color:var(--color-text-muted);font-size:var(--text-xs);letter-spacing:.03em;text-transform:uppercase;font-weight:600}.preview-content tr:last-child td{border-bottom:none}.preview-content tr:hover td{background:var(--color-surface-offset)}.preview-content hr{height:1px;margin:var(--space-8) 0;background:var(--color-divider);border:none}.preview-content img{max-width:100%;height:auto;margin:var(--space-4) 0;border-radius:var(--radius-md);cursor:zoom-in}@media (width<=768px){.preview-content .frontmatter-header{flex-flow:row;align-items:center}.preview-content .frontmatter-toggle{margin-left:auto}.preview-content .frontmatter-property{gap:var(--space-1);grid-template-columns:1fr}}[data-theme=light] .preview-content pre,[data-theme=light] .preview-content pre code,[data-theme=light] .hljs{background:var(--color-surface)!important}html[data-surface=export-document]{overscroll-behavior:auto;scrollbar-width:none;height:auto;min-height:100%;overflow:hidden}body[data-surface=export-document]{overscroll-behavior:auto;background:var(--color-bg);height:auto;color:var(--color-text);scrollbar-width:none;overflow:hidden}html[data-surface=export-document]::-webkit-scrollbar{display:none}body[data-surface=export-document]::-webkit-scrollbar{display:none}.export-page-shell{width:min(960px,100vw - 48px);margin:0 auto;padding:32px 0 72px}.export-page-header{justify-content:space-between;align-items:flex-start;margin-bottom:20px;display:flex}.export-page-header h1{margin-bottom:6px;font-size:28px}.export-page-header p{color:var(--color-text-muted);max-width:none}.export-warnings-panel{border:1px solid var(--border-warning-toast);background:var(--surface-warning-toast);color:var(--text-warning-toast);border-radius:12px;margin-bottom:20px;padding:14px 16px}.export-warnings-panel h2{margin-bottom:6px;font-size:14px}.export-warnings-panel ul{padding-left:20px}.export-content{border:1px solid var(--color-divider);background:var(--color-surface);box-shadow:var(--shadow-card-strong);border-radius:20px;padding:32px 40px}.export-content p,.export-content li,.export-content blockquote{max-width:none}.export-content .task-list-item input[type=checkbox]{cursor:default}.export-content .table-wrapper,.export-content .bases-table-shell,.export-content pre{overflow:visible}.export-content table{white-space:normal}.export-content pre code{white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;width:auto}.export-diagram{justify-content:center;margin:18px 0 22px;display:flex}.export-diagram-surface,.export-diagram-image{border:1px solid var(--color-divider);background:var(--color-surface);border-radius:14px;max-width:100%;margin:0}.export-diagram-surface{display:inline-block;overflow:hidden}.export-diagram-image,.export-diagram-svg{width:auto;max-width:100%;height:auto;display:block}.export-video-poster{margin:18px 0 22px}.export-video-poster-card{border:1px solid var(--color-divider);background:var(--surface-fill-subtle);border-radius:14px;padding:16px 18px;overflow:hidden}.export-video-poster-media{border-bottom:1px solid var(--color-divider);background:var(--color-surface-offset);margin:-16px -18px 14px;position:relative;overflow:hidden}.export-video-poster-image{object-fit:cover;width:100%;height:auto;max-height:360px;display:block}.export-video-play-badge{background:oklch(from var(--color-surface) l c h / .86);min-width:72px;color:var(--color-text);text-align:center;box-shadow:var(--shadow-lg);border-radius:999px;padding:8px 14px;font-size:14px;font-weight:700;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.export-video-poster-copy{flex-direction:column;gap:4px;display:flex}.export-video-poster-meta{color:var(--color-text-muted);margin-top:4px;font-size:13px;display:block}.export-video-link{word-break:break-word;margin-top:8px;display:inline-block}.export-warning{border:1px solid var(--border-warning-toast);background:var(--surface-warning-toast);color:var(--text-warning-toast);border-radius:12px;padding:12px 14px}.drawio-export-iframe{opacity:0;pointer-events:none;border:0;width:0;height:0;position:absolute}@media print{html[data-surface=export-document],body[data-surface=export-document]{background:var(--color-surface);scrollbar-width:none;height:auto;overflow:hidden!important}html[data-surface=export-document]::-webkit-scrollbar{display:none}body[data-surface=export-document]::-webkit-scrollbar{display:none}.export-content ::-webkit-scrollbar{display:none}.export-page-shell{width:auto;margin:0;padding:0}.export-page-header,.export-warnings-panel{display:none}.export-content{width:auto;box-shadow:none;border:0;border-radius:0;padding:0;overflow:visible}.export-content pre,.export-content .table-wrapper,.export-content .bases-table-shell{overflow:visible!important}.export-content pre code{white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;width:auto}.export-content h1,.export-content h2,.export-content h3,.export-content h4,.export-content h5,.export-content h6{break-after:avoid-page;page-break-after:avoid}.export-content h1+*,.export-content h2+*,.export-content h3+*,.export-content h4+*,.export-content h5+*,.export-content h6+*{break-before:avoid-page;page-break-before:avoid}.export-content pre,.export-content blockquote,.export-content table,.export-content figure,.export-content img{break-inside:avoid}.export-content .export-keep-with-next{break-inside:avoid-page;page-break-inside:avoid}.export-content p,.export-content li,.export-content blockquote{orphans:3;widows:3}}