mrmd-editor 0.7.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/package.json +3 -1
  2. package/src/commands.js +112 -4
  3. package/src/comment-syntax.js +364 -39
  4. package/src/config/handlers.js +1 -2
  5. package/src/config/schema.js +46 -4
  6. package/src/document-template.js +2236 -0
  7. package/src/frontmatter-updater.js +204 -74
  8. package/src/grammar.js +758 -0
  9. package/src/index.js +1074 -55
  10. package/src/keymap.js +11 -2
  11. package/src/markdown/block-decorations.js +108 -5
  12. package/src/markdown/facets.js +37 -0
  13. package/src/markdown/html-inline.js +9 -5
  14. package/src/markdown/index.js +13 -3
  15. package/src/markdown/inline-commands.js +256 -0
  16. package/src/markdown/inline-model.js +578 -0
  17. package/src/markdown/inline-state.js +103 -0
  18. package/src/markdown/renderer.js +219 -12
  19. package/src/markdown/styles.js +290 -3
  20. package/src/markdown/widgets/alert-title.js +10 -8
  21. package/src/markdown/widgets/frontmatter.js +0 -6
  22. package/src/markdown/widgets/index.js +1 -0
  23. package/src/markdown/widgets/list-marker.js +29 -0
  24. package/src/markdown/wysiwyg.js +1158 -0
  25. package/src/mrp-types.js +2 -0
  26. package/src/output-widget.js +532 -18
  27. package/src/page-view-pagination.js +127 -0
  28. package/src/runtime-lsp.js +1757 -150
  29. package/src/section-controls/commands.js +617 -0
  30. package/src/section-controls/index.js +63 -0
  31. package/src/section-controls/plugin.js +165 -0
  32. package/src/section-controls/widgets.js +936 -0
  33. package/src/shell/ai-menu.js +11 -0
  34. package/src/shell/components/context-panel.js +572 -0
  35. package/src/shell/components/status-bar.js +10 -2
  36. package/src/shell/layouts/studio.js +206 -14
  37. package/src/shell/orchestrator-client.js +69 -0
  38. package/src/spellcheck.js +166 -0
  39. package/src/tables/README.md +97 -0
  40. package/src/tables/commands/insert-linked-table.js +122 -0
  41. package/src/tables/commands/open-table-workspace.js +43 -0
  42. package/src/tables/index.js +24 -0
  43. package/src/tables/jobs/client.js +158 -0
  44. package/src/tables/parsing/anchors.js +82 -0
  45. package/src/tables/parsing/linked-table-blocks.js +61 -0
  46. package/src/tables/state/linked-table-state.js +68 -0
  47. package/src/tables/widgets/linked-table-source-banner.js +77 -0
  48. package/src/tables/widgets/linked-table-widget.js +256 -0
  49. package/src/tables/workspace/controller.js +616 -0
  50. package/src/term-pty-client.js +51 -2
  51. package/src/term-widget.js +43 -3
  52. package/src/widgets/theme-utils.js +24 -16
  53. package/src/widgets/theme.js +1015 -1
  54. package/src/runtime-codelens/detector.js +0 -279
  55. package/src/runtime-codelens/index.js +0 -76
  56. package/src/runtime-codelens/plugin.js +0 -142
  57. package/src/runtime-codelens/styles.js +0 -184
  58. package/src/runtime-codelens/widgets.js +0 -216
@@ -82,7 +82,7 @@ export const tokenDefinitions = {
82
82
  '--widget-inset-left': {
83
83
  description: 'Left inset/indent for widgets (creates visual hierarchy)',
84
84
  category: 'spacing',
85
- default: '0',
85
+ default: '24px',
86
86
  },
87
87
  '--widget-offset-top': {
88
88
  description: 'Vertical offset for widgets. Use negative values to pull widgets closer to code blocks.',
@@ -351,6 +351,9 @@ export const tokenDefinitions = {
351
351
 
352
352
  // Lists
353
353
  '--md-list-marker-color': { description: 'List bullet/number color', category: 'markdown', default: 'var(--widget-text-muted)' },
354
+ '--md-list-number-weight': { description: 'Ordered list marker weight', category: 'markdown', default: '600' },
355
+ '--md-list-bullet-weight': { description: 'Unordered list bullet weight', category: 'markdown', default: '700' },
356
+ '--md-list-bullet-width': { description: 'Reserved width for rendered list bullets', category: 'markdown', default: '0.75em' },
354
357
 
355
358
  // Horizontal rules
356
359
  '--md-hr-color': { description: 'Horizontal rule color', category: 'markdown', default: 'var(--widget-border)' },
@@ -386,6 +389,16 @@ export const tokenDefinitions = {
386
389
  '--md-alert-important-color': { description: 'Important alert accent color', category: 'markdown', default: 'var(--syntax-keyword)' },
387
390
  '--md-alert-warning-color': { description: 'Warning alert accent color', category: 'markdown', default: 'var(--widget-warning)' },
388
391
  '--md-alert-caution-color': { description: 'Caution alert accent color', category: 'markdown', default: 'var(--widget-error)' },
392
+ '--md-admonition-background': { description: 'Legacy admonition background tint (used as fallback)', category: 'markdown', default: 'color-mix(in srgb, var(--md-alert-accent, var(--widget-border-accent)) 10%, transparent)' },
393
+ '--md-admonition-title-background': { description: 'Background for admonition title row', category: 'markdown', default: 'color-mix(in srgb, var(--md-alert-accent, var(--widget-border-accent)) 14%, var(--editor-background, transparent) 86%)' },
394
+ '--md-admonition-body-background': { description: 'Background for admonition body rows', category: 'markdown', default: 'color-mix(in srgb, var(--md-alert-accent, var(--widget-border-accent)) 5%, var(--editor-background, transparent) 95%)' },
395
+ '--md-admonition-border-color': { description: 'Border color for admonition cards', category: 'markdown', default: 'color-mix(in srgb, var(--md-alert-accent, var(--widget-border-accent)) 46%, var(--widget-border) 54%)' },
396
+ '--md-admonition-title-color': { description: 'Title text/icon color for admonitions', category: 'markdown', default: 'color-mix(in srgb, var(--md-alert-accent, var(--widget-text-accent)) 88%, var(--widget-text, currentColor) 12%)' },
397
+ '--md-admonition-text-color': { description: 'Body text color for admonitions', category: 'markdown', default: 'inherit' },
398
+ '--md-admonition-radius': { description: 'Corner radius for admonition blocks', category: 'markdown', default: '6px' },
399
+ '--md-admonition-border-width': { description: 'Border width for admonition cards', category: 'markdown', default: '1px' },
400
+ '--md-admonition-padding-x': { description: 'Horizontal padding for admonition rows', category: 'markdown', default: '0.9em' },
401
+ '--md-admonition-padding-y': { description: 'Vertical padding for admonition rows', category: 'markdown', default: '0.35em' },
389
402
 
390
403
  // ===========================================================================
391
404
  // SHELL (Status bar, menus, dialogs)
@@ -2935,6 +2948,999 @@ export const wizardStudyLightTheme = {
2935
2948
  '--mrmd-button-active': '#c8bca6', // worn scroll
2936
2949
  };
2937
2950
 
2951
+ // ===========================================================================
2952
+ // NEWSPRINT THEMES (E-ink / Newspaper aesthetic)
2953
+ // ===========================================================================
2954
+
2955
+ /**
2956
+ * Newsprint Light Theme
2957
+ *
2958
+ * A warm newspaper-gray light theme evoking broadsheets and cheap pulp.
2959
+ * The background is NOT white — it's the soft warm gray of unbleached
2960
+ * newsprint held under a reading lamp.
2961
+ *
2962
+ * Colors exist but are deliberately washed-out, like spot-color printing
2963
+ * on absorbent paper: the ink bleeds, the saturation drops, everything
2964
+ * feels a day old and perfectly readable.
2965
+ *
2966
+ * ## Color Palette
2967
+ *
2968
+ * **Backgrounds** — newsprint grays, unbleached paper
2969
+ * - #d8d3cb (newsprint — main background)
2970
+ * - #cec9c0 (thumbed page — surfaces)
2971
+ * - #e0dbd3 (fresh stock — elevated)
2972
+ * - #c6c1b8 (shadow column — inset)
2973
+ *
2974
+ * **Text** — press ink, varying impression weight
2975
+ * - #2c2a26 (fresh ink — primary text)
2976
+ * - #6b6760 (faded column — muted text)
2977
+ * - #4a5a6a (masthead blue — accent)
2978
+ *
2979
+ * **Syntax** — washed spot colors, one pass through the press
2980
+ * - #5a4a70 (classified purple — keywords)
2981
+ * - #4a6a42 (faded green ink — strings)
2982
+ * - #7a6a30 (aged stock ticker — numbers)
2983
+ * - #7a3a3a (correction red — errors)
2984
+ * - #3a5a7a (column-rule blue — functions)
2985
+ * - #3a6a6a (weather-map teal — types)
2986
+ */
2987
+ export const newsprintLightTheme = {
2988
+ name: 'newsprint-light',
2989
+ description: 'Warm newspaper-gray theme with washed spot colors. E-ink / broadsheet feel.',
2990
+ isDark: false,
2991
+ fontFace: defaultFontFace,
2992
+
2993
+ // ===========================================================================
2994
+ // SPACING
2995
+ // ===========================================================================
2996
+ '--widget-line-height': '1.65',
2997
+ '--widget-padding-x': '14px',
2998
+ '--widget-padding-y': '10px',
2999
+ '--widget-margin-y': '4px',
3000
+ '--widget-border-radius': '2px',
3001
+ '--widget-border-width': '1px',
3002
+ '--widget-border-accent-width': '2px',
3003
+
3004
+ // Text layout
3005
+ '--widget-white-space': 'pre-wrap',
3006
+ '--widget-word-break': 'break-word',
3007
+
3008
+ // ===========================================================================
3009
+ // TYPOGRAPHY — Literata for the broadsheet serif feel
3010
+ // ===========================================================================
3011
+ '--widget-font-mono': "'Monaspace Neon Var', 'SF Mono', Monaco, Consolas, monospace",
3012
+ '--widget-font-sans': "Literata, Charter, Georgia, 'Times New Roman', serif",
3013
+ '--editor-font-family': "Literata, Charter, Georgia, 'Times New Roman', serif",
3014
+ '--widget-font-size': '0.9em',
3015
+ '--widget-font-size-small': '0.8em',
3016
+ '--widget-font-size-label': '11px',
3017
+
3018
+ // ===========================================================================
3019
+ // SURFACES (newsprint grays — warm, not sterile)
3020
+ // ===========================================================================
3021
+ '--widget-surface': '#cec9c0', // thumbed page
3022
+ '--widget-surface-hover': '#c6c1b8', // shadow column
3023
+ '--widget-surface-elevated': '#e0dbd3', // fresh stock
3024
+ '--widget-surface-inset': '#c6c1b8', // shadow column
3025
+
3026
+ // ===========================================================================
3027
+ // BORDERS (thin column rules)
3028
+ // ===========================================================================
3029
+ '--widget-border': '#b8b3aa', // column rule
3030
+ '--widget-border-accent': '#8a8a82', // heavy rule
3031
+ '--widget-border-focus': '#4a5a6a', // masthead blue
3032
+
3033
+ // ===========================================================================
3034
+ // TEXT COLORS (press ink)
3035
+ // ===========================================================================
3036
+ '--widget-text': '#2c2a26', // fresh ink
3037
+ '--widget-text-muted': '#6b6760', // faded column
3038
+ '--widget-text-accent': '#4a5a6a', // masthead blue
3039
+
3040
+ // ===========================================================================
3041
+ // SEMANTIC COLORS (washed newspaper spot colors)
3042
+ // ===========================================================================
3043
+ '--widget-success': '#4a6a42', // faded green ink
3044
+ '--widget-warning': '#7a6a30', // aged stock ticker
3045
+ '--widget-error': '#7a3a3a', // correction red
3046
+ '--widget-info': '#4a5a6a', // masthead blue
3047
+
3048
+ // ===========================================================================
3049
+ // ANSI COLORS (desaturated for newsprint)
3050
+ // ===========================================================================
3051
+ '--ansi-black': '#2c2a26', // fresh ink
3052
+ '--ansi-red': '#7a3a3a', // correction red
3053
+ '--ansi-green': '#4a6a42', // faded green
3054
+ '--ansi-yellow': '#7a6a30', // stock ticker
3055
+ '--ansi-blue': '#4a5a6a', // masthead blue
3056
+ '--ansi-magenta': '#5a4a70', // classified purple
3057
+ '--ansi-cyan': '#3a6a6a', // weather teal
3058
+ '--ansi-white': '#d8d3cb', // newsprint
3059
+ '--ansi-bright-black': '#6b6760', // faded column
3060
+ '--ansi-bright-red': '#8a5050', // lighter correction
3061
+ '--ansi-bright-green': '#5a7a52', // spring classified
3062
+ '--ansi-bright-yellow': '#8a7a40', // brighter ticker
3063
+ '--ansi-bright-blue': '#5a6a7a', // lighter masthead
3064
+ '--ansi-bright-magenta': '#6a5a80', // lighter classified
3065
+ '--ansi-bright-cyan': '#4a7a7a', // lighter weather
3066
+ '--ansi-bright-white': '#e0dbd3', // fresh stock
3067
+
3068
+ // ===========================================================================
3069
+ // TERMINAL
3070
+ // ===========================================================================
3071
+ '--term-background': '#d8d3cb', // newsprint
3072
+ '--term-foreground': '#2c2a26', // fresh ink
3073
+ '--term-cursor': '#2c2a26', // fresh ink
3074
+ '--term-cursor-accent': '#d8d3cb', // newsprint
3075
+ '--term-selection': '#b8b3aa', // column rule
3076
+ '--term-border': '#b8b3aa', // column rule
3077
+ '--term-header-bg': '#cec9c0', // thumbed page
3078
+ '--term-header-fg': '#6b6760', // faded column
3079
+
3080
+ // ===========================================================================
3081
+ // COLLABORATOR COLORS (muted)
3082
+ // ===========================================================================
3083
+ '--collab-human': '#4a5a6a', // masthead blue
3084
+ '--collab-ai': '#5a4a70', // classified purple
3085
+ '--collab-runtime': '#4a6a42', // faded green
3086
+
3087
+ // ===========================================================================
3088
+ // EDITOR
3089
+ // ===========================================================================
3090
+ '--editor-background': '#d8d3cb', // newsprint
3091
+ '--editor-foreground': '#2c2a26', // fresh ink
3092
+ '--editor-line-number': '#9a958c', // page number gray
3093
+ '--editor-line-number-active': '#5a5650', // bolder page number
3094
+ '--editor-selection': '#b8b3aa', // column rule highlight
3095
+ '--editor-selection-match': '#c6c1b8', // shadow column
3096
+ '--editor-cursor': '#2c2a26', // fresh ink
3097
+ '--editor-active-line': 'rgba(0, 0, 0, 0.04)', // faint line highlight
3098
+ '--editor-gutter': '#d8d3cb', // newsprint
3099
+ '--editor-matching-bracket': 'rgba(74, 90, 106, 0.2)', // masthead blue hint
3100
+
3101
+ // ===========================================================================
3102
+ // SYNTAX HIGHLIGHTING (washed inks — one press pass on cheap paper)
3103
+ // ===========================================================================
3104
+ '--syntax-keyword': '#5a4a70', // classified purple
3105
+ '--syntax-control': '#5a4a70', // classified purple
3106
+ '--syntax-string': '#4a6a42', // faded green ink
3107
+ '--syntax-number': '#7a6a30', // stock ticker amber
3108
+ '--syntax-comment': '#9a958c', // marginal note gray
3109
+ '--syntax-function': '#3a5a7a', // column-rule blue
3110
+ '--syntax-variable': '#2c2a26', // fresh ink
3111
+ '--syntax-variable-special': '#5a4a70', // classified purple
3112
+ '--syntax-property': '#4a5a6a', // masthead blue
3113
+ '--syntax-operator': '#2c2a26', // fresh ink
3114
+ '--syntax-punctuation': '#6b6760', // faded column
3115
+ '--syntax-type': '#3a6a6a', // weather-map teal
3116
+ '--syntax-class': '#3a6a6a', // weather-map teal
3117
+ '--syntax-constant': '#7a6a30', // stock ticker
3118
+ '--syntax-parameter': '#2c2a26', // fresh ink
3119
+ '--syntax-regexp': '#7a3a3a', // correction red
3120
+ '--syntax-escape': '#8a7a40', // brighter ticker
3121
+ '--syntax-tag': '#7a3a3a', // correction red
3122
+ '--syntax-attribute': '#4a5a6a', // masthead blue
3123
+ '--syntax-attribute-value': '#4a6a42', // faded green
3124
+ '--syntax-heading': '#2c2a26', // fresh ink — headlines are bold, not colorful
3125
+ '--syntax-link': '#3a5a7a', // column-rule blue
3126
+ '--syntax-link-text': '#4a5a6a', // masthead blue
3127
+ '--syntax-emphasis': '#2c2a26', // fresh ink
3128
+ '--syntax-strong': '#2c2a26', // fresh ink
3129
+ '--syntax-strikethrough': '#9a958c', // marginal note gray
3130
+ '--syntax-quote': '#6b6760', // faded column
3131
+ '--syntax-code': '#5a4a70', // classified purple
3132
+ '--syntax-code-background': 'rgba(0, 0, 0, 0.05)', // faint shading
3133
+ '--syntax-meta': '#9a958c', // marginal note gray
3134
+ '--syntax-inserted': '#4a6a42', // faded green
3135
+ '--syntax-deleted': '#7a3a3a', // correction red
3136
+ '--syntax-changed': '#7a6a30', // stock ticker
3137
+
3138
+ // ===========================================================================
3139
+ // MARKDOWN RENDERING
3140
+ // ===========================================================================
3141
+ '--md-heading-1-size': '1.8em',
3142
+ '--md-heading-2-size': '1.4em',
3143
+ '--md-heading-3-size': '1.2em',
3144
+ '--md-heading-4-size': '1.1em',
3145
+ '--md-heading-5-size': '1.05em',
3146
+ '--md-heading-6-size': '1em',
3147
+ '--md-heading-weight': '700',
3148
+ '--md-heading-line-height': '1.25',
3149
+ '--md-heading-margin-top': '0.6em',
3150
+ '--md-heading-color': '#2c2a26', // fresh ink — bold headlines
3151
+ '--md-marker-color': '#9a958c', // marginal note gray
3152
+ '--md-marker-font': "'Monaspace Neon Var', 'SF Mono', Monaco, Consolas, monospace",
3153
+ '--md-link-color': '#3a5a7a', // column-rule blue
3154
+ '--md-link-decoration': 'underline',
3155
+ '--md-code-background': 'rgba(0, 0, 0, 0.06)',
3156
+ '--md-code-color': '#5a4a70', // classified purple
3157
+ '--md-code-padding': '0.15em 0.35em',
3158
+ '--md-code-radius': '2px',
3159
+ '--md-blockquote-border': '#8a8a82', // heavy rule
3160
+ '--md-blockquote-border-width': '2px',
3161
+ '--md-blockquote-color': '#6b6760', // faded column
3162
+ '--md-blockquote-padding': '1em',
3163
+ '--md-list-marker-color': '#6b6760', // faded column
3164
+ '--md-hr-color': '#a8a39a', // thin rule
3165
+ '--md-hr-height': '1px',
3166
+ '--md-hr-margin': '1.5em 0',
3167
+ '--md-table-border': '#b8b3aa', // column rule
3168
+ '--md-table-header-bg': '#cec9c0', // thumbed page
3169
+ '--md-table-header-weight': '700',
3170
+ '--md-table-cell-padding': '0.5em 0.75em',
3171
+ '--md-table-stripe-bg': 'transparent',
3172
+ '--md-image-max-width': '100%',
3173
+ '--md-image-border-radius': '2px',
3174
+ '--md-checkbox-size': '1em',
3175
+ '--md-checkbox-color': '#4a5a6a', // masthead blue
3176
+ '--md-alert-note-color': '#4a5a6a', // masthead blue
3177
+ '--md-alert-tip-color': '#4a6a42', // faded green
3178
+ '--md-alert-important-color': '#5a4a70', // classified purple
3179
+ '--md-alert-warning-color': '#7a6a30', // stock ticker
3180
+ '--md-alert-caution-color': '#7a3a3a', // correction red
3181
+
3182
+ // ===========================================================================
3183
+ // SHELL (status bar, menus, dialogs)
3184
+ // ===========================================================================
3185
+ '--mrmd-ui-font': "Literata, Charter, Georgia, 'Times New Roman', serif",
3186
+ '--mrmd-ui-font-size': '13px',
3187
+ '--mrmd-ui-font-size-sm': '11px',
3188
+ '--mrmd-panel-bg': '#d0cbc2', // slightly darker than newsprint
3189
+ '--mrmd-popup-bg': '#e0dbd3', // fresh stock
3190
+ '--mrmd-bg': '#d8d3cb', // newsprint
3191
+ '--mrmd-fg': '#2c2a26', // fresh ink
3192
+ '--mrmd-fg-muted': '#6b6760', // faded column
3193
+ '--mrmd-border': '#b8b3aa', // column rule
3194
+ '--mrmd-hover-bg': 'rgba(0, 0, 0, 0.05)',
3195
+ '--mrmd-active-bg': 'rgba(0, 0, 0, 0.08)',
3196
+ '--mrmd-selection-bg': 'rgba(74, 90, 106, 0.15)', // masthead blue
3197
+ '--mrmd-accent': '#4a5a6a', // masthead blue
3198
+ '--mrmd-accent-hover': '#3a4a5a', // darker masthead
3199
+ '--mrmd-success': '#4a6a42', // faded green
3200
+ '--mrmd-warning': '#7a6a30', // stock ticker
3201
+ '--mrmd-error': '#7a3a3a', // correction red
3202
+ '--mrmd-shadow-md': '0 2px 6px rgba(0, 0, 0, 0.08)',
3203
+ '--mrmd-shadow-lg': '0 4px 12px rgba(0, 0, 0, 0.1)',
3204
+ '--mrmd-shadow-xl': '0 8px 24px rgba(0, 0, 0, 0.12)',
3205
+ '--mrmd-menu-border': '#b8b3aa', // column rule
3206
+ '--mrmd-dialog-border': '#b8b3aa', // column rule
3207
+ '--mrmd-input-border': '#b8b3aa', // column rule
3208
+ '--mrmd-button-bg': '#cec9c0', // thumbed page
3209
+ '--mrmd-button-border': '#b8b3aa', // column rule
3210
+ '--mrmd-button-hover': '#c6c1b8', // shadow column
3211
+ '--mrmd-button-active': '#b8b3aa', // pressed
3212
+ };
3213
+
3214
+ /**
3215
+ * Newsprint Dark Theme
3216
+ *
3217
+ * The evening edition — same newspaper aesthetic but inverted.
3218
+ * The background is NOT black, it's the charcoal-warm gray of
3219
+ * newsprint seen by lamplight, or a printing plate's carbon.
3220
+ *
3221
+ * Colors remain washed and desaturated. Think of a newspaper
3222
+ * photograph: not vivid, not sharp, but entirely readable and
3223
+ * strangely beautiful in its restraint.
3224
+ *
3225
+ * ## Color Palette
3226
+ *
3227
+ * **Backgrounds** — carbon, lampblack, printer's stone
3228
+ * - #302e2a (lampblack — main background)
3229
+ * - #3a3835 (typesetter's tray — surfaces)
3230
+ * - #434140 (compositor's stone — elevated)
3231
+ * - #282622 (deep plate — inset)
3232
+ *
3233
+ * **Text** — worn type on dark stock
3234
+ * - #c8c4ba (worn type — primary text)
3235
+ * - #7a776e (smudged column — muted text)
3236
+ * - #8a9aaa (moonlit masthead — accent)
3237
+ *
3238
+ * **Syntax** — ghost inks, reversed halftone
3239
+ * - #9a8ab0 (lavender ghost — keywords)
3240
+ * - #8aaa7a (faded green under lamp — strings)
3241
+ * - #b0a070 (ticker tape gold — numbers)
3242
+ * - #b07060 (red-lead error — errors)
3243
+ * - #7a9aba (lamplight blue — functions)
3244
+ * - #7a9a9a (oxidized plate teal — types)
3245
+ */
3246
+ export const newsprintDarkTheme = {
3247
+ name: 'newsprint-dark',
3248
+ description: 'Dark newspaper-gray theme with ghost inks. Evening edition e-ink feel.',
3249
+ isDark: true,
3250
+ fontFace: defaultFontFace,
3251
+
3252
+ // ===========================================================================
3253
+ // SPACING
3254
+ // ===========================================================================
3255
+ '--widget-line-height': '1.65',
3256
+ '--widget-padding-x': '14px',
3257
+ '--widget-padding-y': '10px',
3258
+ '--widget-margin-y': '4px',
3259
+ '--widget-border-radius': '2px',
3260
+ '--widget-border-width': '1px',
3261
+ '--widget-border-accent-width': '2px',
3262
+
3263
+ // Text layout
3264
+ '--widget-white-space': 'pre-wrap',
3265
+ '--widget-word-break': 'break-word',
3266
+
3267
+ // ===========================================================================
3268
+ // TYPOGRAPHY
3269
+ // ===========================================================================
3270
+ '--widget-font-mono': "'Monaspace Neon Var', 'SF Mono', Monaco, Consolas, monospace",
3271
+ '--widget-font-sans': "Literata, Charter, Georgia, 'Times New Roman', serif",
3272
+ '--editor-font-family': "Literata, Charter, Georgia, 'Times New Roman', serif",
3273
+ '--widget-font-size': '0.9em',
3274
+ '--widget-font-size-small': '0.8em',
3275
+ '--widget-font-size-label': '11px',
3276
+
3277
+ // ===========================================================================
3278
+ // SURFACES (carbon, lampblack)
3279
+ // ===========================================================================
3280
+ '--widget-surface': '#3a3835', // typesetter's tray
3281
+ '--widget-surface-hover': '#434140', // compositor's stone
3282
+ '--widget-surface-elevated': '#434140', // compositor's stone
3283
+ '--widget-surface-inset': '#282622', // deep plate
3284
+
3285
+ // ===========================================================================
3286
+ // BORDERS (faint rules in the dark)
3287
+ // ===========================================================================
3288
+ '--widget-border': '#4a4845', // faint rule
3289
+ '--widget-border-accent': '#6a6860', // heavier rule
3290
+ '--widget-border-focus': '#8a9aaa', // moonlit masthead
3291
+
3292
+ // ===========================================================================
3293
+ // TEXT COLORS (worn type)
3294
+ // ===========================================================================
3295
+ '--widget-text': '#c8c4ba', // worn type
3296
+ '--widget-text-muted': '#7a776e', // smudged column
3297
+ '--widget-text-accent': '#8a9aaa', // moonlit masthead
3298
+
3299
+ // ===========================================================================
3300
+ // SEMANTIC COLORS (ghost inks)
3301
+ // ===========================================================================
3302
+ '--widget-success': '#8aaa7a', // faded green under lamp
3303
+ '--widget-warning': '#b0a070', // ticker tape gold
3304
+ '--widget-error': '#b07060', // red-lead error
3305
+ '--widget-info': '#7a8a9a', // lamplight blue
3306
+
3307
+ // ===========================================================================
3308
+ // ANSI COLORS (desaturated for dark newsprint)
3309
+ // ===========================================================================
3310
+ '--ansi-black': '#302e2a', // lampblack
3311
+ '--ansi-red': '#b07060', // red-lead
3312
+ '--ansi-green': '#8aaa7a', // faded green
3313
+ '--ansi-yellow': '#b0a070', // ticker tape
3314
+ '--ansi-blue': '#7a8a9a', // lamplight blue
3315
+ '--ansi-magenta': '#9a8ab0', // lavender ghost
3316
+ '--ansi-cyan': '#7a9a9a', // oxidized teal
3317
+ '--ansi-white': '#c8c4ba', // worn type
3318
+ '--ansi-bright-black': '#5a5855', // lighter lampblack
3319
+ '--ansi-bright-red': '#c08070', // warmer red-lead
3320
+ '--ansi-bright-green': '#9aba8a', // brighter green
3321
+ '--ansi-bright-yellow': '#c0b080', // brighter ticker
3322
+ '--ansi-bright-blue': '#8a9aaa', // moonlit masthead
3323
+ '--ansi-bright-magenta': '#aa9ac0', // lighter lavender
3324
+ '--ansi-bright-cyan': '#8aaaaa', // lighter teal
3325
+ '--ansi-bright-white': '#d8d4ca', // bright type
3326
+
3327
+ // ===========================================================================
3328
+ // TERMINAL
3329
+ // ===========================================================================
3330
+ '--term-background': '#302e2a', // lampblack
3331
+ '--term-foreground': '#c8c4ba', // worn type
3332
+ '--term-cursor': '#c8c4ba', // worn type
3333
+ '--term-cursor-accent': '#302e2a', // lampblack
3334
+ '--term-selection': '#4a4845', // faint rule
3335
+ '--term-border': '#4a4845', // faint rule
3336
+ '--term-header-bg': '#3a3835', // typesetter's tray
3337
+ '--term-header-fg': '#7a776e', // smudged column
3338
+
3339
+ // ===========================================================================
3340
+ // COLLABORATOR COLORS (muted)
3341
+ // ===========================================================================
3342
+ '--collab-human': '#7a8a9a', // lamplight blue
3343
+ '--collab-ai': '#9a8ab0', // lavender ghost
3344
+ '--collab-runtime': '#8aaa7a', // faded green
3345
+
3346
+ // ===========================================================================
3347
+ // EDITOR
3348
+ // ===========================================================================
3349
+ '--editor-background': '#302e2a', // lampblack
3350
+ '--editor-foreground': '#c8c4ba', // worn type
3351
+ '--editor-line-number': '#5a5855', // lighter lampblack
3352
+ '--editor-line-number-active': '#8a877e', // visible line number
3353
+ '--editor-selection': '#4a4845', // faint rule
3354
+ '--editor-selection-match': '#3e3c38', // dimmer match
3355
+ '--editor-cursor': '#c8c4ba', // worn type
3356
+ '--editor-active-line': 'rgba(255, 255, 255, 0.03)', // faint line highlight
3357
+ '--editor-gutter': '#302e2a', // lampblack
3358
+ '--editor-matching-bracket': 'rgba(138, 154, 170, 0.2)', // moonlit blue hint
3359
+
3360
+ // ===========================================================================
3361
+ // SYNTAX HIGHLIGHTING (ghost inks — reversed halftone)
3362
+ // ===========================================================================
3363
+ '--syntax-keyword': '#9a8ab0', // lavender ghost
3364
+ '--syntax-control': '#9a8ab0', // lavender ghost
3365
+ '--syntax-string': '#8aaa7a', // faded green under lamp
3366
+ '--syntax-number': '#b0a070', // ticker tape gold
3367
+ '--syntax-comment': '#5a5855', // lighter lampblack
3368
+ '--syntax-function': '#7a9aba', // lamplight blue
3369
+ '--syntax-variable': '#c8c4ba', // worn type
3370
+ '--syntax-variable-special': '#9a8ab0', // lavender ghost
3371
+ '--syntax-property': '#8a9aaa', // moonlit masthead
3372
+ '--syntax-operator': '#c8c4ba', // worn type
3373
+ '--syntax-punctuation': '#7a776e', // smudged column
3374
+ '--syntax-type': '#7a9a9a', // oxidized plate teal
3375
+ '--syntax-class': '#7a9a9a', // oxidized plate teal
3376
+ '--syntax-constant': '#b0a070', // ticker tape gold
3377
+ '--syntax-parameter': '#c8c4ba', // worn type
3378
+ '--syntax-regexp': '#b07060', // red-lead
3379
+ '--syntax-escape': '#c0b080', // brighter ticker
3380
+ '--syntax-tag': '#b07060', // red-lead
3381
+ '--syntax-attribute': '#8a9aaa', // moonlit masthead
3382
+ '--syntax-attribute-value': '#8aaa7a', // faded green
3383
+ '--syntax-heading': '#d8d4ca', // bright type — headlines
3384
+ '--syntax-link': '#7a9aba', // lamplight blue
3385
+ '--syntax-link-text': '#8a9aaa', // moonlit masthead
3386
+ '--syntax-emphasis': '#c8c4ba', // worn type
3387
+ '--syntax-strong': '#d8d4ca', // bright type
3388
+ '--syntax-strikethrough': '#5a5855', // lighter lampblack
3389
+ '--syntax-quote': '#7a776e', // smudged column
3390
+ '--syntax-code': '#b0a070', // ticker tape gold
3391
+ '--syntax-code-background': 'rgba(255, 255, 255, 0.04)', // faint shading
3392
+ '--syntax-meta': '#5a5855', // lighter lampblack
3393
+ '--syntax-inserted': '#8aaa7a', // faded green
3394
+ '--syntax-deleted': '#b07060', // red-lead
3395
+ '--syntax-changed': '#b0a070', // ticker tape gold
3396
+
3397
+ // ===========================================================================
3398
+ // MARKDOWN RENDERING
3399
+ // ===========================================================================
3400
+ '--md-heading-1-size': '1.8em',
3401
+ '--md-heading-2-size': '1.4em',
3402
+ '--md-heading-3-size': '1.2em',
3403
+ '--md-heading-4-size': '1.1em',
3404
+ '--md-heading-5-size': '1.05em',
3405
+ '--md-heading-6-size': '1em',
3406
+ '--md-heading-weight': '700',
3407
+ '--md-heading-line-height': '1.25',
3408
+ '--md-heading-margin-top': '0.6em',
3409
+ '--md-heading-color': '#d8d4ca', // bright type — bold headlines
3410
+ '--md-marker-color': '#5a5855', // lighter lampblack
3411
+ '--md-marker-font': "'Monaspace Neon Var', 'SF Mono', Monaco, Consolas, monospace",
3412
+ '--md-link-color': '#7a9aba', // lamplight blue
3413
+ '--md-link-decoration': 'underline',
3414
+ '--md-code-background': 'rgba(255, 255, 255, 0.05)',
3415
+ '--md-code-color': '#b0a070', // ticker tape gold
3416
+ '--md-code-padding': '0.15em 0.35em',
3417
+ '--md-code-radius': '2px',
3418
+ '--md-blockquote-border': '#6a6860', // heavier rule
3419
+ '--md-blockquote-border-width': '2px',
3420
+ '--md-blockquote-color': '#7a776e', // smudged column
3421
+ '--md-blockquote-padding': '1em',
3422
+ '--md-list-marker-color': '#7a776e', // smudged column
3423
+ '--md-hr-color': '#4a4845', // faint rule
3424
+ '--md-hr-height': '1px',
3425
+ '--md-hr-margin': '1.5em 0',
3426
+ '--md-table-border': '#4a4845', // faint rule
3427
+ '--md-table-header-bg': '#3a3835', // typesetter's tray
3428
+ '--md-table-header-weight': '700',
3429
+ '--md-table-cell-padding': '0.5em 0.75em',
3430
+ '--md-table-stripe-bg': 'transparent',
3431
+ '--md-image-max-width': '100%',
3432
+ '--md-image-border-radius': '2px',
3433
+ '--md-checkbox-size': '1em',
3434
+ '--md-checkbox-color': '#8a9aaa', // moonlit masthead
3435
+ '--md-alert-note-color': '#7a8a9a', // lamplight blue
3436
+ '--md-alert-tip-color': '#8aaa7a', // faded green
3437
+ '--md-alert-important-color': '#9a8ab0', // lavender ghost
3438
+ '--md-alert-warning-color': '#b0a070', // ticker tape gold
3439
+ '--md-alert-caution-color': '#b07060', // red-lead
3440
+
3441
+ // ===========================================================================
3442
+ // SHELL (status bar, menus, dialogs)
3443
+ // ===========================================================================
3444
+ '--mrmd-ui-font': "Literata, Charter, Georgia, 'Times New Roman', serif",
3445
+ '--mrmd-ui-font-size': '13px',
3446
+ '--mrmd-ui-font-size-sm': '11px',
3447
+ '--mrmd-panel-bg': '#353330', // slightly darker than main
3448
+ '--mrmd-popup-bg': '#434140', // compositor's stone
3449
+ '--mrmd-bg': '#302e2a', // lampblack
3450
+ '--mrmd-fg': '#c8c4ba', // worn type
3451
+ '--mrmd-fg-muted': '#7a776e', // smudged column
3452
+ '--mrmd-border': '#4a4845', // faint rule
3453
+ '--mrmd-hover-bg': 'rgba(255, 255, 255, 0.04)',
3454
+ '--mrmd-active-bg': 'rgba(255, 255, 255, 0.07)',
3455
+ '--mrmd-selection-bg': 'rgba(138, 154, 170, 0.15)', // moonlit masthead
3456
+ '--mrmd-accent': '#8a9aaa', // moonlit masthead
3457
+ '--mrmd-accent-hover': '#9aaaba', // brighter masthead
3458
+ '--mrmd-success': '#8aaa7a', // faded green
3459
+ '--mrmd-warning': '#b0a070', // ticker tape
3460
+ '--mrmd-error': '#b07060', // red-lead
3461
+ '--mrmd-shadow-md': '0 2px 8px rgba(0, 0, 0, 0.25)',
3462
+ '--mrmd-shadow-lg': '0 4px 16px rgba(0, 0, 0, 0.3)',
3463
+ '--mrmd-shadow-xl': '0 8px 32px rgba(0, 0, 0, 0.35)',
3464
+ '--mrmd-menu-border': '#4a4845', // faint rule
3465
+ '--mrmd-dialog-border': '#4a4845', // faint rule
3466
+ '--mrmd-input-border': '#4a4845', // faint rule
3467
+ '--mrmd-button-bg': '#3a3835', // typesetter's tray
3468
+ '--mrmd-button-border': '#4a4845', // faint rule
3469
+ '--mrmd-button-hover': '#434140', // compositor's stone
3470
+ '--mrmd-button-active': '#4a4845', // pressed
3471
+ };
3472
+
3473
+ // ===========================================================================
3474
+ // PLAIN THEMES (Standard / Word-like)
3475
+ // ===========================================================================
3476
+
3477
+ /**
3478
+ * Plain Light Theme
3479
+ *
3480
+ * The most deliberately boring theme possible.
3481
+ * White background, black text, system fonts, standard blue links.
3482
+ * Looks like Microsoft Word met a basic code editor and they had
3483
+ * the most unremarkable child imaginable.
3484
+ *
3485
+ * Zero personality. Maximum familiarity. Your mother could use this.
3486
+ */
3487
+ export const plainLightTheme = {
3488
+ name: 'plain-light',
3489
+ description: 'Standard light theme. White background, black text, system fonts. Looks like Word.',
3490
+ isDark: false,
3491
+
3492
+ // ===========================================================================
3493
+ // SPACING — standard, nothing fancy
3494
+ // ===========================================================================
3495
+ '--widget-line-height': '1.5',
3496
+ '--widget-padding-x': '12px',
3497
+ '--widget-padding-y': '8px',
3498
+ '--widget-margin-y': '4px',
3499
+ '--widget-border-radius': '3px',
3500
+ '--widget-border-width': '1px',
3501
+ '--widget-border-accent-width': '3px',
3502
+
3503
+ '--widget-white-space': 'pre-wrap',
3504
+ '--widget-word-break': 'break-word',
3505
+
3506
+ // ===========================================================================
3507
+ // TYPOGRAPHY — system defaults, Calibri/Segoe UI, Consolas for code
3508
+ // ===========================================================================
3509
+ '--widget-font-mono': "Consolas, 'Courier New', Courier, monospace",
3510
+ '--widget-font-sans': "Calibri, 'Segoe UI', -apple-system, BlinkMacSystemFont, Arial, Helvetica, sans-serif",
3511
+ '--editor-font-family': "Calibri, 'Segoe UI', -apple-system, BlinkMacSystemFont, Arial, Helvetica, sans-serif",
3512
+ '--widget-font-size': '0.9em',
3513
+ '--widget-font-size-small': '0.8em',
3514
+ '--widget-font-size-label': '11px',
3515
+
3516
+ // ===========================================================================
3517
+ // SURFACES — white, light gray
3518
+ // ===========================================================================
3519
+ '--widget-surface': '#f3f3f3',
3520
+ '--widget-surface-hover': '#e8e8e8',
3521
+ '--widget-surface-elevated': '#ffffff',
3522
+ '--widget-surface-inset': '#f0f0f0',
3523
+
3524
+ // ===========================================================================
3525
+ // BORDERS — plain gray
3526
+ // ===========================================================================
3527
+ '--widget-border': '#d0d0d0',
3528
+ '--widget-border-accent': '#0078d4',
3529
+ '--widget-border-focus': '#0078d4',
3530
+
3531
+ // ===========================================================================
3532
+ // TEXT — black and gray
3533
+ // ===========================================================================
3534
+ '--widget-text': '#000000',
3535
+ '--widget-text-muted': '#666666',
3536
+ '--widget-text-accent': '#0563c1',
3537
+
3538
+ // ===========================================================================
3539
+ // SEMANTIC — standard Windows/Office colors
3540
+ // ===========================================================================
3541
+ '--widget-success': '#107c10',
3542
+ '--widget-warning': '#c47a00',
3543
+ '--widget-error': '#d13438',
3544
+ '--widget-info': '#0078d4',
3545
+
3546
+ // ===========================================================================
3547
+ // ANSI COLORS
3548
+ // ===========================================================================
3549
+ '--ansi-black': '#000000',
3550
+ '--ansi-red': '#c50f1f',
3551
+ '--ansi-green': '#13a10e',
3552
+ '--ansi-yellow': '#c19c00',
3553
+ '--ansi-blue': '#0037da',
3554
+ '--ansi-magenta': '#881798',
3555
+ '--ansi-cyan': '#3a96dd',
3556
+ '--ansi-white': '#cccccc',
3557
+ '--ansi-bright-black': '#767676',
3558
+ '--ansi-bright-red': '#e74856',
3559
+ '--ansi-bright-green': '#16c60c',
3560
+ '--ansi-bright-yellow': '#f9f1a5',
3561
+ '--ansi-bright-blue': '#3b78ff',
3562
+ '--ansi-bright-magenta': '#b4009e',
3563
+ '--ansi-bright-cyan': '#61d6d6',
3564
+ '--ansi-bright-white': '#f2f2f2',
3565
+
3566
+ // ===========================================================================
3567
+ // TERMINAL
3568
+ // ===========================================================================
3569
+ '--term-background': '#ffffff',
3570
+ '--term-foreground': '#000000',
3571
+ '--term-cursor': '#000000',
3572
+ '--term-cursor-accent': '#ffffff',
3573
+ '--term-selection': '#add6ff',
3574
+ '--term-border': '#d0d0d0',
3575
+ '--term-header-bg': '#f3f3f3',
3576
+ '--term-header-fg': '#666666',
3577
+
3578
+ // ===========================================================================
3579
+ // COLLABORATOR
3580
+ // ===========================================================================
3581
+ '--collab-human': '#0078d4',
3582
+ '--collab-ai': '#881798',
3583
+ '--collab-runtime': '#107c10',
3584
+
3585
+ // ===========================================================================
3586
+ // EDITOR — plain white, standard VS Code light style
3587
+ // ===========================================================================
3588
+ '--editor-background': '#ffffff',
3589
+ '--editor-foreground': '#000000',
3590
+ '--editor-line-number': '#999999',
3591
+ '--editor-line-number-active': '#000000',
3592
+ '--editor-selection': '#add6ff',
3593
+ '--editor-selection-match': '#e8e8e8',
3594
+ '--editor-cursor': '#000000',
3595
+ '--editor-active-line': '#f5f5f5',
3596
+ '--editor-gutter': '#ffffff',
3597
+ '--editor-matching-bracket': '#bad0f8',
3598
+
3599
+ // ===========================================================================
3600
+ // SYNTAX — VS Code Light (the most "normal" code colors on earth)
3601
+ // ===========================================================================
3602
+ '--syntax-keyword': '#0000ff',
3603
+ '--syntax-control': '#af00db',
3604
+ '--syntax-string': '#a31515',
3605
+ '--syntax-number': '#098658',
3606
+ '--syntax-comment': '#008000',
3607
+ '--syntax-function': '#795e26',
3608
+ '--syntax-variable': '#001080',
3609
+ '--syntax-variable-special': '#0000ff',
3610
+ '--syntax-property': '#001080',
3611
+ '--syntax-operator': '#000000',
3612
+ '--syntax-punctuation': '#000000',
3613
+ '--syntax-type': '#267f99',
3614
+ '--syntax-class': '#267f99',
3615
+ '--syntax-constant': '#0000ff',
3616
+ '--syntax-parameter': '#001080',
3617
+ '--syntax-regexp': '#811f3f',
3618
+ '--syntax-escape': '#ee0000',
3619
+ '--syntax-tag': '#800000',
3620
+ '--syntax-attribute': '#ff0000',
3621
+ '--syntax-attribute-value': '#0000ff',
3622
+ '--syntax-heading': '#000000',
3623
+ '--syntax-link': '#0563c1',
3624
+ '--syntax-link-text': '#0563c1',
3625
+ '--syntax-emphasis': '#000000',
3626
+ '--syntax-strong': '#000000',
3627
+ '--syntax-strikethrough': '#999999',
3628
+ '--syntax-quote': '#008000',
3629
+ '--syntax-code': '#a31515',
3630
+ '--syntax-code-background': '#f3f3f3',
3631
+ '--syntax-meta': '#999999',
3632
+ '--syntax-inserted': '#098658',
3633
+ '--syntax-deleted': '#a31515',
3634
+ '--syntax-changed': '#0451a5',
3635
+
3636
+ // ===========================================================================
3637
+ // MARKDOWN
3638
+ // ===========================================================================
3639
+ '--md-heading-1-size': '2em',
3640
+ '--md-heading-2-size': '1.5em',
3641
+ '--md-heading-3-size': '1.17em',
3642
+ '--md-heading-4-size': '1em',
3643
+ '--md-heading-5-size': '0.83em',
3644
+ '--md-heading-6-size': '0.67em',
3645
+ '--md-heading-weight': '700',
3646
+ '--md-heading-line-height': '1.3',
3647
+ '--md-heading-margin-top': '0.6em',
3648
+ '--md-heading-color': '#000000',
3649
+ '--md-marker-color': '#999999',
3650
+ '--md-marker-font': "Consolas, 'Courier New', Courier, monospace",
3651
+ '--md-link-color': '#0563c1',
3652
+ '--md-link-decoration': 'underline',
3653
+ '--md-code-background': '#f3f3f3',
3654
+ '--md-code-color': '#a31515',
3655
+ '--md-code-padding': '0.15em 0.35em',
3656
+ '--md-code-radius': '3px',
3657
+ '--md-blockquote-border': '#d0d0d0',
3658
+ '--md-blockquote-border-width': '3px',
3659
+ '--md-blockquote-color': '#666666',
3660
+ '--md-blockquote-padding': '1em',
3661
+ '--md-list-marker-color': '#666666',
3662
+ '--md-hr-color': '#d0d0d0',
3663
+ '--md-hr-height': '1px',
3664
+ '--md-hr-margin': '1.5em 0',
3665
+ '--md-table-border': '#d0d0d0',
3666
+ '--md-table-header-bg': '#f3f3f3',
3667
+ '--md-table-header-weight': '700',
3668
+ '--md-table-cell-padding': '0.5em 0.75em',
3669
+ '--md-table-stripe-bg': 'transparent',
3670
+ '--md-image-max-width': '100%',
3671
+ '--md-image-border-radius': '0',
3672
+ '--md-checkbox-size': '1em',
3673
+ '--md-checkbox-color': '#0078d4',
3674
+ '--md-alert-note-color': '#0078d4',
3675
+ '--md-alert-tip-color': '#107c10',
3676
+ '--md-alert-important-color': '#881798',
3677
+ '--md-alert-warning-color': '#c47a00',
3678
+ '--md-alert-caution-color': '#d13438',
3679
+
3680
+ // ===========================================================================
3681
+ // SHELL — office gray
3682
+ // ===========================================================================
3683
+ '--mrmd-ui-font': "Calibri, 'Segoe UI', -apple-system, BlinkMacSystemFont, Arial, Helvetica, sans-serif",
3684
+ '--mrmd-ui-font-size': '14px',
3685
+ '--mrmd-ui-font-size-sm': '12px',
3686
+ '--mrmd-panel-bg': '#f3f3f3',
3687
+ '--mrmd-popup-bg': '#ffffff',
3688
+ '--mrmd-bg': '#ffffff',
3689
+ '--mrmd-fg': '#000000',
3690
+ '--mrmd-fg-muted': '#666666',
3691
+ '--mrmd-border': '#d0d0d0',
3692
+ '--mrmd-hover-bg': '#e8e8e8',
3693
+ '--mrmd-active-bg': '#d0d0d0',
3694
+ '--mrmd-selection-bg': '#add6ff',
3695
+ '--mrmd-accent': '#0078d4',
3696
+ '--mrmd-accent-hover': '#106ebe',
3697
+ '--mrmd-success': '#107c10',
3698
+ '--mrmd-warning': '#c47a00',
3699
+ '--mrmd-error': '#d13438',
3700
+ '--mrmd-shadow-md': '0 2px 4px rgba(0, 0, 0, 0.14)',
3701
+ '--mrmd-shadow-lg': '0 4px 8px rgba(0, 0, 0, 0.14)',
3702
+ '--mrmd-shadow-xl': '0 8px 16px rgba(0, 0, 0, 0.14)',
3703
+ '--mrmd-menu-border': '#d0d0d0',
3704
+ '--mrmd-dialog-border': '#d0d0d0',
3705
+ '--mrmd-input-border': '#d0d0d0',
3706
+ '--mrmd-button-bg': '#f3f3f3',
3707
+ '--mrmd-button-border': '#d0d0d0',
3708
+ '--mrmd-button-hover': '#e8e8e8',
3709
+ '--mrmd-button-active': '#d0d0d0',
3710
+ };
3711
+
3712
+ /**
3713
+ * Plain Dark Theme
3714
+ *
3715
+ * The dark version of "plain". Standard VS Code dark colors,
3716
+ * system fonts, nothing surprising. If you've seen one dark editor,
3717
+ * you've seen this theme.
3718
+ */
3719
+ export const plainDarkTheme = {
3720
+ name: 'plain-dark',
3721
+ description: 'Standard dark theme. Default VS Code colors, system fonts. The baseline.',
3722
+ isDark: true,
3723
+
3724
+ // ===========================================================================
3725
+ // SPACING
3726
+ // ===========================================================================
3727
+ '--widget-line-height': '1.5',
3728
+ '--widget-padding-x': '12px',
3729
+ '--widget-padding-y': '8px',
3730
+ '--widget-margin-y': '4px',
3731
+ '--widget-border-radius': '3px',
3732
+ '--widget-border-width': '1px',
3733
+ '--widget-border-accent-width': '3px',
3734
+
3735
+ '--widget-white-space': 'pre-wrap',
3736
+ '--widget-word-break': 'break-word',
3737
+
3738
+ // ===========================================================================
3739
+ // TYPOGRAPHY — system defaults, Consolas for code
3740
+ // ===========================================================================
3741
+ '--widget-font-mono': "Consolas, 'Courier New', Courier, monospace",
3742
+ '--widget-font-sans': "'Segoe UI', -apple-system, BlinkMacSystemFont, Arial, Helvetica, sans-serif",
3743
+ '--editor-font-family': "'Segoe UI', -apple-system, BlinkMacSystemFont, Arial, Helvetica, sans-serif",
3744
+ '--widget-font-size': '0.9em',
3745
+ '--widget-font-size-small': '0.8em',
3746
+ '--widget-font-size-label': '11px',
3747
+
3748
+ // ===========================================================================
3749
+ // SURFACES — VS Code dark defaults
3750
+ // ===========================================================================
3751
+ '--widget-surface': '#252526',
3752
+ '--widget-surface-hover': '#2a2d2e',
3753
+ '--widget-surface-elevated': '#252526',
3754
+ '--widget-surface-inset': '#1e1e1e',
3755
+
3756
+ // ===========================================================================
3757
+ // BORDERS
3758
+ // ===========================================================================
3759
+ '--widget-border': '#3c3c3c',
3760
+ '--widget-border-accent': '#007acc',
3761
+ '--widget-border-focus': '#007acc',
3762
+
3763
+ // ===========================================================================
3764
+ // TEXT
3765
+ // ===========================================================================
3766
+ '--widget-text': '#d4d4d4',
3767
+ '--widget-text-muted': '#858585',
3768
+ '--widget-text-accent': '#3794ff',
3769
+
3770
+ // ===========================================================================
3771
+ // SEMANTIC
3772
+ // ===========================================================================
3773
+ '--widget-success': '#4ec9b0',
3774
+ '--widget-warning': '#cca700',
3775
+ '--widget-error': '#f14c4c',
3776
+ '--widget-info': '#3794ff',
3777
+
3778
+ // ===========================================================================
3779
+ // ANSI COLORS — Windows Terminal dark defaults
3780
+ // ===========================================================================
3781
+ '--ansi-black': '#1e1e1e',
3782
+ '--ansi-red': '#cd3131',
3783
+ '--ansi-green': '#0dbc79',
3784
+ '--ansi-yellow': '#e5e510',
3785
+ '--ansi-blue': '#2472c8',
3786
+ '--ansi-magenta': '#bc3fbc',
3787
+ '--ansi-cyan': '#11a8cd',
3788
+ '--ansi-white': '#e5e5e5',
3789
+ '--ansi-bright-black': '#666666',
3790
+ '--ansi-bright-red': '#f14c4c',
3791
+ '--ansi-bright-green': '#23d18b',
3792
+ '--ansi-bright-yellow': '#f5f543',
3793
+ '--ansi-bright-blue': '#3b8eea',
3794
+ '--ansi-bright-magenta': '#d670d6',
3795
+ '--ansi-bright-cyan': '#29b8db',
3796
+ '--ansi-bright-white': '#e5e5e5',
3797
+
3798
+ // ===========================================================================
3799
+ // TERMINAL
3800
+ // ===========================================================================
3801
+ '--term-background': '#1e1e1e',
3802
+ '--term-foreground': '#d4d4d4',
3803
+ '--term-cursor': '#d4d4d4',
3804
+ '--term-cursor-accent': '#1e1e1e',
3805
+ '--term-selection': '#264f78',
3806
+ '--term-border': '#3c3c3c',
3807
+ '--term-header-bg': '#252526',
3808
+ '--term-header-fg': '#858585',
3809
+
3810
+ // ===========================================================================
3811
+ // COLLABORATOR
3812
+ // ===========================================================================
3813
+ '--collab-human': '#3794ff',
3814
+ '--collab-ai': '#bc3fbc',
3815
+ '--collab-runtime': '#4ec9b0',
3816
+
3817
+ // ===========================================================================
3818
+ // EDITOR — VS Code Dark default
3819
+ // ===========================================================================
3820
+ '--editor-background': '#1e1e1e',
3821
+ '--editor-foreground': '#d4d4d4',
3822
+ '--editor-line-number': '#858585',
3823
+ '--editor-line-number-active': '#c6c6c6',
3824
+ '--editor-selection': '#264f78',
3825
+ '--editor-selection-match': '#515c6a',
3826
+ '--editor-cursor': '#aeafad',
3827
+ '--editor-active-line': 'rgba(255, 255, 255, 0.04)',
3828
+ '--editor-gutter': '#1e1e1e',
3829
+ '--editor-matching-bracket': 'rgba(255, 255, 255, 0.1)',
3830
+
3831
+ // ===========================================================================
3832
+ // SYNTAX — VS Code Dark+ (the canonical default)
3833
+ // ===========================================================================
3834
+ '--syntax-keyword': '#569cd6',
3835
+ '--syntax-control': '#c586c0',
3836
+ '--syntax-string': '#ce9178',
3837
+ '--syntax-number': '#b5cea8',
3838
+ '--syntax-comment': '#6a9955',
3839
+ '--syntax-function': '#dcdcaa',
3840
+ '--syntax-variable': '#9cdcfe',
3841
+ '--syntax-variable-special': '#569cd6',
3842
+ '--syntax-property': '#9cdcfe',
3843
+ '--syntax-operator': '#d4d4d4',
3844
+ '--syntax-punctuation': '#d4d4d4',
3845
+ '--syntax-type': '#4ec9b0',
3846
+ '--syntax-class': '#4ec9b0',
3847
+ '--syntax-constant': '#569cd6',
3848
+ '--syntax-parameter': '#9cdcfe',
3849
+ '--syntax-regexp': '#d16969',
3850
+ '--syntax-escape': '#d7ba7d',
3851
+ '--syntax-tag': '#569cd6',
3852
+ '--syntax-attribute': '#9cdcfe',
3853
+ '--syntax-attribute-value': '#ce9178',
3854
+ '--syntax-heading': '#569cd6',
3855
+ '--syntax-link': '#3794ff',
3856
+ '--syntax-link-text': '#ce9178',
3857
+ '--syntax-emphasis': '#569cd6',
3858
+ '--syntax-strong': '#569cd6',
3859
+ '--syntax-strikethrough': '#858585',
3860
+ '--syntax-quote': '#6a9955',
3861
+ '--syntax-code': '#ce9178',
3862
+ '--syntax-code-background': '#252526',
3863
+ '--syntax-meta': '#858585',
3864
+ '--syntax-inserted': '#b5cea8',
3865
+ '--syntax-deleted': '#ce9178',
3866
+ '--syntax-changed': '#569cd6',
3867
+
3868
+ // ===========================================================================
3869
+ // MARKDOWN
3870
+ // ===========================================================================
3871
+ '--md-heading-1-size': '2em',
3872
+ '--md-heading-2-size': '1.5em',
3873
+ '--md-heading-3-size': '1.17em',
3874
+ '--md-heading-4-size': '1em',
3875
+ '--md-heading-5-size': '0.83em',
3876
+ '--md-heading-6-size': '0.67em',
3877
+ '--md-heading-weight': '700',
3878
+ '--md-heading-line-height': '1.3',
3879
+ '--md-heading-margin-top': '0.6em',
3880
+ '--md-heading-color': '#d4d4d4',
3881
+ '--md-marker-color': '#858585',
3882
+ '--md-marker-font': "Consolas, 'Courier New', Courier, monospace",
3883
+ '--md-link-color': '#3794ff',
3884
+ '--md-link-decoration': 'underline',
3885
+ '--md-code-background': '#252526',
3886
+ '--md-code-color': '#ce9178',
3887
+ '--md-code-padding': '0.15em 0.35em',
3888
+ '--md-code-radius': '3px',
3889
+ '--md-blockquote-border': '#3c3c3c',
3890
+ '--md-blockquote-border-width': '3px',
3891
+ '--md-blockquote-color': '#858585',
3892
+ '--md-blockquote-padding': '1em',
3893
+ '--md-list-marker-color': '#858585',
3894
+ '--md-hr-color': '#3c3c3c',
3895
+ '--md-hr-height': '1px',
3896
+ '--md-hr-margin': '1.5em 0',
3897
+ '--md-table-border': '#3c3c3c',
3898
+ '--md-table-header-bg': '#252526',
3899
+ '--md-table-header-weight': '700',
3900
+ '--md-table-cell-padding': '0.5em 0.75em',
3901
+ '--md-table-stripe-bg': 'transparent',
3902
+ '--md-image-max-width': '100%',
3903
+ '--md-image-border-radius': '0',
3904
+ '--md-checkbox-size': '1em',
3905
+ '--md-checkbox-color': '#007acc',
3906
+ '--md-alert-note-color': '#3794ff',
3907
+ '--md-alert-tip-color': '#4ec9b0',
3908
+ '--md-alert-important-color': '#bc3fbc',
3909
+ '--md-alert-warning-color': '#cca700',
3910
+ '--md-alert-caution-color': '#f14c4c',
3911
+
3912
+ // ===========================================================================
3913
+ // SHELL — VS Code sidebar gray
3914
+ // ===========================================================================
3915
+ '--mrmd-ui-font': "'Segoe UI', -apple-system, BlinkMacSystemFont, Arial, Helvetica, sans-serif",
3916
+ '--mrmd-ui-font-size': '14px',
3917
+ '--mrmd-ui-font-size-sm': '12px',
3918
+ '--mrmd-panel-bg': '#252526',
3919
+ '--mrmd-popup-bg': '#252526',
3920
+ '--mrmd-bg': '#1e1e1e',
3921
+ '--mrmd-fg': '#d4d4d4',
3922
+ '--mrmd-fg-muted': '#858585',
3923
+ '--mrmd-border': '#3c3c3c',
3924
+ '--mrmd-hover-bg': '#2a2d2e',
3925
+ '--mrmd-active-bg': '#37373d',
3926
+ '--mrmd-selection-bg': '#264f78',
3927
+ '--mrmd-accent': '#007acc',
3928
+ '--mrmd-accent-hover': '#1c97ea',
3929
+ '--mrmd-success': '#4ec9b0',
3930
+ '--mrmd-warning': '#cca700',
3931
+ '--mrmd-error': '#f14c4c',
3932
+ '--mrmd-shadow-md': '0 2px 8px rgba(0, 0, 0, 0.36)',
3933
+ '--mrmd-shadow-lg': '0 4px 16px rgba(0, 0, 0, 0.36)',
3934
+ '--mrmd-shadow-xl': '0 8px 32px rgba(0, 0, 0, 0.36)',
3935
+ '--mrmd-menu-border': '#454545',
3936
+ '--mrmd-dialog-border': '#454545',
3937
+ '--mrmd-input-border': '#3c3c3c',
3938
+ '--mrmd-button-bg': '#3c3c3c',
3939
+ '--mrmd-button-border': '#3c3c3c',
3940
+ '--mrmd-button-hover': '#454545',
3941
+ '--mrmd-button-active': '#505050',
3942
+ };
3943
+
2938
3944
  // #endregion BUILT_IN_THEMES
2939
3945
 
2940
3946
  // #region THEME_REGISTRY
@@ -2955,6 +3961,10 @@ const themeRegistry = new Map([
2955
3961
  ['grayscale-dark', grayscaleDarkTheme],
2956
3962
  ['grayscale-light', grayscaleLightTheme],
2957
3963
  ['openresponses', openresponsesTheme],
3964
+ ['newsprint-light', newsprintLightTheme],
3965
+ ['newsprint-dark', newsprintDarkTheme],
3966
+ ['plain-light', plainLightTheme],
3967
+ ['plain-dark', plainDarkTheme],
2958
3968
  ]);
2959
3969
 
2960
3970
  /**
@@ -3062,6 +4072,10 @@ export default {
3062
4072
  githubTheme,
3063
4073
  nordTheme,
3064
4074
  nordOutputsTheme,
4075
+ newsprintLightTheme,
4076
+ newsprintDarkTheme,
4077
+ plainLightTheme,
4078
+ plainDarkTheme,
3065
4079
 
3066
4080
  // Theme registry
3067
4081
  registerTheme,