/* Electron renderer — layout + markdown styling. * Design tokens live in packages/ui-tokens (tokens.css + primitives.css). */ body { display: grid; grid-template-rows: var(--mid-titlebar-h) 1fr 24px; } .mid-shell { display: grid; grid-template-columns: 44px 1fr; min-height: 0; overflow: hidden; } body.has-sidebar .mid-shell { grid-template-columns: 44px var(--mid-sidebar-w) 1fr; } /* Activity bar — VSCode-style vertical icon tray */ .mid-activity-bar { display: flex; flex-direction: column; align-items: center; gap: 4px; padding: var(--mid-space-2) 0; background: var(--mid-bg); border-right: 1px solid var(--mid-border); } .mid-activity-spacer { flex: 1; } .mid-activity-divider { width: 22px; height: 1px; background: var(--mid-border); margin: var(--mid-space-1) 0; } .mid-activity-pinned { display: flex; flex-direction: column; align-items: center; gap: 4px; margin-top: var(--mid-space-2); padding-top: var(--mid-space-2); border-top: 1px solid var(--mid-border); } .mid-activity-btn--pinned { color: inherit; } .mid-activity-btn.is-dragging { opacity: 0.4; } /* Pin reorder drop target — solid accent fill (matches v1). */ .mid-activity-btn.is-drop-target { background: var(--mid-accent); color: var(--mid-accent-fg); } /* v2 (#189): file-assignment drop target — dashed ring + tinted bg so users can tell "drop file here" apart from "reorder pin". */ .mid-activity-btn.is-file-drop-target { background: color-mix(in srgb, var(--mid-accent) 18%, transparent); color: var(--mid-fg); outline: 2px dashed var(--mid-accent); outline-offset: -3px; } .mid-activity-btn { width: 36px; height: 36px; display: inline-flex; align-items: center; justify-content: center; background: transparent; border: 0; color: var(--mid-fg-muted); border-radius: var(--mid-radius-md); cursor: pointer; transition: background var(--mid-motion-fast), color var(--mid-motion-fast); } .mid-activity-btn:hover { background: var(--mid-surface); color: var(--mid-fg); } .mid-activity-btn.is-active { color: var(--mid-fg); background: var(--mid-surface); position: relative; } .mid-activity-btn.is-active::before { content: ""; position: absolute; left: -1px; top: 6px; bottom: 6px; width: 2px; background: var(--mid-accent); border-radius: 2px; } .mid-sidebar { display: flex; flex-direction: column; background: var(--mid-surface); border-right: 1px solid var(--mid-border); overflow: hidden; } .mid-sidebar[hidden] { display: none; } .mid-sidebar-header { display: flex; align-items: center; justify-content: space-between; gap: var(--mid-space-1); padding: var(--mid-space-2) var(--mid-space-2); border-bottom: 1px solid var(--mid-border); font-size: var(--mid-font-size-sm); font-weight: var(--mid-weight-semibold); color: var(--mid-fg-muted); } .mid-workspace-switcher { flex: 1; display: inline-flex; align-items: center; gap: var(--mid-space-1); padding: var(--mid-space-1) var(--mid-space-2); font-family: inherit; font-size: var(--mid-font-size-sm); font-weight: var(--mid-weight-semibold); color: var(--mid-fg); background: transparent; border: 0; border-radius: var(--mid-radius-sm); cursor: pointer; text-align: left; min-width: 0; } .mid-workspace-switcher:hover { background: var(--mid-surface); } .mid-workspace-switcher .mid-sidebar-title { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; text-transform: none; letter-spacing: 0; color: var(--mid-fg); } .mid-workspace-chevron { display: inline-flex; color: var(--mid-fg-muted); transform: rotate(90deg); } .mid-sidebar-title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1; min-width: 0; } .mid-sidebar-tree { flex: 1; overflow: auto; padding: var(--mid-space-2) var(--mid-space-1); } .mid-tree-item { display: flex; align-items: center; gap: var(--mid-space-2); padding: 4px var(--mid-space-2); font-size: var(--mid-font-size-sm); line-height: 1.3; color: var(--mid-fg); cursor: pointer; user-select: none; border-radius: var(--mid-radius-sm); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .mid-tree-item:hover { background: var(--mid-surface-hover); } .mid-tree-item.is-active { background: var(--mid-accent); color: var(--mid-accent-fg); } .mid-tree-item.is-active .mid-icon { color: var(--mid-accent-fg); } .mid-tree-chevron { display: inline-flex; width: 18px; height: 18px; align-items: center; justify-content: center; color: var(--mid-fg-muted); transition: transform var(--mid-motion-fast) var(--mid-ease-out); } .mid-tree-chevron .mid-icon { width: 16px; height: 16px; } .mid-tree-chevron.is-open { transform: rotate(90deg); } .mid-tree-item .mid-tree-icon { flex-shrink: 0; width: 18px; height: 18px; } .mid-tree-item.is-active .mid-tree-icon { color: var(--mid-accent-fg) !important; } .mid-tree-children { padding-left: var(--mid-space-3); } /* v2 (#189): cluster sidebar — assigned files render in a dedicated section above the folder subtree so users can tell pinned files apart from the directory listing. */ .mid-tree-section + .mid-tree-section { margin-top: var(--mid-space-3); } .mid-tree-section-header { padding: var(--mid-space-1) var(--mid-space-2); font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; color: var(--mid-fg-muted); } .mid-tree-item--cluster .mid-tree-chevron { visibility: hidden; } .mid-tree-empty { padding: var(--mid-space-4); text-align: center; color: var(--mid-fg-muted); font-size: var(--mid-font-size-sm); } /* Workspace-switch / folder-open indexing loader (#291) — delay-shown, disappears automatically when the tree fetch resolves. */ .mid-tree-indexing { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--mid-space-3); padding: var(--mid-space-6) var(--mid-space-4); color: var(--mid-fg-muted); font-size: var(--mid-font-size-sm); } .mid-tree-indexing-spinner { width: 20px; height: 20px; border: 2px solid var(--mid-border); border-top-color: var(--mid-fg); border-radius: 50%; animation: mid-spin 0.8s linear infinite; } .mid-tree-indexing-label { color: var(--mid-fg-muted); } @keyframes mid-spin { to { transform: rotate(360deg); } } /* Sidebar mode toggle removed — activity bar drives sidebar content (#187) */ /* Notes list */ .mid-notes-list { flex: 1; overflow: auto; padding: var(--mid-space-1); } .mid-note-row { /* #255 — leading type chip (col 1), title+meta (col 2), trailing delete (col 3). */ display: grid; grid-template-columns: auto 1fr auto; grid-template-rows: auto auto; align-items: center; gap: 2px var(--mid-space-2); padding: var(--mid-space-2); border-radius: var(--mid-radius-sm); cursor: pointer; user-select: none; } .mid-note-row:hover { background: var(--mid-surface-hover); } .mid-note-row.is-active { background: var(--mid-accent); color: var(--mid-accent-fg); } .mid-note-row.is-active .mid-note-meta, .mid-note-row.is-active .mid-note-tag { color: var(--mid-accent-fg); opacity: 0.85; } .mid-note-title { font-size: var(--mid-font-size-sm); font-weight: var(--mid-weight-medium); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; grid-column: 2; grid-row: 1; } .mid-note-meta { display: flex; align-items: center; gap: var(--mid-space-2); font-size: var(--mid-font-size-xs); color: var(--mid-fg-muted); grid-column: 2; grid-row: 2; } .mid-note-tag-line { font-family: var(--mid-font-mono); font-size: 10px; color: var(--mid-fg-subtle); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .mid-note-type-chip { grid-column: 1; grid-row: 1 / span 2; display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; padding: 0; background: transparent; border: 1px solid var(--mid-border); border-radius: var(--mid-radius-sm); cursor: pointer; transition: transform var(--mid-motion-fast) var(--mid-ease-out); } .mid-note-type-chip:hover { transform: scale(1.06); } .mid-note-row.is-active .mid-note-type-chip { border-color: var(--mid-accent-fg); } .mid-note-tags { display: inline-flex; gap: var(--mid-space-1); margin-left: var(--mid-space-2); } .mid-note-tag { font-family: var(--mid-font-mono); font-size: 10px; padding: 0 var(--mid-space-1); background: var(--mid-inline-code-bg); border-radius: var(--mid-radius-pill); color: var(--mid-fg-muted); } .mid-note-warehouse { background: rgba(9, 105, 218, 0.15); color: var(--mid-accent); margin-right: var(--mid-space-1); } .mid-note-tag-editable { display: inline-flex; align-items: center; gap: 2px; padding-right: 0; } .mid-note-tag-x { display: inline-flex; align-items: center; justify-content: center; width: 14px; height: 14px; padding: 0; margin-left: 2px; font-size: 12px; line-height: 1; background: transparent; color: inherit; border: 0; border-radius: 50%; cursor: pointer; } .mid-note-tag-x:hover { background: var(--mid-surface-hover); } .mid-note-tag-add { display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 18px; font-size: 11px; font-family: var(--mid-font-mono); background: transparent; color: var(--mid-fg-subtle); border: 1px dashed var(--mid-border); border-radius: var(--mid-radius-pill); cursor: pointer; } .mid-note-tag-add:hover { color: var(--mid-fg); border-color: var(--mid-border-strong); } .mid-note-delete { grid-column: 3; grid-row: 1 / span 2; background: transparent; border: 0; color: var(--mid-fg-subtle); cursor: pointer; border-radius: var(--mid-radius-sm); padding: 2px; opacity: 0; transition: opacity var(--mid-motion-fast) var(--mid-ease-out); } .mid-note-row:hover .mid-note-delete { opacity: 1; } .mid-note-delete:hover { color: var(--mid-danger); background: var(--mid-surface); } /* #255 — type filter strip at top of notes sidebar. */ .mid-notes-types { display: flex; flex-wrap: wrap; gap: var(--mid-space-1); padding: var(--mid-space-1) var(--mid-space-2); border-bottom: 1px solid var(--mid-border); background: var(--mid-bg); } .mid-notes-type-chip { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; padding: 0; background: transparent; color: var(--mid-fg-muted); border: 1px solid transparent; border-radius: var(--mid-radius-sm); cursor: pointer; transition: background var(--mid-motion-fast) var(--mid-ease-out), color var(--mid-motion-fast) var(--mid-ease-out); } .mid-notes-type-chip:hover { background: var(--mid-surface-hover); color: var(--mid-fg); } .mid-notes-type-chip.is-active { background: var(--mid-surface); } /* #255 — type chooser modal triggered from the "+" new-note button. */ .mid-type-chooser-backdrop { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.45); display: flex; align-items: center; justify-content: center; z-index: 200; } .mid-type-chooser { width: min(560px, 92vw); max-height: 90vh; overflow: auto; background: var(--mid-bg); color: var(--mid-fg); border: 1px solid var(--mid-border); border-radius: var(--mid-radius-md); box-shadow: 0 20px 60px rgba(0, 0, 0, 0.35); padding: var(--mid-space-4); display: flex; flex-direction: column; gap: var(--mid-space-3); } .mid-type-chooser-header { font-size: var(--mid-font-size-lg); font-weight: var(--mid-weight-semibold); } .mid-type-chooser-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: var(--mid-space-2); } .mid-type-chooser-tile { display: flex; flex-direction: column; align-items: flex-start; gap: var(--mid-space-1); padding: var(--mid-space-3); background: var(--mid-surface); color: var(--mid-fg); border: 1px solid var(--mid-border); border-radius: var(--mid-radius-sm); cursor: pointer; text-align: left; transition: transform var(--mid-motion-fast) var(--mid-ease-out), border-color var(--mid-motion-fast) var(--mid-ease-out); } .mid-type-chooser-tile:hover { transform: translateY(-1px); border-color: var(--type-color, var(--mid-accent)); } .mid-type-chooser-icon { color: var(--type-color, var(--mid-fg)); } .mid-type-chooser-label { font-weight: var(--mid-weight-semibold); font-size: var(--mid-font-size-sm); } .mid-type-chooser-desc { font-size: var(--mid-font-size-xs); color: var(--mid-fg-muted); } .mid-type-chooser-footer { display: flex; justify-content: flex-end; gap: var(--mid-space-2); } /* #255 — secret note custom view. */ #root.typed-view { overflow: auto; padding: var(--mid-space-4); } .mid-secret-editor { max-width: 720px; margin: 0 auto; display: flex; flex-direction: column; gap: var(--mid-space-3); } .mid-secret-header { display: flex; align-items: center; gap: var(--mid-space-2); padding: var(--mid-space-3); background: var(--mid-surface); border: 1px solid var(--mid-border); border-radius: var(--mid-radius-sm); } .mid-secret-header-icon { color: var(--mid-accent); } .mid-secret-header-title { font-weight: var(--mid-weight-semibold); font-size: var(--mid-font-size-lg); } .mid-secret-header-hint { font-size: var(--mid-font-size-xs); color: var(--mid-fg-muted); margin-left: auto; } .mid-secret-list { display: flex; flex-direction: column; gap: var(--mid-space-2); } .mid-secret-row { display: grid; grid-template-columns: minmax(160px, 1fr) minmax(200px, 2fr) auto auto auto; gap: var(--mid-space-2); align-items: center; padding: var(--mid-space-2); background: var(--mid-surface); border: 1px solid var(--mid-border); border-radius: var(--mid-radius-sm); } .mid-secret-row .mid-secret-key, .mid-secret-row .mid-secret-value { font-family: var(--mid-font-mono); font-size: var(--mid-font-size-sm); } .mid-secret-add { align-self: flex-start; display: inline-flex; align-items: center; gap: var(--mid-space-1); } /* #295 — Task list custom view. Same outer shell as the secret editor; rows * are draggable and lay out checkbox + text + delete in a single line. */ .mid-task-editor { max-width: 720px; margin: 0 auto; display: flex; flex-direction: column; gap: var(--mid-space-3); } .mid-task-header { display: flex; align-items: center; gap: var(--mid-space-2); padding: var(--mid-space-3); background: var(--mid-surface); border: 1px solid var(--mid-border); border-radius: var(--mid-radius-sm); } .mid-task-header-icon { color: #1a7f37; } .mid-task-header-title { font-weight: var(--mid-weight-semibold); font-size: var(--mid-font-size-lg); } .mid-task-header-hint { font-size: var(--mid-font-size-xs); color: var(--mid-fg-muted); margin-left: auto; } .mid-task-list { display: flex; flex-direction: column; gap: var(--mid-space-1); } .mid-task-row { display: grid; grid-template-columns: auto auto 1fr auto; gap: var(--mid-space-2); align-items: center; padding: var(--mid-space-2); background: var(--mid-surface); border: 1px solid var(--mid-border); border-radius: var(--mid-radius-sm); cursor: grab; transition: opacity var(--mid-motion-fast) var(--mid-ease-out), border-color var(--mid-motion-fast) var(--mid-ease-out); } .mid-task-row.is-dragging { opacity: 0.4; } .mid-task-row.is-drop-target { border-color: var(--mid-accent); } .mid-task-row.is-done .mid-task-text { text-decoration: line-through; color: var(--mid-fg-muted); } .mid-task-handle { color: var(--mid-fg-muted); cursor: grab; user-select: none; font-size: var(--mid-font-size-sm); letter-spacing: -2px; } .mid-task-check { width: 18px; height: 18px; cursor: pointer; } .mid-task-text { font-family: inherit; font-size: var(--mid-font-size-sm); } .mid-task-add { align-self: flex-start; display: inline-flex; align-items: center; gap: var(--mid-space-1); } /* #296 — Meeting custom view. Two-column grid for short fields, full-width * for chips + textareas. */ .mid-meeting-editor { max-width: 820px; margin: 0 auto; display: flex; flex-direction: column; gap: var(--mid-space-3); } .mid-meeting-header { display: flex; align-items: center; gap: var(--mid-space-2); padding: var(--mid-space-3); background: var(--mid-surface); border: 1px solid var(--mid-border); border-radius: var(--mid-radius-sm); } .mid-meeting-header-icon { color: #0969da; } .mid-meeting-header-title { font-weight: var(--mid-weight-semibold); font-size: var(--mid-font-size-lg); } .mid-meeting-header-hint { font-size: var(--mid-font-size-xs); color: var(--mid-fg-muted); margin-left: auto; } .mid-meeting-grid { display: grid; grid-template-columns: 1fr 1fr; gap: var(--mid-space-3); } .mid-meeting-field { display: flex; flex-direction: column; gap: var(--mid-space-1); } .mid-meeting-field--full { grid-column: 1 / -1; } .mid-meeting-field-label { font-size: var(--mid-font-size-xs); font-weight: var(--mid-weight-semibold); color: var(--mid-fg-muted); text-transform: uppercase; letter-spacing: 0.04em; } .mid-meeting-textarea { font-family: var(--mid-font-mono); font-size: var(--mid-font-size-sm); resize: vertical; min-height: 100px; width: 100%; padding: var(--mid-space-2); } /* Generic chip editor (#296 — used by attendees + decisions). */ .mid-chip-editor { display: flex; flex-direction: column; gap: var(--mid-space-1); padding: var(--mid-space-2); background: var(--mid-bg); border: 1px solid var(--mid-border); border-radius: var(--mid-radius-sm); } .mid-chip-editor-chips { display: flex; flex-wrap: wrap; gap: var(--mid-space-1); } .mid-chip { display: inline-flex; align-items: center; gap: var(--mid-space-1); padding: 2px var(--mid-space-2); background: var(--mid-surface); border: 1px solid var(--mid-border); border-radius: 999px; font-size: var(--mid-font-size-xs); } .mid-chip-remove { background: transparent; border: none; cursor: pointer; color: var(--mid-fg-muted); display: inline-flex; align-items: center; padding: 0; } .mid-chip-remove:hover { color: var(--mid-fg); } .mid-chip-editor-input { border: none; background: transparent; font-size: var(--mid-font-size-sm); outline: none; width: 100%; } /* #297 — Note types settings list. */ .mid-note-types-list { display: flex; flex-direction: column; gap: var(--mid-space-1); margin-bottom: var(--mid-space-2); } .mid-note-type-row { display: grid; grid-template-columns: auto 1fr auto; gap: var(--mid-space-2); align-items: center; padding: var(--mid-space-2); background: var(--mid-surface); border: 1px solid var(--mid-border); border-radius: var(--mid-radius-sm); } .mid-note-type-row-icon { display: inline-flex; align-items: center; } .mid-note-type-row-text { display: flex; flex-direction: column; gap: 2px; } .mid-note-type-row-label { font-weight: var(--mid-weight-semibold); font-size: var(--mid-font-size-sm); } .mid-note-type-row-meta { font-size: var(--mid-font-size-xs); color: var(--mid-fg-muted); } .mid-note-type-row-meta code { font-family: var(--mid-font-mono); font-size: 0.92em; } .mid-note-type-row-actions { display: inline-flex; gap: var(--mid-space-1); } /* #297 — Note type editor modal form. */ .mid-note-type-form { display: flex; flex-direction: column; gap: var(--mid-space-2); } .mid-note-type-form-row { display: flex; flex-direction: column; gap: var(--mid-space-1); } .mid-note-type-form-label { font-size: var(--mid-font-size-xs); font-weight: var(--mid-weight-semibold); color: var(--mid-fg-muted); text-transform: uppercase; letter-spacing: 0.04em; } /* #302 — Strip pref rows in Settings → Notes → Filter strip. */ .mid-strip-prefs { display: flex; flex-direction: column; gap: var(--mid-space-1); margin-top: var(--mid-space-2); transition: opacity var(--mid-motion-fast) var(--mid-ease-out); } .mid-strip-pref-row { display: grid; grid-template-columns: auto auto 1fr auto; gap: var(--mid-space-2); align-items: center; padding: var(--mid-space-2); background: var(--mid-surface); border: 1px solid var(--mid-border); border-radius: var(--mid-radius-sm); cursor: grab; } .mid-strip-pref-row.is-dragging { opacity: 0.4; } .mid-strip-pref-row.is-drop-target { border-color: var(--mid-accent); } .mid-strip-pref-handle { color: var(--mid-fg-muted); user-select: none; font-size: var(--mid-font-size-sm); letter-spacing: -2px; } .mid-strip-pref-icon { display: inline-flex; align-items: center; } .mid-strip-pref-label { font-size: var(--mid-font-size-sm); } .mid-settings-checkbox { width: 18px; height: 18px; cursor: pointer; } /* Bottom status bar — shadcn v2 (background = bg, smaller chrome) */ .mid-statusbar { display: flex; align-items: center; gap: var(--mid-space-3); padding: 0 var(--mid-space-3); background: var(--mid-bg); border-top: 1px solid var(--mid-border); font-family: var(--mid-font-mono); font-size: var(--mid-font-size-xs); color: var(--mid-fg-muted); user-select: none; -webkit-app-region: no-drag; } .mid-status-cell { display: inline-flex; align-items: center; gap: var(--mid-space-1); white-space: nowrap; } .mid-status-cell--button { font: inherit; color: inherit; background: transparent; border: 0; padding: 0 var(--mid-space-1); cursor: pointer; border-radius: var(--mid-radius-xs); } .mid-status-cell--button:hover { background: var(--mid-surface-hover); color: var(--mid-fg); } .mid-status-cell--button .mid-icon { color: var(--mid-fg-muted); } .mid-status-cell--button:hover .mid-icon { color: var(--mid-fg); } .mid-status-cell--button[data-connected="false"] .mid-icon { color: var(--mid-fg-subtle); } .mid-status-spacer { flex: 1; } .mid-status-dot { font-size: 12px; line-height: 1; color: var(--mid-success); } .mid-status-dot.is-dirty { color: var(--mid-warning); } /* Spotlight — Cmd/Ctrl+K palette */ .mid-spotlight { border: 0; padding: 0; background: transparent; margin: auto; width: min(640px, 92vw); } .mid-spotlight::backdrop { background: rgba(0, 0, 0, 0.5); } .mid-spotlight-frame { background: var(--mid-bg); border: 1px solid var(--mid-border); border-radius: var(--mid-radius-lg); box-shadow: var(--mid-shadow-lg); overflow: hidden; } .mid-spotlight-input-row { display: flex; align-items: center; gap: var(--mid-space-2); padding: 0 var(--mid-space-4); border-bottom: 1px solid var(--mid-border); background: var(--mid-bg); } .mid-spotlight-input-icon { display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; color: var(--mid-fg-muted); } .mid-spotlight-input-icon .mid-icon { width: 16px; height: 16px; } .mid-spotlight-input { flex: 1; min-width: 0; padding: var(--mid-space-3) 0; font-family: inherit; font-size: var(--mid-font-size-lg); color: var(--mid-fg); background: transparent; border: 0; outline: none; } .mid-spotlight-input::placeholder { color: var(--mid-fg-muted); opacity: 0.7; } .mid-spotlight-tabs { display: inline-flex; align-items: center; gap: 2px; margin: var(--mid-space-2) var(--mid-space-3); padding: 2px; background: var(--mid-surface); border: 1px solid var(--mid-border); border-radius: 999px; width: max-content; } .mid-spotlight-tab { padding: 4px var(--mid-space-3); font-family: inherit; font-size: var(--mid-font-size-xs); font-weight: var(--mid-weight-medium); color: var(--mid-fg-muted); background: transparent; border: 0; border-radius: 999px; cursor: pointer; line-height: 1.4; transition: background-color 0.15s ease, color 0.15s ease; } .mid-spotlight-tab:hover { color: var(--mid-fg); } .mid-spotlight-tab.is-active { background: var(--mid-bg); color: var(--mid-fg); box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08); } .mid-spotlight-results { max-height: 50vh; overflow: auto; padding: var(--mid-space-1); } .mid-spotlight-section { padding: var(--mid-space-1) 0; } .mid-spotlight-section + .mid-spotlight-section { border-top: 1px solid var(--mid-border); margin-top: var(--mid-space-1); padding-top: var(--mid-space-2); } .mid-spotlight-section-label { padding: var(--mid-space-1) var(--mid-space-3) 2px; font-size: 10px; font-weight: var(--mid-weight-bold, 600); letter-spacing: 0.06em; text-transform: uppercase; color: var(--mid-fg-muted); } .mid-spotlight-row { display: flex; align-items: center; gap: var(--mid-space-3); width: 100%; padding: var(--mid-space-2) var(--mid-space-3); background: transparent; border: 0; border-radius: var(--mid-radius-sm); cursor: pointer; font: inherit; color: var(--mid-fg); text-align: left; } .mid-spotlight-row > .mid-icon { flex-shrink: 0; } .mid-spotlight-row:hover { background: var(--mid-surface); } .mid-spotlight-row.is-active { background: var(--mid-accent-soft, var(--mid-surface)); outline: 1px solid var(--mid-accent, var(--mid-border)); } .mid-spotlight-row-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; overflow: hidden; } .mid-spotlight-row-name { font-weight: var(--mid-weight-regular, 400); font-size: var(--mid-font-size-sm); color: var(--mid-fg); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; line-height: 1.3; } .mid-spotlight-row-desc { font-size: var(--mid-font-size-xs); color: var(--mid-fg-muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; line-height: 1.3; } .mid-spotlight-row-path { font-family: var(--mid-font-mono); font-size: var(--mid-font-size-xs); color: var(--mid-fg-muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; line-height: 1.3; } .mid-spotlight-empty { padding: var(--mid-space-4); text-align: center; color: var(--mid-fg-muted); font-size: var(--mid-font-size-sm); } .mid-spotlight-match { font-weight: var(--mid-weight-bold, 700); color: var(--mid-accent, var(--mid-fg)); background: var(--mid-accent-soft, transparent); border-radius: 2px; padding: 0 1px; } .mid-spotlight-row.is-active .mid-spotlight-match { color: inherit; } .mid-spotlight-footer { display: flex; flex-wrap: wrap; align-items: center; gap: var(--mid-space-3); padding: var(--mid-space-2) var(--mid-space-3); border-top: 1px solid var(--mid-border); background: var(--mid-bg); font-size: var(--mid-font-size-xs); color: var(--mid-fg-muted); } .mid-spotlight-hint { display: inline-flex; align-items: center; gap: 6px; } .mid-spotlight-kbd { display: inline-flex; align-items: center; justify-content: center; min-width: 18px; padding: 1px 5px; font-family: var(--mid-font-mono); font-size: 10px; color: var(--mid-fg); background: var(--mid-surface); border: 1px solid var(--mid-border); border-radius: var(--mid-radius-sm); } /* File history viewer (#219) */ .mid-fh-row { border-bottom: 1px solid var(--mid-border); padding: var(--mid-space-3) var(--mid-space-4); } .mid-fh-row:last-child { border-bottom: 0; } .mid-fh-head { display: flex; flex-direction: column; gap: 2px; margin-bottom: var(--mid-space-2); } .mid-fh-msg { font-weight: var(--mid-weight-medium); color: var(--mid-fg); font-size: var(--mid-font-size-sm); } .mid-fh-meta { font-family: var(--mid-font-mono); font-size: var(--mid-font-size-xs); color: var(--mid-fg-muted); } .mid-fh-hash { color: var(--mid-link); } .mid-fh-diff { margin: 0; padding: var(--mid-space-2); font-family: var(--mid-font-mono); font-size: 11px; background: var(--mid-code-bg); color: var(--mid-fg); border-radius: var(--mid-radius-sm); white-space: pre; overflow-x: auto; max-height: 220px; } /* Mermaid editor modal — split textarea + live preview */ .mid-mermaid-editor { width: min(1100px, 92vw); max-width: none; height: min(720px, 86vh); padding: 0; margin: auto; background: var(--mid-bg); color: var(--mid-fg); border: 1px solid var(--mid-border); border-radius: var(--mid-radius-lg); box-shadow: var(--mid-shadow-lg); overflow: hidden; } .mid-mermaid-editor::backdrop { background: rgba(0, 0, 0, 0.5); } .mid-mermaid-editor[open] { display: flex; flex-direction: column; } .mid-mermaid-editor-header { display: flex; align-items: center; justify-content: space-between; padding: var(--mid-space-3) var(--mid-space-4); border-bottom: 1px solid var(--mid-border); } .mid-mermaid-editor-title { margin: 0; font-size: var(--mid-font-size-lg); font-weight: var(--mid-weight-semibold); } .mid-mermaid-editor-body { flex: 1; display: grid; grid-template-columns: 1fr 1fr; min-height: 0; } .mid-mermaid-editor-src { width: 100%; height: 100%; padding: var(--mid-space-4); font-family: var(--mid-font-mono); font-size: 13px; line-height: 1.55; background: var(--mid-bg); color: var(--mid-fg); border: 0; border-right: 1px solid var(--mid-border); outline: none; resize: none; tab-size: 2; white-space: pre; } .mid-mermaid-editor-preview { background: var(--mid-code-bg); padding: var(--mid-space-4); overflow: auto; display: flex; align-items: center; justify-content: center; } .mid-mermaid-editor-preview svg { max-width: 100%; height: auto; } .mid-mermaid-editor-empty, .mid-mermaid-editor-error { color: var(--mid-fg-muted); font-family: var(--mid-font-mono); font-size: var(--mid-font-size-sm); } .mid-mermaid-editor-error { color: var(--mid-danger); white-space: pre-wrap; } .mid-mermaid-editor-footer { display: flex; align-items: center; gap: var(--mid-space-2); padding: var(--mid-space-3) var(--mid-space-4); border-top: 1px solid var(--mid-border); } .mid-mermaid-editor-hint { font-family: var(--mid-font-mono); font-size: var(--mid-font-size-xs); color: var(--mid-fg-muted); } /* Conflict banner — shown above the preview on pull-rebase failures (#221) */ .mid-conflict-banner { position: fixed; bottom: var(--mid-space-6); left: 50%; transform: translateX(-50%); display: flex; align-items: center; gap: var(--mid-space-3); padding: var(--mid-space-3) var(--mid-space-4); background: var(--mid-bg); border: 1px solid var(--mid-danger); border-left-width: 4px; border-radius: var(--mid-radius-lg); box-shadow: var(--mid-shadow-lg); z-index: var(--mid-z-modal); max-width: 760px; } .mid-conflict-icon { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; background: var(--mid-danger); color: #fff; border-radius: 50%; flex-shrink: 0; } .mid-conflict-text { flex: 1; min-width: 0; } .mid-conflict-title { font-weight: var(--mid-weight-semibold); font-size: var(--mid-font-size-sm); } .mid-conflict-msg { font-family: var(--mid-font-mono); font-size: var(--mid-font-size-xs); color: var(--mid-fg-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } /* Cursor-aware mermaid popout (#222) */ .mid-mermaid-popout { position: fixed; bottom: var(--mid-space-6); right: var(--mid-space-6); width: 320px; max-height: 320px; padding: var(--mid-space-3); background: var(--mid-bg); border: 1px solid var(--mid-border); border-radius: var(--mid-radius-lg); box-shadow: var(--mid-shadow-lg); z-index: var(--mid-z-modal); overflow: auto; pointer-events: none; } .mid-mermaid-popout svg { max-width: 100%; height: auto; } /* Standalone .mmd file mode (#223) */ .mid-mermaid-standalone { display: flex; align-items: center; justify-content: center; background: var(--mid-code-bg); } .mid-mermaid-standalone svg { max-width: 100%; max-height: 100%; } /* Launch loader overlay */ .mid-loader { position: fixed; inset: 0; z-index: var(--mid-z-toast); display: grid; place-items: center; background: var(--mid-bg); transition: opacity 400ms var(--mid-ease-out); pointer-events: none; } .mid-loader.is-fading { opacity: 0; } .mid-loader-glyph { width: 64px; height: 64px; border-radius: 50%; border: 3px solid var(--mid-border); border-top-color: var(--mid-fg); animation: mid-loader-spin 900ms linear infinite; margin-bottom: var(--mid-space-3); } .mid-loader-label { font-size: var(--mid-font-size-sm); color: var(--mid-fg-muted); letter-spacing: 0.04em; } @keyframes mid-loader-spin { to { transform: rotate(360deg); } } /* Pin editor modal — title + icon thumbnails + color swatches */ .mid-pin-editor { margin: auto; padding: 0; border: 1px solid var(--mid-border); border-radius: var(--mid-radius-lg); background: var(--mid-bg); color: var(--mid-fg); box-shadow: var(--mid-shadow-lg); width: min(420px, 92vw); } .mid-pin-editor::backdrop { background: rgba(0, 0, 0, 0.5); } .mid-pin-form { display: flex; flex-direction: column; gap: var(--mid-space-3); padding: var(--mid-space-4); } .mid-pin-title { margin: 0; font-size: var(--mid-font-size-lg); font-weight: var(--mid-weight-semibold); } .mid-pin-label { display: flex; flex-direction: column; gap: var(--mid-space-1); font-size: var(--mid-font-size-sm); font-weight: var(--mid-weight-medium); color: var(--mid-fg); } .mid-pin-icons { display: grid; grid-template-columns: repeat(8, 1fr); gap: 4px; } .mid-pin-icon-btn { width: 100%; aspect-ratio: 1 / 1; display: inline-flex; align-items: center; justify-content: center; background: var(--mid-bg); color: var(--mid-fg-muted); border: 1px solid var(--mid-border); border-radius: var(--mid-radius-sm); cursor: pointer; } .mid-pin-icon-btn:hover { background: var(--mid-surface); color: var(--mid-fg); } .mid-pin-icon-btn.is-active { background: var(--mid-surface); color: var(--mid-fg); border-color: var(--mid-fg); } .mid-pin-colors { display: grid; grid-template-columns: repeat(8, 1fr); gap: 4px; } .mid-pin-color-btn { width: 100%; aspect-ratio: 1 / 1; border: 2px solid transparent; border-radius: 50%; cursor: pointer; } .mid-pin-color-btn.is-active { border-color: var(--mid-fg); box-shadow: 0 0 0 1px var(--mid-bg) inset; } .mid-pin-actions { display: flex; justify-content: flex-end; gap: var(--mid-space-2); } /* shadcn dialog — universal shell used by midPrompt / midConfirm and inherited by other dialogs */ .mid-dialog { margin: auto; padding: 0; border: 1px solid var(--mid-border); border-radius: var(--mid-radius-lg); background: var(--mid-bg); color: var(--mid-fg); box-shadow: var(--mid-shadow-lg); width: min(440px, calc(100vw - 32px)); } .mid-dialog::backdrop { background: rgba(0, 0, 0, 0.55); backdrop-filter: blur(4px); } .mid-dialog-form { display: flex; flex-direction: column; gap: var(--mid-space-4); padding: var(--mid-space-5); } .mid-dialog-title { margin: 0; font-size: var(--mid-font-size-lg); font-weight: var(--mid-weight-semibold); } .mid-dialog-message { margin: 0; color: var(--mid-fg-muted); font-size: var(--mid-font-size-sm); white-space: pre-wrap; line-height: var(--mid-line-relaxed); } .mid-dialog-label { display: flex; flex-direction: column; gap: var(--mid-space-2); font-size: var(--mid-font-size-sm); font-weight: var(--mid-weight-medium); } .mid-dialog-actions { display: flex; justify-content: flex-end; gap: var(--mid-space-2); margin-top: var(--mid-space-2); } /* Apply consistent dialog chrome to all dialogs */ .mid-pin-editor::backdrop, .mid-mermaid-editor::backdrop, .mid-spotlight::backdrop { background: rgba(0, 0, 0, 0.55); backdrop-filter: blur(4px); } .mid-titlebar { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: var(--mid-space-3); padding: 0 var(--mid-space-2); background: var(--mid-bg); border-bottom: 1px solid var(--mid-border); -webkit-app-region: drag; } body.is-mac .mid-titlebar { padding-left: 80px; } .mid-titlebar-left, .mid-titlebar-right { display: flex; align-items: center; gap: var(--mid-space-1); } .mid-titlebar-right { justify-self: end; } .mid-titlebar-center { text-align: center; padding: 0 var(--mid-space-3); } /* Title-bar search — clickable filename pill that opens spotlight */ .mid-titlebar-search { display: inline-flex; align-items: center; gap: var(--mid-space-2); padding: 4px var(--mid-space-3); font-family: inherit; font-size: var(--mid-font-size-sm); font-weight: var(--mid-weight-medium); color: var(--mid-fg); background: var(--mid-surface); border: 1px solid var(--mid-border); border-radius: var(--mid-radius-md); cursor: pointer; -webkit-app-region: no-drag; max-width: min(420px, 50vw); } .mid-titlebar-search:hover { background: var(--mid-surface-hover); } .mid-titlebar-search .mid-filename { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; text-align: left; } .mid-titlebar-search-icon { display: inline-flex; align-items: center; } .mid-titlebar-search-kbd { color: var(--mid-fg-muted); } /* Segmented mode toggle (View / Split / Edit) */ .mid-mode-toggle { display: inline-flex; background: var(--mid-surface); border: 1px solid var(--mid-border); border-radius: var(--mid-radius-md); padding: 2px; -webkit-app-region: no-drag; margin-right: var(--mid-space-2); } .mid-mode-seg { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 22px; padding: 0; background: transparent; color: var(--mid-fg-muted); border: 0; border-radius: var(--mid-radius-xs); cursor: pointer; transition: background var(--mid-motion-fast) var(--mid-ease-out), color var(--mid-motion-fast) var(--mid-ease-out); } .mid-mode-seg:hover { color: var(--mid-fg); } .mid-mode-seg.is-active { background: var(--mid-bg); color: var(--mid-fg); box-shadow: var(--mid-shadow-sm); } main { overflow: hidden; min-height: 0; } main.viewing { overflow: auto; } main.viewing > .mid-preview { padding: var(--mid-space-10) var(--mid-space-12) var(--mid-space-12); max-width: var(--mid-preview-max-width, 760px); margin: 0 auto; font-size: var(--mid-font-size-reading); line-height: var(--mid-line-relaxed); } main.splitting .mid-preview { font-size: var(--mid-font-size-reading); line-height: var(--mid-line-relaxed); } main.splitting { display: block; height: 100%; } main.splitting .mid-preview { padding: var(--mid-space-6) var(--mid-space-8) var(--mid-space-12); overflow: auto; height: 100%; } .mid-split { display: grid; grid-template-columns: 50% 6px 1fr; height: 100%; min-height: 0; } .mid-split-editor { width: 100%; height: 100%; padding: var(--mid-space-4) var(--mid-space-6); font-family: var(--mid-font-mono); font-size: 14px; line-height: 1.55; background: var(--mid-bg); color: var(--mid-fg); border: 0; outline: none; resize: none; tab-size: 2; white-space: pre; overflow: auto; } .mid-split-handle { background: var(--mid-border); cursor: col-resize; position: relative; transition: background var(--mid-motion-fast) var(--mid-ease-out); } .mid-split-handle:hover { background: var(--mid-accent); } .mid-split-handle::before { content: ""; position: absolute; inset: 0 -3px; } .mid-split-preview { border-left: 1px solid var(--mid-border); } /* Settings panel — slide-in overlay from the right */ .mid-settings { position: fixed; top: var(--mid-titlebar-h); right: 0; bottom: 0; width: 380px; z-index: var(--mid-z-modal); background: var(--mid-bg); border-left: 1px solid var(--mid-border); box-shadow: var(--mid-shadow-lg); display: flex; flex-direction: column; animation: mid-slide-in var(--mid-motion-base) var(--mid-ease-out); } .mid-settings[hidden] { display: none; } @keyframes mid-slide-in { from { transform: translateX(100%); } to { transform: translateX(0); } } .mid-settings-header { display: flex; align-items: center; justify-content: space-between; padding: var(--mid-space-3) var(--mid-space-4); border-bottom: 1px solid var(--mid-border); } .mid-settings-title { margin: 0; font-size: var(--mid-font-size-lg); font-weight: var(--mid-weight-semibold); } .mid-settings-body { flex: 1; overflow: auto; padding: var(--mid-space-3) var(--mid-space-4) var(--mid-space-6); display: flex; flex-direction: column; gap: var(--mid-space-5); } .mid-settings-section { display: flex; flex-direction: column; gap: var(--mid-space-2); } .mid-settings-label { display: flex; align-items: baseline; justify-content: space-between; font-size: var(--mid-font-size-sm); font-weight: var(--mid-weight-medium); color: var(--mid-fg); } .mid-settings-hint { font-size: var(--mid-font-size-xs); color: var(--mid-fg-muted); font-weight: var(--mid-weight-normal); } .mid-settings-control { font-family: inherit; font-size: var(--mid-font-size-sm); padding: 6px var(--mid-space-3); background: var(--mid-bg); color: var(--mid-fg); border: 1px solid var(--mid-border); border-radius: var(--mid-radius-md); outline: none; transition: border-color var(--mid-motion-fast), box-shadow var(--mid-motion-fast); } .mid-settings-control[type="range"] { padding: 0; accent-color: var(--mid-fg); border: 0; height: 24px; } select.mid-settings-control { appearance: none; -webkit-appearance: none; background-image: linear-gradient(45deg, transparent 50%, var(--mid-fg-muted) 50%), linear-gradient(135deg, var(--mid-fg-muted) 50%, transparent 50%); background-position: calc(100% - 14px) 50%, calc(100% - 9px) 50%; background-size: 5px 5px; background-repeat: no-repeat; padding-right: var(--mid-space-8); } .mid-settings-control:focus-visible { border-color: var(--mid-fg); box-shadow: 0 0 0 1px var(--mid-fg); } /* Spec card — custom view template for .claude/* files */ .mid-spec-card { --mid-spec-accent: var(--mid-accent); margin: 0 0 var(--mid-space-6); padding: var(--mid-space-5); background: var(--mid-surface); border: 1px solid var(--mid-border); border-left: 4px solid var(--mid-spec-accent); border-radius: var(--mid-radius-lg); } .mid-spec-card-head { display: flex; align-items: center; gap: var(--mid-space-3); margin-bottom: var(--mid-space-2); } .mid-spec-card-icon { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; background: var(--mid-bg); border: 1px solid var(--mid-border); border-radius: var(--mid-radius-md); color: var(--mid-spec-accent); } .mid-spec-card-titles { display: flex; flex-direction: column; gap: 2px; } .mid-spec-card-name { margin: 0; font-size: var(--mid-font-size-xl); font-weight: var(--mid-weight-semibold); border: 0 !important; box-shadow: none !important; padding: 0 !important; } .mid-spec-card-kind { font-family: var(--mid-font-mono); font-size: var(--mid-font-size-xs); text-transform: uppercase; letter-spacing: 0.08em; color: var(--mid-fg-muted); } .mid-spec-card-desc { margin: 0 0 var(--mid-space-3) !important; color: var(--mid-fg); font-size: var(--mid-font-size-base); } .mid-spec-card-chips { display: flex; flex-wrap: wrap; gap: var(--mid-space-2); } .mid-spec-chip { display: inline-flex; align-items: center; background: var(--mid-bg); border: 1px solid var(--mid-border); border-radius: var(--mid-radius-pill); font-size: var(--mid-font-size-xs); overflow: hidden; } .mid-spec-chip-key { padding: 2px var(--mid-space-2); background: var(--mid-surface); color: var(--mid-fg-muted); font-family: var(--mid-font-mono); border-right: 1px solid var(--mid-border); } .mid-spec-chip-val { padding: 2px var(--mid-space-2); color: var(--mid-fg); font-family: var(--mid-font-mono); max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* Frontmatter meta block */ .mid-frontmatter { display: grid; grid-template-columns: max-content 1fr; gap: var(--mid-space-1) var(--mid-space-4); padding: var(--mid-space-3) var(--mid-space-4); margin: 0 0 var(--mid-space-6); background: var(--mid-surface); border: 1px solid var(--mid-border); border-left: 3px solid var(--mid-accent); border-radius: var(--mid-radius-md); font-size: var(--mid-font-size-sm); } .mid-fm-row { display: contents; } .mid-fm-key { font-weight: var(--mid-weight-semibold); color: var(--mid-fg-muted); text-transform: lowercase; letter-spacing: 0.02em; } .mid-fm-val { color: var(--mid-fg); word-break: break-word; } /* GH-flavored alerts */ .mid-alert { border-left-width: 4px; border-left-style: solid; border-radius: 0 var(--mid-radius-md) var(--mid-radius-md) 0; background: transparent; color: var(--mid-fg); padding: var(--mid-space-2) var(--mid-space-4); } .mid-alert .mid-alert-header { display: flex; align-items: center; gap: var(--mid-space-1); font-weight: var(--mid-weight-semibold); font-size: var(--mid-font-size-sm); margin-bottom: var(--mid-space-1); } .mid-alert--note { border-left-color: #0969da; } .mid-alert--note .mid-alert-header { color: #0969da; } .mid-alert--tip { border-left-color: #1a7f37; } .mid-alert--tip .mid-alert-header { color: #1a7f37; } .mid-alert--important { border-left-color: #8250df; } .mid-alert--important .mid-alert-header { color: #8250df; } .mid-alert--warning { border-left-color: #9a6700; } .mid-alert--warning .mid-alert-header { color: #9a6700; } .mid-alert--caution { border-left-color: #d1242f; } .mid-alert--caution .mid-alert-header { color: #d1242f; } :root.dark .mid-alert--note { border-left-color: #2f81f7; } :root.dark .mid-alert--note .mid-alert-header { color: #2f81f7; } :root.dark .mid-alert--tip { border-left-color: #3fb950; } :root.dark .mid-alert--tip .mid-alert-header { color: #3fb950; } :root.dark .mid-alert--important { border-left-color: #a371f7; } :root.dark .mid-alert--important .mid-alert-header { color: #a371f7; } :root.dark .mid-alert--warning { border-left-color: #d29922; } :root.dark .mid-alert--warning .mid-alert-header { color: #d29922; } :root.dark .mid-alert--caution { border-left-color: #f85149; } :root.dark .mid-alert--caution .mid-alert-header { color: #f85149; } /* KaTeX math integration */ .katex-display { overflow-x: auto; overflow-y: hidden; padding: var(--mid-space-2) 0; margin: var(--mid-space-3) 0; } .mid-math-error { color: var(--mid-danger); } .mid-preview h1, .mid-preview h2 { padding-bottom: 0.25em; box-shadow: inset 0 -1px 0 var(--mid-border); } .mid-preview h1 { font-size: 1.85em; margin: 0.6em 0 0.4em; line-height: var(--mid-line-tight); letter-spacing: -0.01em; } .mid-preview h2 { font-size: 1.4em; margin: 1.4em 0 0.4em; line-height: var(--mid-line-tight); letter-spacing: -0.005em; } .mid-preview h3 { font-size: 1.2em; margin: 1.2em 0 0.4em; line-height: var(--mid-line-tight); } .mid-preview h4 { font-size: 1em; margin: 1em 0 0.3em; font-weight: var(--mid-weight-semibold); } .mid-preview h5 { font-size: 0.92em; margin: 1em 0 0.3em; font-weight: var(--mid-weight-semibold); } .mid-preview h6 { font-size: 0.9em; margin: 1em 0 0.3em; font-weight: var(--mid-weight-semibold); color: var(--mid-fg-muted); } .mid-preview p { margin: 0.8em 0; } .mid-preview ul, .mid-preview ol { padding-left: 2em; margin: 0.8em 0; } .mid-preview li { margin: 0.25em 0; } .mid-preview li > p { margin: 0.4em 0; } .mid-preview li.task-list-item { list-style: none; margin-left: -1.5em; } .mid-preview li.task-list-item input[type="checkbox"] { margin-right: var(--mid-space-2); } .mid-preview a { color: var(--mid-link); text-decoration: none; } .mid-preview a:hover { color: var(--mid-link-hover); text-decoration: underline; } .mid-preview code { background: var(--mid-inline-code-bg); padding: 2px 6px; border-radius: var(--mid-radius-sm); font-family: var(--mid-font-mono); font-size: 0.9em; } .mid-preview pre { position: relative; background: var(--mid-code-bg); border-radius: var(--mid-radius-md); padding: var(--mid-space-4) var(--mid-space-4); overflow-x: auto; margin: 1em 0; box-shadow: inset 0 0 0 1px var(--mid-border); } .mid-preview pre code { background: transparent; padding: 0; font-size: 0.88em; } /* macOS-window chrome wrapper around each preview
 */
.mid-code-window {
  position: relative;
  margin: 1em 0;
  border-radius: var(--mid-radius-md);
  overflow: hidden;
  background: var(--mid-code-bg);
  box-shadow: inset 0 0 0 1px var(--mid-border), 0 1px 2px rgba(0, 0, 0, 0.04);
}
.mid-code-window-header {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: var(--mid-space-3);
  padding: 8px var(--mid-space-3);
  background: var(--mid-surface);
  border-bottom: 1px solid var(--mid-border);
  user-select: none;
}
.mid-code-window-dots { display: inline-flex; gap: 6px; align-items: center; }
.mid-code-window-dot {
  width: 12px;
  height: 12px;
  border-radius: 50%;
  display: inline-block;
}
.mid-code-window-dot--red { background: #ff5f57; }
.mid-code-window-dot--amber { background: #febc2e; }
.mid-code-window-dot--green { background: #28c840; }
.mid-code-window-title {
  text-align: center;
  font-family: var(--mid-font-mono);
  font-size: 12px;
  color: var(--mid-fg-muted);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.mid-code-window-spacer { width: 60px; }
.mid-code-window > pre {
  margin: 0;
  border-radius: 0;
  box-shadow: none !important;
  background: var(--mid-code-bg);
}

/* Gradient backdrop for code-block PNG export (Carbon-style) */
.mid-code-export-bg {
  display: inline-block;
  padding: 96px;
  width: max-content;
}
.mid-code-export-bg .mid-code-window {
  box-shadow: 0 24px 48px rgba(0, 0, 0, 0.35), 0 0 0 1px rgba(255, 255, 255, 0.08);
}
/* Loosen the inner code padding when captured for export — the live preview
   keeps its tighter ~16px padding so terminal-feel reading isn't airy. */
.mid-code-export-bg .mid-code-window > pre {
  padding: 28px var(--mid-space-6);
}

/* Generic chrome window used by table-as-PNG export (#261). Mirrors
   `.mid-code-window` visually so the brand stays consistent. */
.mid-export-window {
  position: relative;
  border-radius: var(--mid-radius-md);
  overflow: hidden;
  background: var(--mid-bg);
  box-shadow: 0 24px 48px rgba(0, 0, 0, 0.35), 0 0 0 1px rgba(255, 255, 255, 0.08);
}
.mid-export-window-header {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: var(--mid-space-3);
  padding: 8px var(--mid-space-3);
  background: var(--mid-surface);
  border-bottom: 1px solid var(--mid-border);
  user-select: none;
}
.mid-export-window-dots { display: inline-flex; gap: 6px; align-items: center; }
.mid-export-window-dot {
  width: 12px;
  height: 12px;
  border-radius: 50%;
  display: inline-block;
}
.mid-export-window-dot--red { background: #ff5f57; }
.mid-export-window-dot--amber { background: #febc2e; }
.mid-export-window-dot--green { background: #28c840; }
.mid-export-window-title {
  text-align: center;
  font-family: var(--mid-font-mono);
  font-size: 12px;
  color: var(--mid-fg-muted);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.mid-export-window-spacer { width: 60px; }
.mid-export-window > .mid-export-window-body { padding: var(--mid-space-4); }
/* When the table is rendered inside the export chrome it shouldn't scroll —
   the full content needs to be in the snapshot. */
.mid-export-window .mid-data-table {
  margin: 0;
  border: 0;
  box-shadow: none;
}
.mid-export-window .mid-dt-toolbar,
.mid-export-window .mid-dt-footer { display: none; }
.mid-export-window .mid-dt-scroll {
  overflow: visible !important;
  max-height: none !important;
}

/* Code-block toolbar (Copy / Download / Image / Lines) + language badge */
.mid-pre { padding-top: var(--mid-space-6); }
.mid-pre.with-lines {
  display: grid;
  grid-template-columns: max-content 1fr;
  column-gap: var(--mid-space-3);
  align-items: start;
}
.mid-pre.with-lines .mid-code-gutter { display: block; }

.mid-code-lang { display: none; }

/* Context menu (replaces hover toolbars on code / table / mermaid / file-tree / notes) */
.mid-context-menu {
  position: fixed;
  z-index: var(--mid-z-modal);
  min-width: 200px;
  padding: var(--mid-space-1);
  background: var(--mid-surface);
  border: 1px solid var(--mid-border);
  border-radius: var(--mid-radius-md);
  box-shadow: var(--mid-shadow-lg);
  animation: mid-fade-in var(--mid-motion-fast) var(--mid-ease-out);
}
.mid-context-item {
  display: flex;
  align-items: center;
  gap: var(--mid-space-2);
  width: 100%;
  padding: var(--mid-space-1) var(--mid-space-3);
  font-family: var(--mid-font-sans);
  font-size: var(--mid-font-size-sm);
  color: var(--mid-fg);
  text-align: left;
  background: transparent;
  border: 0;
  border-radius: var(--mid-radius-sm);
  cursor: pointer;
}
.mid-context-item:hover:not(:disabled) { background: var(--mid-accent); color: var(--mid-accent-fg); }
.mid-context-item:hover:not(:disabled) .mid-icon { color: var(--mid-accent-fg); }
.mid-context-item:disabled { color: var(--mid-fg-subtle); cursor: default; }
.mid-context-label { flex: 1; }
.mid-context-kbd {
  font-family: var(--mid-font-mono);
  font-size: var(--mid-font-size-xs);
  color: var(--mid-fg-muted);
}
.mid-context-item:hover .mid-context-kbd { color: var(--mid-accent-fg); opacity: 0.85; }
.mid-context-sep { height: 1px; margin: var(--mid-space-1) 0; background: var(--mid-border); }

.mid-code-gutter {
  display: none;
  white-space: pre;
  font-family: var(--mid-font-mono);
  font-size: 0.88em;
  color: var(--mid-fg-subtle);
  user-select: none;
  text-align: right;
  border-right: 1px solid var(--mid-border);
  padding-right: var(--mid-space-2);
}


/* ========================================================================
 * shadcn DataTable — full rebuild (#210). Replaces 9 prior CSS patches.
 * Card shell + toolbar + sticky header + pagination + density + columns.
 * ======================================================================== */

.mid-data-table {
  margin: 1.2em 0;
  background: var(--mid-bg);
  border: 1px solid var(--mid-border);
  border-radius: var(--mid-radius-lg);
  box-shadow: var(--mid-shadow-sm);
  overflow: hidden;
}

.mid-dt-toolbar {
  display: flex;
  align-items: center;
  gap: var(--mid-space-2);
  padding: var(--mid-space-3);
  border-bottom: 1px solid var(--mid-border);
}
.mid-dt-search-wrap {
  display: inline-flex;
  align-items: center;
  gap: var(--mid-space-2);
  flex: 1;
  max-width: 320px;
  padding: 0 var(--mid-space-3);
  background: var(--mid-bg);
  border: 1px solid var(--mid-border);
  border-radius: var(--mid-radius-md);
  transition: border-color var(--mid-motion-fast), box-shadow var(--mid-motion-fast);
}
.mid-dt-search-wrap:focus-within {
  border-color: var(--mid-fg);
  box-shadow: 0 0 0 1px var(--mid-fg);
}
.mid-dt-search {
  flex: 1;
  min-width: 0;
  padding: 7px 0;
  font-family: inherit;
  font-size: var(--mid-font-size-sm);
  color: var(--mid-fg);
  background: transparent;
  border: 0;
  outline: none;
}
.mid-dt-search::placeholder { color: var(--mid-fg-subtle); }
.mid-dt-counter {
  font-family: var(--mid-font-mono);
  font-size: var(--mid-font-size-xs);
  color: var(--mid-fg-muted);
  white-space: nowrap;
}
.mid-dt-spacer { flex: 1; }
.mid-dt-action {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  background: transparent;
  color: var(--mid-fg-muted);
  border: 1px solid transparent;
  border-radius: var(--mid-radius-md);
  cursor: pointer;
  transition: background var(--mid-motion-fast), color var(--mid-motion-fast);
}
.mid-dt-action:hover { background: var(--mid-surface); color: var(--mid-fg); border-color: var(--mid-border); }

/* Scroll area + table */
.mid-dt-scroll { overflow: auto; max-height: 70vh; }
.mid-dt-table {
  margin: 0;
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  min-width: max-content;
}
.mid-dt-table thead th {
  position: sticky;
  top: 0;
  z-index: 1;
  background: var(--mid-bg);
  text-align: left;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  font-size: var(--mid-font-size-xs);
  font-weight: var(--mid-weight-semibold);
  color: var(--mid-fg-muted);
  border-bottom: 1px solid var(--mid-border);
  white-space: nowrap;
  cursor: pointer;
  user-select: none;
}
.mid-dt-th-label { vertical-align: middle; }
.mid-dt-sort {
  margin-left: var(--mid-space-1);
  vertical-align: middle;
  opacity: 0.35;
  transform: rotate(90deg);
  transition: opacity var(--mid-motion-fast) var(--mid-ease-out), transform var(--mid-motion-fast) var(--mid-ease-out);
}
.mid-dt-table thead th:hover { color: var(--mid-fg); }
.mid-dt-table thead th:hover .mid-dt-sort { opacity: 0.7; }
.mid-dt-table thead th.is-sort-asc { color: var(--mid-fg); }
.mid-dt-table thead th.is-sort-asc .mid-dt-sort { opacity: 1; transform: rotate(-90deg); }
.mid-dt-table thead th.is-sort-desc { color: var(--mid-fg); }
.mid-dt-table thead th.is-sort-desc .mid-dt-sort { opacity: 1; transform: rotate(90deg); }

.mid-dt-table tbody tr {
  transition: background-color var(--mid-motion-fast) var(--mid-ease-out);
}
.mid-dt-table tbody tr:hover { background: var(--mid-surface); }
.mid-dt-table td {
  border-bottom: 1px solid var(--mid-border);
  vertical-align: middle;
  color: var(--mid-fg);
}
.mid-dt-table tbody tr:last-child td { border-bottom: 0; }
.mid-dt-table .is-hidden { display: none !important; }

/* Density modes */
.mid-data-table[data-density="comfy"]    .mid-dt-table th,
.mid-data-table[data-density="comfy"]    .mid-dt-table td { padding: 10px var(--mid-space-4); }
.mid-data-table[data-density="compact"]  .mid-dt-table th,
.mid-data-table[data-density="compact"]  .mid-dt-table td { padding: 4px var(--mid-space-3); font-size: 13px; }
.mid-data-table[data-density="spacious"] .mid-dt-table th,
.mid-data-table[data-density="spacious"] .mid-dt-table td { padding: 14px var(--mid-space-4); }

/* Footer / pagination */
.mid-dt-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: var(--mid-space-2) var(--mid-space-3);
  border-top: 1px solid var(--mid-border);
}
.mid-dt-footer[hidden] { display: none; }
.mid-dt-page-info {
  font-family: var(--mid-font-mono);
  font-size: var(--mid-font-size-xs);
  color: var(--mid-fg-muted);
}
.mid-dt-pager { display: flex; gap: 4px; }
.mid-dt-pager .mid-btn { width: 28px; height: 28px; }

/* Heading anchors (#) shown on hover */
.mid-preview h1, .mid-preview h2, .mid-preview h3,
.mid-preview h4, .mid-preview h5, .mid-preview h6 {
  position: relative;
  scroll-margin-top: var(--mid-space-6);
}
.mid-anchor {
  display: inline-block;
  margin-left: var(--mid-space-2);
  padding: 0 var(--mid-space-1);
  font-weight: var(--mid-weight-normal);
  color: var(--mid-fg-subtle);
  text-decoration: none;
  opacity: 0;
  transition: opacity var(--mid-motion-fast) var(--mid-ease-out);
}
.mid-preview h1:hover .mid-anchor,
.mid-preview h2:hover .mid-anchor,
.mid-preview h3:hover .mid-anchor,
.mid-preview h4:hover .mid-anchor,
.mid-preview h5:hover .mid-anchor,
.mid-preview h6:hover .mid-anchor { opacity: 1; }
.mid-anchor:hover { color: var(--mid-link); text-decoration: none !important; }

/* Image lightbox */
.mid-preview .mid-zoomable { cursor: zoom-in; }
.mid-lightbox {
  position: fixed;
  inset: 0;
  z-index: var(--mid-z-modal);
  display: grid;
  place-items: center;
  background: rgba(0, 0, 0, 0.78);
  cursor: zoom-out;
  animation: mid-fade-in var(--mid-motion-base) var(--mid-ease-out);
}
.mid-lightbox img {
  max-width: 92%;
  max-height: 92%;
  border-radius: var(--mid-radius-md);
  box-shadow: var(--mid-shadow-lg);
}
@keyframes mid-fade-in { from { opacity: 0; } to { opacity: 1; } }

/* Highlight.js theme tied to ui-tokens. Colors mirror GH-light/dark roughly. */
.hljs { color: var(--mid-fg); background: transparent; }
.hljs-comment, .hljs-quote { color: var(--mid-fg-muted); font-style: italic; }
.hljs-keyword, .hljs-selector-tag, .hljs-meta .hljs-keyword { color: #cf222e; font-weight: var(--mid-weight-semibold); }
.hljs-string, .hljs-attr, .hljs-template-variable, .hljs-regexp { color: #0a3069; }
.hljs-number, .hljs-literal, .hljs-variable, .hljs-link { color: #0550ae; }
.hljs-built_in, .hljs-type, .hljs-class .hljs-title { color: #953800; }
.hljs-title.function_, .hljs-title { color: #8250df; }
.hljs-tag, .hljs-name, .hljs-selector-id, .hljs-selector-class { color: #116329; }
.hljs-attribute, .hljs-doctag, .hljs-meta { color: #0550ae; }
.hljs-emphasis { font-style: italic; }
.hljs-strong { font-weight: var(--mid-weight-bold); }

:root.dark .hljs-keyword, :root.dark .hljs-selector-tag, :root.dark .hljs-meta .hljs-keyword { color: #ff7b72; }
:root.dark .hljs-string, :root.dark .hljs-attr, :root.dark .hljs-template-variable, :root.dark .hljs-regexp { color: #a5d6ff; }
:root.dark .hljs-number, :root.dark .hljs-literal, :root.dark .hljs-variable, :root.dark .hljs-link { color: #79c0ff; }
:root.dark .hljs-built_in, :root.dark .hljs-type, :root.dark .hljs-class .hljs-title { color: #ffa657; }
:root.dark .hljs-title.function_, :root.dark .hljs-title { color: #d2a8ff; }
:root.dark .hljs-tag, :root.dark .hljs-name, :root.dark .hljs-selector-id, :root.dark .hljs-selector-class { color: #7ee787; }
:root.dark .hljs-attribute, :root.dark .hljs-doctag, :root.dark .hljs-meta { color: #79c0ff; }
.mid-preview blockquote {
  border-left: 3px solid var(--mid-border-strong);
  padding: var(--mid-space-1) var(--mid-space-4);
  margin: 1em 0;
  color: var(--mid-fg-muted);
  background: transparent;
  border-radius: 0;
}
.mid-preview table:not(.mid-dt-table) {
  border-collapse: collapse;
  width: 100%;
  margin: 1em 0;
  font-size: 0.95em;
}
.mid-preview table:not(.mid-dt-table) th,
.mid-preview table:not(.mid-dt-table) td {
  padding: var(--mid-space-2) var(--mid-space-4);
  text-align: left;
  border-bottom: 1px solid var(--mid-border);
  vertical-align: middle;
}
.mid-preview table:not(.mid-dt-table) th {
  background: transparent;
  font-weight: var(--mid-weight-medium);
  color: var(--mid-fg-muted);
  font-size: var(--mid-font-size-sm);
  letter-spacing: 0.02em;
  border-bottom: 1px solid var(--mid-border);
}
.mid-preview table:not(.mid-dt-table) tbody tr {
  transition: background-color var(--mid-motion-fast) var(--mid-ease-out);
}
.mid-preview table:not(.mid-dt-table) tbody tr:hover {
  background: var(--mid-surface);
}
.mid-preview tr:last-child td { border-bottom: 0; }

/* Header v4 — pure shadcn DataTable look (no thead bg) */
.mid-preview thead { background: transparent; }
.mid-preview th {
  text-transform: uppercase;
  letter-spacing: 0.06em;
  font-size: var(--mid-font-size-xs);
  font-weight: var(--mid-weight-semibold);
  color: var(--mid-fg-muted);
  padding: var(--mid-space-3) var(--mid-space-4);
  border-bottom: 1px solid var(--mid-border);
  height: 40px;
  white-space: nowrap;
}

/* Print mode — hides chrome so PDF export captures only the document */
body.is-printing .mid-titlebar,
body.is-printing .mid-sidebar,
body.is-printing .mid-activity-bar,
body.is-printing .mid-statusbar,
body.is-printing .mid-settings,
body.is-printing #mid-dialog,
body.is-printing #mid-mermaid-editor,
body.is-printing #mid-pin-editor,
body.is-printing #mid-spotlight,
body.is-printing #mid-loader { display: none !important; }
body.is-printing { display: block; grid-template-rows: none; }
body.is-printing .mid-shell { display: block; grid-template-columns: 1fr !important; }
body.is-printing main.viewing { padding: 32px !important; max-width: 760px !important; overflow: visible !important; }

/* Footnotes (#212) */
.mid-fn-ref { font-size: 0.78em; }
.mid-fn-ref a { color: var(--mid-link); text-decoration: none; padding: 0 1px; }
.mid-fn-ref a:hover { text-decoration: underline; }
.mid-footnotes {
  margin-top: var(--mid-space-10);
  padding-top: var(--mid-space-4);
  border-top: 1px solid var(--mid-border);
  color: var(--mid-fg-muted);
  font-size: var(--mid-font-size-sm);
}
.mid-footnotes h2 {
  font-size: var(--mid-font-size-base);
  font-weight: var(--mid-weight-semibold);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  border: 0 !important;
  padding: 0 !important;
  margin-bottom: var(--mid-space-3);
  color: var(--mid-fg);
}
.mid-footnotes ol { padding-left: var(--mid-space-5); margin: 0; }
.mid-footnotes li { margin: var(--mid-space-1) 0; }
.mid-fn-back {
  margin-left: var(--mid-space-1);
  text-decoration: none;
  color: var(--mid-link);
  font-family: var(--mid-font-mono);
}

/* Definition lists (#213) */
.mid-dl {
  display: grid;
  grid-template-columns: max-content 1fr;
  gap: var(--mid-space-2) var(--mid-space-4);
  margin: 1em 0;
}
.mid-dl dt {
  font-weight: var(--mid-weight-semibold);
  color: var(--mid-fg);
  font-family: var(--mid-font-mono);
  font-size: 0.92em;
}
.mid-dl dd {
  margin: 0;
  color: var(--mid-fg);
}

/* Inline  inside table cells styled as shadcn badges */
.mid-preview td code,
.mid-preview th code {
  display: inline-flex;
  align-items: center;
  padding: 1px var(--mid-space-2);
  background: var(--mid-surface);
  border: 1px solid var(--mid-border);
  border-radius: var(--mid-radius-sm);
  color: var(--mid-fg);
  font-family: var(--mid-font-mono);
  font-size: 0.78em;
  font-weight: var(--mid-weight-medium);
  letter-spacing: 0.01em;
  white-space: nowrap;
}
.mid-preview img { max-width: 100%; border-radius: var(--mid-radius-sm); }
.mid-preview hr {
  border: 0;
  border-top: 1px solid var(--mid-border);
  margin: var(--mid-space-8) 0;
}
.mid-preview .mermaid {
  background: var(--mid-code-bg);
  border: 1px solid var(--mid-border);
  border-radius: var(--mid-radius-md);
  padding: var(--mid-space-3);
  margin: 1em 0;
  position: relative;
  overflow: hidden;
}
.mid-mermaid-viewport {
  width: 100%;
  height: 420px;
  overflow: hidden;
  position: relative;
  border-radius: var(--mid-radius-sm);
}
.mid-mermaid-viewport svg {
  position: absolute;
  top: 0;
  left: 0;
  max-width: none;
  width: auto;
  height: auto;
  user-select: none;
  -webkit-user-drag: none;
}

main.editing { padding: 0; max-width: none; display: block; height: 100%; }
main.editing textarea {
  width: 100%;
  height: 100%;
  padding: var(--mid-space-4) var(--mid-space-6);
  font-family: var(--mid-font-mono);
  font-size: 14px;
  line-height: 1.55;
  background: var(--mid-bg);
  color: var(--mid-fg);
  border: 0;
  outline: none;
  resize: none;
  tab-size: 2;
  white-space: pre;
}

/* Welcome / empty-state hero */
.mid-welcome {
  max-width: 540px;
  margin: var(--mid-space-12) auto;
  padding: var(--mid-space-8) var(--mid-space-6);
  text-align: center;
}
.mid-welcome-glyph {
  width: 84px;
  height: 84px;
  margin: 0 auto var(--mid-space-4);
}
.mid-welcome-glyph svg { width: 100%; height: 100%; display: block; }
.mid-welcome-title {
  font-size: 1.85em;
  font-weight: var(--mid-weight-semibold);
  margin: 0 0 var(--mid-space-1);
  letter-spacing: -0.01em;
}
.mid-welcome-tagline {
  margin: 0 0 var(--mid-space-8);
  color: var(--mid-fg-muted);
  font-size: var(--mid-font-size-base);
}
.mid-welcome-actions {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--mid-space-2);
  margin-bottom: var(--mid-space-8);
}
.mid-welcome-action {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: var(--mid-space-3);
  padding: var(--mid-space-3) var(--mid-space-4);
  font-family: inherit;
  font-size: var(--mid-font-size-sm);
  color: var(--mid-fg);
  background: var(--mid-surface);
  border: 1px solid var(--mid-border);
  border-radius: var(--mid-radius-md);
  cursor: pointer;
  text-align: left;
  transition:
    background var(--mid-motion-fast) var(--mid-ease-out),
    border-color var(--mid-motion-fast) var(--mid-ease-out),
    transform var(--mid-motion-fast) var(--mid-ease-out);
}
.mid-welcome-action:hover:not(:disabled) {
  background: var(--mid-surface-hover);
  border-color: var(--mid-border-strong);
  transform: translateY(-1px);
}
.mid-welcome-action:disabled { opacity: 0.45; cursor: not-allowed; }
.mid-welcome-action-label { font-weight: var(--mid-weight-medium); }
.mid-welcome-action-kbd {
  font-family: var(--mid-font-mono);
  font-size: var(--mid-font-size-xs);
  color: var(--mid-fg-muted);
}

.mid-welcome-recent {
  text-align: left;
  border-top: 1px solid var(--mid-border);
  padding-top: var(--mid-space-5);
}
.mid-welcome-recent-title {
  font-size: var(--mid-font-size-xs);
  font-weight: var(--mid-weight-semibold);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--mid-fg-muted);
  margin-bottom: var(--mid-space-2);
}
.mid-welcome-recent-item {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: var(--mid-space-2);
  width: 100%;
  padding: var(--mid-space-1) var(--mid-space-2);
  font-family: inherit;
  font-size: var(--mid-font-size-sm);
  color: var(--mid-fg);
  background: transparent;
  border: 0;
  border-radius: var(--mid-radius-sm);
  cursor: pointer;
  text-align: left;
}
.mid-welcome-recent-item:hover { background: var(--mid-surface-hover); }
.mid-welcome-recent-name { font-weight: var(--mid-weight-medium); }
.mid-welcome-recent-path {
  font-family: var(--mid-font-mono);
  font-size: var(--mid-font-size-xs);
  color: var(--mid-fg-subtle);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  max-width: 200px;
}

/* Outline rail (#252) — right-side fast-access menu (TOC) for markdown headings.
 * Visible by default in view + split modes; hidden in edit-only mode and
 * during print (`body.is-printing`) so PDF export stays clean. */
:root { --mid-outline-w: 220px; }

body.has-outline .mid-shell { grid-template-columns: 44px 1fr var(--mid-outline-w); }
body.has-outline.has-sidebar .mid-shell {
  grid-template-columns: 44px var(--mid-sidebar-w) 1fr var(--mid-outline-w);
}

.mid-outline {
  display: flex;
  flex-direction: column;
  min-width: 0;
  min-height: 0;
  overflow: hidden;
  background: var(--mid-bg);
  border-left: 1px solid var(--mid-border);
}
.mid-outline[hidden] { display: none; }

.mid-outline-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--mid-space-2);
  padding: var(--mid-space-2) var(--mid-space-3);
  border-bottom: 1px solid var(--mid-border);
  height: 40px;
  flex-shrink: 0;
}
.mid-outline-title {
  font-size: var(--mid-font-size-xs);
  font-weight: var(--mid-weight-semibold);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--mid-fg-muted);
}

.mid-outline-list {
  flex: 1;
  overflow-y: auto;
  overflow-x: hidden;
  padding: var(--mid-space-2) 0;
  display: flex;
  flex-direction: column;
}

.mid-outline-item {
  display: block;
  padding: 4px var(--mid-space-3) 4px var(--mid-space-4);
  font-size: var(--mid-font-size-sm);
  line-height: 1.35;
  color: var(--mid-fg-muted);
  text-decoration: none;
  border-left: 2px solid transparent;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  cursor: pointer;
  transition: background var(--mid-motion-fast), color var(--mid-motion-fast);
}
.mid-outline-item:hover { background: var(--mid-surface-hover); color: var(--mid-fg); }
.mid-outline-item.is-active {
  color: var(--mid-fg);
  background: var(--mid-surface);
  border-left-color: var(--mid-accent, var(--mid-link));
  font-weight: var(--mid-weight-medium);
}
.mid-outline-item[data-level="1"] { padding-left: var(--mid-space-3); font-weight: var(--mid-weight-medium); color: var(--mid-fg); }
.mid-outline-item[data-level="2"] { padding-left: var(--mid-space-4); }
.mid-outline-item[data-level="3"] { padding-left: var(--mid-space-5); }
.mid-outline-item[data-level="4"] { padding-left: var(--mid-space-6); }
.mid-outline-item[data-level="5"] { padding-left: calc(var(--mid-space-6) + var(--mid-space-2)); }
.mid-outline-item[data-level="6"] { padding-left: calc(var(--mid-space-6) + var(--mid-space-3)); }

.mid-outline-empty {
  padding: var(--mid-space-3) var(--mid-space-4);
  color: var(--mid-fg-subtle);
  font-size: var(--mid-font-size-sm);
  font-style: italic;
}

#status-outline[data-active="false"] { color: var(--mid-fg-subtle); }
#status-outline[data-active="false"] .mid-icon { color: var(--mid-fg-subtle); }

/* Print mode — keep the rail out of PDF / image exports. */
body.is-printing .mid-outline { display: none !important; }
body.is-printing .mid-shell { grid-template-columns: 1fr !important; }



/* === Settings page (full-screen, ported from orchestra components) === */
/* Built against existing --mid-* tokens; mirrors the layout patterns from
 * /Users/fadymondy/Sites/orchestra-agents/apps/components/{settings,theme}.
 * Issues: #232 (page shell), #233 (theme picker), #234 (UI parity).
 */

.mid-settings-page {
  position: fixed;
  inset: var(--mid-titlebar-h) 0 0 0;
  z-index: var(--mid-z-modal);
  display: grid;
  grid-template-rows: 48px 1fr;
  background: var(--mid-bg);
  color: var(--mid-fg);
}
.mid-settings-page[hidden] { display: none; }

.mid-settings-page-topbar {
  display: flex;
  align-items: center;
  gap: var(--mid-space-3);
  padding: 0 var(--mid-space-4);
  border-bottom: 1px solid var(--mid-border);
  background: var(--mid-bg);
}
.mid-settings-back { transform: rotate(180deg); }

.mid-settings-page-crumbs {
  display: flex;
  align-items: center;
  gap: var(--mid-space-2);
  font-size: var(--mid-font-size-sm);
}
.mid-settings-page-crumb--root { color: var(--mid-fg-muted); }
.mid-settings-page-crumb-sep { color: var(--mid-fg-subtle); }
.mid-settings-page-crumb-active { font-weight: var(--mid-weight-semibold); color: var(--mid-fg); }

.mid-settings-page-body {
  display: grid;
  grid-template-columns: 240px 1fr;
  min-height: 0;
  overflow: hidden;
}

/* ── Left rail ────────────────────────────────────────── */
.mid-settings-nav {
  display: flex;
  flex-direction: column;
  border-right: 1px solid var(--mid-border);
  background: var(--mid-surface);
  overflow: hidden;
  user-select: none;
}
.mid-settings-nav__header {
  padding: var(--mid-space-4) var(--mid-space-4) var(--mid-space-3);
  flex-shrink: 0;
}
.mid-settings-nav__title {
  margin: 0;
  font-size: var(--mid-font-size-base);
  font-weight: var(--mid-weight-semibold);
  color: var(--mid-fg);
}
.mid-settings-nav__subtitle {
  margin: 4px 0 0;
  font-size: var(--mid-font-size-xs);
  color: var(--mid-fg-muted);
}
.mid-settings-nav__list {
  display: flex;
  flex-direction: column;
  gap: 2px;
  flex: 1;
  overflow-y: auto;
  overflow-x: hidden;
  padding: var(--mid-space-1) var(--mid-space-2) var(--mid-space-3);
}
.mid-settings-nav__item {
  display: flex;
  align-items: center;
  gap: var(--mid-space-3);
  width: 100%;
  padding: 8px 12px;
  font-size: var(--mid-font-size-sm);
  font-family: inherit;
  border-radius: var(--mid-radius-md);
  border: none;
  background: transparent;
  color: var(--mid-fg);
  cursor: pointer;
  transition: background-color var(--mid-motion-fast), color var(--mid-motion-fast);
  text-align: left;
}
.mid-settings-nav__item:hover { background: var(--mid-surface-hover); }
.mid-settings-nav__item.is-active {
  background: var(--mid-accent);
  color: var(--mid-accent-fg);
}
.mid-settings-nav__item.is-active .mid-icon { color: var(--mid-accent-fg); }
.mid-settings-nav__icon {
  display: inline-flex;
  align-items: center;
  width: 18px;
  height: 18px;
  flex-shrink: 0;
  color: inherit;
}

/* ── Right pane ───────────────────────────────────────── */
.mid-settings-main {
  overflow-y: auto;
  padding: var(--mid-space-6) var(--mid-space-8);
  outline: none;
}
.mid-settings-main:focus-visible {
  outline: 2px solid var(--mid-accent);
  outline-offset: -2px;
}

/* Section card (group) — label/desc + body, ported from reference */
.mid-settings-form {
  display: flex;
  flex-direction: column;
  gap: var(--mid-space-5);
  max-width: 880px;
  margin: 0 auto;
}
.mid-settings-group {
  border: 1px solid var(--mid-border);
  border-radius: var(--mid-radius-lg);
  background: var(--mid-bg);
  overflow: hidden;
}
.mid-settings-group__header {
  padding: var(--mid-space-4) var(--mid-space-5);
  border-bottom: 1px solid var(--mid-border);
  background: var(--mid-surface);
}
.mid-settings-group__title {
  margin: 0;
  font-size: var(--mid-font-size-base);
  font-weight: var(--mid-weight-semibold);
  color: var(--mid-fg);
}
.mid-settings-group__description {
  margin: 4px 0 0;
  font-size: var(--mid-font-size-sm);
  color: var(--mid-fg-muted);
  line-height: 1.45;
}
.mid-settings-group__body {
  padding: var(--mid-space-4) var(--mid-space-5);
  display: flex;
  flex-direction: column;
  gap: var(--mid-space-4);
}
.mid-settings-empty {
  margin: 0;
  font-size: var(--mid-font-size-sm);
  color: var(--mid-fg-muted);
  line-height: 1.5;
}

/* Setting row — leading label/desc, trailing control */
.mid-setting-row {
  display: flex;
  flex-direction: column;
  gap: var(--mid-space-2);
}
.mid-setting-row--inline {
  flex-direction: row;
  align-items: center;
  justify-content: space-between;
  gap: var(--mid-space-4);
}
.mid-setting-row__text { min-width: 0; }
.mid-setting-row__label {
  font-size: var(--mid-font-size-sm);
  font-weight: var(--mid-weight-medium);
  color: var(--mid-fg);
}
.mid-setting-row__description {
  margin: 4px 0 0;
  font-size: var(--mid-font-size-xs);
  color: var(--mid-fg-muted);
  line-height: 1.45;
}
.mid-setting-row__control { width: 100%; }
.mid-setting-row--inline .mid-setting-row__control { width: auto; flex-shrink: 0; }

/* Range row — slider + numeric readout */
.mid-range-row {
  display: flex;
  gap: var(--mid-space-3);
  align-items: center;
}
.mid-range-row .mid-settings-control { flex: 1; }
.mid-range-row__value {
  font-size: var(--mid-font-size-sm);
  color: var(--mid-fg);
  min-width: 64px;
  text-align: right;
  font-variant-numeric: tabular-nums;
}

/* ── Mode toggle (light / dark / system) ───────────── */
.mid-mode-pills {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--mid-space-3);
}
.mid-mode-pill {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--mid-space-2);
  padding: 12px 16px;
  font-size: var(--mid-font-size-sm);
  font-family: inherit;
  font-weight: var(--mid-weight-medium);
  border: 1px solid var(--mid-border);
  border-radius: var(--mid-radius-md);
  background: var(--mid-bg);
  color: var(--mid-fg);
  cursor: pointer;
  transition:
    border-color var(--mid-motion-fast),
    background var(--mid-motion-fast),
    color var(--mid-motion-fast);
}
.mid-mode-pill:hover { border-color: var(--mid-border-strong); background: var(--mid-surface); }
.mid-mode-pill.is-active {
  border-color: var(--mid-accent);
  background: var(--mid-accent);
  color: var(--mid-accent-fg);
}
.mid-mode-pill__icon {
  display: inline-flex;
  align-items: center;
  width: 16px;
  height: 16px;
}

/* ── Theme grid ────────────────────────────────────── */
.mid-theme-grid__group-label {
  margin: var(--mid-space-2) 0 var(--mid-space-3);
  font-size: var(--mid-font-size-xs);
  font-weight: var(--mid-weight-semibold);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--mid-fg-muted);
}
.mid-theme-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
  gap: var(--mid-space-3);
  margin-bottom: var(--mid-space-4);
}
.mid-theme-card {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 0;
  padding: 0;
  border: 2px solid;
  border-radius: var(--mid-radius-md);
  cursor: pointer;
  text-align: left;
  font-family: inherit;
  overflow: hidden;
  transition:
    transform var(--mid-motion-fast) var(--mid-ease-out),
    box-shadow var(--mid-motion-fast) var(--mid-ease-out);
}
.mid-theme-card:hover { transform: translateY(-2px); box-shadow: var(--mid-shadow-md); }
.mid-theme-card.is-active { box-shadow: 0 0 0 2px var(--mid-accent); }

.mid-theme-card__preview {
  display: flex;
  flex-direction: column;
  gap: 6px;
  padding: 14px 14px 10px;
}
.mid-theme-card__bar {
  display: block;
  height: 6px;
  border-radius: 3px;
}

.mid-theme-card__meta {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 8px 12px 10px;
  font-size: var(--mid-font-size-sm);
  border-top: 1px solid currentColor;
  border-top-color: rgba(127,127,127,0.18);
}
.mid-theme-card__name {
  font-weight: var(--mid-weight-medium);
  color: inherit;
}
.mid-theme-card__tag {
  font-size: 10px;
  font-weight: var(--mid-weight-semibold);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  padding: 2px 6px;
  border-radius: 4px;
}

/* ── KV block (advanced section diagnostics) ───────── */
.mid-kv-block {
  display: flex;
  flex-direction: column;
  gap: var(--mid-space-2);
}
.mid-kv-row {
  display: grid;
  grid-template-columns: 120px 1fr;
  gap: var(--mid-space-3);
  align-items: baseline;
  font-size: var(--mid-font-size-sm);
}
.mid-kv-row > span { color: var(--mid-fg-muted); }
.mid-kv-row > code {
  font-family: var(--mid-font-mono, ui-monospace, monospace);
  font-size: var(--mid-font-size-xs);
  color: var(--mid-fg);
  word-break: break-all;
}

/* While the settings page is open, dim/hide the underlying shell to keep
 * keyboard focus and pointer events from leaking into the editor. */
body.settings-open .mid-shell { visibility: hidden; }
body.settings-open .mid-statusbar { visibility: hidden; }

/* ── Responsive: collapse the rail under narrow widths ───────── */
@media (max-width: 720px) {
  .mid-settings-page-body { grid-template-columns: 1fr; grid-template-rows: auto 1fr; }
  .mid-settings-nav {
    border-right: none;
    border-bottom: 1px solid var(--mid-border);
  }
  .mid-settings-nav__header { display: none; }
  .mid-settings-nav__list {
    flex-direction: row;
    overflow-x: auto;
    padding: var(--mid-space-2);
    gap: var(--mid-space-1);
  }
  .mid-settings-nav__item { white-space: nowrap; flex-shrink: 0; }
  .mid-settings-main { padding: var(--mid-space-4); }
}

/* ─────────────────────────────────────────────────────────────────────────────
   Importer plugin chooser (#246)
   Lives at the bottom of the file so concurrent edits to other surfaces don't
   collide with this surface.
   ───────────────────────────────────────────────────────────────────────────── */
.mid-importers-dialog {
  border: 1px solid var(--mid-border);
  border-radius: var(--mid-radius-lg, 12px);
  background: var(--mid-bg);
  color: var(--mid-fg);
  padding: 0;
  width: min(520px, 90vw);
  max-height: 80vh;
  box-shadow: 0 24px 48px rgba(0, 0, 0, 0.35);
}
.mid-importers-dialog::backdrop { background: rgba(0, 0, 0, 0.4); }
.mid-importers-form { display: flex; flex-direction: column; gap: 0; }
.mid-importers-header {
  display: flex; align-items: center; justify-content: space-between;
  padding: 14px 18px;
  border-bottom: 1px solid var(--mid-border);
}
.mid-importers-header h2 { margin: 0; font-size: var(--mid-font-size-lg, 16px); font-weight: 600; }
.mid-importers-list { display: flex; flex-direction: column; padding: 8px; max-height: 56vh; overflow-y: auto; }
.mid-importers-empty {
  padding: 24px 16px;
  color: var(--mid-fg-muted);
  font-size: var(--mid-font-size-sm);
  text-align: center;
}
.mid-importers-row {
  display: flex; align-items: center; gap: 12px;
  padding: 10px 12px;
  border: 1px solid transparent;
  border-radius: var(--mid-radius, 8px);
  background: transparent;
  color: inherit;
  text-align: left;
  cursor: pointer;
  font: inherit;
}
.mid-importers-row:hover,
.mid-importers-row:focus-visible {
  background: var(--mid-surface-hover, var(--mid-surface, rgba(127,127,127,0.08)));
  border-color: var(--mid-border);
  outline: none;
}
.mid-importers-row-text { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.mid-importers-row-name { font-weight: 600; }
.mid-importers-row-desc { color: var(--mid-fg-muted); font-size: var(--mid-font-size-sm); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mid-importers-progress { padding: 18px; display: flex; flex-direction: column; gap: 10px; }
.mid-importers-progress-text { font-weight: 600; }
.mid-importers-progress-log {
  list-style: none; margin: 0; padding: 8px;
  background: var(--mid-code-bg, rgba(127,127,127,0.06));
  border-radius: var(--mid-radius, 8px);
  font-family: var(--mid-font-mono, ui-monospace, Menlo, monospace);
  font-size: var(--mid-font-size-sm, 12px);
  max-height: 220px; overflow-y: auto;
}
.mid-importers-progress-log li { padding: 2px 4px; }
.mid-importers-progress-log-line { color: var(--mid-fg-muted); }

/* === Warehouse onboarding wizard (#236, redesigned in #300) ===========
 * Two-stage layout:
 *   1. Intro page (no step shown) — explains the warehouse concept.
 *   2. Three-step flow with a top stepper, single-card body, and footer
 *      Back/Next/Skip buttons. One step's content is visible at a time.
 */
.mid-onboarding {
  border: 0;
  padding: 0;
  background: transparent;
  margin: auto;
  width: min(640px, 92vw);
  color: var(--mid-fg);
}
.mid-onboarding::backdrop {
  background: rgba(0, 0, 0, 0.55);
  backdrop-filter: blur(4px);
}
.mid-onboarding-frame {
  background: var(--mid-bg);
  border: 1px solid var(--mid-border);
  border-radius: var(--mid-radius-lg);
  box-shadow: var(--mid-shadow-lg);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  max-height: 88vh;
}
.mid-onboarding-header {
  display: flex;
  align-items: center;
  gap: var(--mid-space-3);
  padding: var(--mid-space-4) var(--mid-space-5);
  border-bottom: 1px solid var(--mid-border);
}
.mid-onboarding-title {
  flex: 1;
  margin: 0;
  font-size: var(--mid-font-size-lg);
  font-weight: var(--mid-weight-semibold);
}
/* Stepper rail (1·2·3 pills) — `is-active` for current, `is-done` for past. */
.mid-onboarding-steps {
  display: flex;
  align-items: center;
  gap: var(--mid-space-2);
  list-style: none;
  margin: 0;
  padding: var(--mid-space-3) var(--mid-space-5);
  border-bottom: 1px solid var(--mid-border);
  background: var(--mid-surface);
  font-size: var(--mid-font-size-xs);
  color: var(--mid-fg-muted);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
.mid-onboarding-steps li {
  position: relative;
  padding: 4px var(--mid-space-3);
  border-radius: var(--mid-radius-pill);
  border: 1px solid var(--mid-border);
  background: var(--mid-bg);
  transition: color var(--mid-motion-fast), background var(--mid-motion-fast), border-color var(--mid-motion-fast);
}
.mid-onboarding-steps li.is-active {
  color: var(--mid-fg);
  background: var(--mid-fg);
  color: var(--mid-bg);
  border-color: var(--mid-fg);
}
.mid-onboarding-steps li.is-done {
  color: var(--mid-fg);
  background: var(--mid-bg);
  border-color: var(--mid-fg);
  opacity: 0.7;
}
.mid-onboarding-steps[hidden] { display: none; }
/* Body — per-step single card. `mid-onboarding-intro` is the landing page. */
.mid-onboarding-body {
  flex: 1;
  overflow-y: auto;
  padding: var(--mid-space-5);
  font-size: var(--mid-font-size-sm);
  line-height: var(--mid-line-relaxed);
}
.mid-onboarding-body p { margin: 0 0 var(--mid-space-3); color: var(--mid-fg); }
.mid-onboarding-body p:last-child { margin-bottom: 0; }
.mid-onboarding-body h3 {
  margin: 0 0 var(--mid-space-2);
  font-size: var(--mid-font-size-base);
  font-weight: var(--mid-weight-semibold);
}
.mid-onboarding-intro {
  text-align: center;
  padding: var(--mid-space-4) 0;
}
.mid-onboarding-intro-glyph {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 64px;
  height: 64px;
  margin-bottom: var(--mid-space-4);
  background: var(--mid-surface);
  color: var(--mid-fg);
  border-radius: 50%;
}
.mid-onboarding-intro-glyph .mid-icon { width: 28px; height: 28px; }
.mid-onboarding-intro h2 {
  font-size: var(--mid-font-size-lg);
  font-weight: var(--mid-weight-semibold);
  margin: 0 0 var(--mid-space-3);
}
.mid-onboarding-intro p {
  max-width: 440px;
  margin: 0 auto var(--mid-space-3);
  color: var(--mid-fg-muted);
}
.mid-onboarding-intro-checks {
  list-style: none;
  margin: var(--mid-space-4) auto 0;
  padding: 0;
  max-width: 360px;
  text-align: left;
  display: grid;
  gap: var(--mid-space-2);
}
.mid-onboarding-intro-checks li {
  display: flex;
  align-items: center;
  gap: var(--mid-space-2);
  font-size: var(--mid-font-size-sm);
  color: var(--mid-fg-muted);
}
.mid-onboarding-intro-checks .mid-icon {
  width: 14px; height: 14px;
  color: var(--mid-link);
}
/* Per-step layout */
.mid-onboarding-step h3 + p { margin-top: 0; }
.mid-onboarding-step-status {
  display: flex;
  align-items: center;
  gap: var(--mid-space-2);
  padding: var(--mid-space-3) var(--mid-space-4);
  margin-bottom: var(--mid-space-4);
  background: var(--mid-surface);
  border: 1px solid var(--mid-border);
  border-radius: var(--mid-radius-md);
  font-size: var(--mid-font-size-sm);
}
.mid-onboarding-step-status.is-ok {
  border-color: var(--mid-link);
  color: var(--mid-fg);
}
.mid-onboarding-step-status.is-warn {
  border-color: var(--mid-warning, #d97706);
  color: var(--mid-fg);
}
.mid-onboarding-card {
  border: 1px solid var(--mid-border);
  border-radius: var(--mid-radius-md);
  padding: var(--mid-space-4);
  margin-bottom: var(--mid-space-3);
  background: var(--mid-bg);
}
.mid-onboarding-card-title {
  display: flex;
  align-items: center;
  gap: var(--mid-space-2);
  margin: 0 0 var(--mid-space-2);
  font-size: var(--mid-font-size-sm);
  font-weight: var(--mid-weight-semibold);
}
.mid-onboarding-card-body {
  font-size: var(--mid-font-size-sm);
  color: var(--mid-fg-muted);
}
.mid-onboarding-cmd-row {
  display: flex;
  align-items: center;
  gap: var(--mid-space-2);
  margin: var(--mid-space-3) 0;
  padding: var(--mid-space-2) var(--mid-space-3);
  background: var(--mid-code-bg, var(--mid-surface));
  border: 1px solid var(--mid-border);
  border-radius: var(--mid-radius-sm);
  font-family: var(--mid-font-mono);
  font-size: var(--mid-font-size-sm);
}
.mid-onboarding-cmd-row code { flex: 1; background: transparent; padding: 0; }
.mid-onboarding-cmd-row .mid-btn {
  padding: 2px var(--mid-space-2);
  font-size: var(--mid-font-size-xs);
}
.mid-onboarding-actions {
  display: flex;
  gap: var(--mid-space-2);
  margin-top: var(--mid-space-3);
  flex-wrap: wrap;
}
.mid-onboarding-error {
  border: 1px solid var(--mid-danger, #dc2626);
  background: rgba(220, 38, 38, 0.08);
  color: var(--mid-fg);
  padding: var(--mid-space-2) var(--mid-space-3);
  border-radius: var(--mid-radius-md);
  font-size: var(--mid-font-size-xs);
  white-space: pre-wrap;
  margin-top: var(--mid-space-3);
}
.mid-onboarding-radio-group {
  display: grid;
  gap: var(--mid-space-2);
}
.mid-onboarding-radio {
  display: flex;
  align-items: flex-start;
  gap: var(--mid-space-3);
  padding: var(--mid-space-3) var(--mid-space-4);
  border: 1px solid var(--mid-border);
  border-radius: var(--mid-radius-md);
  background: var(--mid-bg);
  cursor: pointer;
  transition: border-color var(--mid-motion-fast), background var(--mid-motion-fast);
}
.mid-onboarding-radio:hover { background: var(--mid-surface); }
.mid-onboarding-radio.is-selected {
  border-color: var(--mid-fg);
  background: var(--mid-surface);
}
.mid-onboarding-radio input[type="radio"] { margin-top: 4px; }
.mid-onboarding-radio-body { flex: 1; }
.mid-onboarding-radio-title {
  font-size: var(--mid-font-size-sm);
  font-weight: var(--mid-weight-medium);
  margin-bottom: 2px;
}
.mid-onboarding-radio-desc {
  font-size: var(--mid-font-size-xs);
  color: var(--mid-fg-muted);
}
.mid-onboarding-input {
  width: 100%;
  padding: var(--mid-space-2) var(--mid-space-3);
  background: var(--mid-bg);
  border: 1px solid var(--mid-border);
  border-radius: var(--mid-radius-sm);
  color: var(--mid-fg);
  font-family: inherit;
  font-size: var(--mid-font-size-sm);
}
.mid-onboarding-input:focus {
  outline: none;
  border-color: var(--mid-fg);
  box-shadow: 0 0 0 1px var(--mid-fg);
}
.mid-onboarding-repo-list {
  list-style: none;
  margin: var(--mid-space-2) 0 0;
  padding: 0;
  max-height: 220px;
  overflow-y: auto;
  border: 1px solid var(--mid-border);
  border-radius: var(--mid-radius-md);
}
.mid-onboarding-repo-row {
  display: flex;
  align-items: center;
  gap: var(--mid-space-2);
  padding: var(--mid-space-2) var(--mid-space-3);
  cursor: pointer;
  border-bottom: 1px solid var(--mid-border);
  font-size: var(--mid-font-size-sm);
}
.mid-onboarding-repo-row:last-child { border-bottom: 0; }
.mid-onboarding-repo-row:hover { background: var(--mid-surface); }
.mid-onboarding-repo-row.is-selected { background: var(--mid-fg); color: var(--mid-bg); }
.mid-onboarding-repo-name { flex: 1; font-weight: var(--mid-weight-medium); }
.mid-onboarding-repo-vis {
  font-size: var(--mid-font-size-xs);
  color: var(--mid-fg-muted);
  font-family: var(--mid-font-mono);
}
.mid-onboarding-repo-row.is-selected .mid-onboarding-repo-vis { color: var(--mid-bg); opacity: 0.8; }
/* Footer */
.mid-onboarding-footer {
  display: flex;
  align-items: center;
  gap: var(--mid-space-2);
  padding: var(--mid-space-3) var(--mid-space-5);
  border-top: 1px solid var(--mid-border);
  background: var(--mid-surface);
}
.mid-onboarding-footer .mid-onboarding-spacer { flex: 1; }

/* Tab manager (#287) — VSCode-style strip above the editor.
 *
 * The tabstrip lives inside `.mid-editor-area` (flex column) so it claims its
 * natural height while `main#root` consumes the rest. We hide the strip when
 * empty (no tabs) so the welcome state stays calm. */
.mid-editor-area {
  display: flex;
  flex-direction: column;
  min-width: 0;
  min-height: 0;
  overflow: hidden;
}
.mid-editor-area > main { flex: 1 1 auto; min-height: 0; }

.mid-tabstrip {
  display: flex;
  flex-direction: row;
  align-items: stretch;
  gap: 0;
  flex: 0 0 auto;
  height: 32px;
  background: var(--mid-surface);
  border-bottom: 1px solid var(--mid-border);
  overflow-x: auto;
  overflow-y: hidden;
  scrollbar-width: thin;
  user-select: none;
}
.mid-tabstrip[hidden] { display: none; }

.mid-tab {
  display: inline-flex;
  align-items: center;
  gap: var(--mid-space-2);
  padding: 0 var(--mid-space-2) 0 var(--mid-space-3);
  height: 100%;
  max-width: 200px;
  min-width: 80px;
  border: 0;
  border-right: 1px solid var(--mid-border);
  background: transparent;
  color: var(--mid-fg-muted);
  font-size: var(--mid-font-size-sm);
  font-family: inherit;
  cursor: pointer;
  white-space: nowrap;
  position: relative;
  flex: 0 0 auto;
}
.mid-tab:hover { background: var(--mid-surface-hover); color: var(--mid-fg); }
.mid-tab.is-active {
  background: var(--mid-bg);
  color: var(--mid-fg);
  /* Top accent bar — mirrors VSCode's active-tab affordance. */
  box-shadow: inset 0 2px 0 0 var(--mid-accent, var(--mid-link));
}
.mid-tab.is-active::after {
  /* Pulled-down divider that visually merges the active tab with the body
   * underneath, masking the strip's bottom border. */
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  bottom: -1px;
  height: 1px;
  background: var(--mid-bg);
}
.mid-tab.is-dragging { opacity: 0.5; }
.mid-tab.is-drop-before { box-shadow: inset 2px 0 0 0 var(--mid-link); }
.mid-tab.is-drop-after { box-shadow: inset -2px 0 0 0 var(--mid-link); }

.mid-tab__icon {
  display: inline-flex;
  align-items: center;
  flex: 0 0 auto;
  color: inherit;
}
.mid-tab__label {
  flex: 1 1 auto;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.mid-tab__label.is-dirty::after {
  content: ' •';
  color: var(--mid-link);
}
.mid-tab__close {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  border-radius: 4px;
  border: 0;
  background: transparent;
  color: var(--mid-fg-muted);
  cursor: pointer;
  flex: 0 0 auto;
  font-size: 14px;
  line-height: 1;
  padding: 0;
  opacity: 0.7;
}
.mid-tab__close:hover { background: var(--mid-surface-hover); color: var(--mid-fg); opacity: 1; }
.mid-tab.is-active .mid-tab__close { opacity: 1; }

/* Tab manager: window detach (#308).
 *
 * `.mid-detach-edge` is an overlay rectangle pinned to the entire content
 * area; it lights up while a tab is being dragged outside the window's
 * bounds, telegraphing that releasing here will spawn a fresh BrowserWindow.
 * The overlay is `pointer-events: none` so it never interferes with the
 * native HTML5 DnD gesture.
 */
.mid-detach-edge {
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 9000;
  border: 2px dashed transparent;
  border-radius: 6px;
  transition: border-color 120ms ease, background 120ms ease;
}
.mid-detach-edge.is-active {
  border-color: var(--mid-accent, var(--mid-link));
  background: color-mix(in srgb, var(--mid-accent, var(--mid-link)) 6%, transparent);
}

/* Tab split-screen (#309) — second editor column.
 *
 * `.mid-split-root` is the horizontal grid (left-col, divider, right-col) that
 * replaces a flat `#editor-area` when split mode is on. Each column reuses
 * the existing `.mid-editor-area` styling via `.mid-editor-column`. The
 * inactive column shows a static markdown preview with reduced opacity so the
 * user can tell which column is the live editor at a glance.
 *
 * The drop indicator is a thin vertical bar painted over the column's edge
 * during a tab drag — see `setupSplitEdgeDropDetection` in renderer.ts.
 */
.mid-split-root {
  display: grid;
  grid-template-columns: 50% 6px 1fr;
  min-width: 0;
  min-height: 0;
  height: 100%;
  width: 100%;
  overflow: hidden;
}
.mid-editor-column {
  display: flex;
  flex-direction: column;
  min-width: 0;
  min-height: 0;
  overflow: hidden;
  position: relative;
}
.mid-editor-column:not(.is-active) { opacity: 0.92; }
.mid-editor-column:not(.is-active)::before {
  /* Subtle dimming overlay so it's obvious which column is the live editor.
   * Pointer-events disabled so clicks still reach the column for promotion. */
  content: '';
  position: absolute;
  inset: 0;
  background: var(--mid-bg);
  opacity: 0.06;
  pointer-events: none;
  z-index: 0;
}
.mid-editor-column.is-active::after {
  /* Top accent stripe on the active column, matching the active tab's accent. */
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 1px;
  background: var(--mid-accent, var(--mid-link));
  pointer-events: none;
  z-index: 1;
}
.mid-split-divider {
  background: var(--mid-border);
  cursor: col-resize;
  user-select: none;
  position: relative;
}
.mid-split-divider:hover { background: var(--mid-link); }
.mid-split-divider::before {
  /* Widen the hit-area so users don't have to pixel-perfect the 6px line. */
  content: '';
  position: absolute;
  left: -3px;
  right: -3px;
  top: 0;
  bottom: 0;
}
.mid-inactive-root {
  flex: 1 1 auto;
  min-height: 0;
  overflow: auto;
  background: var(--mid-bg);
  position: relative;
}
.mid-inactive-preview {
  padding: var(--mid-space-4);
}
.mid-inactive-empty {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100%;
  color: var(--mid-fg-muted);
  font-style: italic;
}
.mid-split-drop-indicator {
  position: fixed;
  background: var(--mid-link);
  border-radius: 2px;
  pointer-events: none;
  z-index: 1000;
  box-shadow: 0 0 8px var(--mid-link);
  opacity: 0.85;
}
.mid-split-drop-indicator[hidden] { display: none; }