diff --git a/zddc/internal/apps/embedded/archive.html b/zddc/internal/apps/embedded/archive.html
index cf153a5..455a273 100644
--- a/zddc/internal/apps/embedded/archive.html
+++ b/zddc/internal/apps/embedded/archive.html
@@ -2470,7 +2470,7 @@ td[data-field="trackingNumber"] {
@@ -5214,7 +5214,7 @@ X.B(E,Y);return E}return J}())
*
* Renderers operate on any document (parent window or popup window), so the
* same code works for tools whose preview opens in a popup (classifier,
- * archive, transmittal) and tools that render inline (mdedit).
+ * archive, transmittal) and tools that render inline (browse).
*
* Public API on window.zddc.preview:
* loadLibrary(url) → Promise
diff --git a/zddc/internal/apps/embedded/browse.html b/zddc/internal/apps/embedded/browse.html
index a49d4c9..8d29d89 100644
--- a/zddc/internal/apps/embedded/browse.html
+++ b/zddc/internal/apps/embedded/browse.html
@@ -1477,6 +1477,16 @@ html, body {
background: var(--bg);
border: 1px solid var(--border);
}
+.md-shell__download {
+ /* Slightly tighter than the Save button so a row of three doesn't
+ crowd the title. The base .btn styles still drive padding/color. */
+ font-variant-numeric: tabular-nums;
+ letter-spacing: 0.02em;
+}
+.md-shell__download[disabled] {
+ opacity: 0.55;
+ cursor: progress;
+}
/* Editor host: a single grid cell with overflow:hidden so Toast UI's
internal scrollers handle the content. */
@@ -1562,34 +1572,41 @@ html, body {
transition: background-color 0.3s ease;
}
-/* ── Front matter list ──────────────────────────────────────────────────── */
-.md-fm__empty {
+/* ── Front matter editor ────────────────────────────────────────────────── */
+.md-fm__body {
+ /* Body cell owns the textarea; sized by the sidebar's grid row. */
+ padding: 0;
+ display: block;
+ overflow: hidden;
+}
+.md-fm__textarea {
+ width: 100%;
+ height: 100%;
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0.4rem 0.6rem;
+ border: 0;
+ background: transparent;
+ color: var(--text);
+ font-family: var(--font-mono, ui-monospace, SFMono-Regular, Consolas, monospace);
+ font-size: 0.8rem;
+ line-height: 1.45;
+ resize: none;
+ outline: none;
+ white-space: pre;
+ overflow: auto;
+ tab-size: 2;
+}
+.md-fm__textarea::placeholder {
color: var(--text-muted);
font-style: italic;
- font-size: 0.82rem;
- margin: 0;
- padding: 0.5rem 0.75rem;
}
-.md-fm__list {
- margin: 0;
- padding: 0.3rem 0.75rem;
- display: grid;
- grid-template-columns: minmax(4.5rem, max-content) 1fr;
- gap: 0.2rem 0.6rem;
- font-size: 0.8rem;
+.md-fm__textarea:focus {
+ background: var(--surface-2, rgba(0, 0, 0, 0.025));
}
-.md-fm__list dt {
- font-weight: 600;
+.md-fm__textarea[readonly] {
color: var(--text-muted);
- text-transform: lowercase;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-.md-fm__list dd {
- margin: 0;
- color: var(--text);
- overflow-wrap: anywhere;
+ cursor: not-allowed;
}
/* ── Sort control ────────────────────────────────────────────────────────── */
@@ -1640,7 +1657,7 @@ html, body {
@@ -4293,7 +4310,7 @@ var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Arr
*
* Renderers operate on any document (parent window or popup window), so the
* same code works for tools whose preview opens in a popup (classifier,
- * archive, transmittal) and tools that render inline (mdedit).
+ * archive, transmittal) and tools that render inline (browse).
*
* Public API on window.zddc.preview:
* loadLibrary(url) → Promise
@@ -5874,22 +5891,31 @@ var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Arr
//
// Layout (CSS Grid):
// ┌─────────────────────────────────────────────────────────────────┐
-// │ toolbar: Save | ● modified | status | source │
-// ├────────────────────────────────────────┬────────────────────────┤
-// │ │ Outline │
-// │ │ • Heading 1 │
-// │ Toast UI Editor │ • Subheading │
-// │ (md / wysiwyg / preview) │ • Heading 2 │
-// │ ├────────────────────────┤
-// │ │ Front matter │
-// │ │ title: Foo │
-// │ │ revision: A │
-// └────────────────────────────────────────┴────────────────────────┘
+// │ info: name | dirty | status | source | DOCX HTML PDF | Save │
+// ├────────────────────────┬────────────────────────────────────────┤
+// │ YAML front matter │ │
+// │ ┌──────────────────┐ │ │
+// │ │ title: Foo │ │ Toast UI Editor │
+// │ │ revision: A │ │ (md / wysiwyg / preview) │
+// │ └──────────────────┘ │ │
+// ├────────────────────────┤ │
+// │ Outline │ │
+// │ • Heading 1 │ │
+// │ • Subheading │ │
+// │ • Heading 2 │ │
+// └────────────────────────┴────────────────────────────────────────┘
// Grid keeps every cell's size definite, which is what Toast UI needs
// to compute its inner scroll regions correctly. The previous nested-
// flexbox layout produced indeterminate heights and a fragile TOC
// pane width — grid fixes both.
//
+// Front matter is edited in a dedicated