claude-code-kanban 4.14.0 → 4.16.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.
- package/cli.js +54 -32
- package/install.js +37 -7
- package/lib/parsers.js +100 -24
- package/package.json +1 -1
- package/plugin/.claude-plugin/marketplace.json +1 -1
- package/plugin/plugins/claude-code-kanban/.claude-plugin/plugin.json +2 -2
- package/plugin/plugins/claude-code-kanban/skills/kanban/SKILL.md +26 -25
- package/public/app.js +352 -127
- package/public/index.html +4 -4
- package/public/style.css +364 -74
- package/server.js +344 -47
package/public/index.html
CHANGED
|
@@ -291,7 +291,7 @@
|
|
|
291
291
|
</div>
|
|
292
292
|
</div>
|
|
293
293
|
|
|
294
|
-
<!--
|
|
294
|
+
<!-- File Preview Modal (markdown rendered inline, HTML in a sandboxed iframe) -->
|
|
295
295
|
<div id="preview-modal" class="modal-overlay" style="z-index:10002;" onclick="closePreviewModal()">
|
|
296
296
|
<div class="modal preview-modal-dialog" onclick="event.stopPropagation()">
|
|
297
297
|
<div class="modal-header">
|
|
@@ -311,9 +311,9 @@
|
|
|
311
311
|
</button>
|
|
312
312
|
</div>
|
|
313
313
|
</div>
|
|
314
|
-
<div class="modal-body"
|
|
315
|
-
<div id="preview-modal-body" class="rendered-md"
|
|
316
|
-
<div id="preview-modal-meta"
|
|
314
|
+
<div class="modal-body">
|
|
315
|
+
<div id="preview-modal-body" class="rendered-md"></div>
|
|
316
|
+
<div id="preview-modal-meta"></div>
|
|
317
317
|
</div>
|
|
318
318
|
</div>
|
|
319
319
|
</div>
|
package/public/style.css
CHANGED
|
@@ -31,6 +31,10 @@
|
|
|
31
31
|
--plan-dim: rgba(134, 168, 134, 0.18);
|
|
32
32
|
--mono: 'IBM Plex Mono', monospace;
|
|
33
33
|
--serif: 'Playfair Display', serif;
|
|
34
|
+
--card-gap: 7px;
|
|
35
|
+
/* the name's supporting lines read as one unit with it, so they sit tighter
|
|
36
|
+
than the gap separating the card's independent rows */
|
|
37
|
+
--card-gap-tight: 3px;
|
|
34
38
|
/* aliases: many rules reference --font-mono/--font-serif; keep them on-brand */
|
|
35
39
|
--font-mono: var(--mono);
|
|
36
40
|
--font-serif: var(--serif);
|
|
@@ -89,7 +93,7 @@ body::before {
|
|
|
89
93
|
|
|
90
94
|
/* #region SIDEBAR */
|
|
91
95
|
.sidebar {
|
|
92
|
-
width: var(--sidebar-width,
|
|
96
|
+
width: var(--sidebar-width, 310px);
|
|
93
97
|
background: var(--bg-surface);
|
|
94
98
|
border-right: 1px solid color-mix(in srgb, var(--border) 35%, transparent);
|
|
95
99
|
box-shadow: 1px 0 12px rgba(0, 0, 0, 0.04);
|
|
@@ -451,11 +455,11 @@ body::before {
|
|
|
451
455
|
.session-item {
|
|
452
456
|
display: block;
|
|
453
457
|
width: 100%;
|
|
454
|
-
padding:
|
|
455
|
-
margin-bottom:
|
|
458
|
+
padding: 13px 15px;
|
|
459
|
+
margin-bottom: 6px;
|
|
456
460
|
background: transparent;
|
|
457
461
|
border: 1px solid var(--border);
|
|
458
|
-
border-radius:
|
|
462
|
+
border-radius: 9px;
|
|
459
463
|
text-align: left;
|
|
460
464
|
cursor: pointer;
|
|
461
465
|
transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
|
@@ -467,7 +471,7 @@ body::before {
|
|
|
467
471
|
}
|
|
468
472
|
|
|
469
473
|
.session-name {
|
|
470
|
-
font-size:
|
|
474
|
+
font-size: 13px;
|
|
471
475
|
color: var(--text-primary);
|
|
472
476
|
white-space: nowrap;
|
|
473
477
|
overflow: hidden;
|
|
@@ -501,7 +505,7 @@ body::before {
|
|
|
501
505
|
font-size: 12px;
|
|
502
506
|
font-weight: 450;
|
|
503
507
|
color: var(--text-tertiary);
|
|
504
|
-
margin-top:
|
|
508
|
+
margin-top: var(--card-gap-tight);
|
|
505
509
|
white-space: nowrap;
|
|
506
510
|
overflow: hidden;
|
|
507
511
|
}
|
|
@@ -509,7 +513,7 @@ body::before {
|
|
|
509
513
|
.session-branch {
|
|
510
514
|
font-size: 10px;
|
|
511
515
|
color: var(--text-secondary);
|
|
512
|
-
margin-top:
|
|
516
|
+
margin-top: var(--card-gap-tight);
|
|
513
517
|
display: block;
|
|
514
518
|
font-family: var(--mono);
|
|
515
519
|
white-space: nowrap;
|
|
@@ -520,7 +524,7 @@ body::before {
|
|
|
520
524
|
.session-plan {
|
|
521
525
|
font-size: 10px;
|
|
522
526
|
color: var(--plan);
|
|
523
|
-
margin-top:
|
|
527
|
+
margin-top: var(--card-gap-tight);
|
|
524
528
|
white-space: nowrap;
|
|
525
529
|
overflow: hidden;
|
|
526
530
|
text-overflow: ellipsis;
|
|
@@ -528,7 +532,7 @@ body::before {
|
|
|
528
532
|
|
|
529
533
|
.session-goal {
|
|
530
534
|
font-size: 10px;
|
|
531
|
-
margin-top:
|
|
535
|
+
margin-top: var(--card-gap-tight);
|
|
532
536
|
white-space: nowrap;
|
|
533
537
|
overflow: hidden;
|
|
534
538
|
text-overflow: ellipsis;
|
|
@@ -552,8 +556,9 @@ body::before {
|
|
|
552
556
|
.session-progress {
|
|
553
557
|
display: flex;
|
|
554
558
|
align-items: center;
|
|
555
|
-
gap:
|
|
556
|
-
margin-top:
|
|
559
|
+
gap: 9px;
|
|
560
|
+
margin-top: var(--card-gap);
|
|
561
|
+
line-height: 1;
|
|
557
562
|
}
|
|
558
563
|
|
|
559
564
|
.progress-bar {
|
|
@@ -579,7 +584,7 @@ body::before {
|
|
|
579
584
|
|
|
580
585
|
.context-bar {
|
|
581
586
|
display: none;
|
|
582
|
-
margin-top:
|
|
587
|
+
margin-top: var(--card-gap);
|
|
583
588
|
}
|
|
584
589
|
.has-context .context-bar {
|
|
585
590
|
display: block;
|
|
@@ -682,7 +687,7 @@ body::before {
|
|
|
682
687
|
font-size: 11px;
|
|
683
688
|
font-weight: 450;
|
|
684
689
|
color: var(--text-tertiary);
|
|
685
|
-
margin-top:
|
|
690
|
+
margin-top: var(--card-gap);
|
|
686
691
|
}
|
|
687
692
|
|
|
688
693
|
.session-latest-msg {
|
|
@@ -947,8 +952,11 @@ body::before {
|
|
|
947
952
|
background: var(--bg-hover);
|
|
948
953
|
color: var(--text-primary);
|
|
949
954
|
}
|
|
955
|
+
/* Highlighted with the row's *own* theme accent rather than the active theme's, so the selected
|
|
956
|
+
row previews the theme it names. --sw-accent comes from the theme-swatch-<id> class on the row. */
|
|
950
957
|
.theme-menu-item.on {
|
|
951
|
-
color: var(--accent-text);
|
|
958
|
+
color: var(--sw-accent, var(--accent-text));
|
|
959
|
+
background: color-mix(in srgb, var(--sw-accent, var(--accent-text)) 16%, transparent);
|
|
952
960
|
}
|
|
953
961
|
/* 3-dot palette preview: surface, accent, ink (colors from themes.css vars) */
|
|
954
962
|
.theme-swatch {
|
|
@@ -1573,7 +1581,7 @@ body::before {
|
|
|
1573
1581
|
.session-indicators {
|
|
1574
1582
|
display: flex;
|
|
1575
1583
|
align-items: center;
|
|
1576
|
-
gap:
|
|
1584
|
+
gap: 5px;
|
|
1577
1585
|
flex-shrink: 0;
|
|
1578
1586
|
}
|
|
1579
1587
|
|
|
@@ -1598,13 +1606,18 @@ body::before {
|
|
|
1598
1606
|
flex-shrink: 0;
|
|
1599
1607
|
}
|
|
1600
1608
|
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1609
|
+
/* Every clickable session-card icon shares one box so they blend into a single row;
|
|
1610
|
+
resizing the row means editing this rule, not four. Per-icon rules below override
|
|
1611
|
+
only what actually differs (color, glyph size). */
|
|
1612
|
+
.team-info-btn,
|
|
1613
|
+
.plan-indicator,
|
|
1614
|
+
.loop-badge,
|
|
1615
|
+
.workflow-badge {
|
|
1616
|
+
width: 18px;
|
|
1617
|
+
height: 18px;
|
|
1604
1618
|
display: inline-flex;
|
|
1605
1619
|
align-items: center;
|
|
1606
1620
|
justify-content: center;
|
|
1607
|
-
font-size: 11px;
|
|
1608
1621
|
background: transparent;
|
|
1609
1622
|
border: 1px solid transparent;
|
|
1610
1623
|
border-radius: 4px;
|
|
@@ -1614,76 +1627,39 @@ body::before {
|
|
|
1614
1627
|
transition: all 0.15s ease;
|
|
1615
1628
|
}
|
|
1616
1629
|
|
|
1617
|
-
.team-info-btn:hover
|
|
1630
|
+
.team-info-btn:hover,
|
|
1631
|
+
.loop-badge:hover,
|
|
1632
|
+
.workflow-badge:hover {
|
|
1618
1633
|
background: var(--bg-hover);
|
|
1619
1634
|
border-color: var(--border);
|
|
1620
1635
|
color: var(--text-secondary);
|
|
1621
1636
|
}
|
|
1622
1637
|
|
|
1638
|
+
/* The boxes are wider than their 12px glyphs, so the leading icon would sit inset
|
|
1639
|
+
from the card text above it. Cancel that inset — but only when a boxed icon leads;
|
|
1640
|
+
the pill badges and .team-badge have a different inset and must not be shifted. */
|
|
1641
|
+
.session-indicators > .team-info-btn:first-child,
|
|
1642
|
+
.session-indicators > .plan-indicator:first-child,
|
|
1643
|
+
.session-indicators > .loop-badge:first-child,
|
|
1644
|
+
.session-indicators > .workflow-badge:first-child {
|
|
1645
|
+
margin-left: -3px;
|
|
1646
|
+
}
|
|
1647
|
+
|
|
1648
|
+
.team-info-btn {
|
|
1649
|
+
font-size: 11px;
|
|
1650
|
+
}
|
|
1651
|
+
|
|
1623
1652
|
.plan-indicator {
|
|
1624
|
-
width: 24px;
|
|
1625
|
-
height: 24px;
|
|
1626
|
-
display: inline-flex;
|
|
1627
|
-
align-items: center;
|
|
1628
|
-
justify-content: center;
|
|
1629
1653
|
background: var(--plan-dim);
|
|
1630
|
-
border: 1px solid transparent;
|
|
1631
|
-
border-radius: 4px;
|
|
1632
1654
|
color: var(--plan);
|
|
1633
|
-
cursor: pointer;
|
|
1634
|
-
flex-shrink: 0;
|
|
1635
|
-
transition: all 0.15s ease;
|
|
1636
1655
|
}
|
|
1637
1656
|
|
|
1638
1657
|
.plan-indicator:hover {
|
|
1639
|
-
background: var(--plan-dim);
|
|
1640
1658
|
border-color: var(--plan);
|
|
1641
1659
|
}
|
|
1642
1660
|
|
|
1643
|
-
/* Match .team-info-btn so the wakeups clock blends with the other session-card icons. */
|
|
1644
|
-
.loop-badge {
|
|
1645
|
-
width: 24px;
|
|
1646
|
-
height: 24px;
|
|
1647
|
-
display: inline-flex;
|
|
1648
|
-
align-items: center;
|
|
1649
|
-
justify-content: center;
|
|
1650
|
-
background: transparent;
|
|
1651
|
-
border: 1px solid transparent;
|
|
1652
|
-
border-radius: 4px;
|
|
1653
|
-
color: var(--text-muted);
|
|
1654
|
-
cursor: pointer;
|
|
1655
|
-
flex-shrink: 0;
|
|
1656
|
-
transition: all 0.15s ease;
|
|
1657
|
-
}
|
|
1658
|
-
|
|
1659
|
-
.loop-badge:hover {
|
|
1660
|
-
background: var(--bg-hover);
|
|
1661
|
-
border-color: var(--border);
|
|
1662
|
-
color: var(--text-secondary);
|
|
1663
|
-
}
|
|
1664
|
-
|
|
1665
1661
|
/* #region WORKFLOW */
|
|
1666
|
-
/*
|
|
1667
|
-
.workflow-badge {
|
|
1668
|
-
width: 24px;
|
|
1669
|
-
height: 24px;
|
|
1670
|
-
display: inline-flex;
|
|
1671
|
-
align-items: center;
|
|
1672
|
-
justify-content: center;
|
|
1673
|
-
background: transparent;
|
|
1674
|
-
border: 1px solid transparent;
|
|
1675
|
-
border-radius: 4px;
|
|
1676
|
-
color: var(--text-muted);
|
|
1677
|
-
cursor: pointer;
|
|
1678
|
-
flex-shrink: 0;
|
|
1679
|
-
transition: all 0.15s ease;
|
|
1680
|
-
}
|
|
1681
|
-
|
|
1682
|
-
.workflow-badge:hover {
|
|
1683
|
-
background: var(--bg-hover);
|
|
1684
|
-
border-color: var(--border);
|
|
1685
|
-
color: var(--text-secondary);
|
|
1686
|
-
}
|
|
1662
|
+
/* .workflow-badge's box is defined with the other session-card icons in TEAM_BADGE. */
|
|
1687
1663
|
|
|
1688
1664
|
.workflow-row {
|
|
1689
1665
|
border: 1px solid var(--border);
|
|
@@ -1723,6 +1699,13 @@ body::before {
|
|
|
1723
1699
|
color: var(--text-secondary);
|
|
1724
1700
|
}
|
|
1725
1701
|
|
|
1702
|
+
.workflow-row-desc {
|
|
1703
|
+
margin-top: 4px;
|
|
1704
|
+
font-size: 12px;
|
|
1705
|
+
line-height: 1.4;
|
|
1706
|
+
color: var(--text-secondary);
|
|
1707
|
+
}
|
|
1708
|
+
|
|
1726
1709
|
.workflow-row-meta {
|
|
1727
1710
|
margin-top: 2px;
|
|
1728
1711
|
font-size: 11px;
|
|
@@ -1748,6 +1731,150 @@ body::before {
|
|
|
1748
1731
|
border-radius: 6px;
|
|
1749
1732
|
}
|
|
1750
1733
|
|
|
1734
|
+
/* Run state view */
|
|
1735
|
+
.wf-back {
|
|
1736
|
+
font-size: 12px;
|
|
1737
|
+
color: var(--text-secondary);
|
|
1738
|
+
cursor: pointer;
|
|
1739
|
+
margin-bottom: 10px;
|
|
1740
|
+
}
|
|
1741
|
+
|
|
1742
|
+
.wf-back:hover {
|
|
1743
|
+
color: var(--text-primary);
|
|
1744
|
+
}
|
|
1745
|
+
|
|
1746
|
+
.wf-run-desc {
|
|
1747
|
+
color: var(--text-secondary);
|
|
1748
|
+
font-size: 13px;
|
|
1749
|
+
line-height: 1.5;
|
|
1750
|
+
margin-bottom: 8px;
|
|
1751
|
+
}
|
|
1752
|
+
|
|
1753
|
+
.wf-run-stats {
|
|
1754
|
+
font-size: 12px;
|
|
1755
|
+
color: var(--text-secondary);
|
|
1756
|
+
margin-bottom: 4px;
|
|
1757
|
+
}
|
|
1758
|
+
|
|
1759
|
+
.wf-run-stats code {
|
|
1760
|
+
font-size: 11px;
|
|
1761
|
+
}
|
|
1762
|
+
|
|
1763
|
+
.wf-section-title {
|
|
1764
|
+
margin: 16px 0 8px;
|
|
1765
|
+
font-size: 11px;
|
|
1766
|
+
font-weight: 600;
|
|
1767
|
+
text-transform: uppercase;
|
|
1768
|
+
letter-spacing: 0.04em;
|
|
1769
|
+
color: var(--text-secondary);
|
|
1770
|
+
}
|
|
1771
|
+
|
|
1772
|
+
.wf-phases {
|
|
1773
|
+
display: flex;
|
|
1774
|
+
flex-direction: column;
|
|
1775
|
+
gap: 2px;
|
|
1776
|
+
}
|
|
1777
|
+
|
|
1778
|
+
.wf-phase {
|
|
1779
|
+
display: flex;
|
|
1780
|
+
align-items: baseline;
|
|
1781
|
+
gap: 8px;
|
|
1782
|
+
padding: 3px 0;
|
|
1783
|
+
font-size: 13px;
|
|
1784
|
+
}
|
|
1785
|
+
|
|
1786
|
+
.wf-phase-mark {
|
|
1787
|
+
flex-shrink: 0;
|
|
1788
|
+
width: 12px;
|
|
1789
|
+
color: var(--text-muted);
|
|
1790
|
+
}
|
|
1791
|
+
|
|
1792
|
+
.wf-phase-mark.done {
|
|
1793
|
+
color: var(--ok, #3fb950);
|
|
1794
|
+
}
|
|
1795
|
+
|
|
1796
|
+
.wf-phase-title {
|
|
1797
|
+
font-weight: 500;
|
|
1798
|
+
color: var(--text-primary);
|
|
1799
|
+
}
|
|
1800
|
+
|
|
1801
|
+
.wf-phase-detail {
|
|
1802
|
+
color: var(--text-muted);
|
|
1803
|
+
font-size: 12px;
|
|
1804
|
+
}
|
|
1805
|
+
|
|
1806
|
+
.wf-agents {
|
|
1807
|
+
display: flex;
|
|
1808
|
+
flex-direction: column;
|
|
1809
|
+
gap: 4px;
|
|
1810
|
+
}
|
|
1811
|
+
|
|
1812
|
+
.wf-agent {
|
|
1813
|
+
display: grid;
|
|
1814
|
+
grid-template-columns: 1fr auto auto auto 16px;
|
|
1815
|
+
align-items: center;
|
|
1816
|
+
gap: 12px;
|
|
1817
|
+
padding: 6px 10px;
|
|
1818
|
+
border: 1px solid var(--border);
|
|
1819
|
+
border-radius: 6px;
|
|
1820
|
+
cursor: pointer;
|
|
1821
|
+
font-size: 12px;
|
|
1822
|
+
transition: border-color 0.15s ease;
|
|
1823
|
+
}
|
|
1824
|
+
|
|
1825
|
+
.wf-agent:hover {
|
|
1826
|
+
border-color: var(--accent, var(--plan));
|
|
1827
|
+
}
|
|
1828
|
+
|
|
1829
|
+
.wf-agent-type {
|
|
1830
|
+
font-weight: 500;
|
|
1831
|
+
color: var(--text-primary);
|
|
1832
|
+
overflow: hidden;
|
|
1833
|
+
text-overflow: ellipsis;
|
|
1834
|
+
white-space: nowrap;
|
|
1835
|
+
}
|
|
1836
|
+
|
|
1837
|
+
.wf-agent-model,
|
|
1838
|
+
.wf-agent-tok,
|
|
1839
|
+
.wf-agent-dur {
|
|
1840
|
+
font-family: var(--font-mono, monospace);
|
|
1841
|
+
color: var(--text-secondary);
|
|
1842
|
+
white-space: nowrap;
|
|
1843
|
+
}
|
|
1844
|
+
|
|
1845
|
+
.wf-agent-status {
|
|
1846
|
+
text-align: center;
|
|
1847
|
+
}
|
|
1848
|
+
|
|
1849
|
+
.wf-agent-status.done {
|
|
1850
|
+
color: var(--ok, #3fb950);
|
|
1851
|
+
}
|
|
1852
|
+
|
|
1853
|
+
.wf-agent-status.running {
|
|
1854
|
+
color: var(--accent, var(--plan));
|
|
1855
|
+
}
|
|
1856
|
+
|
|
1857
|
+
.wf-empty {
|
|
1858
|
+
font-size: 12px;
|
|
1859
|
+
color: var(--text-muted);
|
|
1860
|
+
padding: 4px 0;
|
|
1861
|
+
}
|
|
1862
|
+
|
|
1863
|
+
.wf-source {
|
|
1864
|
+
margin-top: 16px;
|
|
1865
|
+
}
|
|
1866
|
+
|
|
1867
|
+
.wf-source > summary {
|
|
1868
|
+
cursor: pointer;
|
|
1869
|
+
font-size: 12px;
|
|
1870
|
+
color: var(--text-secondary);
|
|
1871
|
+
padding: 4px 0;
|
|
1872
|
+
}
|
|
1873
|
+
|
|
1874
|
+
.wf-source > summary:hover {
|
|
1875
|
+
color: var(--text-primary);
|
|
1876
|
+
}
|
|
1877
|
+
|
|
1751
1878
|
/* #endregion */
|
|
1752
1879
|
|
|
1753
1880
|
.loop-section-title {
|
|
@@ -3221,6 +3348,113 @@ body::before {
|
|
|
3221
3348
|
min-width: 0;
|
|
3222
3349
|
}
|
|
3223
3350
|
|
|
3351
|
+
/* margin-left:auto pins every × to the same right edge, so they read as a column
|
|
3352
|
+
however long the names in between are. */
|
|
3353
|
+
.linked-doc-remove {
|
|
3354
|
+
margin-left: auto;
|
|
3355
|
+
align-self: center;
|
|
3356
|
+
flex-shrink: 0;
|
|
3357
|
+
width: 16px;
|
|
3358
|
+
height: 16px;
|
|
3359
|
+
display: inline-flex;
|
|
3360
|
+
align-items: center;
|
|
3361
|
+
justify-content: center;
|
|
3362
|
+
padding: 0;
|
|
3363
|
+
background: none;
|
|
3364
|
+
border: none;
|
|
3365
|
+
border-radius: 3px;
|
|
3366
|
+
color: var(--text-muted);
|
|
3367
|
+
font-family: var(--mono);
|
|
3368
|
+
font-size: 14px;
|
|
3369
|
+
line-height: 1;
|
|
3370
|
+
cursor: pointer;
|
|
3371
|
+
opacity: 0.45;
|
|
3372
|
+
transition: all 0.15s ease;
|
|
3373
|
+
}
|
|
3374
|
+
|
|
3375
|
+
.linked-doc-item:hover .linked-doc-remove {
|
|
3376
|
+
opacity: 1;
|
|
3377
|
+
}
|
|
3378
|
+
|
|
3379
|
+
.linked-doc-remove:hover {
|
|
3380
|
+
background: var(--danger-dim);
|
|
3381
|
+
color: var(--danger);
|
|
3382
|
+
}
|
|
3383
|
+
|
|
3384
|
+
/* A linked file the previewer can't render opens in the editor — the dashed
|
|
3385
|
+
underline keeps that different destination visible before the click. */
|
|
3386
|
+
.linked-doc-item.is-editor .linked-doc-link {
|
|
3387
|
+
color: var(--text-secondary);
|
|
3388
|
+
text-decoration-style: dashed;
|
|
3389
|
+
}
|
|
3390
|
+
|
|
3391
|
+
.linked-docs-empty {
|
|
3392
|
+
color: var(--text-muted);
|
|
3393
|
+
font-size: 11px;
|
|
3394
|
+
font-style: italic;
|
|
3395
|
+
}
|
|
3396
|
+
|
|
3397
|
+
.linked-docs-add-btn {
|
|
3398
|
+
display: inline-flex;
|
|
3399
|
+
align-items: center;
|
|
3400
|
+
justify-content: center;
|
|
3401
|
+
width: 18px;
|
|
3402
|
+
height: 18px;
|
|
3403
|
+
padding: 0;
|
|
3404
|
+
line-height: 1;
|
|
3405
|
+
flex-shrink: 0;
|
|
3406
|
+
background: var(--bg-elevated);
|
|
3407
|
+
border: 1px solid var(--border);
|
|
3408
|
+
border-radius: 4px;
|
|
3409
|
+
color: var(--text-muted);
|
|
3410
|
+
font-family: var(--mono);
|
|
3411
|
+
font-size: 13px;
|
|
3412
|
+
cursor: pointer;
|
|
3413
|
+
transition: all 0.15s ease;
|
|
3414
|
+
}
|
|
3415
|
+
|
|
3416
|
+
.linked-docs-add-btn:hover {
|
|
3417
|
+
border-color: var(--accent);
|
|
3418
|
+
color: var(--accent-text);
|
|
3419
|
+
}
|
|
3420
|
+
|
|
3421
|
+
.linked-doc-editor-slot:not(:empty) {
|
|
3422
|
+
margin-bottom: 8px;
|
|
3423
|
+
}
|
|
3424
|
+
|
|
3425
|
+
.linked-doc-input {
|
|
3426
|
+
width: 100%;
|
|
3427
|
+
padding: 6px 8px;
|
|
3428
|
+
background: var(--bg-elevated);
|
|
3429
|
+
border: 1px solid var(--accent);
|
|
3430
|
+
border-radius: 4px;
|
|
3431
|
+
color: var(--text-primary);
|
|
3432
|
+
font-family: var(--mono);
|
|
3433
|
+
font-size: 12px;
|
|
3434
|
+
box-shadow: 0 0 0 2px var(--accent-dim);
|
|
3435
|
+
outline: none;
|
|
3436
|
+
}
|
|
3437
|
+
|
|
3438
|
+
.linked-doc-hint {
|
|
3439
|
+
color: var(--text-muted);
|
|
3440
|
+
font-size: 10px;
|
|
3441
|
+
margin-top: 4px;
|
|
3442
|
+
overflow: hidden;
|
|
3443
|
+
text-overflow: ellipsis;
|
|
3444
|
+
white-space: nowrap;
|
|
3445
|
+
}
|
|
3446
|
+
|
|
3447
|
+
/* Present but empty until a path fails to resolve. */
|
|
3448
|
+
.linked-doc-error:empty {
|
|
3449
|
+
display: none;
|
|
3450
|
+
}
|
|
3451
|
+
|
|
3452
|
+
.linked-doc-error {
|
|
3453
|
+
color: var(--danger);
|
|
3454
|
+
font-size: 11px;
|
|
3455
|
+
margin-top: 4px;
|
|
3456
|
+
}
|
|
3457
|
+
|
|
3224
3458
|
/* #endregion */
|
|
3225
3459
|
|
|
3226
3460
|
/* #region PERMISSION_PENDING */
|
|
@@ -3441,6 +3675,62 @@ body.light .msg-assistant .msg-text {
|
|
|
3441
3675
|
max-height: 90vh;
|
|
3442
3676
|
}
|
|
3443
3677
|
|
|
3678
|
+
.preview-modal-dialog .modal-body {
|
|
3679
|
+
flex: 0 1 auto;
|
|
3680
|
+
display: flex;
|
|
3681
|
+
flex-direction: column;
|
|
3682
|
+
overflow: hidden;
|
|
3683
|
+
}
|
|
3684
|
+
|
|
3685
|
+
#preview-modal-body {
|
|
3686
|
+
word-break: break-word;
|
|
3687
|
+
font-size: 13px;
|
|
3688
|
+
line-height: 1.6;
|
|
3689
|
+
overflow-y: auto;
|
|
3690
|
+
flex: 0 1 auto;
|
|
3691
|
+
min-height: 0;
|
|
3692
|
+
padding-right: 8px;
|
|
3693
|
+
}
|
|
3694
|
+
|
|
3695
|
+
#preview-modal-meta {
|
|
3696
|
+
margin-top: 12px;
|
|
3697
|
+
font-size: 11px;
|
|
3698
|
+
color: var(--text-muted);
|
|
3699
|
+
flex-shrink: 0;
|
|
3700
|
+
}
|
|
3701
|
+
|
|
3702
|
+
/* Rendered HTML pages need far more room than a markdown doc. */
|
|
3703
|
+
.modal.preview-modal-dialog.preview-html {
|
|
3704
|
+
width: 96vw;
|
|
3705
|
+
max-width: 96vw;
|
|
3706
|
+
height: 92vh;
|
|
3707
|
+
max-height: 92vh;
|
|
3708
|
+
}
|
|
3709
|
+
|
|
3710
|
+
/* Keeps the fullscreen button meaningful — the generic .fullscreen rule is smaller than this. */
|
|
3711
|
+
.modal.preview-modal-dialog.preview-html.fullscreen {
|
|
3712
|
+
width: 98vw;
|
|
3713
|
+
max-width: 98vw;
|
|
3714
|
+
height: 98vh;
|
|
3715
|
+
max-height: 98vh;
|
|
3716
|
+
}
|
|
3717
|
+
|
|
3718
|
+
.preview-html .modal-body,
|
|
3719
|
+
.preview-html #preview-modal-body {
|
|
3720
|
+
flex: 1 1 auto;
|
|
3721
|
+
overflow: hidden;
|
|
3722
|
+
padding-right: 0;
|
|
3723
|
+
}
|
|
3724
|
+
|
|
3725
|
+
.preview-html-frame {
|
|
3726
|
+
width: 100%;
|
|
3727
|
+
height: 100%;
|
|
3728
|
+
border: 0;
|
|
3729
|
+
border-radius: 6px;
|
|
3730
|
+
/* Pages authored for a light page default would be unreadable on the dark theme. */
|
|
3731
|
+
background: #fff;
|
|
3732
|
+
}
|
|
3733
|
+
|
|
3444
3734
|
.preview-fm {
|
|
3445
3735
|
margin: 0 0 14px;
|
|
3446
3736
|
border: 1px solid var(--border);
|