@quilltap/theme-storybook 1.0.70 → 1.0.72
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/CHANGELOG.md +10 -0
- package/dist/index.css +170 -0
- package/package.json +3 -3
- package/src/css/qt-components.css +201 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `@quilltap/theme-storybook` will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [1.0.71] - 2026-09-19
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- `.qt-chat-message-regenerating`, `.qt-chat-regenerating`, `.qt-chat-regenerating-original` and `.qt-chat-regenerating-plate(-text)` — the Salon's new in-place regeneration: the line being re-rolled dims under a plate that says so, then gives way to the new prose as it streams.
|
|
9
|
+
- The whole `.qt-chat-message-action-bar*` / `.qt-chat-message-action-icon*` family, which had never been mirrored, including the new `.qt-chat-message-action-bar-disabled` state.
|
|
10
|
+
- The whole `.qt-chat-response-status*` family, also previously unmirrored: the stage strip above the composer, its per-stage colours (now including `regenerating` and `saving`), its fade-in keyframes and its reduced-motion rule.
|
|
11
|
+
|
|
12
|
+
### Notes
|
|
13
|
+
- The regeneration classes borrow `--qt-response-status-streaming-fg` rather than introducing tokens of their own; a theme that retunes the streaming status colour retunes the regeneration accent with it.
|
|
14
|
+
|
|
5
15
|
## [1.0.67] - 2026-08-30
|
|
6
16
|
|
|
7
17
|
### Added
|
package/dist/index.css
CHANGED
|
@@ -1474,6 +1474,176 @@ body {
|
|
|
1474
1474
|
font-style: italic;
|
|
1475
1475
|
margin-bottom: 0.25rem;
|
|
1476
1476
|
}
|
|
1477
|
+
.qt-chat-message-regenerating {
|
|
1478
|
+
border-color: color-mix(in srgb, var(--qt-response-status-streaming-fg) 45%, transparent);
|
|
1479
|
+
}
|
|
1480
|
+
.qt-chat-regenerating {
|
|
1481
|
+
position: relative;
|
|
1482
|
+
}
|
|
1483
|
+
.qt-chat-regenerating-original {
|
|
1484
|
+
opacity: 0.3;
|
|
1485
|
+
filter: grayscale(0.8);
|
|
1486
|
+
pointer-events: none;
|
|
1487
|
+
-webkit-user-select: none;
|
|
1488
|
+
-moz-user-select: none;
|
|
1489
|
+
user-select: none;
|
|
1490
|
+
}
|
|
1491
|
+
.qt-chat-regenerating-plate {
|
|
1492
|
+
position: absolute;
|
|
1493
|
+
inset: 0;
|
|
1494
|
+
display: flex;
|
|
1495
|
+
align-items: center;
|
|
1496
|
+
justify-content: center;
|
|
1497
|
+
gap: 0.5rem;
|
|
1498
|
+
color: var(--qt-response-status-streaming-fg);
|
|
1499
|
+
}
|
|
1500
|
+
.qt-chat-regenerating-plate-text {
|
|
1501
|
+
font-size: 0.875rem;
|
|
1502
|
+
line-height: 1.25rem;
|
|
1503
|
+
font-weight: 500;
|
|
1504
|
+
padding: 0.375rem 0.75rem;
|
|
1505
|
+
border-radius: 0.375rem;
|
|
1506
|
+
background: color-mix(in srgb, var(--qt-chat-assistant-bg) 88%, transparent);
|
|
1507
|
+
border: 1px solid color-mix(in srgb, var(--qt-response-status-streaming-fg) 35%, transparent);
|
|
1508
|
+
letter-spacing: 0.02em;
|
|
1509
|
+
}
|
|
1510
|
+
.qt-chat-message-action-bar {
|
|
1511
|
+
display: flex;
|
|
1512
|
+
align-items: center;
|
|
1513
|
+
gap: 0.75rem;
|
|
1514
|
+
margin-top: 0.5rem;
|
|
1515
|
+
padding-top: 0.5rem;
|
|
1516
|
+
border-top: 1px solid color-mix(in srgb, var(--color-border) 50%, transparent);
|
|
1517
|
+
}
|
|
1518
|
+
.qt-chat-message-action-bar-icons {
|
|
1519
|
+
display: flex;
|
|
1520
|
+
align-items: center;
|
|
1521
|
+
gap: 0.25rem;
|
|
1522
|
+
}
|
|
1523
|
+
.qt-chat-message-action-bar-disabled {
|
|
1524
|
+
pointer-events: none;
|
|
1525
|
+
opacity: 0.4;
|
|
1526
|
+
}
|
|
1527
|
+
.qt-chat-message-action-icon {
|
|
1528
|
+
padding: 0.375rem;
|
|
1529
|
+
border-radius: 0.25rem;
|
|
1530
|
+
transition-property:
|
|
1531
|
+
color,
|
|
1532
|
+
background-color,
|
|
1533
|
+
border-color,
|
|
1534
|
+
text-decoration-color,
|
|
1535
|
+
fill,
|
|
1536
|
+
stroke;
|
|
1537
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
1538
|
+
transition-duration: 150ms;
|
|
1539
|
+
color: var(--color-muted-foreground);
|
|
1540
|
+
cursor: pointer;
|
|
1541
|
+
}
|
|
1542
|
+
.qt-chat-message-action-icon:hover {
|
|
1543
|
+
color: var(--color-foreground);
|
|
1544
|
+
background: color-mix(in srgb, var(--color-muted) 50%, transparent);
|
|
1545
|
+
}
|
|
1546
|
+
.qt-chat-message-action-icon-danger:hover {
|
|
1547
|
+
color: var(--qt-status-danger-fg);
|
|
1548
|
+
background: color-mix(in srgb, var(--qt-status-danger-bg) 50%, transparent);
|
|
1549
|
+
}
|
|
1550
|
+
.qt-chat-message-action-icon svg,
|
|
1551
|
+
.qt-chat-message-action-icon .qt-icon {
|
|
1552
|
+
width: 1rem;
|
|
1553
|
+
height: 1rem;
|
|
1554
|
+
}
|
|
1555
|
+
.qt-chat-message-user .qt-chat-message-action-bar {
|
|
1556
|
+
border-top-color: color-mix(in srgb, var(--qt-chat-user-fg) 30%, transparent);
|
|
1557
|
+
}
|
|
1558
|
+
.qt-chat-message-user .qt-chat-message-action-icon {
|
|
1559
|
+
color: color-mix(in srgb, var(--qt-chat-user-fg) 70%, transparent);
|
|
1560
|
+
}
|
|
1561
|
+
.qt-chat-message-user .qt-chat-message-action-icon:hover {
|
|
1562
|
+
color: var(--qt-chat-user-fg);
|
|
1563
|
+
background: color-mix(in srgb, var(--qt-chat-user-fg) 15%, transparent);
|
|
1564
|
+
}
|
|
1565
|
+
.qt-chat-message-user .qt-chat-message-action-icon-danger:hover {
|
|
1566
|
+
color: hsl(0 100% 85%);
|
|
1567
|
+
background: color-mix(in srgb, hsl(0 70% 50%) 25%, transparent);
|
|
1568
|
+
}
|
|
1569
|
+
.qt-chat-message-action-timestamp {
|
|
1570
|
+
font-size: 0.75rem;
|
|
1571
|
+
line-height: 1rem;
|
|
1572
|
+
color: var(--color-muted-foreground);
|
|
1573
|
+
margin-left: auto;
|
|
1574
|
+
}
|
|
1575
|
+
.qt-chat-message-user .qt-chat-message-action-timestamp {
|
|
1576
|
+
color: color-mix(in srgb, var(--qt-chat-user-fg) 70%, transparent);
|
|
1577
|
+
}
|
|
1578
|
+
.qt-chat-response-status {
|
|
1579
|
+
display: flex;
|
|
1580
|
+
align-items: center;
|
|
1581
|
+
gap: 0.5rem;
|
|
1582
|
+
padding: 0.375rem 0.75rem;
|
|
1583
|
+
font-size: 0.875rem;
|
|
1584
|
+
line-height: 1.25rem;
|
|
1585
|
+
margin-bottom: 0.5rem;
|
|
1586
|
+
border-radius: 0.375rem;
|
|
1587
|
+
background: var(--qt-response-status-bg);
|
|
1588
|
+
color: var(--qt-response-status-fg);
|
|
1589
|
+
border: 1px solid var(--qt-response-status-border);
|
|
1590
|
+
animation: qt-status-fade-in 150ms ease-out;
|
|
1591
|
+
}
|
|
1592
|
+
.qt-chat-response-status-icon {
|
|
1593
|
+
flex-shrink: 0;
|
|
1594
|
+
width: 1rem;
|
|
1595
|
+
height: 1rem;
|
|
1596
|
+
}
|
|
1597
|
+
.qt-chat-response-status-text {
|
|
1598
|
+
font-weight: 500;
|
|
1599
|
+
}
|
|
1600
|
+
.qt-chat-response-status[data-stage=compressing] {
|
|
1601
|
+
color: var(--qt-response-status-compressing-fg);
|
|
1602
|
+
border-color: color-mix(in srgb, var(--qt-response-status-compressing-fg) 30%, transparent);
|
|
1603
|
+
}
|
|
1604
|
+
.qt-chat-response-status[data-stage=gathering] {
|
|
1605
|
+
color: var(--qt-response-status-gathering-fg);
|
|
1606
|
+
border-color: color-mix(in srgb, var(--qt-response-status-gathering-fg) 30%, transparent);
|
|
1607
|
+
}
|
|
1608
|
+
.qt-chat-response-status[data-stage=building] {
|
|
1609
|
+
color: var(--qt-response-status-building-fg);
|
|
1610
|
+
border-color: color-mix(in srgb, var(--qt-response-status-building-fg) 30%, transparent);
|
|
1611
|
+
}
|
|
1612
|
+
.qt-chat-response-status[data-stage=sending] {
|
|
1613
|
+
color: var(--qt-response-status-sending-fg);
|
|
1614
|
+
border-color: color-mix(in srgb, var(--qt-response-status-sending-fg) 30%, transparent);
|
|
1615
|
+
}
|
|
1616
|
+
.qt-chat-response-status[data-stage=streaming] {
|
|
1617
|
+
color: var(--qt-response-status-streaming-fg);
|
|
1618
|
+
border-color: color-mix(in srgb, var(--qt-response-status-streaming-fg) 30%, transparent);
|
|
1619
|
+
}
|
|
1620
|
+
.qt-chat-response-status[data-stage=regenerating],
|
|
1621
|
+
.qt-chat-response-status[data-stage=saving] {
|
|
1622
|
+
color: var(--qt-response-status-streaming-fg);
|
|
1623
|
+
border-color: color-mix(in srgb, var(--qt-response-status-streaming-fg) 30%, transparent);
|
|
1624
|
+
}
|
|
1625
|
+
.qt-chat-response-status[data-stage=tool_executing] {
|
|
1626
|
+
color: var(--qt-response-status-tool-fg);
|
|
1627
|
+
border-color: color-mix(in srgb, var(--qt-response-status-tool-fg) 30%, transparent);
|
|
1628
|
+
}
|
|
1629
|
+
@keyframes qt-status-fade-in {
|
|
1630
|
+
from {
|
|
1631
|
+
opacity: 0;
|
|
1632
|
+
transform: translateY(-4px);
|
|
1633
|
+
}
|
|
1634
|
+
to {
|
|
1635
|
+
opacity: 1;
|
|
1636
|
+
transform: translateY(0);
|
|
1637
|
+
}
|
|
1638
|
+
}
|
|
1639
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1640
|
+
.qt-chat-response-status {
|
|
1641
|
+
animation: none;
|
|
1642
|
+
}
|
|
1643
|
+
.qt-chat-response-status-icon .animate-pulse {
|
|
1644
|
+
animation: none;
|
|
1645
|
+
}
|
|
1646
|
+
}
|
|
1477
1647
|
.qt-chat-wardrobe-notice {
|
|
1478
1648
|
background: var(--qt-chat-wardrobe-bg);
|
|
1479
1649
|
color: var(--qt-chat-wardrobe-fg);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quilltap/theme-storybook",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.72",
|
|
4
4
|
"description": "Storybook preset and stories for developing Quilltap theme plugins",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@storybook/react": "^10.6.0",
|
|
47
|
-
"@types/react": "^19.
|
|
48
|
-
"react": "^19.
|
|
47
|
+
"@types/react": "^19.3.0",
|
|
48
|
+
"react": "^19.3.0",
|
|
49
49
|
"storybook": "^10.6.0",
|
|
50
50
|
"tsup": "^8.5.1",
|
|
51
51
|
"typescript": "^5.9.3"
|
|
@@ -1793,6 +1793,207 @@
|
|
|
1793
1793
|
margin-bottom: 0.25rem;
|
|
1794
1794
|
}
|
|
1795
1795
|
|
|
1796
|
+
/**
|
|
1797
|
+
* Regeneration — a line being re-rolled in place.
|
|
1798
|
+
*
|
|
1799
|
+
* Two states, one bubble. Before the first token the old line is still there
|
|
1800
|
+
* but visibly out of service (dimmed, desaturated, unselectable) under a plate
|
|
1801
|
+
* that says what is happening. From the first token the plate and the old line
|
|
1802
|
+
* are both gone and the new prose streams in their place.
|
|
1803
|
+
*/
|
|
1804
|
+
.qt-chat-message-regenerating {
|
|
1805
|
+
border-color: color-mix(in srgb, var(--qt-response-status-streaming-fg) 45%, transparent);
|
|
1806
|
+
}
|
|
1807
|
+
|
|
1808
|
+
.qt-chat-regenerating {
|
|
1809
|
+
position: relative;
|
|
1810
|
+
}
|
|
1811
|
+
|
|
1812
|
+
.qt-chat-regenerating-original {
|
|
1813
|
+
opacity: 0.3;
|
|
1814
|
+
filter: grayscale(0.8);
|
|
1815
|
+
pointer-events: none;
|
|
1816
|
+
user-select: none;
|
|
1817
|
+
}
|
|
1818
|
+
|
|
1819
|
+
.qt-chat-regenerating-plate {
|
|
1820
|
+
position: absolute;
|
|
1821
|
+
inset: 0;
|
|
1822
|
+
display: flex;
|
|
1823
|
+
align-items: center;
|
|
1824
|
+
justify-content: center;
|
|
1825
|
+
gap: 0.5rem;
|
|
1826
|
+
color: var(--qt-response-status-streaming-fg);
|
|
1827
|
+
}
|
|
1828
|
+
|
|
1829
|
+
.qt-chat-regenerating-plate-text {
|
|
1830
|
+
font-size: 0.875rem;
|
|
1831
|
+
line-height: 1.25rem;
|
|
1832
|
+
font-weight: 500;
|
|
1833
|
+
padding: 0.375rem 0.75rem;
|
|
1834
|
+
border-radius: 0.375rem;
|
|
1835
|
+
background: color-mix(in srgb, var(--qt-chat-assistant-bg) 88%, transparent);
|
|
1836
|
+
border: 1px solid color-mix(in srgb, var(--qt-response-status-streaming-fg) 35%, transparent);
|
|
1837
|
+
letter-spacing: 0.02em;
|
|
1838
|
+
}
|
|
1839
|
+
|
|
1840
|
+
/**
|
|
1841
|
+
* Message action bar — the per-message toolbar (copy, source, edit, delete,
|
|
1842
|
+
* regenerate, swipe arrows) along the bottom of a bubble.
|
|
1843
|
+
*/
|
|
1844
|
+
.qt-chat-message-action-bar {
|
|
1845
|
+
display: flex;
|
|
1846
|
+
align-items: center;
|
|
1847
|
+
gap: 0.75rem;
|
|
1848
|
+
margin-top: 0.5rem;
|
|
1849
|
+
padding-top: 0.5rem;
|
|
1850
|
+
border-top: 1px solid color-mix(in srgb, var(--color-border) 50%, transparent);
|
|
1851
|
+
}
|
|
1852
|
+
|
|
1853
|
+
.qt-chat-message-action-bar-icons {
|
|
1854
|
+
display: flex;
|
|
1855
|
+
align-items: center;
|
|
1856
|
+
gap: 0.25rem;
|
|
1857
|
+
}
|
|
1858
|
+
|
|
1859
|
+
/** The bar of a line that is mid-replacement: nothing on it is safe to press. */
|
|
1860
|
+
.qt-chat-message-action-bar-disabled {
|
|
1861
|
+
pointer-events: none;
|
|
1862
|
+
opacity: 0.4;
|
|
1863
|
+
}
|
|
1864
|
+
|
|
1865
|
+
.qt-chat-message-action-icon {
|
|
1866
|
+
padding: 0.375rem;
|
|
1867
|
+
border-radius: 0.25rem;
|
|
1868
|
+
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
|
1869
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
1870
|
+
transition-duration: 150ms;
|
|
1871
|
+
color: var(--color-muted-foreground);
|
|
1872
|
+
cursor: pointer;
|
|
1873
|
+
}
|
|
1874
|
+
|
|
1875
|
+
.qt-chat-message-action-icon:hover {
|
|
1876
|
+
color: var(--color-foreground);
|
|
1877
|
+
background: color-mix(in srgb, var(--color-muted) 50%, transparent);
|
|
1878
|
+
}
|
|
1879
|
+
|
|
1880
|
+
.qt-chat-message-action-icon-danger:hover {
|
|
1881
|
+
color: var(--qt-status-danger-fg);
|
|
1882
|
+
background: color-mix(in srgb, var(--qt-status-danger-bg) 50%, transparent);
|
|
1883
|
+
}
|
|
1884
|
+
|
|
1885
|
+
.qt-chat-message-action-icon svg,
|
|
1886
|
+
.qt-chat-message-action-icon .qt-icon {
|
|
1887
|
+
width: 1rem;
|
|
1888
|
+
height: 1rem;
|
|
1889
|
+
}
|
|
1890
|
+
|
|
1891
|
+
/** User message action icons — light colours on the user bubble's ground. */
|
|
1892
|
+
.qt-chat-message-user .qt-chat-message-action-bar {
|
|
1893
|
+
border-top-color: color-mix(in srgb, var(--qt-chat-user-fg) 30%, transparent);
|
|
1894
|
+
}
|
|
1895
|
+
|
|
1896
|
+
.qt-chat-message-user .qt-chat-message-action-icon {
|
|
1897
|
+
color: color-mix(in srgb, var(--qt-chat-user-fg) 70%, transparent);
|
|
1898
|
+
}
|
|
1899
|
+
|
|
1900
|
+
.qt-chat-message-user .qt-chat-message-action-icon:hover {
|
|
1901
|
+
color: var(--qt-chat-user-fg);
|
|
1902
|
+
background: color-mix(in srgb, var(--qt-chat-user-fg) 15%, transparent);
|
|
1903
|
+
}
|
|
1904
|
+
|
|
1905
|
+
.qt-chat-message-user .qt-chat-message-action-icon-danger:hover {
|
|
1906
|
+
color: hsl(0 100% 85%);
|
|
1907
|
+
background: color-mix(in srgb, hsl(0 70% 50%) 25%, transparent);
|
|
1908
|
+
}
|
|
1909
|
+
|
|
1910
|
+
.qt-chat-message-action-timestamp {
|
|
1911
|
+
font-size: 0.75rem;
|
|
1912
|
+
line-height: 1rem;
|
|
1913
|
+
color: var(--color-muted-foreground);
|
|
1914
|
+
margin-left: auto;
|
|
1915
|
+
}
|
|
1916
|
+
|
|
1917
|
+
.qt-chat-message-user .qt-chat-message-action-timestamp {
|
|
1918
|
+
color: color-mix(in srgb, var(--qt-chat-user-fg) 70%, transparent);
|
|
1919
|
+
}
|
|
1920
|
+
|
|
1921
|
+
/**
|
|
1922
|
+
* Response status strip — the line above the composer that narrates a turn as
|
|
1923
|
+
* it happens ("Gathering memories and context...", "Ada is responding...",
|
|
1924
|
+
* "Regenerating Ada's reply..."). Coloured per stage.
|
|
1925
|
+
*/
|
|
1926
|
+
.qt-chat-response-status {
|
|
1927
|
+
display: flex;
|
|
1928
|
+
align-items: center;
|
|
1929
|
+
gap: 0.5rem;
|
|
1930
|
+
padding: 0.375rem 0.75rem;
|
|
1931
|
+
font-size: 0.875rem;
|
|
1932
|
+
line-height: 1.25rem;
|
|
1933
|
+
margin-bottom: 0.5rem;
|
|
1934
|
+
border-radius: 0.375rem;
|
|
1935
|
+
background: var(--qt-response-status-bg);
|
|
1936
|
+
color: var(--qt-response-status-fg);
|
|
1937
|
+
border: 1px solid var(--qt-response-status-border);
|
|
1938
|
+
animation: qt-status-fade-in 150ms ease-out;
|
|
1939
|
+
}
|
|
1940
|
+
|
|
1941
|
+
.qt-chat-response-status-icon {
|
|
1942
|
+
flex-shrink: 0;
|
|
1943
|
+
width: 1rem;
|
|
1944
|
+
height: 1rem;
|
|
1945
|
+
}
|
|
1946
|
+
|
|
1947
|
+
.qt-chat-response-status-text {
|
|
1948
|
+
font-weight: 500;
|
|
1949
|
+
}
|
|
1950
|
+
|
|
1951
|
+
.qt-chat-response-status[data-stage="compressing"] {
|
|
1952
|
+
color: var(--qt-response-status-compressing-fg);
|
|
1953
|
+
border-color: color-mix(in srgb, var(--qt-response-status-compressing-fg) 30%, transparent);
|
|
1954
|
+
}
|
|
1955
|
+
|
|
1956
|
+
.qt-chat-response-status[data-stage="gathering"] {
|
|
1957
|
+
color: var(--qt-response-status-gathering-fg);
|
|
1958
|
+
border-color: color-mix(in srgb, var(--qt-response-status-gathering-fg) 30%, transparent);
|
|
1959
|
+
}
|
|
1960
|
+
|
|
1961
|
+
.qt-chat-response-status[data-stage="building"] {
|
|
1962
|
+
color: var(--qt-response-status-building-fg);
|
|
1963
|
+
border-color: color-mix(in srgb, var(--qt-response-status-building-fg) 30%, transparent);
|
|
1964
|
+
}
|
|
1965
|
+
|
|
1966
|
+
.qt-chat-response-status[data-stage="sending"] {
|
|
1967
|
+
color: var(--qt-response-status-sending-fg);
|
|
1968
|
+
border-color: color-mix(in srgb, var(--qt-response-status-sending-fg) 30%, transparent);
|
|
1969
|
+
}
|
|
1970
|
+
|
|
1971
|
+
.qt-chat-response-status[data-stage="streaming"] {
|
|
1972
|
+
color: var(--qt-response-status-streaming-fg);
|
|
1973
|
+
border-color: color-mix(in srgb, var(--qt-response-status-streaming-fg) 30%, transparent);
|
|
1974
|
+
}
|
|
1975
|
+
|
|
1976
|
+
.qt-chat-response-status[data-stage="regenerating"],
|
|
1977
|
+
.qt-chat-response-status[data-stage="saving"] {
|
|
1978
|
+
color: var(--qt-response-status-streaming-fg);
|
|
1979
|
+
border-color: color-mix(in srgb, var(--qt-response-status-streaming-fg) 30%, transparent);
|
|
1980
|
+
}
|
|
1981
|
+
|
|
1982
|
+
.qt-chat-response-status[data-stage="tool_executing"] {
|
|
1983
|
+
color: var(--qt-response-status-tool-fg);
|
|
1984
|
+
border-color: color-mix(in srgb, var(--qt-response-status-tool-fg) 30%, transparent);
|
|
1985
|
+
}
|
|
1986
|
+
|
|
1987
|
+
@keyframes qt-status-fade-in {
|
|
1988
|
+
from { opacity: 0; transform: translateY(-4px); }
|
|
1989
|
+
to { opacity: 1; transform: translateY(0); }
|
|
1990
|
+
}
|
|
1991
|
+
|
|
1992
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1993
|
+
.qt-chat-response-status { animation: none; }
|
|
1994
|
+
.qt-chat-response-status-icon .animate-pulse { animation: none; }
|
|
1995
|
+
}
|
|
1996
|
+
|
|
1796
1997
|
/**
|
|
1797
1998
|
* Wardrobe action notice — inline summary of outfit changes.
|
|
1798
1999
|
* Double border with warm amber/gold tones, distinct from whisper (dashed) and silent (dotted).
|