mrmd-editor 0.7.0 → 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 (61) 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/execution.js +69 -15
  8. package/src/frontmatter-updater.js +204 -74
  9. package/src/grammar.js +758 -0
  10. package/src/index.js +1120 -55
  11. package/src/keymap.js +11 -2
  12. package/src/markdown/block-decorations.js +108 -5
  13. package/src/markdown/facets.js +37 -0
  14. package/src/markdown/html-inline.js +9 -5
  15. package/src/markdown/index.js +13 -3
  16. package/src/markdown/inline-commands.js +256 -0
  17. package/src/markdown/inline-model.js +578 -0
  18. package/src/markdown/inline-state.js +103 -0
  19. package/src/markdown/renderer.js +219 -12
  20. package/src/markdown/styles.js +290 -3
  21. package/src/markdown/widgets/alert-title.js +10 -8
  22. package/src/markdown/widgets/frontmatter.js +0 -6
  23. package/src/markdown/widgets/index.js +1 -0
  24. package/src/markdown/widgets/list-marker.js +29 -0
  25. package/src/markdown/wysiwyg.js +1158 -0
  26. package/src/mrp-types.js +2 -0
  27. package/src/output-widget.js +532 -18
  28. package/src/page-view-pagination.js +127 -0
  29. package/src/runtime-lsp.js +1757 -150
  30. package/src/section-controls/commands.js +617 -0
  31. package/src/section-controls/index.js +63 -0
  32. package/src/section-controls/plugin.js +165 -0
  33. package/src/section-controls/widgets.js +936 -0
  34. package/src/shell/ai-menu.js +11 -0
  35. package/src/shell/components/context-panel.js +572 -0
  36. package/src/shell/components/status-bar.js +218 -8
  37. package/src/shell/dialogs/file-picker.js +211 -0
  38. package/src/shell/layouts/studio.js +229 -14
  39. package/src/shell/orchestrator-client.js +114 -0
  40. package/src/shell/styles.js +62 -0
  41. package/src/spellcheck.js +166 -0
  42. package/src/tables/README.md +97 -0
  43. package/src/tables/commands/insert-linked-table.js +122 -0
  44. package/src/tables/commands/open-table-workspace.js +43 -0
  45. package/src/tables/index.js +24 -0
  46. package/src/tables/jobs/client.js +158 -0
  47. package/src/tables/parsing/anchors.js +82 -0
  48. package/src/tables/parsing/linked-table-blocks.js +61 -0
  49. package/src/tables/state/linked-table-state.js +68 -0
  50. package/src/tables/widgets/linked-table-source-banner.js +77 -0
  51. package/src/tables/widgets/linked-table-widget.js +256 -0
  52. package/src/tables/workspace/controller.js +616 -0
  53. package/src/term-pty-client.js +111 -7
  54. package/src/term-widget.js +43 -3
  55. package/src/widgets/theme-utils.js +24 -16
  56. package/src/widgets/theme.js +1535 -1
  57. package/src/runtime-codelens/detector.js +0 -279
  58. package/src/runtime-codelens/index.js +0 -76
  59. package/src/runtime-codelens/plugin.js +0 -142
  60. package/src/runtime-codelens/styles.js +0 -184
  61. 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)
@@ -2419,6 +2432,1515 @@ export const openresponsesTheme = {
2419
2432
  '--header-fg-hover': '#0f172a', // slate-900
2420
2433
  };
2421
2434
 
2435
+ // ===========================================================================
2436
+ // WIZARD'S STUDY THEMES
2437
+ // ===========================================================================
2438
+
2439
+ /**
2440
+ * Wizard's Study Dark Theme
2441
+ *
2442
+ * Deep midnight background like aged oak walls, warm parchment text
2443
+ * like candlelit scrolls. Muted jewel tones: amethyst, sage, gold, ember.
2444
+ *
2445
+ * Inspired by late-night reading in a wizard's tower — the warm glow
2446
+ * of candles on old wood, ink on parchment, crystals catching starlight.
2447
+ *
2448
+ * ## Color Palette
2449
+ *
2450
+ * **Backgrounds** — midnight oak, shadow, twilight velvet
2451
+ * - #1a1b2e (midnight oak — main background)
2452
+ * - #2a2b3d (shadow — elevated surfaces)
2453
+ * - #3d3552 (twilight velvet — selections, highlights)
2454
+ *
2455
+ * **Text** — warm parchment tones
2456
+ * - #d4c4a8 (warm parchment — primary text)
2457
+ * - #a49478 (worn scroll — muted text)
2458
+ * - #c8a654 (candlelight gold — accent)
2459
+ *
2460
+ * **Syntax** — aged jewel tones
2461
+ * - #a87cc4 (amethyst crystal — keywords)
2462
+ * - #8aab7c (sage leaf — strings)
2463
+ * - #c8a654 (candlelight gold — numbers, cursor)
2464
+ * - #c47862 (fading ember — errors, tags)
2465
+ * - #7c8ec4 (twilight sky — functions)
2466
+ * - #7caab0 (moonlit water — types)
2467
+ */
2468
+ export const wizardStudyDarkTheme = {
2469
+ name: 'wizard-study-dark',
2470
+ description: "Deep midnight study with candlelit parchment tones. The Wizard's Study (dark).",
2471
+ isDark: true,
2472
+ fontFace: defaultFontFace,
2473
+
2474
+ // ===========================================================================
2475
+ // SPACING
2476
+ // ===========================================================================
2477
+ '--widget-line-height': 'inherit',
2478
+ '--widget-padding-x': '12px',
2479
+ '--widget-padding-y': '8px',
2480
+ '--widget-margin-y': '4px',
2481
+ '--widget-border-radius': '6px',
2482
+ '--widget-border-width': '1px',
2483
+ '--widget-border-accent-width': '3px',
2484
+
2485
+ // Text layout
2486
+ '--widget-white-space': 'pre-wrap',
2487
+ '--widget-word-break': 'break-word',
2488
+
2489
+ // ===========================================================================
2490
+ // TYPOGRAPHY
2491
+ // ===========================================================================
2492
+ '--widget-font-mono': "'Monaspace Neon Var', 'SF Mono', Monaco, Consolas, monospace",
2493
+ '--widget-font-sans': "Literata, Charter, Georgia, serif",
2494
+ '--editor-font-family': "Literata, Charter, Georgia, serif",
2495
+ '--widget-font-size': '0.9em',
2496
+ '--widget-font-size-small': '0.8em',
2497
+ '--widget-font-size-label': '11px',
2498
+
2499
+ // ===========================================================================
2500
+ // SURFACES (midnight oak tones)
2501
+ // ===========================================================================
2502
+ '--widget-surface': '#222336', // slightly lighter than editor bg
2503
+ '--widget-surface-hover': '#2a2b3d', // shadow
2504
+ '--widget-surface-elevated': '#2a2b3d', // shadow — tooltips, dropdowns
2505
+ '--widget-surface-inset': '#141524', // deeper shadow
2506
+
2507
+ // ===========================================================================
2508
+ // BORDERS
2509
+ // ===========================================================================
2510
+ '--widget-border': '#3d3552', // twilight velvet
2511
+ '--widget-border-accent': 'rgba(200, 166, 84, 0.6)', // candlelight gold
2512
+ '--widget-border-focus': '#c8a654', // molten gold
2513
+
2514
+ // ===========================================================================
2515
+ // TEXT COLORS (parchment tones)
2516
+ // ===========================================================================
2517
+ '--widget-text': '#d4c4a8', // warm parchment
2518
+ '--widget-text-muted': '#8a7a5e', // worn scroll
2519
+ '--widget-text-accent': '#c8a654', // candlelight gold
2520
+
2521
+ // ===========================================================================
2522
+ // SEMANTIC COLORS (jewel tones)
2523
+ // ===========================================================================
2524
+ '--widget-success': '#8aab7c', // sage leaf
2525
+ '--widget-warning': '#c8a654', // candlelight gold
2526
+ '--widget-error': '#c47862', // fading ember
2527
+ '--widget-info': '#7c8ec4', // twilight sky
2528
+
2529
+ // ===========================================================================
2530
+ // ANSI TERMINAL COLORS (from Alacritty theme)
2531
+ // ===========================================================================
2532
+ '--ansi-black': '#2a2b3d', // shadow
2533
+ '--ansi-red': '#c47862', // fading ember
2534
+ '--ansi-green': '#8aab7c', // sage leaf
2535
+ '--ansi-yellow': '#c8a654', // candlelight gold
2536
+ '--ansi-blue': '#7c8ec4', // twilight sky
2537
+ '--ansi-magenta': '#a87cc4', // amethyst crystal
2538
+ '--ansi-cyan': '#7caab0', // moonlit water
2539
+ '--ansi-white': '#d4c4a8', // parchment
2540
+ '--ansi-bright-black': '#4a4b5d', // lighter shadow
2541
+ '--ansi-bright-red': '#d49882', // warm hearth
2542
+ '--ansi-bright-green': '#a4c896', // spring moss
2543
+ '--ansi-bright-yellow': '#e8c874', // sunbeam
2544
+ '--ansi-bright-blue': '#9caed4', // morning sky
2545
+ '--ansi-bright-magenta': '#c49cd4', // lavender mist
2546
+ '--ansi-bright-cyan': '#9ccad0', // clear brook
2547
+ '--ansi-bright-white': '#ebe0cc', // aged linen
2548
+
2549
+ // ===========================================================================
2550
+ // TERMINAL COLORS
2551
+ // ===========================================================================
2552
+ '--term-background': '#1a1b2e', // midnight oak
2553
+ '--term-foreground': '#d4c4a8', // warm parchment
2554
+ '--term-cursor': '#c8a654', // molten gold
2555
+ '--term-cursor-accent': '#1a1b2e', // midnight oak
2556
+ '--term-selection': '#3d3552', // twilight velvet
2557
+ '--term-border': '#3d3552', // twilight velvet
2558
+ '--term-header-bg': '#2a2b3d', // shadow
2559
+ '--term-header-fg': '#8a7a5e', // worn scroll
2560
+
2561
+ // ===========================================================================
2562
+ // COLLABORATOR COLORS
2563
+ // ===========================================================================
2564
+ '--collab-human': '#7c8ec4', // twilight sky
2565
+ '--collab-ai': '#a87cc4', // amethyst crystal
2566
+ '--collab-runtime': '#8aab7c', // sage leaf
2567
+
2568
+ // ===========================================================================
2569
+ // EDITOR
2570
+ // ===========================================================================
2571
+ '--editor-background': '#1a1b2e', // midnight oak
2572
+ '--editor-foreground': '#d4c4a8', // warm parchment
2573
+ '--editor-line-number': '#4a4b5d', // lighter shadow
2574
+ '--editor-line-number-active': '#d4c4a8', // warm parchment
2575
+ '--editor-selection': '#3d3552', // twilight velvet
2576
+ '--editor-selection-match': '#33304a', // deeper velvet
2577
+ '--editor-cursor': '#c8a654', // molten gold
2578
+ '--editor-active-line': 'rgba(61, 53, 82, 0.4)', // twilight velvet hint
2579
+ '--editor-gutter': '#1a1b2e', // midnight oak
2580
+ '--editor-matching-bracket': 'rgba(200, 166, 84, 0.3)', // gold shimmer
2581
+
2582
+ // ===========================================================================
2583
+ // SYNTAX HIGHLIGHTING (jewel tones — muted, aged, wise)
2584
+ // ===========================================================================
2585
+ '--syntax-keyword': '#a87cc4', // amethyst crystal
2586
+ '--syntax-control': '#a87cc4', // amethyst crystal
2587
+ '--syntax-string': '#8aab7c', // sage leaf
2588
+ '--syntax-number': '#c8a654', // candlelight gold
2589
+ '--syntax-comment': '#5a5b6d', // dim stone
2590
+ '--syntax-function': '#7c8ec4', // twilight sky
2591
+ '--syntax-variable': '#d4c4a8', // warm parchment
2592
+ '--syntax-variable-special': '#a87cc4', // amethyst crystal
2593
+ '--syntax-property': '#9caed4', // morning sky
2594
+ '--syntax-operator': '#d4c4a8', // parchment
2595
+ '--syntax-punctuation': '#8a7a5e', // worn scroll
2596
+ '--syntax-type': '#7caab0', // moonlit water
2597
+ '--syntax-class': '#7caab0', // moonlit water
2598
+ '--syntax-constant': '#c8a654', // candlelight gold
2599
+ '--syntax-parameter': '#d4c4a8', // warm parchment
2600
+ '--syntax-regexp': '#c47862', // fading ember
2601
+ '--syntax-escape': '#e8c874', // sunbeam
2602
+ '--syntax-tag': '#c47862', // fading ember
2603
+ '--syntax-attribute': '#9caed4', // morning sky
2604
+ '--syntax-attribute-value': '#8aab7c', // sage leaf
2605
+ '--syntax-heading': '#c8a654', // candlelight gold
2606
+ '--syntax-link': '#7c8ec4', // twilight sky
2607
+ '--syntax-link-text': '#9caed4', // morning sky
2608
+ '--syntax-emphasis': '#c49cd4', // lavender mist
2609
+ '--syntax-strong': '#ebe0cc', // aged linen
2610
+ '--syntax-strikethrough': '#4a4b5d', // lighter shadow
2611
+ '--syntax-quote': '#5a5b6d', // dim stone
2612
+ '--syntax-code': '#c8a654', // candlelight gold
2613
+ '--syntax-code-background': 'rgba(42, 43, 61, 0.6)', // shadow
2614
+ '--syntax-meta': '#5a5b6d', // dim stone
2615
+ '--syntax-inserted': '#8aab7c', // sage leaf
2616
+ '--syntax-deleted': '#c47862', // fading ember
2617
+ '--syntax-changed': '#c8a654', // candlelight gold
2618
+
2619
+ // ===========================================================================
2620
+ // MARKDOWN RENDERING
2621
+ // ===========================================================================
2622
+ '--md-heading-1-size': '1.75em',
2623
+ '--md-heading-2-size': '1.4em',
2624
+ '--md-heading-3-size': '1.2em',
2625
+ '--md-heading-4-size': '1.1em',
2626
+ '--md-heading-5-size': '1.05em',
2627
+ '--md-heading-6-size': '1em',
2628
+ '--md-heading-weight': '600',
2629
+ '--md-heading-line-height': '1.3',
2630
+ '--md-heading-margin-top': '0.5em',
2631
+ '--md-heading-color': '#e8c874', // sunbeam for headings
2632
+ '--md-marker-color': '#5a5b6d', // dim stone
2633
+ '--md-marker-font': "'Monaspace Neon Var', 'SF Mono', Monaco, Consolas, monospace",
2634
+ '--md-link-color': '#7c8ec4', // twilight sky
2635
+ '--md-link-decoration': 'underline',
2636
+ '--md-code-background': 'rgba(42, 43, 61, 0.6)', // shadow
2637
+ '--md-code-color': '#c8a654', // candlelight gold
2638
+ '--md-code-padding': '0.15em 0.35em',
2639
+ '--md-code-radius': '3px',
2640
+ '--md-blockquote-border': 'rgba(200, 166, 84, 0.4)', // candlelight gold
2641
+ '--md-blockquote-border-width': '3px',
2642
+ '--md-blockquote-color': '#8a7a5e', // worn scroll
2643
+ '--md-blockquote-padding': '1em',
2644
+ '--md-list-marker-color': '#8a7a5e', // worn scroll
2645
+ '--md-hr-color': '#3d3552', // twilight velvet
2646
+ '--md-hr-height': '1px',
2647
+ '--md-hr-margin': '1.5em 0',
2648
+ '--md-table-border': '#3d3552', // twilight velvet
2649
+ '--md-table-header-bg': '#2a2b3d', // shadow
2650
+ '--md-table-header-weight': '600',
2651
+ '--md-table-cell-padding': '0.5em 0.75em',
2652
+ '--md-table-stripe-bg': 'transparent',
2653
+ '--md-image-max-width': '100%',
2654
+ '--md-image-border-radius': '6px',
2655
+ '--md-checkbox-size': '1em',
2656
+ '--md-checkbox-color': '#c8a654', // candlelight gold
2657
+ '--md-alert-note-color': '#7c8ec4', // twilight sky
2658
+ '--md-alert-tip-color': '#8aab7c', // sage leaf
2659
+ '--md-alert-important-color': '#a87cc4', // amethyst crystal
2660
+ '--md-alert-warning-color': '#c8a654', // candlelight gold
2661
+ '--md-alert-caution-color': '#c47862', // fading ember
2662
+
2663
+ // ===========================================================================
2664
+ // SHELL (status bar, menus, dialogs)
2665
+ // ===========================================================================
2666
+ '--mrmd-ui-font': "Literata, Charter, Georgia, serif",
2667
+ '--mrmd-ui-font-size': '13px',
2668
+ '--mrmd-ui-font-size-sm': '11px',
2669
+ '--mrmd-panel-bg': '#1a1b2e', // midnight oak
2670
+ '--mrmd-popup-bg': '#2a2b3d', // shadow
2671
+ '--mrmd-bg': '#1a1b2e', // midnight oak
2672
+ '--mrmd-fg': '#d4c4a8', // warm parchment
2673
+ '--mrmd-fg-muted': '#8a7a5e', // worn scroll
2674
+ '--mrmd-border': '#3d3552', // twilight velvet
2675
+ '--mrmd-hover-bg': 'rgba(200, 166, 84, 0.08)', // gold hint
2676
+ '--mrmd-active-bg': 'rgba(200, 166, 84, 0.12)', // gold hint
2677
+ '--mrmd-selection-bg': 'rgba(200, 166, 84, 0.2)', // gold selection
2678
+ '--mrmd-accent': '#c8a654', // candlelight gold
2679
+ '--mrmd-accent-hover': '#e8c874', // sunbeam
2680
+ '--mrmd-success': '#8aab7c', // sage leaf
2681
+ '--mrmd-warning': '#c8a654', // candlelight gold
2682
+ '--mrmd-error': '#c47862', // fading ember
2683
+ '--mrmd-shadow-md': '0 4px 12px rgba(0, 0, 0, 0.4)',
2684
+ '--mrmd-shadow-lg': '0 8px 32px rgba(0, 0, 0, 0.5)',
2685
+ '--mrmd-shadow-xl': '0 16px 48px rgba(0, 0, 0, 0.6)',
2686
+ '--mrmd-menu-border': '#3d3552', // twilight velvet
2687
+ '--mrmd-dialog-border': '#3d3552', // twilight velvet
2688
+ '--mrmd-input-border': '#3d3552', // twilight velvet
2689
+ '--mrmd-button-bg': '#2a2b3d', // shadow
2690
+ '--mrmd-button-border': '#3d3552', // twilight velvet
2691
+ '--mrmd-button-hover': '#3d3552', // twilight velvet
2692
+ '--mrmd-button-active': '#4a4b5d', // lighter shadow
2693
+ };
2694
+
2695
+ /**
2696
+ * Wizard's Study Light Theme
2697
+ *
2698
+ * Sunlit parchment background like an open grimoire, deep ink foreground
2699
+ * like fresh calligraphy. Warm jewel tones: amber, forest, dusty rose, deep sea.
2700
+ *
2701
+ * The same wizard's study in daylight — morning sun streaming through
2702
+ * leaded glass, illuminating pages of aged manuscripts.
2703
+ *
2704
+ * ## Color Palette
2705
+ *
2706
+ * **Backgrounds** — sunlit parchment, warm vellum
2707
+ * - #f2e8d5 (sunlit parchment — main background)
2708
+ * - #e8dcc6 (bleached linen — elevated surfaces)
2709
+ * - #d4c4a8 (warm vellum — selections)
2710
+ *
2711
+ * **Text** — aged ink, deep calligraphy
2712
+ * - #2a2540 (aged ink — primary text)
2713
+ * - #5a5470 (faded ink — muted text)
2714
+ * - #a07830 (deep amber quill — accent)
2715
+ *
2716
+ * **Syntax** — rich inks on parchment
2717
+ * - #7a4a8a (dried lavender — keywords)
2718
+ * - #4a7a42 (forest herb — strings)
2719
+ * - #8a6a20 (aged amber — numbers)
2720
+ * - #a04040 (sealing wax — errors, tags)
2721
+ * - #3a5a9a (lapis lazuli — functions)
2722
+ * - #3a7a7a (deep well water — types)
2723
+ */
2724
+ export const wizardStudyLightTheme = {
2725
+ name: 'wizard-study-light',
2726
+ description: "Sunlit parchment with rich ink tones. The Wizard's Study (light).",
2727
+ isDark: false,
2728
+ fontFace: defaultFontFace,
2729
+
2730
+ // ===========================================================================
2731
+ // SPACING
2732
+ // ===========================================================================
2733
+ '--widget-line-height': 'inherit',
2734
+ '--widget-padding-x': '12px',
2735
+ '--widget-padding-y': '8px',
2736
+ '--widget-margin-y': '4px',
2737
+ '--widget-border-radius': '6px',
2738
+ '--widget-border-width': '1px',
2739
+ '--widget-border-accent-width': '3px',
2740
+
2741
+ // Text layout
2742
+ '--widget-white-space': 'pre-wrap',
2743
+ '--widget-word-break': 'break-word',
2744
+
2745
+ // ===========================================================================
2746
+ // TYPOGRAPHY
2747
+ // ===========================================================================
2748
+ '--widget-font-mono': "'Monaspace Neon Var', 'SF Mono', Monaco, Consolas, monospace",
2749
+ '--widget-font-sans': "Literata, Charter, Georgia, serif",
2750
+ '--editor-font-family': "Literata, Charter, Georgia, serif",
2751
+ '--widget-font-size': '0.9em',
2752
+ '--widget-font-size-small': '0.8em',
2753
+ '--widget-font-size-label': '11px',
2754
+
2755
+ // ===========================================================================
2756
+ // SURFACES (sunlit parchment tones)
2757
+ // ===========================================================================
2758
+ '--widget-surface': '#eaddc8', // aged parchment
2759
+ '--widget-surface-hover': '#e2d4bc', // touched parchment
2760
+ '--widget-surface-elevated': '#f2e8d5', // sunlit parchment
2761
+ '--widget-surface-inset': '#e0d2ba', // deeper parchment
2762
+
2763
+ // ===========================================================================
2764
+ // BORDERS
2765
+ // ===========================================================================
2766
+ '--widget-border': '#d4c4a8', // warm vellum
2767
+ '--widget-border-accent': 'rgba(160, 120, 48, 0.5)', // deep amber quill
2768
+ '--widget-border-focus': '#a07830', // deep amber quill
2769
+
2770
+ // ===========================================================================
2771
+ // TEXT COLORS (aged ink)
2772
+ // ===========================================================================
2773
+ '--widget-text': '#2a2540', // aged ink
2774
+ '--widget-text-muted': '#6a6480', // ghosted ink
2775
+ '--widget-text-accent': '#a07830', // deep amber quill
2776
+
2777
+ // ===========================================================================
2778
+ // SEMANTIC COLORS
2779
+ // ===========================================================================
2780
+ '--widget-success': '#4a7a42', // forest herb
2781
+ '--widget-warning': '#8a6a20', // aged amber
2782
+ '--widget-error': '#a04040', // sealing wax
2783
+ '--widget-info': '#3a5a9a', // lapis lazuli
2784
+
2785
+ // ===========================================================================
2786
+ // ANSI TERMINAL COLORS (from Alacritty light theme)
2787
+ // ===========================================================================
2788
+ '--ansi-black': '#2a2540', // deep ink
2789
+ '--ansi-red': '#a04040', // sealing wax
2790
+ '--ansi-green': '#4a7a42', // forest herb
2791
+ '--ansi-yellow': '#8a6a20', // aged amber
2792
+ '--ansi-blue': '#3a5a9a', // lapis lazuli
2793
+ '--ansi-magenta': '#7a4a8a', // dried lavender
2794
+ '--ansi-cyan': '#3a7a7a', // deep well water
2795
+ '--ansi-white': '#e8dcc6', // bleached linen
2796
+ '--ansi-bright-black': '#5a5470', // faded ink
2797
+ '--ansi-bright-red': '#c45a4a', // phoenix feather
2798
+ '--ansi-bright-green': '#5a9a52', // spring canopy
2799
+ '--ansi-bright-yellow': '#b08a30', // gilded edge
2800
+ '--ansi-bright-blue': '#4a72b8', // sapphire shard
2801
+ '--ansi-bright-magenta': '#9a62a8', // amethyst glow
2802
+ '--ansi-bright-cyan': '#4a9494', // enchanted pool
2803
+ '--ansi-bright-white': '#f2e8d5', // sunlit parchment
2804
+
2805
+ // ===========================================================================
2806
+ // TERMINAL COLORS
2807
+ // ===========================================================================
2808
+ '--term-background': '#f2e8d5', // sunlit parchment
2809
+ '--term-foreground': '#2a2540', // aged ink
2810
+ '--term-cursor': '#a07830', // deep amber quill
2811
+ '--term-cursor-accent': '#f2e8d5', // sunlit parchment
2812
+ '--term-selection': '#d4c4a8', // warm vellum
2813
+ '--term-border': '#d4c4a8', // warm vellum
2814
+ '--term-header-bg': '#e8dcc6', // bleached linen
2815
+ '--term-header-fg': '#6a6480', // ghosted ink
2816
+
2817
+ // ===========================================================================
2818
+ // COLLABORATOR COLORS
2819
+ // ===========================================================================
2820
+ '--collab-human': '#3a5a9a', // lapis lazuli
2821
+ '--collab-ai': '#7a4a8a', // dried lavender
2822
+ '--collab-runtime': '#4a7a42', // forest herb
2823
+
2824
+ // ===========================================================================
2825
+ // EDITOR
2826
+ // ===========================================================================
2827
+ '--editor-background': '#f2e8d5', // sunlit parchment
2828
+ '--editor-foreground': '#2a2540', // aged ink
2829
+ '--editor-line-number': '#a49478', // worn scroll
2830
+ '--editor-line-number-active': '#5a5470', // faded ink
2831
+ '--editor-selection': '#d4c4a8', // warm vellum
2832
+ '--editor-selection-match': '#e0d2ba', // deeper parchment
2833
+ '--editor-cursor': '#a07830', // deep amber quill
2834
+ '--editor-active-line': 'rgba(212, 196, 168, 0.4)', // warm vellum hint
2835
+ '--editor-gutter': '#f2e8d5', // sunlit parchment
2836
+ '--editor-matching-bracket': 'rgba(160, 120, 48, 0.25)', // amber shimmer
2837
+
2838
+ // ===========================================================================
2839
+ // SYNTAX HIGHLIGHTING (rich inks on parchment)
2840
+ // ===========================================================================
2841
+ '--syntax-keyword': '#7a4a8a', // dried lavender
2842
+ '--syntax-control': '#7a4a8a', // dried lavender
2843
+ '--syntax-string': '#4a7a42', // forest herb
2844
+ '--syntax-number': '#8a6a20', // aged amber
2845
+ '--syntax-comment': '#a49478', // worn scroll
2846
+ '--syntax-function': '#3a5a9a', // lapis lazuli
2847
+ '--syntax-variable': '#2a2540', // aged ink
2848
+ '--syntax-variable-special': '#7a4a8a', // dried lavender
2849
+ '--syntax-property': '#4a72b8', // sapphire shard
2850
+ '--syntax-operator': '#2a2540', // aged ink
2851
+ '--syntax-punctuation': '#6a6480', // ghosted ink
2852
+ '--syntax-type': '#3a7a7a', // deep well water
2853
+ '--syntax-class': '#3a7a7a', // deep well water
2854
+ '--syntax-constant': '#8a6a20', // aged amber
2855
+ '--syntax-parameter': '#2a2540', // aged ink
2856
+ '--syntax-regexp': '#a04040', // sealing wax
2857
+ '--syntax-escape': '#b08a30', // gilded edge
2858
+ '--syntax-tag': '#a04040', // sealing wax
2859
+ '--syntax-attribute': '#4a72b8', // sapphire shard
2860
+ '--syntax-attribute-value': '#4a7a42', // forest herb
2861
+ '--syntax-heading': '#2a2540', // aged ink — bold on parchment
2862
+ '--syntax-link': '#3a5a9a', // lapis lazuli
2863
+ '--syntax-link-text': '#4a72b8', // sapphire shard
2864
+ '--syntax-emphasis': '#7a4a8a', // dried lavender
2865
+ '--syntax-strong': '#2a2540', // aged ink
2866
+ '--syntax-strikethrough': '#a49478', // worn scroll
2867
+ '--syntax-quote': '#6a6480', // ghosted ink
2868
+ '--syntax-code': '#8a6a20', // aged amber
2869
+ '--syntax-code-background': 'rgba(212, 196, 168, 0.5)', // warm vellum
2870
+ '--syntax-meta': '#a49478', // worn scroll
2871
+ '--syntax-inserted': '#4a7a42', // forest herb
2872
+ '--syntax-deleted': '#a04040', // sealing wax
2873
+ '--syntax-changed': '#8a6a20', // aged amber
2874
+
2875
+ // ===========================================================================
2876
+ // MARKDOWN RENDERING
2877
+ // ===========================================================================
2878
+ '--md-heading-1-size': '1.75em',
2879
+ '--md-heading-2-size': '1.4em',
2880
+ '--md-heading-3-size': '1.2em',
2881
+ '--md-heading-4-size': '1.1em',
2882
+ '--md-heading-5-size': '1.05em',
2883
+ '--md-heading-6-size': '1em',
2884
+ '--md-heading-weight': '600',
2885
+ '--md-heading-line-height': '1.3',
2886
+ '--md-heading-margin-top': '0.5em',
2887
+ '--md-heading-color': '#2a2540', // aged ink
2888
+ '--md-marker-color': '#a49478', // worn scroll
2889
+ '--md-marker-font': "'Monaspace Neon Var', 'SF Mono', Monaco, Consolas, monospace",
2890
+ '--md-link-color': '#3a5a9a', // lapis lazuli
2891
+ '--md-link-decoration': 'underline',
2892
+ '--md-code-background': 'rgba(212, 196, 168, 0.5)', // warm vellum
2893
+ '--md-code-color': '#8a6a20', // aged amber
2894
+ '--md-code-padding': '0.15em 0.35em',
2895
+ '--md-code-radius': '3px',
2896
+ '--md-blockquote-border': 'rgba(160, 120, 48, 0.4)', // amber quill
2897
+ '--md-blockquote-border-width': '3px',
2898
+ '--md-blockquote-color': '#6a6480', // ghosted ink
2899
+ '--md-blockquote-padding': '1em',
2900
+ '--md-list-marker-color': '#a49478', // worn scroll
2901
+ '--md-hr-color': '#d4c4a8', // warm vellum
2902
+ '--md-hr-height': '1px',
2903
+ '--md-hr-margin': '1.5em 0',
2904
+ '--md-table-border': '#d4c4a8', // warm vellum
2905
+ '--md-table-header-bg': '#e8dcc6', // bleached linen
2906
+ '--md-table-header-weight': '600',
2907
+ '--md-table-cell-padding': '0.5em 0.75em',
2908
+ '--md-table-stripe-bg': 'transparent',
2909
+ '--md-image-max-width': '100%',
2910
+ '--md-image-border-radius': '6px',
2911
+ '--md-checkbox-size': '1em',
2912
+ '--md-checkbox-color': '#a07830', // deep amber quill
2913
+ '--md-alert-note-color': '#3a5a9a', // lapis lazuli
2914
+ '--md-alert-tip-color': '#4a7a42', // forest herb
2915
+ '--md-alert-important-color': '#7a4a8a', // dried lavender
2916
+ '--md-alert-warning-color': '#8a6a20', // aged amber
2917
+ '--md-alert-caution-color': '#a04040', // sealing wax
2918
+
2919
+ // ===========================================================================
2920
+ // SHELL (status bar, menus, dialogs)
2921
+ // ===========================================================================
2922
+ '--mrmd-ui-font': "Literata, Charter, Georgia, serif",
2923
+ '--mrmd-ui-font-size': '13px',
2924
+ '--mrmd-ui-font-size-sm': '11px',
2925
+ '--mrmd-panel-bg': '#f2e8d5', // sunlit parchment
2926
+ '--mrmd-popup-bg': '#f2e8d5', // sunlit parchment
2927
+ '--mrmd-bg': '#f2e8d5', // sunlit parchment
2928
+ '--mrmd-fg': '#2a2540', // aged ink
2929
+ '--mrmd-fg-muted': '#6a6480', // ghosted ink
2930
+ '--mrmd-border': '#d4c4a8', // warm vellum
2931
+ '--mrmd-hover-bg': 'rgba(160, 120, 48, 0.08)', // amber hint
2932
+ '--mrmd-active-bg': 'rgba(160, 120, 48, 0.12)', // amber hint
2933
+ '--mrmd-selection-bg': 'rgba(160, 120, 48, 0.15)', // amber selection
2934
+ '--mrmd-accent': '#a07830', // deep amber quill
2935
+ '--mrmd-accent-hover': '#8a6a20', // aged amber
2936
+ '--mrmd-success': '#4a7a42', // forest herb
2937
+ '--mrmd-warning': '#8a6a20', // aged amber
2938
+ '--mrmd-error': '#a04040', // sealing wax
2939
+ '--mrmd-shadow-md': '0 4px 12px rgba(0, 0, 0, 0.1)',
2940
+ '--mrmd-shadow-lg': '0 8px 32px rgba(0, 0, 0, 0.12)',
2941
+ '--mrmd-shadow-xl': '0 16px 48px rgba(0, 0, 0, 0.15)',
2942
+ '--mrmd-menu-border': '#d4c4a8', // warm vellum
2943
+ '--mrmd-dialog-border': '#d4c4a8', // warm vellum
2944
+ '--mrmd-input-border': '#d4c4a8', // warm vellum
2945
+ '--mrmd-button-bg': '#e8dcc6', // bleached linen
2946
+ '--mrmd-button-border': '#d4c4a8', // warm vellum
2947
+ '--mrmd-button-hover': '#d4c4a8', // warm vellum
2948
+ '--mrmd-button-active': '#c8bca6', // worn scroll
2949
+ };
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
+
2422
3944
  // #endregion BUILT_IN_THEMES
2423
3945
 
2424
3946
  // #region THEME_REGISTRY
@@ -2428,6 +3950,8 @@ export const openresponsesTheme = {
2428
3950
  * @type {Map<string, object>}
2429
3951
  */
2430
3952
  const themeRegistry = new Map([
3953
+ ['wizard-study-dark', wizardStudyDarkTheme],
3954
+ ['wizard-study-light', wizardStudyLightTheme],
2431
3955
  ['midnight', midnightTheme],
2432
3956
  ['daylight', daylightTheme],
2433
3957
  ['moonlight', moonlightTheme],
@@ -2437,6 +3961,10 @@ const themeRegistry = new Map([
2437
3961
  ['grayscale-dark', grayscaleDarkTheme],
2438
3962
  ['grayscale-light', grayscaleLightTheme],
2439
3963
  ['openresponses', openresponsesTheme],
3964
+ ['newsprint-light', newsprintLightTheme],
3965
+ ['newsprint-dark', newsprintDarkTheme],
3966
+ ['plain-light', plainLightTheme],
3967
+ ['plain-dark', plainDarkTheme],
2440
3968
  ]);
2441
3969
 
2442
3970
  /**
@@ -2536,12 +4064,18 @@ export default {
2536
4064
  tokenDefinitions,
2537
4065
 
2538
4066
  // Built-in themes
4067
+ wizardStudyDarkTheme,
4068
+ wizardStudyLightTheme,
2539
4069
  midnightTheme,
2540
4070
  daylightTheme,
2541
4071
  moonlightTheme,
2542
4072
  githubTheme,
2543
4073
  nordTheme,
2544
4074
  nordOutputsTheme,
4075
+ newsprintLightTheme,
4076
+ newsprintDarkTheme,
4077
+ plainLightTheme,
4078
+ plainDarkTheme,
2545
4079
 
2546
4080
  // Theme registry
2547
4081
  registerTheme,