@mdwrk/mdwrkspace 1.3.51

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.
@@ -0,0 +1,19 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" role="img" aria-label="Lattice Architect">
2
+ <defs>
3
+ <linearGradient id="latticeGrad" x1="0" y1="0" x2="1" y2="1">
4
+ <stop offset="0%" stop-color="#e55b2d"/>
5
+ <stop offset="100%" stop-color="#f2c94c"/>
6
+ </linearGradient>
7
+ </defs>
8
+ <rect width="512" height="512" rx="96" fill="#0b0f13"/>
9
+ <rect x="96" y="96" width="320" height="320" rx="48" fill="url(#latticeGrad)" opacity="0.12"/>
10
+ <g stroke="url(#latticeGrad)" stroke-width="22" stroke-linecap="square">
11
+ <path d="M128 176h256"/>
12
+ <path d="M128 256h256"/>
13
+ <path d="M128 336h256"/>
14
+ <path d="M176 128v256"/>
15
+ <path d="M256 128v256"/>
16
+ <path d="M336 128v256"/>
17
+ </g>
18
+ <path d="M178 196h156v120h-68v-52h-88z" fill="#e55b2d"/>
19
+ </svg>
@@ -0,0 +1,19 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" role="img" aria-label="Lattice Architect">
2
+ <defs>
3
+ <linearGradient id="latticeGrad" x1="0" y1="0" x2="1" y2="1">
4
+ <stop offset="0%" stop-color="#e55b2d"/>
5
+ <stop offset="100%" stop-color="#f2c94c"/>
6
+ </linearGradient>
7
+ </defs>
8
+ <rect width="512" height="512" rx="96" fill="#0b0f13"/>
9
+ <rect x="96" y="96" width="320" height="320" rx="48" fill="url(#latticeGrad)" opacity="0.12"/>
10
+ <g stroke="url(#latticeGrad)" stroke-width="22" stroke-linecap="square">
11
+ <path d="M128 176h256"/>
12
+ <path d="M128 256h256"/>
13
+ <path d="M128 336h256"/>
14
+ <path d="M176 128v256"/>
15
+ <path d="M256 128v256"/>
16
+ <path d="M336 128v256"/>
17
+ </g>
18
+ <path d="M178 196h156v120h-68v-52h-88z" fill="#e55b2d"/>
19
+ </svg>
@@ -0,0 +1,19 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" role="img" aria-label="Lattice Architect">
2
+ <defs>
3
+ <linearGradient id="latticeGrad" x1="0" y1="0" x2="1" y2="1">
4
+ <stop offset="0%" stop-color="#e55b2d"/>
5
+ <stop offset="100%" stop-color="#f2c94c"/>
6
+ </linearGradient>
7
+ </defs>
8
+ <rect width="512" height="512" rx="96" fill="#0b0f13"/>
9
+ <rect x="96" y="96" width="320" height="320" rx="48" fill="url(#latticeGrad)" opacity="0.12"/>
10
+ <g stroke="url(#latticeGrad)" stroke-width="22" stroke-linecap="square">
11
+ <path d="M128 176h256"/>
12
+ <path d="M128 256h256"/>
13
+ <path d="M128 336h256"/>
14
+ <path d="M176 128v256"/>
15
+ <path d="M256 128v256"/>
16
+ <path d="M336 128v256"/>
17
+ </g>
18
+ <path d="M178 196h156v120h-68v-52h-88z" fill="#e55b2d"/>
19
+ </svg>
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "Lattice Architect",
3
+ "short_name": "Lattice",
4
+ "description": "A high-density, offline-first Markdown workspace with a milled-zinc console aesthetic and hierarchical file management.",
5
+ "start_url": "/",
6
+ "display": "standalone",
7
+ "background_color": "#000000",
8
+ "theme_color": "#000000",
9
+ "icons": [
10
+ {
11
+ "src": "/icons/icon-192.svg",
12
+ "sizes": "192x192",
13
+ "type": "image/svg+xml"
14
+ },
15
+ {
16
+ "src": "/icons/icon-512.svg",
17
+ "sizes": "512x512",
18
+ "type": "image/svg+xml"
19
+ }
20
+ ],
21
+ "developer": {
22
+ "name": "GroupSum"
23
+ }
24
+ }
@@ -0,0 +1 @@
1
+ :root{--ui-scale: 1;--header-height: calc(32px * var(--ui-scale));--rail-width: calc(44px * var(--ui-scale));--rail-height: calc(44px * var(--ui-scale));--sidebar-width: calc(200px * var(--ui-scale));--status-height: calc(20px * var(--ui-scale));--tab-height: var(--header-height);--panel-header-height: calc(30px * var(--ui-scale));--rail-btn-size: calc(30px * var(--ui-scale));--bg-app: #c0c0c0;--bg-panel: #ececec;--bg-inset: #dcdcdc;--border-color: #000000;--border-width: 2px;--fg-primary: #000000;--fg-secondary: #333333;--fg-muted: #666666;--accent: #ff3e00;--table-header-bg: var(--bg-inset);--table-header-fg: var(--fg-primary);--table-row-primary-bg: var(--bg-panel);--table-row-secondary-bg: var(--bg-inset);--status-ok: #00cc00;--status-warn: #ff8800;--status-error: #cc0000;--app-gap: calc(4px * var(--ui-scale));--texture-opacity: .05;--editor-padding: calc(24px * var(--ui-scale));--file-indent-base: calc(12px * var(--ui-scale));--file-indent-unit: calc(12px * var(--ui-scale));--c-explorer-hover: rgba(0, 0, 0, .06);--c-explorer-selected: var(--accent);--c-explorer-selected-text: #ffffff;--c-explorer-drag-bg: rgba(255, 255, 255, .08);--font-ui: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-mono: "JetBrains Mono", "IBM Plex Mono", Menlo, monospace;--font-head: "Inter", sans-serif}body{background-color:var(--bg-app);color:var(--fg-primary);font-family:var(--font-ui);font-size:calc(12px * var(--ui-scale));margin:0;overflow:hidden;cursor:default;-webkit-font-smoothing:antialiased}*{box-sizing:border-box;border-radius:0!important}input,textarea,button{font-family:inherit;font-size:inherit;outline:none}button{cursor:pointer;text-transform:uppercase;font-weight:900;letter-spacing:.02em}svg.lucide{display:inline-block}svg.lucide[width="10"]{width:calc(10px * var(--ui-scale));height:calc(10px * var(--ui-scale))}svg.lucide[width="12"]{width:calc(12px * var(--ui-scale));height:calc(12px * var(--ui-scale))}svg.lucide[width="14"]{width:calc(14px * var(--ui-scale));height:calc(14px * var(--ui-scale))}svg.lucide[width="16"]{width:calc(16px * var(--ui-scale));height:calc(16px * var(--ui-scale))}svg.lucide[width="18"]{width:calc(18px * var(--ui-scale));height:calc(18px * var(--ui-scale))}svg.lucide[width="24"]{width:calc(24px * var(--ui-scale));height:calc(24px * var(--ui-scale))}svg.lucide[width="48"]{width:calc(48px * var(--ui-scale));height:calc(48px * var(--ui-scale))}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--bg-app);border-left:var(--border-width) solid var(--border-color)}::-webkit-scrollbar-thumb{background:var(--fg-primary);border:2px solid var(--bg-panel)}::-webkit-scrollbar-thumb:hover{background:var(--accent)}.markdown-body{font-family:var(--font-ui);line-height:1.6;font-size:calc(.95rem * var(--ui-scale));color:var(--fg-primary);overflow-wrap:anywhere;word-break:break-word}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{font-family:var(--font-head);color:var(--fg-primary);margin-top:1.5em;margin-bottom:.5em;font-weight:700}.markdown-body h1{font-size:calc(2em * var(--ui-scale));border-bottom:1px solid var(--border-color);padding-bottom:.3em}.markdown-body h2{font-size:calc(1.5em * var(--ui-scale))}.markdown-body h3{font-size:calc(1.2em * var(--ui-scale))}.markdown-body h4{font-size:calc(1.05em * var(--ui-scale))}.markdown-body h5{font-size:calc(.95em * var(--ui-scale));text-transform:uppercase;letter-spacing:.04em}.markdown-body h6{font-size:calc(.85em * var(--ui-scale));text-transform:uppercase;letter-spacing:.06em;color:var(--fg-muted)}.markdown-body p{margin-bottom:1em}.markdown-body strong{font-weight:700}.markdown-body em{font-style:italic}.markdown-body u,.markdown-body ins{text-decoration:underline;text-underline-offset:.15em}.markdown-body del{color:var(--fg-muted)}.markdown-body code{font-family:var(--font-mono);background:var(--bg-inset);padding:.2em .4em;border-radius:3px;font-size:calc(.85em * var(--ui-scale));color:var(--fg-secondary)}.markdown-body pre{background:var(--bg-inset);padding:1em;overflow-x:auto;border-radius:4px;border:1px solid var(--border-color)}.markdown-body pre code{background:transparent;padding:0;font-size:calc(.85em * var(--ui-scale));color:inherit}.markdown-body blockquote{border-left:4px solid var(--accent);padding-left:1em;color:var(--fg-muted);margin-left:0}.markdown-body hr{border:none;border-top:1px solid var(--border-color);margin:2em 0}.markdown-body ul,.markdown-body ol{margin:.6em 0 1em;padding-left:1.8em}.markdown-body ul{list-style:disc outside}.markdown-body ol{list-style:decimal outside}.markdown-body li{display:list-item;margin:.3em 0;padding-left:.15em}.markdown-body li>p{margin:.2em 0}.markdown-body ul ul,.markdown-body ul ol,.markdown-body ol ul,.markdown-body ol ol{margin:.35em 0 .15em;padding-left:1.5em}.markdown-body ul ul{list-style-type:circle}.markdown-body ul ul ul{list-style-type:square}.markdown-body ol ol{list-style-type:lower-alpha}.markdown-body ol ol ol{list-style-type:lower-roman}.markdown-body .md-task-list-item{list-style:none;padding-left:.1em}.markdown-body .md-task-list-item>.md-checkbox,.markdown-body .md-task-list-item>input[type=checkbox]{margin:.15em .6em 0 0;transform:translate(-.35em)}.markdown-body .md-checkbox,.markdown-body input[type=checkbox]{vertical-align:middle}.markdown-body li::marker{color:var(--fg-muted)}.markdown-body li[data-has-nested-list=true]::marker{content:""}.markdown-body a{color:var(--accent);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.2em;cursor:pointer}.markdown-body a:visited{color:var(--fg-secondary)}.markdown-body a:hover,.markdown-body a:focus-visible{color:var(--fg-primary);text-decoration-color:var(--accent)}.markdown-body a::selection{background:var(--accent);color:var(--bg-panel)}.markdown-body img{max-width:100%}.markdown-body figure{margin:1.5em 0}.markdown-body figcaption{color:var(--fg-muted);font-size:calc(.85em * var(--ui-scale));text-align:center}.markdown-body sup,.markdown-body sub{font-size:.75em;line-height:0;position:relative;vertical-align:baseline}.markdown-body sup{top:-.4em}.markdown-body sub{bottom:-.2em}.markdown-body table,.markdown-body .md-table{width:100%;border-collapse:collapse;margin-bottom:1em}.markdown-body th,.markdown-body td,.markdown-body .md-table-header,.markdown-body .md-table-cell{border:1px solid var(--border-color);padding:6px 12px}.markdown-body th,.markdown-body .md-table-header{background-color:var(--table-header-bg);color:var(--table-header-fg);font-weight:700;text-align:left}.markdown-body caption,.markdown-body .md-table-caption{caption-side:top;text-align:left;font-weight:700;margin-bottom:.5em;color:var(--fg-secondary)}.markdown-body thead th,.markdown-body .md-table-head .md-table-header{background:var(--table-header-bg);color:var(--table-header-fg)}.markdown-body tbody tr:nth-child(2n),.markdown-body .md-table-body .md-table-row:nth-child(2n){background:var(--table-row-secondary-bg)}.markdown-body tbody tr:nth-child(odd),.markdown-body .md-table-body .md-table-row:nth-child(odd){background:var(--table-row-primary-bg)}.markdown-body pre>div{background:transparent!important;padding:0!important}.md-code-block{display:flex;flex-direction:column;gap:8px;padding:12px;background:var(--bg-panel);border:none;border-radius:6px;margin-bottom:1em;overflow:hidden}.md-code-header{background:var(--bg-inset);padding:4px 12px;font-family:var(--font-mono);font-size:calc(.7rem * var(--ui-scale));border-bottom:1px solid var(--border-color);color:var(--fg-muted);text-transform:uppercase}.md-code-surface{background:var(--code-block-bg, var(--bg-inset));padding:12px 14px;border-radius:6px}.md-code-surface pre,.md-code-surface pre>code,.md-code-surface>div{background:transparent!important;padding:0!important;margin:0!important}@media print{.markdown-body{font-size:calc(11pt * var(--ui-scale))}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{break-after:avoid;page-break-after:avoid}.markdown-body table,.markdown-body pre,.markdown-body blockquote,.markdown-body ul,.markdown-body ol,.markdown-body img,.markdown-body .md-code-block,.markdown-body .md-table{break-inside:avoid;page-break-inside:avoid}}:root{--viewbox-aspect: square;--viewbox-width: md;--viewbox-height: md;--viewbox-device: precision;--viewbox-safe-top: 10px;--viewbox-safe-right: 10px;--viewbox-safe-bottom: 10px;--viewbox-safe-left: 10px}@media(max-aspect-ratio:3/4){:root{--viewbox-aspect: portrait;--viewbox-safe-top: 8px;--viewbox-safe-right: 8px;--viewbox-safe-bottom: 12px;--viewbox-safe-left: 8px}}@media(min-aspect-ratio:3/4)and (max-aspect-ratio:4/3){:root{--viewbox-aspect: square;--viewbox-safe-top: 10px;--viewbox-safe-right: 10px;--viewbox-safe-bottom: 10px;--viewbox-safe-left: 10px}}@media(min-aspect-ratio:4/3)and (max-aspect-ratio:16/9){:root{--viewbox-aspect: landscape;--viewbox-safe-top: 12px;--viewbox-safe-right: 12px;--viewbox-safe-bottom: 12px;--viewbox-safe-left: 12px}}@media(min-aspect-ratio:16/9)and (max-aspect-ratio:21/9){:root{--viewbox-aspect: wide;--viewbox-safe-top: 14px;--viewbox-safe-right: 18px;--viewbox-safe-bottom: 14px;--viewbox-safe-left: 18px}}@media(min-aspect-ratio:21/9){:root{--viewbox-aspect: ultrawide;--viewbox-safe-top: 16px;--viewbox-safe-right: 24px;--viewbox-safe-bottom: 16px;--viewbox-safe-left: 24px}}@media(max-width:480px){:root{--viewbox-width: xs}}@media(max-width:640px){:root{--viewbox-width: sm}}@media(max-width:900px){:root{--viewbox-width: md}}@media(max-width:1200px){:root{--viewbox-width: lg}}@media(min-width:1600px){:root{--viewbox-width: xl}}@media(min-width:1920px){:root{--viewbox-width: xxl}}@media(max-height:520px){:root{--viewbox-height: short;--viewbox-safe-top: 6px;--viewbox-safe-bottom: 6px}}@media(max-height:720px){:root{--viewbox-height: compact}}@media(min-height:900px){:root{--viewbox-height: tall}}@media(min-height:1200px){:root{--viewbox-height: ultra-tall}}@media(hover:none)and (pointer:coarse){:root{--viewbox-device: touch}}@media(hover:hover)and (pointer:fine){:root{--viewbox-device: precision}}.tab-bar{display:flex;align-items:stretch;overflow-x:auto}.tab-item{display:flex;align-items:center;gap:4px;padding:0 8px;border-right:var(--border-width) solid var(--border-color);background:var(--bg-inset);height:var(--tab-height);font-size:calc(9px * var(--ui-scale));font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--fg-secondary);cursor:pointer;flex-shrink:0}.tab-item.active{background:var(--bg-panel);color:var(--fg-primary);border-bottom:none}.tab-item.expanded{background:var(--bg-panel)}.tab-label{max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tab-close{border:1px solid transparent;background:transparent;color:inherit;width:16px;height:16px;display:flex;align-items:center;justify-content:center}.tab-close:hover{border-color:var(--border-color);background:var(--bg-panel)}.status-led{width:10px;height:10px;border-radius:999px!important;border:1px solid var(--border-color);background:var(--status-ok)}.status-led.warn{background:var(--status-warn)}.status-led.error{background:var(--status-error)}.status-led.offline{background:var(--fg-muted)}.zoom-control{display:flex;align-items:center;gap:4px;border:1px solid var(--border-color);padding:2px 4px;background:var(--bg-inset);font-size:calc(10px * var(--ui-scale));font-weight:800;text-transform:uppercase;height:24px}.zoom-btn{border:none;background:transparent;width:16px;height:16px;display:flex;align-items:center;justify-content:center;color:var(--fg-primary)}.zoom-display{min-width:42px;text-align:center}@media(max-width:640px){.tab-label{max-width:90px}.tab-item{padding:0 6px;font-size:calc(8px * var(--ui-scale))}}.toast-container{position:fixed;top:12px;right:12px;display:flex;flex-direction:column;gap:8px;z-index:4000;max-width:min(320px,90vw)}.toast-message{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 12px;background:var(--bg-panel);border:var(--border-width) solid var(--border-color);font-size:calc(10px * var(--ui-scale));font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--fg-primary);box-shadow:6px 6px #0006}.toast-message.info{border-left:4px solid var(--accent)}.toast-message.success{border-left:4px solid var(--status-ok)}.toast-message.warning{border-left:4px solid var(--status-warn)}.toast-close-btn{width:20px;height:20px;border:1px solid transparent;background:transparent;color:inherit;display:inline-flex;align-items:center;justify-content:center}.toast-close-btn:hover{border-color:var(--border-color);background:var(--bg-inset)}.editor-pane-container{height:100%;min-height:0;min-width:0;display:grid;grid-template-columns:minmax(0,1fr) minmax(40px,auto);grid-template-rows:1fr;position:relative;background:var(--bg-app)}.editor-pane-shell{grid-column:1;grid-row:1;min-height:0;min-width:0;display:flex;position:relative;flex-direction:column;overflow:hidden}.view-toolbar{grid-column:2;grid-row:1;width:40px;height:100%;min-height:0;background:var(--bg-inset);border-left:var(--border-width) solid var(--border-color);display:flex;flex-direction:column;align-items:center;justify-content:flex-start;padding:10px 6px;z-index:50;flex-shrink:0;overflow-y:auto;overscroll-behavior:contain}.view-toolbar-group{display:flex;flex-direction:column;gap:6px;align-items:center;width:100%}.view-toolbar-btn{width:24px;height:24px;display:flex;align-items:center;justify-content:center;color:var(--fg-muted);border:1px solid transparent}.view-toolbar-btn:hover:not(:disabled){border-color:var(--border-color);color:var(--fg-primary)}.view-toolbar-btn.active{background:var(--border-color);color:#fff}.view-toolbar-btn:disabled{opacity:.2;cursor:not-allowed}.view-toolbar-divider{width:18px;height:1px;background:var(--border-color);margin:6px 0}.editor-pane-body{flex:1;display:flex;min-height:0;min-width:0;overflow:hidden;background:var(--bg-app)}.editor-pane-column{height:100%;background:var(--bg-panel);overflow:hidden;display:flex;flex-direction:column}.editor-layout-wrapper{flex:1;display:flex;overflow:hidden;position:relative}.editor-gutter{width:48px;background:var(--bg-inset);border-right:var(--border-width) solid var(--border-color);display:flex;flex-direction:column;align-items:flex-end;padding:calc(var(--editor-padding) - 8px) 8px;font-family:var(--font-mono);font-size:calc(10px * var(--ui-scale));color:var(--fg-muted);overflow-y:hidden;-webkit-user-select:none;user-select:none}.line-num{height:1.5rem;line-height:1.5rem}.editor-textarea{flex:1;background:var(--bg-panel);border:none;resize:none;padding:var(--editor-padding);font-family:var(--font-mono);font-size:calc(13px * var(--ui-scale));line-height:1.5rem;color:var(--fg-primary);outline:none;overflow-y:auto}.editor-splitter{width:var(--app-gap);background:var(--border-color);cursor:col-resize;position:relative;transition:background .1s}.editor-splitter:hover,.editor-splitter.dragging{background:var(--accent)}.editor-splitter-handle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:2px;height:24px;background:#ffffff4d}.preview-pane{flex:1;overflow-y:auto;background:var(--bg-panel)}@media(max-width:900px){.editor-pane-container{grid-template-columns:1fr;grid-template-rows:auto 1fr}.editor-pane-shell{grid-row:2}.editor-pane-body{flex-direction:column}.editor-pane-body .editor-pane-column{width:100%!important;height:100%}.editor-pane-body.is-split .editor-pane-column{height:50%}.editor-splitter{width:100%;height:var(--app-gap);cursor:row-resize}.editor-splitter-handle{width:24px;height:2px}.view-toolbar{width:100%;height:auto;min-height:unset;grid-column:1;grid-row:1;flex-direction:row;align-items:center;justify-content:flex-start;border-left:0;border-bottom:var(--border-width) solid var(--border-color);overflow-x:auto;overflow-y:hidden}.view-toolbar-group{flex-direction:row;flex-wrap:wrap;justify-content:flex-start}.view-toolbar-divider{width:1px;height:18px;margin:0 6px}}@media(max-height:520px){.editor-pane-container{grid-template-columns:1fr;grid-template-rows:auto 1fr}.editor-pane-shell{grid-row:2}.view-toolbar{width:100%;height:auto;min-height:unset;grid-column:1;grid-row:1;flex-direction:row;align-items:center;justify-content:flex-start;border-left:0;border-bottom:var(--border-width) solid var(--border-color);overflow-x:auto;overflow-y:hidden}.view-toolbar-group{flex-direction:row;flex-wrap:wrap;justify-content:flex-start}.view-toolbar-divider{width:1px;height:18px;margin:0 6px}}@media(max-width:640px){.editor-gutter{width:40px;font-size:calc(9px * var(--ui-scale))}.editor-textarea{font-size:calc(12px * var(--ui-scale))}.view-toolbar-btn--split{display:none}}.file-tree-container{display:flex;flex-direction:column;padding:6px 0 16px;font-size:calc(11px * var(--ui-scale));color:var(--fg-secondary)}.file-tree-item{display:flex;align-items:center;gap:6px;height:26px;padding:0 8px;cursor:pointer;border-bottom:1px solid rgba(0,0,0,.05);text-transform:uppercase;letter-spacing:.08em}.file-tree-item:hover{background:var(--c-explorer-hover)}.file-tree-item.selected{background:var(--c-explorer-selected);color:var(--c-explorer-selected-text)}.file-tree-item.is-active{box-shadow:inset 0 0 0 1px var(--accent)}.file-tree-item.folder{font-weight:800;font-size:calc(10px * var(--ui-scale))}.file-tree-icon{display:flex;align-items:center;justify-content:center;width:16px;color:currentColor;cursor:pointer}.file-tree-text{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-tree-empty{padding:12px 8px;font-size:calc(10px * var(--ui-scale));color:var(--fg-muted);text-transform:uppercase;letter-spacing:.12em}.file-tree-buffer{flex:1}.chassis-root{position:relative;width:100vw;height:100dvh;min-height:100vh;background-color:var(--bg-app);overflow:hidden;border:var(--border-width) solid var(--border-color);box-sizing:border-box;padding-bottom:env(safe-area-inset-bottom);padding-top:env(safe-area-inset-top)}.texture-overlay{position:absolute;top:0;left:0;right:0;bottom:0;pointer-events:none;opacity:var(--texture-opacity);background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E");z-index:9999}.chassis-scaler{display:grid;grid-template-areas:"rail top" "rail main" "rail foot";grid-template-columns:var(--rail-width) 1fr;grid-template-rows:var(--header-height) 1fr var(--status-height);width:100%;height:100%;background-color:var(--bg-app);gap:var(--app-gap)}.chassis-body{width:100%;height:100%;display:contents}.app-root,.app-grid{display:contents}.app-header{grid-area:top;background:var(--bg-panel);border-bottom:var(--border-width) solid var(--border-color);display:flex;align-items:center;height:var(--header-height);padding:0 8px;gap:8px;z-index:10}.action-rail{grid-area:rail;background:var(--bg-inset);border-right:var(--border-width) solid var(--border-color);display:flex;flex-direction:column;align-items:center;padding:4px 3px;gap:6px}.status-bar{grid-area:foot;background:var(--bg-panel);border-top:var(--border-width) solid var(--border-color);display:flex;align-items:center;justify-content:space-between;padding:0 6px;height:var(--status-height);font-size:calc(9px * var(--ui-scale));font-weight:700;text-transform:uppercase;letter-spacing:.08em;gap:8px}.workspace-manifold{grid-area:main;display:flex;background-color:var(--bg-app);overflow:hidden;gap:var(--app-gap);height:100%}.git-workspace{grid-area:main;height:100%;display:flex;background-color:var(--bg-app);overflow:hidden;gap:var(--app-gap);border-top:var(--border-width) solid var(--border-color)}.workspace-sidebar{width:var(--sidebar-width);background-color:var(--bg-panel);display:flex;flex-direction:column;flex-shrink:0;transition:width .15s cubic-bezier(.4,0,.2,1);overflow:hidden;border-right:var(--border-width) solid var(--border-color);min-width:160px}.workspace-sidebar.is-collapsed{width:0;min-width:0;border-right-width:0}.workspace-stage{flex:1;background-color:var(--bg-panel);display:flex;flex-direction:column;overflow:hidden;min-width:0}.workspace-sidebar-resizer{width:6px;cursor:col-resize;flex-shrink:0;position:relative;z-index:3;touch-action:none}.workspace-sidebar-resizer:after{content:"";position:absolute;top:0;bottom:0;left:2px;width:2px;background:var(--border-color);opacity:.35}.workspace-sidebar-resizer:hover:after{opacity:.85;background:var(--accent)}.workspace-sidebar-resizer.is-hidden{width:0;overflow:hidden}body.is-resizing-sidebar,body.is-resizing-sidebar *{cursor:col-resize!important;-webkit-user-select:none!important;user-select:none!important}.panel-toolbar{height:32px;background:var(--bg-inset);border-bottom:var(--border-width) solid var(--border-color);display:flex;align-items:center;justify-content:space-between;padding:0 12px;gap:12px;flex-shrink:0}.git-sidebar{width:300px;background:linear-gradient(180deg,var(--bg-panel) 0%,var(--bg-inset) 100%);border-right:2px solid var(--border-color);box-shadow:inset -1px 0 #00000014;display:flex;flex-direction:column;flex-shrink:0;overflow:hidden}.git-header-title{display:inline-flex;align-items:center;gap:8px;font-family:var(--font-head);font-size:calc(12px * var(--ui-scale));font-weight:900;text-transform:uppercase;letter-spacing:.08em;color:var(--fg-primary)}.git-header-icon{color:var(--accent)}.git-close-btn{width:26px;height:26px;display:inline-flex;align-items:center;justify-content:center;color:var(--fg-muted);background:var(--bg-panel);border:var(--border-width) solid var(--border-color);border-radius:6px}.git-close-btn:hover{color:var(--fg-primary);border-color:var(--border-color)}.git-body{flex:1;display:flex;flex-direction:column;gap:12px;padding:12px;overflow-y:auto;background:transparent}@media print{@page{size:auto;margin:12mm}body,.chassis-root{background:#fff;-webkit-print-color-adjust:exact;print-color-adjust:exact}body{margin:0}.texture-overlay,.action-rail,.app-header,.status-bar,.workspace-sidebar,.view-toolbar,.panel-toolbar,.git-workspace,.update-banner,.toast-container{display:none!important}.chassis-root{border:none}.chassis-scaler{grid-template-areas:"main";grid-template-columns:1fr;grid-template-rows:1fr;gap:0}.workspace-manifold{gap:0}.workspace-stage,.editor-pane-shell,.editor-pane-body,.preview-pane{overflow:visible}.editor-layout-wrapper,.editor-textarea,.editor-gutter,.editor-splitter{display:none!important}.editor-pane-container{height:auto}.editor-pane-column{width:100%!important}.preview-pane{padding:0!important;background:transparent}}.git-branch-info{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;background:var(--bg-panel);border:var(--border-width) solid var(--border-color);border-left:3px solid var(--accent);border-radius:8px;text-transform:uppercase;font-family:var(--font-mono);font-size:calc(10px * var(--ui-scale));font-weight:700}.git-branch-row{display:inline-flex;align-items:center;gap:8px;color:var(--fg-primary)}.git-branch-name{font-family:var(--font-head);font-size:calc(12px * var(--ui-scale));font-weight:900}.git-branch-stats{display:inline-flex;align-items:center;gap:10px;color:var(--fg-muted)}.git-section{display:flex;flex-direction:column;gap:8px}.git-section-title{display:flex;align-items:center;justify-content:space-between;font-family:var(--font-head);font-size:calc(11px * var(--ui-scale));font-weight:900;text-transform:uppercase;letter-spacing:.08em;color:var(--fg-primary);margin:0}.git-section-title span{padding:2px 6px;background:var(--bg-inset);border:var(--border-width) solid var(--border-color);font-family:var(--font-mono);font-size:calc(9px * var(--ui-scale))}.git-empty-msg{padding:10px 12px;font-family:var(--font-mono);font-size:calc(10px * var(--ui-scale));color:var(--fg-muted);text-transform:uppercase;letter-spacing:.08em;background:var(--bg-panel);border:1px dashed var(--border-color);border-radius:8px}.git-item{display:grid;grid-template-columns:16px 1fr auto 24px;align-items:center;gap:8px;padding:8px 10px;background:var(--bg-panel);border:var(--border-width) solid var(--border-color);border-left:3px solid var(--accent);border-radius:8px;font-family:var(--font-mono);font-size:calc(11px * var(--ui-scale))}.git-item__icon{color:var(--accent)}.git-item__name{color:var(--fg-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.git-item__status{padding:2px 6px;border:var(--border-width) solid var(--border-color);background:var(--bg-panel);font-size:calc(9px * var(--ui-scale));font-weight:900;letter-spacing:.08em}.git-stage-btn{width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;background:var(--bg-inset);border:var(--border-width) solid var(--border-color);border-radius:6px;color:var(--fg-primary)}.git-stage-btn:hover{background:var(--accent);color:#fff}.git-commit-area{display:flex;flex-direction:column;gap:8px}.git-commit-input{min-height:80px;resize:vertical;padding:8px;background:var(--bg-panel);border:var(--border-width) solid var(--border-color);border-radius:8px;color:var(--fg-primary);font-family:var(--font-mono);font-size:calc(12px * var(--ui-scale))}.git-commit-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:8px 10px;border:var(--border-width) solid var(--border-color);background:var(--accent);color:#fff;font-size:calc(11px * var(--ui-scale));border-radius:8px}.git-commit-btn:disabled{background:var(--bg-inset);color:var(--fg-muted);cursor:not-allowed}.git-sync-area{margin-top:auto;padding-top:6px;border-top:var(--border-width) solid var(--border-color)}.git-sync-btn{width:100%;display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:8px 10px;border:var(--border-width) solid var(--border-color);background:var(--bg-panel);color:var(--fg-primary);font-size:calc(11px * var(--ui-scale));border-radius:8px}.git-sync-btn:hover{background:var(--bg-inset)}.git-diff-view{flex:1;display:flex;flex-direction:column;background:linear-gradient(180deg,var(--bg-panel) 0%,var(--bg-inset) 100%);border-left:2px solid var(--border-color);min-width:0}.git-diff-title{font-family:var(--font-head);font-size:calc(11px * var(--ui-scale));font-weight:900;text-transform:uppercase;letter-spacing:.08em;color:var(--fg-primary)}.git-diff-legend{display:inline-flex;align-items:center;gap:12px;font-family:var(--font-mono);font-size:calc(9px * var(--ui-scale));color:var(--fg-muted);text-transform:uppercase;letter-spacing:.08em}.git-diff-actions{display:inline-flex;align-items:center;gap:12px}.git-diff-toolbar{display:inline-flex;align-items:center;gap:6px;padding:2px;background:var(--bg-panel);border:var(--border-width) solid var(--border-color);border-radius:999px}.git-icon-btn{width:26px;height:26px;display:inline-flex;align-items:center;justify-content:center;border:var(--border-width) solid transparent;background:transparent;color:var(--fg-muted);border-radius:999px}.git-icon-btn:hover{color:var(--fg-primary);border-color:var(--border-color);background:var(--bg-inset)}.git-view-toggle.is-active{background:var(--accent);color:#fff;border-color:var(--border-color)}.git-diff-legend-item{display:inline-flex;align-items:center;gap:6px}.git-legend-icon-del,.git-legend-icon-add{width:10px;height:10px;border:var(--border-width) solid var(--border-color)}.git-legend-icon-del{background:var(--status-error)}.git-legend-icon-add{background:var(--status-ok)}.git-diff-content{flex:1;display:flex;flex-direction:column;overflow:auto;background:transparent;padding:12px}.git-diff-stage{display:flex;flex-direction:column;min-height:100%;gap:12px;font-family:var(--font-mono);font-size:calc(12px * var(--ui-scale))}.git-diff-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.git-diff-panel{display:flex;flex-direction:column;border:var(--border-width) solid var(--border-color);background:var(--bg-panel);border-radius:12px;overflow:hidden;box-shadow:inset 0 0 0 1px #ffffff05}.git-diff-panel--preview{background:var(--bg-inset)}.git-diff-panel__header{padding:8px 12px;font-family:var(--font-head);font-size:calc(10px * var(--ui-scale));font-weight:900;letter-spacing:.18em;text-transform:uppercase;color:var(--fg-primary);background:var(--bg-inset);border-bottom:var(--border-width) solid var(--border-color)}.git-diff-panel__content{display:flex;flex-direction:column;gap:6px;padding:12px;min-width:0}.git-preview-pane .preview-pane{background:transparent;padding:0}.git-preview-pane .markdown-body{padding:12px}.git-diff-meta{font-family:var(--font-head);font-size:calc(11px * var(--ui-scale));font-weight:900;text-transform:uppercase;letter-spacing:.08em;color:var(--fg-muted)}.git-diff-marker{display:inline-block;width:16px;font-weight:900}.git-diff-row,.git-diff-line,.git-diff-preview-line{display:flex;align-items:flex-start;gap:6px;padding:6px 8px;border-radius:6px}.diff-removed{background:#ff000014;border-left:3px solid var(--status-error)}.diff-added{background:#00ff0014;border-left:3px solid var(--status-ok)}.diff-context{background:var(--bg-inset);border:var(--border-width) dashed var(--border-color)}.git-diff-line--removed{background:#ff000014;border-left:3px solid var(--status-error)}.git-diff-line--added{background:#00ff0014;border-left:3px solid var(--status-ok)}.git-line-num{width:18px;text-align:right;color:var(--fg-muted);font-size:calc(10px * var(--ui-scale));flex-shrink:0}.git-diff-preview-line--muted{color:var(--fg-muted)}.git-diff-placeholder{flex:1;display:flex;align-items:center;justify-content:center;font-family:var(--font-head);font-size:calc(12px * var(--ui-scale));font-weight:900;letter-spacing:.2em;color:var(--fg-muted);background:var(--bg-panel);text-transform:uppercase}.workspace-panel-header{height:var(--panel-header-height);background:var(--bg-inset);border-bottom:var(--border-width) solid var(--border-color);display:flex;align-items:center;justify-content:space-between;padding:0 10px;flex-shrink:0;font-size:calc(10px * var(--ui-scale));font-weight:800;letter-spacing:.12em;text-transform:uppercase}.workspace-panel-content{flex:1;overflow-y:auto}.panel-icon-btn{width:22px;height:22px;display:flex;align-items:center;justify-content:center;color:var(--fg-muted);border:1px solid transparent}.panel-icon-btn:hover{color:var(--fg-primary);border-color:var(--border-color);background:var(--bg-panel)}.panel-icon-btn:disabled{opacity:.4;cursor:not-allowed;pointer-events:none}.header-left,.header-right{display:flex;align-items:center;gap:8px;height:100%}.header-left{min-width:120px}.header-center{flex:1;display:flex;align-items:stretch;height:100%;min-width:0;overflow:hidden;padding-left:6px}.header-right{min-width:200px;justify-content:flex-end;border-left:var(--border-width) solid var(--border-color);padding-left:12px}.header-brand{display:flex;align-items:center;gap:8px;cursor:pointer}.header-brand-title{display:flex;align-items:center;gap:6px;font-size:calc(11px * var(--ui-scale));font-weight:900;text-transform:uppercase;letter-spacing:.06em}.header-brand-subtitle{font-size:calc(8px * var(--ui-scale));font-weight:700;text-transform:uppercase;letter-spacing:.2em;color:var(--fg-muted)}.header-btn{width:24px;height:24px;display:flex;align-items:center;justify-content:center;border:1px solid var(--border-color);background:var(--bg-panel);color:var(--fg-primary)}.header-tabs{flex:1;min-width:0;overflow-x:auto;overflow-y:hidden}.header-controls{display:flex;align-items:center;gap:8px}.header-btn-group{display:inline-flex;align-items:center;gap:2px;padding:1px;border:1px solid var(--border-color);background:var(--bg-inset)}.header-btn:hover{background:var(--bg-inset)}.header-btn:disabled{opacity:.5;cursor:not-allowed}.rail-group{display:flex;flex-direction:column;gap:4px;align-items:center;width:100%}.rail-spacer{flex:1}.rail-btn{width:var(--rail-btn-size);height:var(--rail-btn-size);display:flex;align-items:center;justify-content:center;background:transparent;border:1px solid transparent;color:var(--fg-muted);position:relative}.rail-btn svg{width:calc(18px * var(--ui-scale));height:calc(18px * var(--ui-scale));stroke-width:2.2px}.rail-btn:hover{border-color:var(--border-color);background:var(--bg-panel);color:var(--fg-primary)}.rail-btn.is-active{background:var(--accent);border-color:var(--border-color);color:#fff}.rail-btn--status{border-style:dashed}.status-left,.status-right{display:flex;align-items:center;gap:8px}.status-item{display:flex;align-items:center;gap:4px}.status-item__icon{opacity:.7}.status-label{color:var(--fg-muted)}.status-kv{font-weight:800}.status-sep{width:1px;height:12px;background:var(--border-color)}.status-text-bold{font-weight:900}.status-text--on{color:var(--status-ok)}.status-text--warn{color:var(--status-warn)}.status-online{display:flex;align-items:center;gap:4px;color:var(--status-ok)}.status-offline{display:flex;align-items:center;gap:4px;color:var(--status-error)}.status-dot{width:6px;height:6px;border-radius:999px!important;background:var(--accent)}.badge-unsaved{padding:2px 6px;border:1px solid var(--border-color);background:var(--bg-inset);font-size:calc(9px * var(--ui-scale));letter-spacing:.08em}.panel-toolbar{height:var(--panel-header-height);background:var(--bg-inset);border-bottom:var(--border-width) solid var(--border-color);display:flex;align-items:center;justify-content:space-between;padding:0 10px;font-size:calc(10px * var(--ui-scale));font-weight:800;text-transform:uppercase;letter-spacing:.12em}.git-sidebar{width:300px;min-width:220px;display:flex;flex-direction:column;background:linear-gradient(180deg,var(--bg-panel) 0%,var(--bg-inset) 100%);border-right:2px solid var(--border-color);box-shadow:inset -1px 0 #00000014}.git-body{flex:1;overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:12px;background:transparent}.git-header-title,.git-diff-title{display:flex;align-items:center;gap:6px}.git-close-btn{border:1px solid var(--border-color);background:var(--bg-panel);width:26px;height:26px;display:flex;align-items:center;justify-content:center;border-radius:6px}.git-section-title{display:flex;justify-content:space-between;font-size:calc(10px * var(--ui-scale));font-weight:800;text-transform:uppercase;letter-spacing:.12em;margin:0;padding-bottom:4px;border-bottom:1px solid var(--border-color)}.git-list{display:flex;flex-direction:column;gap:6px}.git-item{display:grid;grid-template-columns:16px 1fr 16px 22px;align-items:center;gap:6px;padding:8px 10px;border:1px solid var(--border-color);background:var(--bg-panel);border-left:3px solid var(--accent);border-radius:8px;font-size:calc(11px * var(--ui-scale))}.git-item__status{font-weight:900;text-align:center}.git-stage-btn{border:1px solid var(--border-color);background:var(--bg-inset);width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:6px}.git-empty-msg{font-size:calc(10px * var(--ui-scale));text-transform:uppercase;color:var(--fg-muted);background:var(--bg-panel);border:1px dashed var(--border-color);padding:10px 12px;border-radius:8px}.git-branch-info{display:flex;justify-content:space-between;align-items:center;border:1px solid var(--border-color);padding:10px 12px;background:var(--bg-panel);font-size:calc(10px * var(--ui-scale));border-left:3px solid var(--accent);border-radius:8px}.git-branch-row{display:flex;align-items:center;gap:6px;font-weight:800;text-transform:uppercase}.git-branch-stats{display:flex;align-items:center;gap:8px;color:var(--fg-muted)}.git-stat-item{display:inline-flex;align-items:center;gap:4px}.git-commit-area{display:flex;flex-direction:column;gap:6px}.git-commit-input{min-height:80px;border:1px solid var(--border-color);background:var(--bg-panel);padding:8px;font-family:var(--font-mono);font-size:calc(11px * var(--ui-scale));color:var(--fg-primary);border-radius:8px}.git-commit-btn,.git-sync-btn{border:1px solid var(--border-color);background:var(--bg-inset);padding:8px 10px;font-size:calc(10px * var(--ui-scale));font-weight:900;letter-spacing:.12em;text-transform:uppercase;display:inline-flex;align-items:center;gap:6px;border-radius:8px}.git-commit-btn:disabled{opacity:.4;cursor:not-allowed}.git-diff-view{flex:1;display:flex;flex-direction:column;background:linear-gradient(180deg,var(--bg-panel) 0%,var(--bg-inset) 100%)}.git-diff-content{flex:1;overflow:auto;padding:12px}.git-diff-legend{display:flex;align-items:center;gap:10px;font-size:calc(9px * var(--ui-scale));color:var(--fg-muted)}.git-diff-legend-item{display:flex;align-items:center;gap:4px}.git-legend-icon-del,.git-legend-icon-add{width:10px;height:10px;border:1px solid var(--border-color)}.git-legend-icon-del{background:#f003}.git-legend-icon-add{background:#0f03}.git-diff-container{display:flex;border:1px solid var(--border-color);background:var(--bg-inset)}.git-diff-gutter{padding:10px 6px;background:var(--bg-panel);border-right:1px solid var(--border-color);font-family:var(--font-mono);font-size:calc(10px * var(--ui-scale));color:var(--fg-muted)}.git-diff-code{flex:1;padding:10px;font-family:var(--font-mono);font-size:calc(11px * var(--ui-scale));display:flex;flex-direction:column;gap:6px}.git-diff-meta{font-weight:800;text-transform:uppercase;letter-spacing:.1em}.diff-removed{background:#ff000014;border-left:3px solid var(--status-error);padding:6px 8px}.diff-added{background:#00ff0014;border-left:3px solid var(--status-ok);padding:6px 8px}.git-diff-placeholder{font-size:calc(11px * var(--ui-scale));text-transform:uppercase;color:var(--fg-muted);display:flex;align-items:center;justify-content:center;height:100%}.workspace-idle-state{height:100%;display:flex;align-items:center;justify-content:center;background:var(--bg-panel)}.idle-indicator{display:flex;flex-direction:column;align-items:center;text-align:center}.idle-text-stack{display:flex;flex-direction:column;gap:4px}.idle-primary{font-family:var(--font-head);font-weight:950;font-size:calc(24px * var(--ui-scale));letter-spacing:-.05em;text-transform:uppercase}.idle-secondary{font-family:var(--font-mono);font-size:calc(9px * var(--ui-scale));color:var(--fg-muted);letter-spacing:.2em}.idle-action-btn{margin-top:24px;padding:8px 16px;border:var(--border-width) solid var(--border-color);background:var(--bg-inset);font-size:calc(10px * var(--ui-scale));font-weight:900}.idle-action-btn:hover{background:var(--accent);color:#fff}@media(max-width:1200px){:root{--rail-width: 42px;--sidebar-width: 190px;--panel-header-height: 30px;--app-gap: 3px;--editor-padding: 18px}}@media(max-width:1024px){:root{--rail-width: 40px;--sidebar-width: 180px;--header-height: 34px;--status-height: 22px;--panel-header-height: 28px;--rail-btn-size: 28px;--editor-padding: 14px}.header-right{min-width:170px}}@media(max-width:640px){:root{--rail-width: 100%;--sidebar-width: 100%;--header-height: 44px;--status-height: 24px;--panel-header-height: 28px;--rail-btn-size: 32px;--app-gap: 2px;--editor-padding: 12px;--rail-height: 40px}.chassis-scaler{grid-template-areas:"top" "main" "rail" "foot";grid-template-columns:1fr;grid-template-rows:var(--header-height) minmax(0,1fr) var(--rail-height) var(--status-height)}.action-rail{flex-direction:row;border-right:0;border-top:var(--border-width) solid var(--border-color);justify-content:space-between;padding:2px 4px}.rail-group{flex-direction:row;width:auto}.rail-spacer{flex:1}.app-header{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"brand controls" "tabs tabs";align-items:center;height:auto;padding:0;gap:6px;border-bottom:0}.header-left,.header-right{min-width:0;width:auto;justify-content:space-between;padding:6px}.header-left{grid-area:brand}.header-center{grid-area:tabs;width:100%;border-top:var(--border-width) solid var(--border-color);border-bottom:var(--border-width) solid var(--border-color);padding:4px 6px;background:var(--bg-inset)}.header-right{grid-area:controls;margin-left:auto;border-left:0;border-top:0;padding:0;margin-top:0}.header-controls{justify-content:flex-end}.header-brand-title{font-size:calc(11px * var(--ui-scale))}.header-brand-subtitle{font-size:calc(8px * var(--ui-scale))}.header-btn{width:28px;height:28px}.workspace-manifold,.git-workspace{flex-direction:column-reverse}.app-grid.mode-work,.app-grid.mode-git{display:flex;flex-direction:column-reverse}.workspace-sidebar,.git-sidebar{width:100%;min-width:0;height:100%;border-right:0;border-bottom:var(--border-width) solid var(--border-color)}.workspace-sidebar.is-collapsed{height:0;min-height:0;border-bottom-width:0}.git-sidebar{height:100%}.workspace-sidebar:not(.is-collapsed)+.workspace-stage{display:none}.git-diff-view{display:none}.git-diff-view{border-left:0;border-top:var(--border-width) solid var(--border-color)}.status-bar{flex-wrap:wrap;height:auto;padding:4px 6px}.status-left,.status-right{width:100%;justify-content:space-between}}@media(max-width:640px)and (min-aspect-ratio:4/3){:root{--rail-width: 44px;--rail-height: auto}.chassis-scaler{grid-template-areas:"rail top" "rail main" "rail foot";grid-template-columns:var(--rail-width) 1fr;grid-template-rows:var(--header-height) minmax(0,1fr) var(--status-height)}.action-rail{flex-direction:column;border-top:0;border-right:var(--border-width) solid var(--border-color);justify-content:flex-start;padding:4px 3px}.rail-group{flex-direction:column;width:100%}.app-grid.mode-work,.app-grid.mode-git{display:contents;flex-direction:initial}.workspace-manifold,.git-workspace{flex-direction:row}}@media(min-width:1600px){:root{--sidebar-width: 230px;--rail-width: 48px;--header-height: 36px;--status-height: 22px;--panel-header-height: 34px;--rail-btn-size: 34px;--app-gap: 5px;--editor-padding: 22px}}@media(min-width:1920px){:root{--sidebar-width: 260px;--rail-width: 52px;--header-height: 44px;--status-height: 28px;--panel-header-height: 36px;--rail-btn-size: 36px;--app-gap: 6px;--editor-padding: 28px}}.project-selector-stage{width:100%;height:100%;position:relative;background:var(--bg-app);display:flex;align-items:center;justify-content:center;overflow:hidden;grid-column:1 / -1;grid-row:1 / -1}.project-selector-chassis{width:1000px;max-width:90%;height:80vh;background:var(--bg-panel);border:var(--border-width) solid var(--border-color);box-shadow:16px 16px #000c,inset 0 0 0 1px color-mix(in srgb,var(--border-color) 55%,transparent);display:flex;flex-direction:column;z-index:10;position:relative}.project-selector-top{position:relative;display:flex;justify-content:space-between;align-items:center;padding:24px 32px;background:var(--bg-inset);border-bottom:var(--border-width) solid var(--border-color)}.project-title{font-family:var(--font-head);font-size:calc(1.6rem * var(--ui-scale));font-weight:950;line-height:1;margin:0;text-transform:uppercase;letter-spacing:-.02em}.project-subtitle{font-family:var(--font-mono);font-size:calc(9px * var(--ui-scale));color:var(--fg-muted);text-transform:uppercase;margin:6px 0 0;letter-spacing:.1em}.project-selector-body{flex:1;background:var(--bg-app);overflow-y:auto;display:flex;flex-direction:column}.project-selector-top:after{content:"";position:absolute;top:8px;right:8px;bottom:8px;left:8px;border:1px solid color-mix(in srgb,var(--border-color) 45%,transparent);pointer-events:none}.project-actions{border:var(--border-width) solid var(--border-color);background:var(--bg-panel);padding:6px;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--border-color) 50%,transparent)}.project-header-info{min-width:0}.project-create-modal{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000008c;display:flex;align-items:center;justify-content:center;padding:24px;z-index:2000}.project-delete-modal{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000094;display:flex;align-items:center;justify-content:center;padding:24px;z-index:2050}.theme-selector-modal{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;padding:24px;z-index:2100}.project-create-modal-surface{width:min(560px,92vw);background:var(--bg-panel);border:var(--border-width) solid var(--border-color);box-shadow:18px 18px #000000c7,inset 0 0 0 1px color-mix(in srgb,var(--border-color) 60%,transparent);display:flex;flex-direction:column}.project-delete-modal-surface{width:min(560px,94vw);background:var(--bg-panel);border:var(--border-width) solid var(--border-color);box-shadow:20px 20px #000000b8,inset 0 0 0 1px color-mix(in srgb,var(--border-color) 55%,transparent);display:flex;flex-direction:column}.theme-selector-modal-surface{width:min(720px,94vw);background:var(--bg-panel);border:var(--border-width) solid var(--border-color);box-shadow:20px 20px #000000b8,inset 0 0 0 1px color-mix(in srgb,var(--border-color) 55%,transparent);display:flex;flex-direction:column;max-height:86vh}.project-create-modal-header,.project-delete-modal-header,.theme-selector-modal-header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px;border-top:var(--border-width) solid var(--border-color);background:linear-gradient(180deg,var(--bg-inset),color-mix(in srgb,var(--bg-inset) 72%,var(--bg-panel)));border-bottom:var(--border-width) solid var(--border-color)}.project-create-title,.project-delete-title,.theme-selector-title{margin:0;font-family:var(--font-head);font-size:calc(1rem * var(--ui-scale));text-transform:uppercase;letter-spacing:.08em}.project-create-close,.project-delete-close,.theme-selector-close{border:var(--border-width) solid var(--border-color);background:var(--bg-panel);color:var(--fg-primary);padding:8px 12px;font-size:calc(11px * var(--ui-scale));font-weight:800;text-transform:uppercase;letter-spacing:.08em}.project-delete-modal-body{padding:24px;display:grid;grid-template-columns:auto 1fr;align-items:start;gap:16px 18px;border-bottom:var(--border-width) solid var(--border-color)}.project-delete-message{margin:0;grid-column:2;font-family:var(--font-head);font-size:calc(1rem * var(--ui-scale));letter-spacing:.06em;text-transform:uppercase;color:var(--fg-primary)}.project-delete-message span{color:var(--accent)}.project-delete-warning{margin:0;grid-column:2;font-family:var(--font-mono);font-size:calc(10px * var(--ui-scale));text-transform:uppercase;color:var(--fg-muted)}.project-delete-meta{margin:0;grid-column:2;font-family:var(--font-ui);font-size:calc(11px * var(--ui-scale));line-height:1.45;color:var(--fg-secondary)}.project-delete-icon-wrap{width:42px;height:42px;display:inline-flex;align-items:center;justify-content:center;border:var(--border-width) solid var(--status-error);color:var(--status-error);background:color-mix(in srgb,var(--status-error) 12%,var(--bg-panel))}.project-delete-actions{display:flex;justify-content:flex-end;gap:12px;padding:20px 24px;border-top:var(--border-width) solid var(--border-color);background:var(--bg-inset)}.project-delete-confirm{border-color:var(--status-error);color:var(--status-error)}.project-delete-kicker{margin:0;grid-column:2;font-family:var(--font-mono);font-size:calc(10px * var(--ui-scale));letter-spacing:.14em;color:var(--status-error);text-transform:uppercase}.project-delete-modal-surface{overflow:hidden}.project-delete-actions .project-btn-cancel,.project-delete-actions .project-btn-submit{min-width:160px}.project-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:calc(var(--app-gap) * 4);padding:calc(var(--app-gap) * 4);background:var(--bg-inset);border:var(--border-width) solid var(--border-color);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--border-color) 50%,transparent);flex:1;align-content:start}.project-card{background:var(--bg-panel);height:220px;display:flex;flex-direction:column;cursor:pointer;transition:all .1s cubic-bezier(.17,.67,.83,.67);position:relative;border:var(--border-width) solid var(--border-color)}.project-card:hover{background:var(--bg-inset)}.project-card.is-active{box-shadow:inset 0 0 0 4px var(--accent)}.project-card-main{flex:1;padding:24px;display:flex;flex-direction:column}.project-card-icon{color:var(--accent)}.project-card-title{font-family:var(--font-head);font-size:calc(1.25rem * var(--ui-scale));font-weight:900;margin:0;text-transform:uppercase;letter-spacing:-.02em;color:var(--fg-primary)}.project-card-meta{font-family:var(--font-mono);font-size:calc(10px * var(--ui-scale));color:var(--fg-muted);display:flex;align-items:center;gap:8px;text-transform:uppercase;font-weight:700}.project-card-footer{padding:16px 24px;border-top:var(--border-width) solid var(--border-color);background:var(--bg-inset);display:flex;justify-content:space-between;align-items:center;font-family:var(--font-mono);font-size:calc(9px * var(--ui-scale));color:var(--fg-muted);text-transform:uppercase;font-weight:800}.project-btn-new{background:var(--accent);color:#fff;padding:0 24px;height:44px;font-family:var(--font-head);font-size:calc(12px * var(--ui-scale));font-weight:900;border:var(--border-width) solid var(--border-color);display:flex;align-items:center;gap:12px;transition:all .05s;text-transform:uppercase}.project-btn-new:hover{transform:translate(-2px,-2px);box-shadow:4px 4px 0 var(--border-color)}.project-btn-new:active{transform:translate(0);box-shadow:none}.theme-toggle-btn{width:44px;height:44px;display:flex;align-items:center;justify-content:center;border:var(--border-width) solid var(--border-color);background:linear-gradient(145deg,var(--bg-panel),var(--bg-inset));color:var(--fg-primary);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--border-color) 55%,transparent)}.theme-toggle-btn:hover{border-color:var(--accent);color:var(--accent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 45%,transparent),3px 3px color-mix(in srgb,var(--border-color) 75%,transparent)}.theme-selector-modal-body{padding:24px;display:flex;flex-direction:column;gap:20px;overflow-y:auto;overflow-x:hidden}.theme-selector-meta{display:flex;flex-wrap:wrap;align-items:center;gap:10px;font-size:calc(10px * var(--ui-scale));text-transform:uppercase;letter-spacing:.08em}.theme-meta-label{color:var(--fg-muted);font-weight:800}.theme-meta-value{font-family:var(--font-head);font-size:calc(12px * var(--ui-scale));font-weight:900}.theme-meta-count{padding:4px 8px;border:var(--border-width) solid var(--border-color);background:var(--bg-inset);font-family:var(--font-mono);font-size:calc(10px * var(--ui-scale));color:var(--fg-muted)}.theme-modal-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:var(--app-gap)}.theme-modal-button{display:flex;flex-direction:column;gap:8px;padding:20px;background:var(--bg-panel);text-align:left;border:var(--border-width) solid var(--border-color);transition:background .1s ease}.theme-modal-button:hover{background:var(--bg-inset)}.theme-modal-button.is-active{background:var(--bg-inset);box-shadow:inset 0 0 0 2px var(--accent)}.theme-modal-button-top{display:flex;align-items:center;justify-content:space-between;gap:12px}.theme-name{font-family:var(--font-head);font-size:calc(12px * var(--ui-scale));text-transform:uppercase;letter-spacing:.06em}.theme-desc{font-family:var(--font-mono);font-size:calc(10px * var(--ui-scale));color:var(--fg-muted);text-transform:uppercase;letter-spacing:.05em}.project-create-form{background:transparent;border:none;padding:24px}.project-input{width:100%;padding:16px;background:var(--bg-inset);border:var(--border-width) solid var(--border-color);color:var(--fg-primary);font-family:var(--font-mono);font-weight:800;font-size:calc(16px * var(--ui-scale));text-transform:uppercase}.project-input-group{display:flex;flex-direction:column;gap:12px}.project-input-label{font-family:var(--font-mono);font-size:calc(10px * var(--ui-scale));text-transform:uppercase;letter-spacing:.08em;color:var(--fg-muted);font-weight:800}.project-theme-trigger{display:flex;flex-direction:column;align-items:flex-start;gap:6px;padding:14px 16px;background:var(--bg-inset);border:var(--border-width) solid var(--border-color);text-transform:uppercase}.project-theme-trigger-label{font-family:var(--font-head);font-size:calc(12px * var(--ui-scale));letter-spacing:.08em;color:var(--fg-primary)}.project-theme-trigger-meta{font-family:var(--font-mono);font-size:calc(9px * var(--ui-scale));letter-spacing:.12em;color:var(--fg-muted)}.project-form-actions{margin-top:24px;display:flex;gap:12px;align-items:stretch}.project-btn-submit{flex:1;background:var(--accent);color:#fff;padding:16px;font-family:var(--font-head);font-size:calc(12px * var(--ui-scale));font-weight:900;border:var(--border-width) solid var(--border-color);text-transform:uppercase;cursor:pointer;transition:all .1s ease}.project-btn-submit:hover{background:var(--fg-primary);color:var(--bg-panel)}.project-btn-submit:active{transform:translate(2px,2px)}.project-btn-cancel{flex:1;padding:16px;background:var(--bg-panel);color:var(--fg-primary);border:var(--border-width) solid var(--border-color);font-family:var(--font-head);font-size:calc(12px * var(--ui-scale));font-weight:900;text-transform:uppercase;cursor:pointer;transition:all .1s ease}.project-btn-cancel:hover{background:var(--fg-primary);color:var(--bg-panel)}.project-btn-cancel:active{transform:translate(2px,2px)}@media(max-width:1200px){.project-selector-chassis{width:920px}}@media(max-width:900px){.project-selector-chassis{width:100%;max-width:92%;height:86vh}.project-selector-top{flex-direction:column;align-items:flex-start;gap:16px}.project-grid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}.theme-popover{width:320px}}@media(max-width:640px){.project-selector-chassis{max-width:100%;height:100%;box-shadow:none}.project-create-modal,.theme-selector-modal{padding:0}.project-create-modal-surface,.theme-selector-modal-surface{width:100%;height:100%;max-height:none;box-shadow:none;border-width:0}.project-selector-top{padding:16px}.project-title{font-size:calc(1.2rem * var(--ui-scale))}.project-grid{grid-template-columns:1fr}.project-card{height:auto;min-height:200px}.project-btn-new{width:100%;justify-content:center}.theme-popover{position:fixed;top:12px;right:12px;bottom:12px;left:12px;width:auto;margin-top:0}}@media(min-width:1920px){.project-selector-chassis{width:1200px;height:78vh}.project-grid{grid-template-columns:repeat(auto-fill,minmax(340px,1fr))}}@media(max-width:640px){.project-delete-modal{padding:0}.project-delete-modal-surface{width:100%;height:100%;border-width:0;box-shadow:none}.project-delete-modal-body{grid-template-columns:1fr}.project-delete-message,.project-delete-warning,.project-delete-meta{grid-column:1}}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#000000d9;display:flex;align-items:center;justify-content:center;z-index:2000;padding:24px;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.modal-base{background:var(--bg-panel);border:var(--border-width) solid var(--border-color);box-shadow:12px 12px #0009;display:flex;flex-direction:column;max-width:100%;position:relative;overflow:hidden}.settings-modal{width:min(1240px,98vw);height:min(900px,96vh);background:linear-gradient(135deg,rgba(255,255,255,.02),transparent 55%);border-width:calc(var(--border-width) + 1px);box-shadow:18px 18px #000000a6}.settings-modal:before{content:"";position:absolute;top:10px;right:10px;bottom:10px;left:10px;border:1px dashed color-mix(in srgb,var(--border-color) 70%,transparent);pointer-events:none;opacity:.6}.modal-header{height:56px;display:flex;align-items:center;justify-content:space-between;padding:0 20px;border-bottom:var(--border-width) solid var(--border-color);background-color:var(--bg-panel);flex-shrink:0}.modal-title{font-family:var(--font-head);font-weight:900;text-transform:uppercase;font-size:calc(15px * var(--ui-scale));letter-spacing:.1em;color:var(--fg-primary);display:flex;align-items:center;gap:12px}.modal-close{width:36px;height:36px;display:flex;align-items:center;justify-content:center;border:var(--border-width) solid var(--border-color);background:var(--bg-inset);cursor:pointer;transition:all .1s}.modal-close:hover{background:var(--status-error);color:#fff;transform:translate(2px,-2px);box-shadow:-2px 2px 0 var(--border-color)}.settings-layout{flex:1;display:flex;overflow:hidden;background:var(--bg-app);gap:var(--app-gap);padding:var(--app-gap)}.settings-sidebar{width:204px;background:linear-gradient(180deg,var(--bg-panel),var(--bg-inset));border:var(--border-width) solid var(--border-color);display:flex;flex-direction:column;flex-shrink:0;position:relative;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--border-color) 65%,transparent)}.settings-sidebar-btn{width:100%;text-align:left;padding:16px 20px;display:flex;align-items:center;gap:14px;font-size:calc(12px * var(--ui-scale));font-weight:800;text-transform:uppercase;color:var(--fg-muted);border-bottom:var(--border-width) solid var(--border-color);transition:all .1s;background:transparent;position:relative}.settings-sidebar-icon{flex-shrink:0}.settings-sidebar-label{display:inline-flex;align-items:center;white-space:nowrap}.settings-sidebar-btn:hover{background:var(--bg-inset);color:var(--fg-primary)}.settings-sidebar-btn.active{background:var(--accent);color:#fff;border-bottom-color:var(--border-color);box-shadow:inset 4px 0 0 var(--fg-primary)}.settings-content{flex:1;background:linear-gradient(135deg,var(--bg-panel),var(--bg-inset));border:var(--border-width) solid var(--border-color);padding:24px;overflow:hidden;display:flex;flex-direction:column;gap:18px;position:relative;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--border-color) 70%,transparent)}.settings-content:after{content:"";position:absolute;top:12px;right:12px;bottom:12px;left:12px;border:1px solid color-mix(in srgb,var(--border-color) 45%,transparent);pointer-events:none}.settings-content-header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 18px;background:var(--bg-panel);border:var(--border-width) solid var(--border-color);text-transform:uppercase}.settings-content-title{display:flex;flex-direction:column;gap:6px}.settings-content-kicker{font-family:var(--font-mono);font-size:calc(10px * var(--ui-scale));letter-spacing:.2em;color:var(--fg-muted)}.settings-content-name{font-family:var(--font-head);font-size:calc(14px * var(--ui-scale));font-weight:900;letter-spacing:.08em;color:var(--fg-primary)}.settings-content-meta{display:flex;flex-direction:column;align-items:flex-end;gap:6px;padding:10px 14px;background:var(--bg-inset);border:var(--border-width) solid var(--border-color);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--border-color) 60%,transparent)}.settings-content-meta-label{font-size:calc(9px * var(--ui-scale));letter-spacing:.2em;color:var(--fg-muted);font-weight:900}.settings-content-meta-value{font-family:var(--font-head);font-size:calc(12px * var(--ui-scale));font-weight:900;color:var(--fg-primary)}.settings-content-frame{flex:1;overflow-y:auto;overflow-x:hidden;padding:6px 4px 4px}.settings-pane{display:flex;flex-direction:column;gap:20px}.settings-section-title{display:none;font-family:var(--font-head);font-size:calc(13px * var(--ui-scale));text-transform:uppercase;margin-bottom:8px;padding-bottom:12px;border-bottom:var(--border-width) solid var(--border-color);color:var(--fg-primary);letter-spacing:.05em}.settings-grid-2{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--app-gap);background:var(--bg-app);padding:12px;border:var(--border-width) solid var(--border-color)}.settings-theme-btn{background:var(--bg-panel);border:var(--border-width) solid var(--border-color);padding:20px;text-align:left;cursor:pointer;display:flex;flex-direction:column;gap:10px;transition:transform .1s,box-shadow .1s;position:relative}.settings-theme-btn:hover{background:var(--bg-inset);transform:translateY(-2px);box-shadow:4px 4px 0 var(--border-color)}.settings-theme-btn.active{border-color:var(--accent);box-shadow:inset 0 0 0 2px var(--accent)}.settings-theme-header{display:flex;align-items:center;gap:12px}.settings-theme-name{font-family:var(--font-head);font-weight:900;text-transform:uppercase;font-size:calc(12px * var(--ui-scale))}.settings-theme-desc{font-size:calc(11px * var(--ui-scale));color:var(--fg-muted);line-height:1.5;font-family:var(--font-ui)}.settings-theme-controls{border:var(--border-width) solid var(--border-color);background:linear-gradient(90deg,var(--bg-panel),var(--bg-inset));padding:16px 18px;display:flex;justify-content:space-between;align-items:center;gap:16px;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--border-color) 55%,transparent)}.settings-theme-meta{display:flex;flex-wrap:wrap;align-items:center;gap:12px;font-size:calc(10px * var(--ui-scale));text-transform:uppercase;letter-spacing:.08em}.settings-theme-label{font-weight:800;color:var(--fg-muted)}.settings-theme-value{font-family:var(--font-head);font-size:calc(12px * var(--ui-scale));font-weight:900;color:var(--fg-primary)}.settings-theme-count{padding:4px 8px;border:var(--border-width) solid var(--border-color);background:var(--bg-inset);font-family:var(--font-mono);font-size:calc(10px * var(--ui-scale));color:var(--fg-muted)}.settings-theme-actions{display:flex;gap:12px;flex-shrink:0}.settings-theme-action-btn{border:var(--border-width) solid var(--border-color);background:var(--bg-inset);color:var(--fg-primary);padding:10px 14px;font-size:calc(10px * var(--ui-scale));font-weight:800;text-transform:uppercase;letter-spacing:.08em;box-shadow:3px 3px 0 var(--border-color);transition:transform .1s,box-shadow .1s}.settings-theme-action-btn:hover{transform:translate(2px,-2px);box-shadow:1px 1px 0 var(--border-color)}.settings-theme-action-btn-primary{background:var(--accent);color:#fff;border-color:color-mix(in srgb,var(--border-color) 70%,var(--accent))}.settings-card{border:var(--border-width) solid var(--border-color);background:var(--bg-panel);padding:18px;position:relative;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--border-color) 50%,transparent)}.settings-card:after{content:"";position:absolute;top:10px;right:10px;width:8px;height:8px;border:1px solid var(--border-color);background:var(--bg-inset)}.settings-card-stack{display:flex;flex-direction:column;gap:16px}.settings-card-highlight{background:linear-gradient(140deg,var(--bg-inset),var(--bg-panel))}.settings-card-muted{background:color-mix(in srgb,var(--bg-panel) 70%,var(--bg-inset))}.settings-card-list{padding:0}.settings-keymap-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;padding:16px}.settings-keymap-item{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px;border:var(--border-width) solid var(--border-color);background:var(--bg-panel);padding:12px;text-transform:uppercase;font-size:calc(11px * var(--ui-scale));font-weight:700;letter-spacing:.04em}.settings-keymap-label{min-width:0;line-height:1.3;overflow-wrap:anywhere}.settings-keymap-key{justify-self:end;display:inline-flex;align-items:center;white-space:nowrap;overflow-wrap:normal;padding:4px 8px;border:var(--border-width) solid var(--border-color);background:var(--bg-inset)}.settings-session-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.settings-session-item{padding:12px;border:var(--border-width) solid var(--border-color);background:var(--bg-panel);display:flex;flex-direction:column;gap:6px;text-transform:uppercase}.settings-session-label{font-size:calc(9px * var(--ui-scale));letter-spacing:.2em;color:var(--fg-muted);font-weight:800}.settings-session-value{font-size:calc(11px * var(--ui-scale));font-weight:800;color:var(--fg-primary)}.settings-action-row{display:flex;gap:12px;background:var(--bg-inset);border:var(--border-width) solid var(--border-color);padding:12px}@media(max-width:820px){.settings-keymap-grid{grid-template-columns:1fr}}.cmd-backdrop{position:fixed;top:0;left:0;right:0;bottom:0;background:#000c;z-index:3000;display:flex;justify-content:center;padding-top:15vh}.cmd-palette{width:680px;max-width:95%;background:var(--bg-app);border:var(--border-width) solid var(--border-color);box-shadow:16px 16px #000000b3;display:flex;flex-direction:column;max-height:55vh;gap:var(--app-gap);padding:var(--app-gap)}.cmd-header{background:var(--bg-panel);border:var(--border-width) solid var(--border-color);display:flex;align-items:center;padding:0 20px;height:64px;gap:16px;flex-shrink:0}.cmd-search-icon{color:var(--accent)}.cmd-input{flex:1;background:none;border:none;font-size:calc(18px * var(--ui-scale));font-family:var(--font-mono);color:var(--fg-primary);outline:none;font-weight:800;letter-spacing:-.02em}.cmd-badge{background:var(--bg-inset);border:1px solid var(--border-color);padding:4px 8px;font-family:var(--font-mono);font-size:calc(10px * var(--ui-scale));font-weight:900;color:var(--fg-muted)}.cmd-list{flex:1;overflow-y:auto;background:var(--bg-panel);border:var(--border-width) solid var(--border-color);display:flex;flex-direction:column}.cmd-item{padding:14px 20px;display:flex;align-items:center;gap:16px;cursor:pointer;border-bottom:1px solid var(--border-color);font-family:var(--font-mono);font-size:calc(13px * var(--ui-scale));font-weight:700;text-transform:uppercase;transition:all .05s}.cmd-item:hover{background:var(--bg-inset)}.cmd-item.active{background:var(--accent);color:#fff;transform:translate(4px)}.cmd-item-text{flex:1}.cmd-item-type{font-size:calc(10px * var(--ui-scale));background:var(--bg-inset);color:var(--fg-muted);padding:2px 8px;border:1px solid var(--border-color);font-weight:900}.cmd-item.active .cmd-item-type{background:#fff3;color:#fff;border-color:#fff}.cmd-empty{padding:40px;text-align:center;font-family:var(--font-head);font-size:calc(12px * var(--ui-scale));color:var(--fg-muted);text-transform:uppercase}.input-modal{width:480px}.modal-content{padding:32px;background:var(--bg-panel)}.modal-input{width:100%;padding:16px;background:var(--bg-inset);border:var(--border-width) solid var(--border-color);color:var(--fg-primary);font-family:var(--font-mono);font-weight:700;font-size:calc(15px * var(--ui-scale));outline:none}.modal-input:focus{border-color:var(--accent);background:var(--bg-panel)}.modal-footer{padding:16px 20px;background:var(--bg-inset);border-top:var(--border-width) solid var(--border-color);display:flex;justify-content:flex-end;gap:12px;flex-shrink:0}.modal-btn{padding:10px 24px;border:var(--border-width) solid var(--border-color);font-family:var(--font-head);font-size:calc(12px * var(--ui-scale));text-transform:uppercase;cursor:pointer;font-weight:900;background:var(--bg-panel);color:var(--fg-primary);transition:all .1s}.modal-btn:hover{background:var(--fg-primary);color:var(--bg-panel)}.modal-btn-primary{background:var(--accent);color:#fff;border-color:var(--border-color)}.modal-btn-primary:hover{background:var(--fg-primary);color:#fff}.modal-btn:active{transform:translate(2px,2px)}.modal-btn:disabled{opacity:.5;cursor:not-allowed;transform:none}.modal-btn:disabled:hover{background:var(--bg-panel);color:var(--fg-primary)}.pwa-status-grid{display:grid;gap:10px;margin-bottom:16px}.pwa-status-row{display:flex;justify-content:space-between;align-items:center;padding:8px 10px;border:var(--border-width) solid var(--border-color);background:var(--bg-panel);font-size:10px;font-weight:700;letter-spacing:.12em}.pwa-status-label{color:var(--fg-muted)}.pwa-status-value{color:var(--fg-primary)}.pwa-status-value.is-ready{color:var(--accent)}.pwa-toggle{display:inline-flex;align-items:center;gap:10px;margin-top:12px;font-size:10px;font-weight:800;letter-spacing:.2em;color:var(--fg-primary);text-transform:uppercase;position:relative}.pwa-toggle input{position:absolute;opacity:0;pointer-events:none}.pwa-toggle-indicator{width:36px;height:18px;border:var(--border-width) solid var(--border-color);background:var(--bg-inset);position:relative;display:inline-flex;align-items:center;padding:2px}.pwa-toggle-indicator:after{content:"";width:12px;height:12px;background:var(--fg-muted);border:var(--border-width) solid var(--border-color);transition:transform .12s ease}.pwa-toggle input:checked+.pwa-toggle-indicator:after{transform:translate(16px);background:var(--accent)}@media(max-width:900px){.modal-overlay{padding:16px}.settings-modal{width:min(95vw,840px);height:min(90vh,700px);box-shadow:12px 12px #00000080}.settings-content{padding:18px}.settings-sidebar{width:76px}.settings-sidebar-btn{justify-content:center;padding:14px 10px;gap:0}.settings-sidebar-label{display:none}}@media(max-width:640px){.modal-overlay{padding:0}.modal-base{width:100%;height:100%;border-width:0;box-shadow:none}.modal-header{height:auto;padding:12px 16px;gap:12px}.modal-title{font-size:calc(12px * var(--ui-scale));letter-spacing:.08em}.modal-close{width:32px;height:32px}.settings-modal{width:100%;height:100%;box-shadow:none}.modal-content{padding:20px 16px;flex:1;overflow-y:auto}.modal-footer{padding:12px 16px}.settings-layout{flex-direction:column}.settings-sidebar{width:100%;flex-direction:row;overflow-x:hidden}.settings-sidebar-btn{flex:1 1 0;justify-content:center;padding:10px 6px;font-size:calc(10px * var(--ui-scale));border-bottom:0;border-right:var(--border-width) solid var(--border-color);gap:0;min-width:0}.settings-sidebar-label{display:none}.settings-sidebar-icon{width:14px;height:14px}.settings-sidebar-btn:last-child{border-right:0}.settings-sidebar-btn:hover{transform:none}.settings-content{padding:14px}.settings-grid-2,.settings-session-grid{grid-template-columns:1fr}.cmd-backdrop{padding-top:0}.cmd-palette{width:100%;height:100%;max-height:none;border-width:0;box-shadow:none}.cmd-header{height:auto;padding:12px 16px}}
@@ -0,0 +1,7 @@
1
+ import { A as t, m as a } from "./esm-entry-4cxl0H9w.js";
2
+ import "react";
3
+ import "react-dom/client";
4
+ export {
5
+ t as App,
6
+ a as mountMdWrkSpace
7
+ };
package/dist/sw.js ADDED
@@ -0,0 +1,334 @@
1
+ const CACHE_PREFIX = 'lattice-architect-';
2
+ const META_CACHE = 'lattice-architect-meta';
3
+ const META_KEY = '/pwa-meta';
4
+ const CURRENT_VERSION = new URL(self.location.href).searchParams.get('version') || 'dev';
5
+ const CURRENT_CACHE = `${CACHE_PREFIX}${CURRENT_VERSION}`;
6
+ const CORE_ASSETS = [
7
+ '/',
8
+ '/index.html',
9
+ '/manifest.webmanifest',
10
+ '/favicon.svg',
11
+ '/icons/icon-192.svg',
12
+ '/icons/icon-512.svg',
13
+ ];
14
+ const EXTERNAL_ASSETS = [
15
+ 'https://cdn.tailwindcss.com',
16
+ 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css',
17
+ 'https://esm.sh/react@19.0.0',
18
+ 'https://esm.sh/react-dom@19.0.0',
19
+ 'https://esm.sh/react-dom@19.0.0/client',
20
+ 'https://esm.sh/react@19.0.0/jsx-runtime',
21
+ 'https://esm.sh/lucide-react@0.475.0',
22
+ 'https://esm.sh/react-markdown@9.0.3?bundle',
23
+ 'https://esm.sh/remark-gfm@4.0.1?bundle',
24
+ 'https://esm.sh/remark-supersub@1.0.0?bundle',
25
+ 'https://esm.sh/react-syntax-highlighter@15.6.1',
26
+ 'https://esm.sh/react-syntax-highlighter@15.6.1/dist/esm/styles/prism',
27
+ 'https://esm.sh/jszip@3.10.1',
28
+ 'https://esm.sh/path@^0.12.7',
29
+ 'https://esm.sh/url@^0.11.4',
30
+ 'https://esm.sh/vite@^7.3.1',
31
+ 'https://esm.sh/@vitejs/plugin-react@^5.1.2'
32
+ ];
33
+
34
+ let metaState = {
35
+ lastKnownGoodVersion: null,
36
+ failedVersions: []
37
+ };
38
+ let failureTimer = null;
39
+
40
+ const readMeta = async () => {
41
+ const cache = await caches.open(META_CACHE);
42
+ const response = await cache.match(META_KEY);
43
+ if (!response) {
44
+ return metaState;
45
+ }
46
+ try {
47
+ const data = await response.json();
48
+ metaState = {
49
+ lastKnownGoodVersion: typeof data.lastKnownGoodVersion === 'string' ? data.lastKnownGoodVersion : null,
50
+ failedVersions: Array.isArray(data.failedVersions)
51
+ ? data.failedVersions.filter((version) => typeof version === 'string')
52
+ : []
53
+ };
54
+ } catch {
55
+ metaState = { lastKnownGoodVersion: null, failedVersions: [] };
56
+ }
57
+ return metaState;
58
+ };
59
+
60
+ const writeMeta = async () => {
61
+ const cache = await caches.open(META_CACHE);
62
+ const response = new Response(JSON.stringify(metaState), {
63
+ headers: { 'Content-Type': 'application/json' }
64
+ });
65
+ await cache.put(META_KEY, response);
66
+ };
67
+
68
+ const isFailedVersion = (version) => metaState.failedVersions.includes(version);
69
+
70
+ const getCacheNameForVersion = (version) => `${CACHE_PREFIX}${version}`;
71
+
72
+ const isAppCache = (name) => name.startsWith(CACHE_PREFIX);
73
+
74
+ const findFallbackResponse = async (request, cacheNames) => {
75
+ for (const cacheName of cacheNames) {
76
+ const cache = await caches.open(cacheName);
77
+ const cachedResponse = await cache.match(request);
78
+ if (cachedResponse) {
79
+ return cachedResponse;
80
+ }
81
+ }
82
+ return undefined;
83
+ };
84
+
85
+ const getFallbackCacheNames = async (activeCacheName) => {
86
+ const cacheNames = await caches.keys();
87
+ const appCacheNames = cacheNames.filter(isAppCache);
88
+ const prioritized = [];
89
+
90
+ if (activeCacheName && appCacheNames.includes(activeCacheName)) {
91
+ prioritized.push(activeCacheName);
92
+ }
93
+
94
+ if (CURRENT_CACHE !== activeCacheName && appCacheNames.includes(CURRENT_CACHE)) {
95
+ prioritized.push(CURRENT_CACHE);
96
+ }
97
+
98
+ if (metaState.lastKnownGoodVersion) {
99
+ const lastKnownGoodCache = getCacheNameForVersion(metaState.lastKnownGoodVersion);
100
+ if (!prioritized.includes(lastKnownGoodCache) && appCacheNames.includes(lastKnownGoodCache)) {
101
+ prioritized.push(lastKnownGoodCache);
102
+ }
103
+ }
104
+
105
+ appCacheNames.forEach((cacheName) => {
106
+ if (!prioritized.includes(cacheName)) {
107
+ prioritized.push(cacheName);
108
+ }
109
+ });
110
+
111
+ return prioritized;
112
+ };
113
+
114
+ const getCachedAppShell = async (activeCacheName) => {
115
+ const fallbackCacheNames = await getFallbackCacheNames(activeCacheName);
116
+ return (
117
+ (await findFallbackResponse('/index.html', fallbackCacheNames)) ||
118
+ (await findFallbackResponse('/', fallbackCacheNames))
119
+ );
120
+ };
121
+
122
+ const getActiveCacheName = () => {
123
+ if (isFailedVersion(CURRENT_VERSION) && metaState.lastKnownGoodVersion) {
124
+ return getCacheNameForVersion(metaState.lastKnownGoodVersion);
125
+ }
126
+ return CURRENT_CACHE;
127
+ };
128
+
129
+ const isSuccessfulResponse = (response) => Boolean(response) && response.ok;
130
+
131
+ const fetchAndCache = async ({ request, cache, cacheKey = request, allowOpaque = false }) => {
132
+ const response = await fetch(request);
133
+ if (isSuccessfulResponse(response) || (allowOpaque && response.type === 'opaque')) {
134
+ cache.put(cacheKey, response.clone());
135
+ return response;
136
+ }
137
+ return undefined;
138
+ };
139
+
140
+ const notifyClients = async (payload) => {
141
+ const clients = await self.clients.matchAll({ type: 'window' });
142
+ clients.forEach((client) => client.postMessage(payload));
143
+ };
144
+
145
+ const markVersionFailed = async (version) => {
146
+ if (!version || isFailedVersion(version)) {
147
+ return;
148
+ }
149
+ metaState.failedVersions = [...metaState.failedVersions, version];
150
+ await writeMeta();
151
+ await notifyClients({ type: 'PWA_UPDATE_FAILED', version });
152
+ const clients = await self.clients.matchAll({ type: 'window' });
153
+ clients.forEach((client) => client.navigate(client.url));
154
+ };
155
+
156
+ self.addEventListener('install', (event) => {
157
+ event.waitUntil(
158
+ (async () => {
159
+ const cache = await caches.open(CURRENT_CACHE);
160
+ const assetsToCache = CORE_ASSETS.concat(EXTERNAL_ASSETS);
161
+ await Promise.allSettled(assetsToCache.map((asset) => cache.add(asset)));
162
+ })()
163
+ );
164
+ });
165
+
166
+ const CHECK_FOR_UPDATES_TAG = 'check-for-updates';
167
+
168
+ const runUpdateCheck = async () => {
169
+ const clients = await self.clients.matchAll({ type: 'window' });
170
+ clients.forEach((client) => client.postMessage({ type: 'PWA_BACKGROUND_UPDATE_CHECK' }));
171
+ };
172
+
173
+ self.addEventListener('activate', (event) => {
174
+ event.waitUntil(
175
+ (async () => {
176
+ await readMeta();
177
+ const keys = await caches.keys();
178
+ const keep = new Set([CURRENT_CACHE, META_CACHE]);
179
+ if (metaState.lastKnownGoodVersion) {
180
+ keep.add(getCacheNameForVersion(metaState.lastKnownGoodVersion));
181
+ }
182
+ await Promise.all(keys.filter((key) => !keep.has(key)).map((key) => caches.delete(key)));
183
+ await self.clients.claim();
184
+ if ('periodicSync' in self.registration) {
185
+ try {
186
+ await self.registration.periodicSync.register(CHECK_FOR_UPDATES_TAG, {
187
+ minInterval: 1000 * 60 * 30,
188
+ });
189
+ } catch {
190
+ // Ignore unsupported permission states.
191
+ }
192
+ }
193
+ if (failureTimer) {
194
+ clearTimeout(failureTimer);
195
+ }
196
+ if (
197
+ metaState.lastKnownGoodVersion &&
198
+ metaState.lastKnownGoodVersion !== CURRENT_VERSION &&
199
+ !isFailedVersion(CURRENT_VERSION)
200
+ ) {
201
+ failureTimer = setTimeout(() => {
202
+ markVersionFailed(CURRENT_VERSION);
203
+ }, 15000);
204
+ }
205
+ })()
206
+ );
207
+ });
208
+
209
+ self.addEventListener('periodicsync', (event) => {
210
+ if (event.tag !== CHECK_FOR_UPDATES_TAG) {
211
+ return;
212
+ }
213
+ event.waitUntil(runUpdateCheck());
214
+ });
215
+
216
+ self.addEventListener('sync', (event) => {
217
+ if (event.tag !== CHECK_FOR_UPDATES_TAG) {
218
+ return;
219
+ }
220
+ event.waitUntil(runUpdateCheck());
221
+ });
222
+
223
+ self.addEventListener('message', (event) => {
224
+ if (event.data && event.data.type === 'SKIP_WAITING') {
225
+ self.skipWaiting();
226
+ }
227
+ if (event.data && event.data.type === 'CLIENT_READY') {
228
+ const version = typeof event.data.version === 'string' ? event.data.version : null;
229
+ if (version) {
230
+ metaState.lastKnownGoodVersion = version;
231
+ metaState.failedVersions = metaState.failedVersions.filter((item) => item !== version);
232
+ if (failureTimer) {
233
+ clearTimeout(failureTimer);
234
+ failureTimer = null;
235
+ }
236
+ event.waitUntil(writeMeta());
237
+ }
238
+ }
239
+ if (event.data && event.data.type === 'MARK_FAILED_VERSION') {
240
+ const version = typeof event.data.version === 'string' ? event.data.version : null;
241
+ if (version) {
242
+ event.waitUntil(markVersionFailed(version));
243
+ }
244
+ }
245
+ });
246
+
247
+ self.addEventListener('fetch', (event) => {
248
+ if (event.request.method !== 'GET') {
249
+ return;
250
+ }
251
+
252
+ if (event.request.destination === 'style') {
253
+ event.respondWith(
254
+ (async () => {
255
+ const cache = await caches.open(getActiveCacheName());
256
+ try {
257
+ const response = await fetchAndCache({ request: event.request, cache, allowOpaque: true });
258
+ if (!response) {
259
+ throw new Error('Network responded without a cacheable stylesheet response');
260
+ }
261
+ return response;
262
+ } catch (error) {
263
+ const cachedResponse = await cache.match(event.request);
264
+ if (cachedResponse) {
265
+ return cachedResponse;
266
+ }
267
+ const fallbackCacheNames = await getFallbackCacheNames(getActiveCacheName());
268
+ const crossCacheResponse = await findFallbackResponse(event.request, fallbackCacheNames);
269
+ if (crossCacheResponse) {
270
+ return crossCacheResponse;
271
+ }
272
+ throw error;
273
+ }
274
+ })()
275
+ );
276
+ return;
277
+ }
278
+
279
+ if (event.request.mode === 'navigate') {
280
+ event.respondWith(
281
+ (async () => {
282
+ const activeCacheName = getActiveCacheName();
283
+ try {
284
+ const cache = await caches.open(activeCacheName);
285
+ const response = await fetchAndCache({
286
+ request: event.request,
287
+ cache,
288
+ cacheKey: '/index.html',
289
+ });
290
+ if (!response) {
291
+ throw new Error('Navigation response was not successful');
292
+ }
293
+ return response;
294
+ } catch (error) {
295
+ const cache = await caches.open(activeCacheName);
296
+ const cachedResponse = await cache.match('/index.html');
297
+ if (cachedResponse) {
298
+ return cachedResponse;
299
+ }
300
+ const crossCacheAppShell = await getCachedAppShell(activeCacheName);
301
+ if (crossCacheAppShell) {
302
+ return crossCacheAppShell;
303
+ }
304
+ throw error;
305
+ }
306
+ })()
307
+ );
308
+ return;
309
+ }
310
+
311
+ event.respondWith(
312
+ (async () => {
313
+ const cache = await caches.open(getActiveCacheName());
314
+ const cachedResponse = await cache.match(event.request);
315
+
316
+ const fetchPromise = fetchAndCache({ request: event.request, cache, allowOpaque: true }).catch(() => undefined);
317
+
318
+ if (cachedResponse) {
319
+ event.waitUntil(fetchPromise);
320
+ return cachedResponse;
321
+ }
322
+
323
+ const response = await fetchPromise;
324
+ if (response) {
325
+ return response;
326
+ }
327
+ const cachedAppShell = await getCachedAppShell(getActiveCacheName());
328
+ if (cachedAppShell) {
329
+ return cachedAppShell;
330
+ }
331
+ return caches.match('/index.html');
332
+ })()
333
+ );
334
+ });
package/package.json ADDED
@@ -0,0 +1,74 @@
1
+ {
2
+ "name": "@mdwrk/mdwrkspace",
3
+ "private": false,
4
+ "version": "1.3.51",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "tsc && vite build",
9
+ "build:lib": "tsc && vite build --config vite.lib.config.ts",
10
+ "preview": "vite preview",
11
+ "test": "vitest",
12
+ "test:ui": "vitest --ui",
13
+ "test:run": "vitest run",
14
+ "typecheck": "tsc --noEmit -p tsconfig.json",
15
+ "lint": "npm run typecheck",
16
+ "prepack": "npm run build:lib"
17
+ },
18
+ "module": "./dist/mdwrkspace.js",
19
+ "exports": {
20
+ ".": {
21
+ "import": "./dist/mdwrkspace.js"
22
+ }
23
+ },
24
+ "files": [
25
+ "dist"
26
+ ],
27
+ "publishConfig": {
28
+ "access": "public"
29
+ },
30
+ "dependencies": {
31
+ "@mdwrk/extension-gemini-agent": "^1.0.1",
32
+ "@mdwrk/extension-host": "^1.0.1",
33
+ "@mdwrk/extension-manager": "^1.0.1",
34
+ "@mdwrk/extension-manifest": "^1.0.0",
35
+ "@mdwrk/extension-runtime": "^1.0.1",
36
+ "@mdwrk/i18n": "^1.0.0",
37
+ "@mdwrk/icons": "^1.0.0",
38
+ "@mdwrk/markdown-editor-react": "^1.0.2",
39
+ "@mdwrk/markdown-renderer-core": "^1.0.0",
40
+ "@mdwrk/markdown-renderer-react": "^1.0.1",
41
+ "@mdwrk/theme-contract": "^1.0.0",
42
+ "@mdwrk/ui-tokens": "^1.0.1",
43
+ "jszip": "^3.10.1",
44
+ "lucide-react": "^0.475.0",
45
+ "react": "^19.0.0",
46
+ "react-dom": "^19.0.0",
47
+ "react-syntax-highlighter": "^15.6.1",
48
+ "@mdwrk/extension-theme-studio": "^1.0.1"
49
+ },
50
+ "devDependencies": {
51
+ "@testing-library/dom": "^10.4.0",
52
+ "@testing-library/jest-dom": "^6.6.3",
53
+ "@testing-library/react": "^16.1.0",
54
+ "@types/node": "^22.13.5",
55
+ "@types/react": "^19.0.8",
56
+ "@types/react-dom": "^19.0.3",
57
+ "@types/react-syntax-highlighter": "^15.5.13",
58
+ "@vitejs/plugin-react": "^4.3.4",
59
+ "autoprefixer": "^10.4.20",
60
+ "jsdom": "^25.0.1",
61
+ "postcss": "^8.5.1",
62
+ "tailwindcss": "^3.4.17",
63
+ "typescript": "^5.7.3",
64
+ "vite": "^6.4.1",
65
+ "vitest": "^2.1.8"
66
+ },
67
+ "license": "Apache-2.0",
68
+ "engines": {
69
+ "node": ">=20 <23",
70
+ "npm": ">=10"
71
+ },
72
+ "author": "Jacob Stewart <jacob@swarmauri.com>",
73
+ "homepage": "https://mdwrk.com"
74
+ }