@quilltap/theme-storybook 1.0.96 → 1.0.98
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 +18 -0
- package/dist/index.css +2235 -750
- package/package.json +1 -1
- package/src/css/qt-components.css +2663 -907
|
@@ -1057,13 +1057,11 @@
|
|
|
1057
1057
|
|
|
1058
1058
|
/**
|
|
1059
1059
|
* NanoGPT provider badge (primary/accent semantic)
|
|
1060
|
-
* Same border quirk as the ollama badge: --qt-badge-primary-border has no
|
|
1061
|
-
* default definition.
|
|
1062
1060
|
*/
|
|
1063
1061
|
.qt-badge-provider-nanogpt {
|
|
1064
1062
|
background: var(--qt-badge-primary-bg);
|
|
1065
1063
|
color: var(--qt-badge-primary-fg);
|
|
1066
|
-
border: 1px solid var(--qt-badge-primary-border);
|
|
1064
|
+
border: 1px solid var(--qt-badge-primary-border, var(--color-primary));
|
|
1067
1065
|
}
|
|
1068
1066
|
|
|
1069
1067
|
/**
|
|
@@ -1403,7 +1401,7 @@
|
|
|
1403
1401
|
|
|
1404
1402
|
.qt-floating-dialog-close:hover {
|
|
1405
1403
|
background: var(--color-accent);
|
|
1406
|
-
color: var(--color-foreground);
|
|
1404
|
+
color: var(--color-accent-foreground);
|
|
1407
1405
|
}
|
|
1408
1406
|
|
|
1409
1407
|
.qt-floating-dialog-body {
|
|
@@ -1416,1256 +1414,2715 @@
|
|
|
1416
1414
|
}
|
|
1417
1415
|
|
|
1418
1416
|
/* ==========================================================================
|
|
1419
|
-
|
|
1420
|
-
|
|
1417
|
+
HELP CHAT - Message bubbles, composer, and UI elements
|
|
1418
|
+
Used by the contextual help chat system
|
|
1421
1419
|
========================================================================== */
|
|
1422
1420
|
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
background: var(--
|
|
1435
|
-
color: var(--
|
|
1436
|
-
|
|
1437
|
-
box-shadow: var(--qt-brahma-launcher-shadow);
|
|
1438
|
-
transition: background-color 150ms ease, color 150ms ease, transform 150ms ease;
|
|
1439
|
-
}
|
|
1440
|
-
|
|
1441
|
-
.qt-brahma-launcher:hover {
|
|
1442
|
-
background: var(--qt-brahma-launcher-hover-bg);
|
|
1443
|
-
transform: scale(1.06);
|
|
1421
|
+
/**
|
|
1422
|
+
* Help chat message bubble — user messages
|
|
1423
|
+
*/
|
|
1424
|
+
.qt-help-msg-user {
|
|
1425
|
+
border-radius: 1rem;
|
|
1426
|
+
padding-left: 0.75rem;
|
|
1427
|
+
padding-right: 0.75rem;
|
|
1428
|
+
padding-top: 0.5rem;
|
|
1429
|
+
padding-bottom: 0.375rem;
|
|
1430
|
+
font-size: 0.875rem;
|
|
1431
|
+
line-height: 1.25rem;
|
|
1432
|
+
background-color: var(--color-primary);
|
|
1433
|
+
color: var(--color-primary-foreground);
|
|
1434
|
+
max-width: 80%;
|
|
1444
1435
|
}
|
|
1445
1436
|
|
|
1446
|
-
.qt-
|
|
1447
|
-
|
|
1448
|
-
|
|
1437
|
+
.qt-help-msg-user :last-child,
|
|
1438
|
+
.qt-help-msg-assistant :last-child {
|
|
1439
|
+
margin-bottom: 0 !important;
|
|
1440
|
+
padding-bottom: 0 !important;
|
|
1449
1441
|
}
|
|
1450
1442
|
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1443
|
+
/**
|
|
1444
|
+
* User bubbles render markdown through MessageContent, whose `.qt-prose-auto`
|
|
1445
|
+
* pins `--tw-prose-body` to the global foreground in dark themes. Left alone,
|
|
1446
|
+
* that prose colour overrides the bubble's `text-primary-foreground`, leaving
|
|
1447
|
+
* light prose on the primary fill — unreadable in dark themes such as
|
|
1448
|
+
* Madman's Box. Pin the prose body (and plain text) back to the primary
|
|
1449
|
+
* foreground, mirroring the Salon's user-bubble treatment.
|
|
1450
|
+
*/
|
|
1451
|
+
.qt-help-msg-user .qt-chat-message-content {
|
|
1452
|
+
--tw-prose-body: var(--color-primary-foreground);
|
|
1453
|
+
--tw-prose-invert-body: var(--color-primary-foreground);
|
|
1454
|
+
color: var(--color-primary-foreground);
|
|
1455
1455
|
}
|
|
1456
1456
|
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1457
|
+
/**
|
|
1458
|
+
* Help chat message bubble — assistant messages
|
|
1459
|
+
*/
|
|
1460
|
+
.qt-help-msg-assistant {
|
|
1461
|
+
border-radius: 1rem;
|
|
1462
|
+
padding-left: 0.75rem;
|
|
1463
|
+
padding-right: 0.75rem;
|
|
1464
|
+
padding-top: 0.5rem;
|
|
1465
|
+
padding-bottom: 0.5rem;
|
|
1466
|
+
font-size: 0.875rem;
|
|
1467
|
+
line-height: 1.25rem;
|
|
1468
|
+
background-color: var(--color-muted);
|
|
1469
|
+
color: var(--color-foreground);
|
|
1470
|
+
max-width: 80%;
|
|
1460
1471
|
}
|
|
1461
1472
|
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
opacity: 0;
|
|
1472
|
-
transition: opacity 200ms ease;
|
|
1473
|
-
pointer-events: none;
|
|
1473
|
+
/**
|
|
1474
|
+
* Help chat bubble tail — triangular pointer toward sender
|
|
1475
|
+
*/
|
|
1476
|
+
.qt-help-tail {
|
|
1477
|
+
flex-shrink: 0;
|
|
1478
|
+
width: 8px;
|
|
1479
|
+
height: 12px;
|
|
1480
|
+
align-self: flex-start;
|
|
1481
|
+
margin-top: 12px;
|
|
1474
1482
|
}
|
|
1475
1483
|
|
|
1476
|
-
.qt-
|
|
1477
|
-
|
|
1478
|
-
pointer-events: auto;
|
|
1484
|
+
.qt-help-tail-user {
|
|
1485
|
+
color: var(--theme-primary);
|
|
1479
1486
|
}
|
|
1480
1487
|
|
|
1481
|
-
.qt-
|
|
1482
|
-
|
|
1483
|
-
right: 0;
|
|
1484
|
-
top: 0;
|
|
1485
|
-
z-index: 55;
|
|
1486
|
-
height: 100%;
|
|
1487
|
-
display: flex;
|
|
1488
|
-
flex-direction: column;
|
|
1489
|
-
background-color: var(--qt-dialog-bg);
|
|
1490
|
-
border-left: 1px solid var(--qt-dialog-border);
|
|
1491
|
-
box-shadow: var(--qt-dialog-shadow);
|
|
1492
|
-
transform: translateX(100%);
|
|
1493
|
-
transition: transform 200ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
1488
|
+
.qt-help-tail-assistant {
|
|
1489
|
+
color: var(--theme-muted);
|
|
1494
1490
|
}
|
|
1495
1491
|
|
|
1496
|
-
|
|
1497
|
-
|
|
1492
|
+
/**
|
|
1493
|
+
* Help chat message character name label
|
|
1494
|
+
*/
|
|
1495
|
+
.qt-help-msg-character-name {
|
|
1496
|
+
font-size: 0.75rem;
|
|
1497
|
+
line-height: 1rem;
|
|
1498
|
+
font-weight: 500;
|
|
1499
|
+
color: var(--color-muted-foreground);
|
|
1500
|
+
margin-bottom: 0.25rem;
|
|
1498
1501
|
}
|
|
1499
1502
|
|
|
1500
|
-
|
|
1503
|
+
/**
|
|
1504
|
+
* Help chat avatar — small circular avatar in message list
|
|
1505
|
+
*/
|
|
1506
|
+
.qt-help-avatar {
|
|
1507
|
+
flex-shrink: 0;
|
|
1508
|
+
width: 2rem;
|
|
1509
|
+
height: 2rem;
|
|
1510
|
+
border-radius: 9999px;
|
|
1511
|
+
background-color: var(--color-muted);
|
|
1501
1512
|
display: flex;
|
|
1502
1513
|
align-items: center;
|
|
1503
|
-
justify-content:
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
}
|
|
1508
|
-
|
|
1509
|
-
.qt-inspector-entry {
|
|
1510
|
-
transition: all 150ms ease;
|
|
1511
|
-
border-radius: var(--qt-card-radius);
|
|
1512
|
-
background: var(--qt-card-bg);
|
|
1513
|
-
border: 1px solid color-mix(in srgb, var(--qt-card-border) calc(var(--qt-card-border-opacity, 1) * 100%), transparent);
|
|
1514
|
+
justify-content: center;
|
|
1515
|
+
overflow: hidden;
|
|
1516
|
+
margin-top: 2px;
|
|
1517
|
+
margin-right: 4px;
|
|
1514
1518
|
}
|
|
1515
1519
|
|
|
1516
|
-
|
|
1517
|
-
|
|
1520
|
+
/**
|
|
1521
|
+
* Help chat composer — input area at bottom
|
|
1522
|
+
*/
|
|
1523
|
+
.qt-help-composer {
|
|
1524
|
+
display: flex;
|
|
1525
|
+
align-items: flex-end;
|
|
1526
|
+
gap: 0.5rem;
|
|
1527
|
+
padding: 0.75rem;
|
|
1528
|
+
border-top: 1px solid var(--qt-dialog-border);
|
|
1529
|
+
background: var(--qt-dialog-bg);
|
|
1518
1530
|
}
|
|
1519
1531
|
|
|
1520
|
-
.qt-
|
|
1521
|
-
|
|
1532
|
+
.qt-help-composer-input {
|
|
1533
|
+
flex: 1 1 0%;
|
|
1534
|
+
resize: none;
|
|
1535
|
+
border-radius: var(--radius-lg);
|
|
1536
|
+
padding-left: 0.75rem;
|
|
1537
|
+
padding-right: 0.75rem;
|
|
1538
|
+
padding-top: 0.5rem;
|
|
1539
|
+
padding-bottom: 0.5rem;
|
|
1540
|
+
font-size: 0.875rem;
|
|
1541
|
+
line-height: 1.25rem;
|
|
1542
|
+
border: 1px solid var(--qt-input-border, var(--color-input));
|
|
1543
|
+
background: var(--qt-input-bg, var(--color-background));
|
|
1522
1544
|
}
|
|
1523
1545
|
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
box-shadow: 0 0 0 2px color-mix(in srgb, var(--color-primary) 60%, transparent);
|
|
1527
|
-
}
|
|
1528
|
-
100% {
|
|
1529
|
-
box-shadow: 0 0 0 0px transparent;
|
|
1530
|
-
}
|
|
1546
|
+
.qt-help-composer-input::placeholder {
|
|
1547
|
+
color: var(--color-muted-foreground);
|
|
1531
1548
|
}
|
|
1532
1549
|
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
.qt-tab-group {
|
|
1538
|
-
display: flex;
|
|
1539
|
-
gap: var(--qt-tab-group-gap);
|
|
1540
|
-
border-bottom: 1px solid var(--color-border);
|
|
1550
|
+
.qt-help-composer-input:focus-visible {
|
|
1551
|
+
outline-style: none;
|
|
1552
|
+
box-shadow: 0 0 0 2px var(--color-ring);
|
|
1541
1553
|
}
|
|
1542
1554
|
|
|
1543
|
-
.qt-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
font-weight: var(--qt-tab-font-weight);
|
|
1547
|
-
color: var(--qt-tab-fg);
|
|
1548
|
-
background-color: var(--qt-tab-bg);
|
|
1549
|
-
border: none;
|
|
1550
|
-
border-radius: var(--qt-tab-radius);
|
|
1551
|
-
cursor: pointer;
|
|
1552
|
-
transition: all 150ms;
|
|
1555
|
+
.qt-help-composer-input:disabled {
|
|
1556
|
+
cursor: not-allowed;
|
|
1557
|
+
opacity: 0.5;
|
|
1553
1558
|
}
|
|
1554
1559
|
|
|
1555
|
-
.qt-
|
|
1556
|
-
|
|
1560
|
+
.qt-help-composer-send {
|
|
1561
|
+
display: inline-flex;
|
|
1562
|
+
align-items: center;
|
|
1563
|
+
justify-content: center;
|
|
1564
|
+
border-radius: var(--radius-md);
|
|
1565
|
+
padding-left: 0.75rem;
|
|
1566
|
+
padding-right: 0.75rem;
|
|
1567
|
+
padding-top: 0.5rem;
|
|
1568
|
+
padding-bottom: 0.5rem;
|
|
1569
|
+
height: 38px;
|
|
1570
|
+
font-size: 0.875rem;
|
|
1571
|
+
line-height: 1.25rem;
|
|
1572
|
+
font-weight: 500;
|
|
1573
|
+
background-color: var(--color-primary);
|
|
1574
|
+
color: var(--color-primary-foreground);
|
|
1557
1575
|
}
|
|
1558
1576
|
|
|
1559
|
-
.qt-
|
|
1560
|
-
|
|
1561
|
-
|
|
1577
|
+
.qt-help-composer-send:disabled {
|
|
1578
|
+
opacity: 0.5;
|
|
1579
|
+
pointer-events: none;
|
|
1562
1580
|
}
|
|
1563
1581
|
|
|
1564
|
-
.qt-
|
|
1565
|
-
|
|
1582
|
+
.qt-help-composer-send:hover:not(:disabled) {
|
|
1583
|
+
opacity: 0.9;
|
|
1566
1584
|
}
|
|
1567
1585
|
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1586
|
+
/**
|
|
1587
|
+
* Help chat character selection pill
|
|
1588
|
+
*/
|
|
1589
|
+
.qt-help-char-pill {
|
|
1590
|
+
display: flex;
|
|
1591
|
+
align-items: center;
|
|
1592
|
+
gap: 0.375rem;
|
|
1593
|
+
padding-left: 0.5rem;
|
|
1594
|
+
padding-right: 0.5rem;
|
|
1595
|
+
padding-top: 0.25rem;
|
|
1596
|
+
padding-bottom: 0.25rem;
|
|
1597
|
+
border-radius: 9999px;
|
|
1598
|
+
font-size: 0.75rem;
|
|
1599
|
+
line-height: 1rem;
|
|
1600
|
+
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
|
1601
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
1602
|
+
transition-duration: 150ms;
|
|
1603
|
+
color: var(--color-muted-foreground);
|
|
1604
|
+
border: 1px solid var(--qt-dialog-border);
|
|
1576
1605
|
}
|
|
1577
1606
|
|
|
1578
|
-
.qt-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
margin-left: auto;
|
|
1607
|
+
.qt-help-char-pill:hover {
|
|
1608
|
+
border-color: var(--theme-primary);
|
|
1609
|
+
opacity: 0.7;
|
|
1582
1610
|
}
|
|
1583
1611
|
|
|
1584
|
-
.qt-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1612
|
+
.qt-help-char-pill[data-selected="true"] {
|
|
1613
|
+
border-color: var(--theme-primary);
|
|
1614
|
+
background: color-mix(in srgb, var(--theme-primary) 10%, transparent);
|
|
1615
|
+
color: var(--theme-primary);
|
|
1588
1616
|
}
|
|
1589
1617
|
|
|
1590
1618
|
/**
|
|
1591
|
-
*
|
|
1619
|
+
* Help chat past chat list item
|
|
1592
1620
|
*/
|
|
1593
|
-
.qt-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1621
|
+
.qt-help-past-chat {
|
|
1622
|
+
display: flex;
|
|
1623
|
+
align-items: center;
|
|
1624
|
+
gap: 0.5rem;
|
|
1625
|
+
padding-left: 0.5rem;
|
|
1626
|
+
padding-right: 0.5rem;
|
|
1627
|
+
padding-top: 0.375rem;
|
|
1628
|
+
padding-bottom: 0.375rem;
|
|
1629
|
+
border-radius: 0.25rem;
|
|
1630
|
+
cursor: pointer;
|
|
1598
1631
|
}
|
|
1599
1632
|
|
|
1600
|
-
.qt-
|
|
1601
|
-
|
|
1602
|
-
color: var(--qt-chat-whisper-label-fg);
|
|
1603
|
-
font-style: italic;
|
|
1604
|
-
margin-bottom: 0.25rem;
|
|
1633
|
+
.qt-help-past-chat:hover {
|
|
1634
|
+
background: var(--color-accent);
|
|
1605
1635
|
}
|
|
1606
1636
|
|
|
1607
|
-
|
|
1608
|
-
|
|
1637
|
+
/**
|
|
1638
|
+
* Help chat section label
|
|
1639
|
+
*/
|
|
1640
|
+
.qt-help-section-label {
|
|
1641
|
+
font-size: 0.75rem;
|
|
1642
|
+
line-height: 1rem;
|
|
1643
|
+
font-weight: 500;
|
|
1644
|
+
color: var(--color-muted-foreground);
|
|
1645
|
+
margin-bottom: 0.5rem;
|
|
1609
1646
|
}
|
|
1610
1647
|
|
|
1611
1648
|
/**
|
|
1612
|
-
*
|
|
1613
|
-
* Pascal the Croupier. The accent carries the outcome's semantic `state`.
|
|
1614
|
-
* Built on the --qt-alert-* families, which every bundled theme defines.
|
|
1649
|
+
* Help chat error banner
|
|
1615
1650
|
*/
|
|
1616
|
-
.qt-
|
|
1617
|
-
border-left: 3px solid var(--qt-alert-info-border);
|
|
1651
|
+
.qt-help-error {
|
|
1618
1652
|
padding-left: 0.75rem;
|
|
1653
|
+
padding-right: 0.75rem;
|
|
1654
|
+
padding-top: 0.5rem;
|
|
1655
|
+
padding-bottom: 0.5rem;
|
|
1656
|
+
font-size: 0.75rem;
|
|
1657
|
+
line-height: 1rem;
|
|
1658
|
+
background: color-mix(in srgb, var(--color-destructive) 10%, transparent);
|
|
1659
|
+
color: var(--color-destructive);
|
|
1660
|
+
border-bottom: 1px solid color-mix(in srgb, var(--color-destructive) 20%, transparent);
|
|
1619
1661
|
}
|
|
1620
1662
|
|
|
1621
|
-
.qt-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1663
|
+
.qt-help-nav-button {
|
|
1664
|
+
display: inline-flex;
|
|
1665
|
+
align-items: center;
|
|
1666
|
+
gap: 0.375rem;
|
|
1667
|
+
padding-left: 0.75rem;
|
|
1668
|
+
padding-right: 0.75rem;
|
|
1669
|
+
padding-top: 0.375rem;
|
|
1670
|
+
padding-bottom: 0.375rem;
|
|
1671
|
+
font-size: 0.75rem;
|
|
1672
|
+
line-height: 1rem;
|
|
1673
|
+
font-weight: 500;
|
|
1674
|
+
border-radius: var(--radius-md);
|
|
1675
|
+
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
|
1676
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
1677
|
+
transition-duration: 150ms;
|
|
1678
|
+
cursor: pointer;
|
|
1679
|
+
background: var(--qt-help-nav-bg, color-mix(in srgb, var(--color-primary) 10%, transparent));
|
|
1680
|
+
color: var(--qt-help-nav-fg, var(--color-primary));
|
|
1681
|
+
border: 1px solid var(--qt-help-nav-border, color-mix(in srgb, var(--color-primary) 20%, transparent));
|
|
1631
1682
|
}
|
|
1632
1683
|
|
|
1633
|
-
.qt-
|
|
1634
|
-
|
|
1684
|
+
.qt-help-nav-button:hover {
|
|
1685
|
+
background: var(--qt-help-nav-hover-bg, color-mix(in srgb, var(--color-primary) 20%, transparent));
|
|
1686
|
+
border-color: var(--qt-help-nav-hover-border, color-mix(in srgb, var(--color-primary) 40%, transparent));
|
|
1635
1687
|
}
|
|
1636
1688
|
|
|
1637
|
-
/*
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
-------------------------------------------------------------------------- */
|
|
1689
|
+
/* Suggested links container — appears below messages with search-derived links */
|
|
1690
|
+
.qt-help-suggested-links {
|
|
1691
|
+
padding-left: 2.5rem;
|
|
1692
|
+
padding-top: 0.25rem;
|
|
1693
|
+
}
|
|
1643
1694
|
|
|
1644
|
-
.qt-
|
|
1695
|
+
.qt-help-suggested-links-label {
|
|
1696
|
+
font-size: 10px;
|
|
1697
|
+
text-transform: uppercase;
|
|
1698
|
+
letter-spacing: 0.05em;
|
|
1699
|
+
font-weight: 500;
|
|
1700
|
+
margin-bottom: 0.375rem;
|
|
1701
|
+
color: var(--qt-help-suggested-label, var(--color-muted-foreground));
|
|
1702
|
+
}
|
|
1703
|
+
|
|
1704
|
+
.qt-help-suggested-link {
|
|
1645
1705
|
display: inline-flex;
|
|
1646
1706
|
align-items: center;
|
|
1647
|
-
gap: 0.
|
|
1648
|
-
padding: 0.
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
font:
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1707
|
+
gap: 0.25rem;
|
|
1708
|
+
padding-left: 0.5rem;
|
|
1709
|
+
padding-right: 0.5rem;
|
|
1710
|
+
padding-top: 0.25rem;
|
|
1711
|
+
padding-bottom: 0.25rem;
|
|
1712
|
+
font-size: 11px;
|
|
1713
|
+
border-radius: 0.25rem;
|
|
1714
|
+
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
|
1715
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
1716
|
+
transition-duration: 150ms;
|
|
1717
|
+
cursor: pointer;
|
|
1718
|
+
background: var(--qt-help-suggested-bg, color-mix(in srgb, var(--color-muted) 50%, transparent));
|
|
1719
|
+
color: var(--qt-help-suggested-fg, var(--color-muted-foreground));
|
|
1720
|
+
border: 1px solid var(--qt-help-suggested-border, var(--color-border));
|
|
1660
1721
|
}
|
|
1661
1722
|
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
opacity: 1;
|
|
1667
|
-
border-color: color-mix(in srgb, currentColor 45%, transparent);
|
|
1668
|
-
background: color-mix(in srgb, var(--color-muted) 50%, transparent);
|
|
1723
|
+
.qt-help-suggested-link:hover {
|
|
1724
|
+
background: var(--qt-help-suggested-hover-bg, color-mix(in srgb, var(--color-primary) 10%, transparent));
|
|
1725
|
+
color: var(--qt-help-suggested-hover-fg, var(--color-primary));
|
|
1726
|
+
border-color: var(--qt-help-suggested-hover-border, color-mix(in srgb, var(--color-primary) 30%, transparent));
|
|
1669
1727
|
}
|
|
1670
1728
|
|
|
1671
|
-
/*
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1729
|
+
/* Entity picker — overlay for resolving parameterised help URLs */
|
|
1730
|
+
.qt-help-entity-picker-backdrop {
|
|
1731
|
+
position: absolute;
|
|
1732
|
+
inset: 0;
|
|
1733
|
+
z-index: 10;
|
|
1734
|
+
display: flex;
|
|
1735
|
+
align-items: center;
|
|
1736
|
+
justify-content: center;
|
|
1737
|
+
background: hsl(0 0% 0% / 0.7);
|
|
1738
|
+
backdrop-filter: blur(4px);
|
|
1678
1739
|
}
|
|
1679
1740
|
|
|
1680
|
-
.qt-
|
|
1681
|
-
|
|
1682
|
-
|
|
1741
|
+
.qt-help-entity-picker {
|
|
1742
|
+
display: flex;
|
|
1743
|
+
flex-direction: column;
|
|
1744
|
+
border-radius: var(--radius-lg);
|
|
1745
|
+
box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
|
|
1746
|
+
overflow: hidden;
|
|
1747
|
+
width: min(320px, calc(100% - 2rem));
|
|
1748
|
+
max-height: min(400px, calc(100% - 2rem));
|
|
1749
|
+
background: var(--qt-help-picker-bg, var(--color-card));
|
|
1750
|
+
border: 1px solid var(--qt-help-picker-border, var(--color-border));
|
|
1683
1751
|
}
|
|
1684
1752
|
|
|
1685
|
-
.qt-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1753
|
+
.qt-help-entity-picker-header {
|
|
1754
|
+
display: flex;
|
|
1755
|
+
align-items: center;
|
|
1756
|
+
justify-content: space-between;
|
|
1757
|
+
padding-left: 0.75rem;
|
|
1758
|
+
padding-right: 0.75rem;
|
|
1759
|
+
padding-top: 0.5rem;
|
|
1760
|
+
padding-bottom: 0.5rem;
|
|
1761
|
+
font-size: 0.875rem;
|
|
1762
|
+
line-height: 1.25rem;
|
|
1763
|
+
font-weight: 500;
|
|
1764
|
+
border-bottom: 1px solid var(--qt-help-picker-border, var(--color-border));
|
|
1689
1765
|
}
|
|
1690
1766
|
|
|
1691
|
-
.qt-
|
|
1692
|
-
|
|
1767
|
+
.qt-help-entity-picker-filter {
|
|
1768
|
+
width: 100%;
|
|
1769
|
+
padding-left: 0.5rem;
|
|
1770
|
+
padding-right: 0.5rem;
|
|
1771
|
+
padding-top: 0.25rem;
|
|
1772
|
+
padding-bottom: 0.25rem;
|
|
1773
|
+
font-size: 0.75rem;
|
|
1774
|
+
line-height: 1rem;
|
|
1775
|
+
border-radius: 0.25rem;
|
|
1776
|
+
background: var(--qt-help-picker-filter-bg, var(--color-muted));
|
|
1777
|
+
border: 1px solid var(--qt-help-picker-border, var(--color-border));
|
|
1778
|
+
color: inherit;
|
|
1779
|
+
outline: none;
|
|
1693
1780
|
}
|
|
1694
1781
|
|
|
1695
|
-
.qt-
|
|
1696
|
-
color:
|
|
1697
|
-
opacity: 1;
|
|
1782
|
+
.qt-help-entity-picker-filter:focus {
|
|
1783
|
+
border-color: color-mix(in srgb, var(--color-primary) 50%, transparent);
|
|
1698
1784
|
}
|
|
1699
1785
|
|
|
1700
|
-
.qt-
|
|
1701
|
-
|
|
1786
|
+
.qt-help-entity-picker-list {
|
|
1787
|
+
flex: 1 1 0%;
|
|
1788
|
+
overflow-y: auto;
|
|
1789
|
+
padding-top: 0.25rem;
|
|
1790
|
+
padding-bottom: 0.25rem;
|
|
1791
|
+
}
|
|
1792
|
+
|
|
1793
|
+
.qt-help-entity-picker-item {
|
|
1794
|
+
width: 100%;
|
|
1795
|
+
text-align: left;
|
|
1796
|
+
padding-left: 0.75rem;
|
|
1797
|
+
padding-right: 0.75rem;
|
|
1798
|
+
padding-top: 0.375rem;
|
|
1799
|
+
padding-bottom: 0.375rem;
|
|
1800
|
+
font-size: 0.875rem;
|
|
1801
|
+
line-height: 1.25rem;
|
|
1802
|
+
overflow: hidden;
|
|
1803
|
+
text-overflow: ellipsis;
|
|
1804
|
+
white-space: nowrap;
|
|
1805
|
+
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
|
1806
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
1807
|
+
transition-duration: 150ms;
|
|
1808
|
+
cursor: pointer;
|
|
1809
|
+
color: var(--qt-help-picker-fg, var(--color-foreground));
|
|
1810
|
+
}
|
|
1811
|
+
|
|
1812
|
+
.qt-help-entity-picker-item:hover {
|
|
1813
|
+
background: var(--qt-help-picker-hover-bg, color-mix(in srgb, var(--color-primary) 10%, transparent));
|
|
1814
|
+
color: var(--qt-help-picker-hover-fg, var(--color-primary));
|
|
1702
1815
|
}
|
|
1703
1816
|
|
|
1704
1817
|
/* ==========================================================================
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1818
|
+
HELP GUIDE TAB - Browseable documentation view
|
|
1819
|
+
|
|
1820
|
+
The Guide tab always renders in Art Deco style regardless of the active
|
|
1821
|
+
theme. Variables are hardcoded from the Art Deco token palette so the
|
|
1822
|
+
guide feels like a consistent, branded reading experience.
|
|
1709
1823
|
========================================================================== */
|
|
1710
1824
|
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1825
|
+
/* --- Art Deco variable scope (light mode) --- */
|
|
1826
|
+
.qt-help-guide-deco {
|
|
1827
|
+
--deco-bg: hsl(45 28% 78%);
|
|
1828
|
+
--deco-fg: hsl(222 40% 12%);
|
|
1829
|
+
--deco-fg-muted: hsl(222 25% 38%);
|
|
1830
|
+
--deco-primary: hsl(222 47% 18%);
|
|
1831
|
+
--deco-primary-fg: hsl(43 85% 55%);
|
|
1832
|
+
--deco-accent: hsl(43 85% 48%);
|
|
1833
|
+
--deco-border: hsl(43 30% 60%);
|
|
1834
|
+
--deco-border-subtle: hsl(43 30% 60% / 0.5);
|
|
1835
|
+
--deco-card: hsl(45 28% 75%);
|
|
1836
|
+
--deco-muted: hsl(222 16% 72%);
|
|
1837
|
+
--deco-input-bg: hsl(45 28% 82%);
|
|
1838
|
+
--deco-code-bg: hsl(45 20% 72%);
|
|
1839
|
+
--deco-gold: hsl(222 47% 18%);
|
|
1840
|
+
--deco-welcome-bg: hsl(222 47% 18% / 0.06);
|
|
1841
|
+
--deco-welcome-border: hsl(43 85% 48% / 0.3);
|
|
1842
|
+
--deco-table-header: hsl(45 25% 72%);
|
|
1843
|
+
--deco-hover-bg: hsl(43 30% 72% / 0.5);
|
|
1844
|
+
--deco-font-serif: "Cormorant Garamond", Georgia, Cambria, "Times New Roman", Times, serif;
|
|
1845
|
+
--deco-font-sans: Raleway, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
1846
|
+
}
|
|
1847
|
+
|
|
1848
|
+
/* --- Art Deco variable scope (dark mode) --- */
|
|
1849
|
+
.dark .qt-help-guide-deco,
|
|
1850
|
+
.qt-help-guide-deco.dark {
|
|
1851
|
+
--deco-bg: hsl(222 47% 7%);
|
|
1852
|
+
--deco-fg: hsl(45 15% 90%);
|
|
1853
|
+
--deco-fg-muted: hsl(222 12% 55%);
|
|
1854
|
+
--deco-primary: hsl(43 85% 55%);
|
|
1855
|
+
--deco-primary-fg: hsl(222 47% 7%);
|
|
1856
|
+
--deco-accent: hsl(43 90% 58%);
|
|
1857
|
+
--deco-border: hsl(43 35% 25%);
|
|
1858
|
+
--deco-border-subtle: hsl(43 35% 25% / 0.5);
|
|
1859
|
+
--deco-card: hsl(222 40% 12%);
|
|
1860
|
+
--deco-muted: hsl(222 25% 15%);
|
|
1861
|
+
--deco-input-bg: hsl(222 30% 14%);
|
|
1862
|
+
--deco-code-bg: hsl(222 25% 15%);
|
|
1863
|
+
--deco-gold: hsl(43 90% 58%);
|
|
1864
|
+
--deco-welcome-bg: hsl(43 85% 55% / 0.06);
|
|
1865
|
+
--deco-welcome-border: hsl(43 90% 58% / 0.2);
|
|
1866
|
+
--deco-table-header: hsl(222 30% 16%);
|
|
1867
|
+
--deco-hover-bg: hsl(222 25% 18% / 0.6);
|
|
1868
|
+
--deco-font-serif: "Cormorant Garamond", Georgia, Cambria, "Times New Roman", Times, serif;
|
|
1869
|
+
--deco-font-sans: Raleway, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
1870
|
+
}
|
|
1871
|
+
|
|
1872
|
+
/* --- Apply Art Deco palette to all guide components --- */
|
|
1873
|
+
.qt-help-guide-deco {
|
|
1874
|
+
background:
|
|
1875
|
+
linear-gradient(hsl(45 28% 75% / 0.88), hsl(45 28% 75% / 0.88)),
|
|
1876
|
+
url('/api/themes/assets/bundle:art-deco/textures/background-light.webp');
|
|
1877
|
+
background-size: cover;
|
|
1878
|
+
background-position: center center;
|
|
1879
|
+
color: var(--deco-fg);
|
|
1880
|
+
font-family: var(--deco-font-serif);
|
|
1881
|
+
|
|
1882
|
+
--qt-help-guide-search-bg: var(--deco-input-bg);
|
|
1883
|
+
--qt-help-guide-search-border: var(--deco-border);
|
|
1884
|
+
--qt-help-guide-search-fg: var(--deco-fg);
|
|
1885
|
+
--qt-help-guide-search-placeholder: var(--deco-fg-muted);
|
|
1886
|
+
--qt-help-guide-search-icon: var(--deco-fg-muted);
|
|
1887
|
+
--qt-help-guide-border: var(--deco-border-subtle);
|
|
1888
|
+
--qt-help-guide-category-fg: var(--deco-fg);
|
|
1889
|
+
--qt-help-guide-category-hover: var(--deco-gold);
|
|
1890
|
+
--qt-help-guide-badge-fg: var(--deco-fg-muted);
|
|
1891
|
+
--qt-help-guide-topic-fg: var(--deco-fg-muted);
|
|
1892
|
+
--qt-help-guide-topic-hover: var(--deco-fg);
|
|
1893
|
+
--qt-help-guide-topic-hover-bg: var(--deco-hover-bg);
|
|
1894
|
+
--qt-help-guide-topic-active-fg: var(--deco-gold);
|
|
1895
|
+
--qt-help-guide-back-fg: var(--deco-gold);
|
|
1896
|
+
--qt-help-guide-back-hover-bg: var(--deco-hover-bg);
|
|
1897
|
+
--qt-help-guide-reader-fg: var(--deco-fg);
|
|
1898
|
+
--qt-help-guide-heading-fg: var(--deco-fg);
|
|
1899
|
+
--qt-help-guide-code-bg: var(--deco-code-bg);
|
|
1900
|
+
--qt-help-guide-code-fg: var(--deco-fg);
|
|
1901
|
+
--qt-help-guide-link-fg: var(--deco-gold);
|
|
1902
|
+
--qt-help-guide-table-header-bg: var(--deco-table-header);
|
|
1903
|
+
--qt-help-welcome-bg: var(--deco-welcome-bg);
|
|
1904
|
+
--qt-help-welcome-border: var(--deco-welcome-border);
|
|
1905
|
+
--qt-help-welcome-title-fg: var(--deco-fg);
|
|
1906
|
+
--qt-help-welcome-text-fg: var(--deco-fg-muted);
|
|
1907
|
+
--qt-help-welcome-link-fg: var(--deco-gold);
|
|
1908
|
+
}
|
|
1909
|
+
|
|
1910
|
+
.dark .qt-help-guide-deco,
|
|
1911
|
+
.qt-help-guide-deco.dark {
|
|
1912
|
+
background:
|
|
1913
|
+
linear-gradient(hsl(222 40% 12% / 0.88), hsl(222 40% 12% / 0.88)),
|
|
1914
|
+
url('/api/themes/assets/bundle:art-deco/textures/background-dark.webp');
|
|
1915
|
+
background-size: cover;
|
|
1916
|
+
background-position: center center;
|
|
1917
|
+
}
|
|
1918
|
+
|
|
1919
|
+
.qt-help-guide-deco .qt-help-guide-category-label {
|
|
1920
|
+
font-family: var(--deco-font-sans);
|
|
1921
|
+
letter-spacing: 0.025em;
|
|
1922
|
+
}
|
|
1923
|
+
|
|
1924
|
+
.qt-help-guide-deco .qt-help-guide-reader h1,
|
|
1925
|
+
.qt-help-guide-deco .qt-help-guide-reader h2,
|
|
1926
|
+
.qt-help-guide-deco .qt-help-guide-reader h3 {
|
|
1927
|
+
font-family: var(--deco-font-sans);
|
|
1928
|
+
letter-spacing: 0.015em;
|
|
1929
|
+
}
|
|
1930
|
+
|
|
1931
|
+
.qt-help-guide-deco .qt-help-guide-back {
|
|
1932
|
+
font-family: var(--deco-font-sans);
|
|
1933
|
+
letter-spacing: 0.025em;
|
|
1934
|
+
}
|
|
1935
|
+
|
|
1936
|
+
.qt-help-guide-search {
|
|
1937
|
+
position: relative;
|
|
1717
1938
|
display: flex;
|
|
1718
1939
|
align-items: center;
|
|
1719
|
-
gap: 0.625rem;
|
|
1720
|
-
width: 100%;
|
|
1721
|
-
padding: 0.25rem 0.625rem;
|
|
1722
|
-
margin: 0.125rem 0;
|
|
1723
|
-
background: var(--qt-chat-system-bar-bg);
|
|
1724
|
-
color: var(--qt-chat-system-bar-fg);
|
|
1725
|
-
border: 1px solid var(--qt-chat-system-bar-border);
|
|
1726
|
-
border-radius: var(--radius-sm, 0.25rem);
|
|
1727
|
-
font-size: 0.75rem;
|
|
1728
|
-
line-height: 1.2;
|
|
1729
|
-
text-align: left;
|
|
1730
|
-
cursor: pointer;
|
|
1731
|
-
transition: background-color 120ms ease;
|
|
1732
1940
|
}
|
|
1733
1941
|
|
|
1734
|
-
.qt-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1942
|
+
.qt-help-guide-search-icon {
|
|
1943
|
+
position: absolute;
|
|
1944
|
+
left: 0.625rem;
|
|
1945
|
+
width: 1rem;
|
|
1946
|
+
height: 1rem;
|
|
1947
|
+
pointer-events: none;
|
|
1948
|
+
color: var(--qt-help-guide-search-icon, var(--color-muted-foreground));
|
|
1738
1949
|
}
|
|
1739
1950
|
|
|
1740
|
-
.qt-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1951
|
+
.qt-help-guide-search-input {
|
|
1952
|
+
width: 100%;
|
|
1953
|
+
padding-left: 2.25rem;
|
|
1954
|
+
padding-right: 2rem;
|
|
1955
|
+
padding-top: 0.375rem;
|
|
1956
|
+
padding-bottom: 0.375rem;
|
|
1957
|
+
font-size: 0.875rem;
|
|
1958
|
+
line-height: 1.25rem;
|
|
1959
|
+
border-radius: var(--radius-md);
|
|
1960
|
+
border-width: 1px;
|
|
1961
|
+
border-style: solid;
|
|
1962
|
+
background: var(--qt-help-guide-search-bg, var(--color-background));
|
|
1963
|
+
border-color: var(--qt-help-guide-search-border, var(--color-border));
|
|
1964
|
+
color: var(--qt-help-guide-search-fg, var(--color-foreground));
|
|
1744
1965
|
}
|
|
1745
1966
|
|
|
1746
|
-
.qt-
|
|
1747
|
-
|
|
1748
|
-
min-width: 0;
|
|
1749
|
-
font-style: italic;
|
|
1750
|
-
overflow: hidden;
|
|
1751
|
-
text-overflow: ellipsis;
|
|
1752
|
-
white-space: nowrap;
|
|
1967
|
+
.qt-help-guide-search-input::placeholder {
|
|
1968
|
+
color: var(--qt-help-guide-search-placeholder, var(--color-muted-foreground));
|
|
1753
1969
|
}
|
|
1754
1970
|
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
* same whether it is collapsed to a chip or opened in full.
|
|
1759
|
-
*/
|
|
1760
|
-
.qt-chat-system-bar-whisper {
|
|
1761
|
-
flex: 0 1 auto;
|
|
1762
|
-
min-width: 0;
|
|
1763
|
-
color: var(--qt-chat-whisper-label-fg);
|
|
1764
|
-
font-style: italic;
|
|
1765
|
-
overflow: hidden;
|
|
1766
|
-
text-overflow: ellipsis;
|
|
1767
|
-
white-space: nowrap;
|
|
1971
|
+
.qt-help-guide-search-input:focus {
|
|
1972
|
+
outline-style: none;
|
|
1973
|
+
box-shadow: 0 0 0 1px var(--color-background), 0 0 0 3px var(--color-ring);
|
|
1768
1974
|
}
|
|
1769
1975
|
|
|
1770
|
-
.qt-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1976
|
+
.qt-help-guide-search-clear {
|
|
1977
|
+
position: absolute;
|
|
1978
|
+
right: 0.5rem;
|
|
1979
|
+
padding: 0.125rem;
|
|
1980
|
+
border-radius: var(--radius-sm);
|
|
1981
|
+
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
|
1982
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
1983
|
+
transition-duration: 150ms;
|
|
1984
|
+
color: var(--qt-help-guide-search-icon, var(--color-muted-foreground));
|
|
1774
1985
|
}
|
|
1775
1986
|
|
|
1776
|
-
.qt-
|
|
1777
|
-
|
|
1778
|
-
width: 0.875rem;
|
|
1779
|
-
height: 0.875rem;
|
|
1780
|
-
opacity: 0.7;
|
|
1987
|
+
.qt-help-guide-search-clear:hover {
|
|
1988
|
+
color: var(--qt-help-guide-search-fg, var(--color-foreground));
|
|
1781
1989
|
}
|
|
1782
1990
|
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
1788
|
-
|
|
1991
|
+
/* Category accordion */
|
|
1992
|
+
|
|
1993
|
+
.qt-help-guide-category {
|
|
1994
|
+
border-bottom-width: 1px;
|
|
1995
|
+
border-bottom-style: solid;
|
|
1996
|
+
border-color: var(--qt-help-guide-border, color-mix(in srgb, var(--color-border) 50%, transparent));
|
|
1789
1997
|
}
|
|
1790
1998
|
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
* renders as one flex-wrapping row of content-width chips instead of a
|
|
1794
|
-
* full-width bar each.
|
|
1795
|
-
*/
|
|
1796
|
-
.qt-chat-announcement-group {
|
|
1797
|
-
display: flex;
|
|
1798
|
-
flex-wrap: wrap;
|
|
1799
|
-
gap: 0.375rem;
|
|
1800
|
-
width: 95%;
|
|
1801
|
-
max-width: var(--qt-chat-message-row-max-width);
|
|
1802
|
-
margin: 1.5rem auto 0;
|
|
1803
|
-
align-items: flex-start;
|
|
1999
|
+
.qt-help-guide-category:last-child {
|
|
2000
|
+
border-bottom-width: 0;
|
|
1804
2001
|
}
|
|
1805
2002
|
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
* -kind sizing differs (see the override below).
|
|
1810
|
-
*/
|
|
1811
|
-
.qt-chat-announcement-chip {
|
|
1812
|
-
display: inline-flex;
|
|
2003
|
+
.qt-help-guide-category-header {
|
|
2004
|
+
width: 100%;
|
|
2005
|
+
display: flex;
|
|
1813
2006
|
align-items: center;
|
|
1814
2007
|
gap: 0.5rem;
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
padding: 0.25rem
|
|
1819
|
-
background: var(--qt-chat-system-bar-bg);
|
|
1820
|
-
color: var(--qt-chat-system-bar-fg);
|
|
1821
|
-
border: 1px solid var(--qt-chat-system-bar-border);
|
|
1822
|
-
border-radius: var(--radius-sm, 0.25rem);
|
|
1823
|
-
font-size: 0.75rem;
|
|
1824
|
-
line-height: 1.2;
|
|
2008
|
+
padding-top: 0.5rem;
|
|
2009
|
+
padding-bottom: 0.5rem;
|
|
2010
|
+
padding-left: 0.25rem;
|
|
2011
|
+
padding-right: 0.25rem;
|
|
1825
2012
|
text-align: left;
|
|
2013
|
+
font-size: 0.875rem;
|
|
2014
|
+
line-height: 1.25rem;
|
|
2015
|
+
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
|
2016
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
2017
|
+
transition-duration: 150ms;
|
|
1826
2018
|
cursor: pointer;
|
|
1827
|
-
|
|
1828
|
-
}
|
|
1829
|
-
|
|
1830
|
-
.qt-chat-announcement-chip:hover,
|
|
1831
|
-
.qt-chat-announcement-chip:focus-visible {
|
|
1832
|
-
background: var(--qt-chat-system-bar-hover-bg);
|
|
1833
|
-
outline: none;
|
|
2019
|
+
color: var(--qt-help-guide-category-fg, var(--color-foreground));
|
|
1834
2020
|
}
|
|
1835
2021
|
|
|
1836
|
-
|
|
1837
|
-
|
|
1838
|
-
.qt-chat-announcement-chip .qt-chat-system-bar-kind {
|
|
1839
|
-
flex: 0 1 auto;
|
|
1840
|
-
max-width: 22ch;
|
|
2022
|
+
.qt-help-guide-category-header:hover {
|
|
2023
|
+
color: var(--qt-help-guide-category-hover, var(--color-primary));
|
|
1841
2024
|
}
|
|
1842
2025
|
|
|
1843
|
-
|
|
1844
|
-
|
|
2026
|
+
.qt-help-guide-category-chevron {
|
|
2027
|
+
width: 1rem;
|
|
2028
|
+
height: 1rem;
|
|
2029
|
+
flex-shrink: 0;
|
|
2030
|
+
transition-property: transform, translate, scale, rotate;
|
|
2031
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
2032
|
+
transition-duration: 150ms;
|
|
2033
|
+
}
|
|
2034
|
+
|
|
2035
|
+
.qt-help-guide-category-chevron-open {
|
|
2036
|
+
transform: rotate(90deg);
|
|
2037
|
+
}
|
|
2038
|
+
|
|
2039
|
+
.qt-help-guide-category-label {
|
|
2040
|
+
flex: 1 1 0%;
|
|
2041
|
+
font-weight: 500;
|
|
2042
|
+
}
|
|
2043
|
+
|
|
2044
|
+
.qt-help-guide-category-badge {
|
|
2045
|
+
font-size: 0.75rem;
|
|
2046
|
+
line-height: 1rem;
|
|
2047
|
+
flex-shrink: 0;
|
|
2048
|
+
color: var(--qt-help-guide-badge-fg, var(--color-muted-foreground));
|
|
2049
|
+
}
|
|
2050
|
+
|
|
2051
|
+
.qt-help-guide-category-topics {
|
|
2052
|
+
display: flex;
|
|
2053
|
+
flex-direction: column;
|
|
2054
|
+
padding-bottom: 0.25rem;
|
|
2055
|
+
}
|
|
2056
|
+
|
|
2057
|
+
/* Topic rows */
|
|
2058
|
+
|
|
2059
|
+
.qt-help-guide-topic {
|
|
2060
|
+
width: 100%;
|
|
2061
|
+
text-align: left;
|
|
2062
|
+
padding-top: 0.25rem;
|
|
2063
|
+
padding-bottom: 0.25rem;
|
|
2064
|
+
padding-left: 1.75rem;
|
|
2065
|
+
padding-right: 0.5rem;
|
|
2066
|
+
font-size: 0.875rem;
|
|
2067
|
+
line-height: 1.25rem;
|
|
2068
|
+
overflow: hidden;
|
|
2069
|
+
text-overflow: ellipsis;
|
|
2070
|
+
white-space: nowrap;
|
|
2071
|
+
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
|
2072
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
2073
|
+
transition-duration: 150ms;
|
|
2074
|
+
cursor: pointer;
|
|
2075
|
+
border-radius: var(--radius-sm);
|
|
2076
|
+
color: var(--qt-help-guide-topic-fg, var(--color-muted-foreground));
|
|
2077
|
+
}
|
|
2078
|
+
|
|
2079
|
+
.qt-help-guide-topic:hover {
|
|
2080
|
+
color: var(--qt-help-guide-topic-hover, var(--color-foreground));
|
|
2081
|
+
background: var(--qt-help-guide-topic-hover-bg, color-mix(in srgb, var(--color-accent) 50%, transparent));
|
|
2082
|
+
}
|
|
2083
|
+
|
|
2084
|
+
.qt-help-guide-topic-active {
|
|
2085
|
+
color: var(--qt-help-guide-topic-active-fg, var(--color-primary));
|
|
2086
|
+
font-weight: 500;
|
|
2087
|
+
}
|
|
2088
|
+
|
|
2089
|
+
/* Reader view */
|
|
2090
|
+
|
|
2091
|
+
.qt-help-guide-back {
|
|
2092
|
+
display: flex;
|
|
2093
|
+
align-items: center;
|
|
2094
|
+
gap: 0.375rem;
|
|
2095
|
+
padding-left: 0.75rem;
|
|
2096
|
+
padding-right: 0.75rem;
|
|
2097
|
+
padding-top: 0.5rem;
|
|
2098
|
+
padding-bottom: 0.5rem;
|
|
2099
|
+
font-size: 0.875rem;
|
|
2100
|
+
line-height: 1.25rem;
|
|
2101
|
+
font-weight: 500;
|
|
2102
|
+
border-bottom-width: 1px;
|
|
2103
|
+
border-bottom-style: solid;
|
|
2104
|
+
flex-shrink: 0;
|
|
2105
|
+
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
|
2106
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
2107
|
+
transition-duration: 150ms;
|
|
2108
|
+
cursor: pointer;
|
|
2109
|
+
color: var(--qt-help-guide-back-fg, var(--color-primary));
|
|
2110
|
+
border-color: var(--qt-help-guide-border, color-mix(in srgb, var(--color-border) 50%, transparent));
|
|
2111
|
+
}
|
|
2112
|
+
|
|
2113
|
+
.qt-help-guide-back:hover {
|
|
2114
|
+
background: var(--qt-help-guide-back-hover-bg, color-mix(in srgb, var(--color-accent) 30%, transparent));
|
|
2115
|
+
}
|
|
2116
|
+
|
|
2117
|
+
.qt-help-guide-reader {
|
|
2118
|
+
flex: 1 1 0%;
|
|
2119
|
+
overflow-y: auto;
|
|
2120
|
+
padding-left: 1rem;
|
|
2121
|
+
padding-right: 1rem;
|
|
2122
|
+
padding-top: 0.75rem;
|
|
2123
|
+
padding-bottom: 0.75rem;
|
|
2124
|
+
font-size: 0.8125rem;
|
|
2125
|
+
line-height: 1.625;
|
|
2126
|
+
color: var(--qt-help-guide-reader-fg, var(--color-foreground));
|
|
2127
|
+
overflow-x: hidden;
|
|
2128
|
+
min-width: 0;
|
|
2129
|
+
}
|
|
2130
|
+
|
|
2131
|
+
.qt-help-guide-reader h1 {
|
|
2132
|
+
font-size: 1.125rem;
|
|
2133
|
+
line-height: 1.75rem;
|
|
2134
|
+
font-weight: 700;
|
|
2135
|
+
margin-top: 0;
|
|
2136
|
+
margin-bottom: 0.75rem;
|
|
2137
|
+
}
|
|
2138
|
+
|
|
2139
|
+
.qt-help-guide-reader h2 {
|
|
2140
|
+
font-size: 1rem;
|
|
2141
|
+
line-height: 1.5rem;
|
|
2142
|
+
font-weight: 600;
|
|
2143
|
+
margin-top: 1.25rem;
|
|
2144
|
+
margin-bottom: 0.5rem;
|
|
2145
|
+
color: var(--qt-help-guide-heading-fg, var(--color-foreground));
|
|
2146
|
+
}
|
|
2147
|
+
|
|
2148
|
+
.qt-help-guide-reader h3 {
|
|
2149
|
+
font-size: 0.875rem;
|
|
2150
|
+
line-height: 1.25rem;
|
|
2151
|
+
font-weight: 600;
|
|
2152
|
+
margin-top: 1rem;
|
|
2153
|
+
margin-bottom: 0.375rem;
|
|
2154
|
+
}
|
|
2155
|
+
|
|
2156
|
+
.qt-help-guide-reader p {
|
|
2157
|
+
margin-bottom: 0.5rem;
|
|
2158
|
+
}
|
|
2159
|
+
|
|
2160
|
+
.qt-help-guide-reader ul,
|
|
2161
|
+
.qt-help-guide-reader ol {
|
|
2162
|
+
margin-bottom: 0.5rem;
|
|
2163
|
+
padding-left: 1.25rem;
|
|
2164
|
+
}
|
|
2165
|
+
|
|
2166
|
+
.qt-help-guide-reader li {
|
|
2167
|
+
margin-bottom: 0.125rem;
|
|
2168
|
+
}
|
|
2169
|
+
|
|
2170
|
+
.qt-help-guide-reader strong {
|
|
2171
|
+
font-weight: 600;
|
|
2172
|
+
}
|
|
2173
|
+
|
|
2174
|
+
.qt-help-guide-reader table {
|
|
2175
|
+
width: 100%;
|
|
2176
|
+
margin-bottom: 0.75rem;
|
|
2177
|
+
font-size: 0.75rem;
|
|
2178
|
+
line-height: 1rem;
|
|
2179
|
+
border-collapse: collapse;
|
|
2180
|
+
table-layout: fixed;
|
|
2181
|
+
word-break: break-word;
|
|
2182
|
+
}
|
|
2183
|
+
|
|
2184
|
+
.qt-help-guide-reader th,
|
|
2185
|
+
.qt-help-guide-reader td {
|
|
2186
|
+
padding-left: 0.5rem;
|
|
2187
|
+
padding-right: 0.5rem;
|
|
2188
|
+
padding-top: 0.25rem;
|
|
2189
|
+
padding-bottom: 0.25rem;
|
|
2190
|
+
border-width: 1px;
|
|
2191
|
+
border-style: solid;
|
|
2192
|
+
text-align: left;
|
|
2193
|
+
border-color: var(--qt-help-guide-border, color-mix(in srgb, var(--color-border) 50%, transparent));
|
|
2194
|
+
}
|
|
2195
|
+
|
|
2196
|
+
.qt-help-guide-reader th {
|
|
2197
|
+
font-weight: 600;
|
|
2198
|
+
background: var(--qt-help-guide-table-header-bg, color-mix(in srgb, var(--color-muted) 50%, transparent));
|
|
2199
|
+
}
|
|
2200
|
+
|
|
2201
|
+
.qt-help-guide-reader hr {
|
|
2202
|
+
margin-top: 1rem;
|
|
2203
|
+
margin-bottom: 1rem;
|
|
2204
|
+
border-color: var(--qt-help-guide-border, color-mix(in srgb, var(--color-border) 50%, transparent));
|
|
2205
|
+
}
|
|
2206
|
+
|
|
2207
|
+
.qt-help-guide-inline-code {
|
|
2208
|
+
padding-left: 0.25rem;
|
|
2209
|
+
padding-right: 0.25rem;
|
|
2210
|
+
padding-top: 0.125rem;
|
|
2211
|
+
padding-bottom: 0.125rem;
|
|
2212
|
+
border-radius: 0.25rem;
|
|
2213
|
+
font-size: 0.75rem;
|
|
2214
|
+
line-height: 1rem;
|
|
2215
|
+
background: var(--qt-help-guide-code-bg, var(--color-muted));
|
|
2216
|
+
color: var(--qt-help-guide-code-fg, var(--color-foreground));
|
|
2217
|
+
}
|
|
2218
|
+
|
|
2219
|
+
.qt-help-guide-code-block {
|
|
2220
|
+
border-radius: var(--radius-md);
|
|
2221
|
+
padding: 0.75rem;
|
|
2222
|
+
margin-bottom: 0.5rem;
|
|
2223
|
+
font-size: 0.75rem;
|
|
2224
|
+
line-height: 1rem;
|
|
2225
|
+
background: var(--qt-help-guide-code-bg, var(--color-muted));
|
|
2226
|
+
white-space: pre-wrap !important;
|
|
2227
|
+
word-break: break-all;
|
|
2228
|
+
overflow-wrap: anywhere;
|
|
2229
|
+
max-width: 100%;
|
|
2230
|
+
overflow: hidden;
|
|
2231
|
+
color: var(--qt-help-guide-code-fg, var(--color-foreground));
|
|
2232
|
+
}
|
|
2233
|
+
|
|
2234
|
+
/* Navigation callout button (replaces "Open this page in Quilltap" blockquote) */
|
|
2235
|
+
|
|
2236
|
+
.qt-help-guide-nav-callout {
|
|
2237
|
+
margin-top: 0.75rem;
|
|
2238
|
+
margin-bottom: 0.75rem;
|
|
2239
|
+
}
|
|
2240
|
+
|
|
2241
|
+
/* Doc links and page links within reader */
|
|
2242
|
+
|
|
2243
|
+
.qt-help-guide-doc-link {
|
|
2244
|
+
cursor: pointer;
|
|
2245
|
+
text-decoration-line: underline;
|
|
2246
|
+
color: var(--qt-help-guide-link-fg, var(--color-primary));
|
|
2247
|
+
}
|
|
2248
|
+
|
|
2249
|
+
.qt-help-guide-doc-link:hover {
|
|
2250
|
+
opacity: 0.8;
|
|
2251
|
+
}
|
|
2252
|
+
|
|
2253
|
+
.qt-help-guide-page-link {
|
|
2254
|
+
cursor: pointer;
|
|
2255
|
+
text-decoration-line: underline;
|
|
2256
|
+
color: var(--qt-help-guide-link-fg, var(--color-primary));
|
|
2257
|
+
}
|
|
2258
|
+
|
|
2259
|
+
.qt-help-guide-page-link:hover {
|
|
2260
|
+
opacity: 0.8;
|
|
2261
|
+
}
|
|
2262
|
+
|
|
2263
|
+
/* Welcome card */
|
|
2264
|
+
|
|
2265
|
+
.qt-help-welcome-card {
|
|
2266
|
+
border-radius: var(--radius-lg);
|
|
2267
|
+
border-width: 1px;
|
|
2268
|
+
border-style: solid;
|
|
2269
|
+
padding: 0.75rem;
|
|
2270
|
+
margin-bottom: 0.75rem;
|
|
2271
|
+
background: var(--qt-help-welcome-bg, color-mix(in srgb, var(--color-primary) 5%, transparent));
|
|
2272
|
+
border-color: var(--qt-help-welcome-border, color-mix(in srgb, var(--color-primary) 20%, transparent));
|
|
2273
|
+
}
|
|
2274
|
+
|
|
2275
|
+
.qt-help-welcome-title {
|
|
2276
|
+
font-size: 0.875rem;
|
|
2277
|
+
line-height: 1.25rem;
|
|
2278
|
+
font-weight: 600;
|
|
2279
|
+
margin-bottom: 0.25rem;
|
|
2280
|
+
color: var(--qt-help-welcome-title-fg, var(--color-foreground));
|
|
2281
|
+
}
|
|
2282
|
+
|
|
2283
|
+
.qt-help-welcome-text {
|
|
2284
|
+
font-size: 0.75rem;
|
|
2285
|
+
line-height: 1rem;
|
|
2286
|
+
margin-bottom: 0.5rem;
|
|
2287
|
+
color: var(--qt-help-welcome-text-fg, var(--color-muted-foreground));
|
|
2288
|
+
}
|
|
2289
|
+
|
|
2290
|
+
.qt-help-welcome-links {
|
|
2291
|
+
display: flex;
|
|
2292
|
+
flex-direction: column;
|
|
2293
|
+
gap: 0.125rem;
|
|
2294
|
+
margin-bottom: 0.5rem;
|
|
2295
|
+
}
|
|
2296
|
+
|
|
2297
|
+
.qt-help-welcome-link {
|
|
2298
|
+
display: flex;
|
|
2299
|
+
align-items: center;
|
|
2300
|
+
gap: 0.375rem;
|
|
2301
|
+
font-size: 0.75rem;
|
|
2302
|
+
line-height: 1rem;
|
|
2303
|
+
padding-top: 0.125rem;
|
|
2304
|
+
padding-bottom: 0.125rem;
|
|
2305
|
+
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
|
2306
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
2307
|
+
transition-duration: 150ms;
|
|
2308
|
+
cursor: pointer;
|
|
2309
|
+
text-align: left;
|
|
2310
|
+
color: var(--qt-help-welcome-link-fg, var(--color-primary));
|
|
2311
|
+
}
|
|
2312
|
+
|
|
2313
|
+
.qt-help-welcome-link:hover {
|
|
2314
|
+
opacity: 0.8;
|
|
2315
|
+
}
|
|
2316
|
+
|
|
2317
|
+
.qt-help-welcome-footer {
|
|
2318
|
+
font-size: 0.75rem;
|
|
2319
|
+
line-height: 1rem;
|
|
2320
|
+
color: var(--qt-help-welcome-text-fg, var(--color-muted-foreground));
|
|
2321
|
+
}
|
|
2322
|
+
|
|
2323
|
+
/* ==========================================================================
|
|
2324
|
+
BRAHMA CONSOLE LAUNCHER - The always-on button beside the left rail
|
|
2325
|
+
Sits in the topmost floating layer so it stays reachable over any modal.
|
|
2326
|
+
========================================================================== */
|
|
2327
|
+
|
|
2328
|
+
.qt-brahma-launcher {
|
|
2329
|
+
position: fixed;
|
|
2330
|
+
left: calc(var(--qt-left-sidebar-collapsed-width) + var(--qt-brahma-launcher-offset));
|
|
2331
|
+
bottom: var(--qt-brahma-launcher-offset);
|
|
2332
|
+
z-index: var(--qt-floating-layer-z);
|
|
2333
|
+
width: var(--qt-brahma-launcher-size);
|
|
2334
|
+
height: var(--qt-brahma-launcher-size);
|
|
2335
|
+
display: inline-flex;
|
|
2336
|
+
align-items: center;
|
|
2337
|
+
justify-content: center;
|
|
2338
|
+
border-radius: 9999px;
|
|
2339
|
+
background: var(--qt-brahma-launcher-bg);
|
|
2340
|
+
color: var(--qt-brahma-launcher-fg);
|
|
2341
|
+
border: 2px solid var(--qt-brahma-launcher-ring);
|
|
2342
|
+
box-shadow: var(--qt-brahma-launcher-shadow);
|
|
2343
|
+
transition: background-color 150ms ease, color 150ms ease, transform 150ms ease;
|
|
2344
|
+
}
|
|
2345
|
+
|
|
2346
|
+
.qt-brahma-launcher:hover {
|
|
2347
|
+
background: var(--qt-brahma-launcher-hover-bg);
|
|
2348
|
+
transform: scale(1.06);
|
|
2349
|
+
}
|
|
2350
|
+
|
|
2351
|
+
.qt-brahma-launcher:focus-visible {
|
|
2352
|
+
outline: 2px solid var(--qt-brahma-launcher-ring);
|
|
2353
|
+
outline-offset: 3px;
|
|
2354
|
+
}
|
|
2355
|
+
|
|
2356
|
+
.qt-brahma-launcher-active,
|
|
2357
|
+
.qt-brahma-launcher-active:hover {
|
|
2358
|
+
background: var(--qt-brahma-launcher-active-bg);
|
|
2359
|
+
color: var(--qt-brahma-launcher-active-fg);
|
|
2360
|
+
}
|
|
2361
|
+
|
|
2362
|
+
.qt-brahma-launcher-icon {
|
|
2363
|
+
width: 60%;
|
|
2364
|
+
height: 60%;
|
|
2365
|
+
}
|
|
2366
|
+
|
|
2367
|
+
/* ==========================================================================
|
|
2368
|
+
SLIDE-OVER PANELS
|
|
2369
|
+
========================================================================== */
|
|
2370
|
+
|
|
2371
|
+
.qt-slide-over-overlay {
|
|
2372
|
+
position: fixed;
|
|
2373
|
+
inset: 0;
|
|
2374
|
+
z-index: 55;
|
|
2375
|
+
background-color: var(--qt-dialog-backdrop);
|
|
2376
|
+
opacity: 0;
|
|
2377
|
+
transition: opacity 200ms ease;
|
|
2378
|
+
pointer-events: none;
|
|
2379
|
+
}
|
|
2380
|
+
|
|
2381
|
+
.qt-slide-over-overlay[data-open="true"] {
|
|
2382
|
+
opacity: 1;
|
|
2383
|
+
pointer-events: auto;
|
|
2384
|
+
}
|
|
2385
|
+
|
|
2386
|
+
.qt-slide-over-panel {
|
|
2387
|
+
position: fixed;
|
|
2388
|
+
right: 0;
|
|
2389
|
+
top: 0;
|
|
2390
|
+
z-index: 55;
|
|
2391
|
+
height: 100%;
|
|
2392
|
+
display: flex;
|
|
2393
|
+
flex-direction: column;
|
|
2394
|
+
background-color: var(--qt-dialog-bg);
|
|
2395
|
+
border-left: 1px solid var(--qt-dialog-border);
|
|
2396
|
+
box-shadow: var(--qt-dialog-shadow);
|
|
2397
|
+
transform: translateX(100%);
|
|
2398
|
+
transition: transform 200ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
2399
|
+
}
|
|
2400
|
+
|
|
2401
|
+
.qt-slide-over-panel[data-open="true"] {
|
|
2402
|
+
transform: translateX(0);
|
|
2403
|
+
}
|
|
2404
|
+
|
|
2405
|
+
.qt-slide-over-header {
|
|
2406
|
+
display: flex;
|
|
2407
|
+
align-items: center;
|
|
2408
|
+
justify-content: space-between;
|
|
2409
|
+
padding: 0.75rem 1rem;
|
|
2410
|
+
flex-shrink: 0;
|
|
2411
|
+
border-bottom: 1px solid var(--qt-dialog-border);
|
|
2412
|
+
}
|
|
2413
|
+
|
|
2414
|
+
.qt-inspector-entry {
|
|
2415
|
+
transition: all 150ms ease;
|
|
2416
|
+
border-radius: var(--qt-card-radius);
|
|
2417
|
+
background: var(--qt-card-bg);
|
|
2418
|
+
border: 1px solid color-mix(in srgb, var(--qt-card-border) calc(var(--qt-card-border-opacity, 1) * 100%), transparent);
|
|
2419
|
+
}
|
|
2420
|
+
|
|
2421
|
+
.qt-inspector-entry:hover {
|
|
2422
|
+
border-color: color-mix(in srgb, var(--color-primary) 30%, transparent);
|
|
2423
|
+
}
|
|
2424
|
+
|
|
2425
|
+
.qt-inspector-entry-highlight {
|
|
2426
|
+
animation: qt-inspector-highlight 2s ease-out;
|
|
2427
|
+
}
|
|
2428
|
+
|
|
2429
|
+
@keyframes qt-inspector-highlight {
|
|
2430
|
+
0% {
|
|
2431
|
+
box-shadow: 0 0 0 2px color-mix(in srgb, var(--color-primary) 60%, transparent);
|
|
2432
|
+
}
|
|
2433
|
+
100% {
|
|
2434
|
+
box-shadow: 0 0 0 0px transparent;
|
|
2435
|
+
}
|
|
2436
|
+
}
|
|
2437
|
+
|
|
2438
|
+
/* ==========================================================================
|
|
2439
|
+
TAB COMPONENTS
|
|
2440
|
+
========================================================================== */
|
|
2441
|
+
|
|
2442
|
+
.qt-tab-group {
|
|
2443
|
+
display: flex;
|
|
2444
|
+
gap: var(--qt-tab-group-gap);
|
|
2445
|
+
border-bottom: 1px solid var(--color-border);
|
|
2446
|
+
}
|
|
2447
|
+
|
|
2448
|
+
.qt-tab {
|
|
2449
|
+
padding: var(--qt-tab-padding-y) var(--qt-tab-padding-x);
|
|
2450
|
+
font-size: var(--qt-tab-font-size);
|
|
2451
|
+
font-weight: var(--qt-tab-font-weight);
|
|
2452
|
+
color: var(--qt-tab-fg);
|
|
2453
|
+
background-color: var(--qt-tab-bg);
|
|
2454
|
+
border: none;
|
|
2455
|
+
border-radius: var(--qt-tab-radius);
|
|
2456
|
+
cursor: pointer;
|
|
2457
|
+
transition: all 150ms;
|
|
2458
|
+
}
|
|
2459
|
+
|
|
2460
|
+
.qt-tab:hover {
|
|
2461
|
+
color: var(--color-foreground);
|
|
2462
|
+
}
|
|
2463
|
+
|
|
2464
|
+
.qt-tab-active {
|
|
2465
|
+
background-color: var(--qt-tab-active-bg);
|
|
2466
|
+
color: var(--qt-tab-active-fg);
|
|
2467
|
+
}
|
|
2468
|
+
|
|
2469
|
+
.qt-tab-content {
|
|
2470
|
+
padding: 1rem 0;
|
|
2471
|
+
}
|
|
2472
|
+
|
|
2473
|
+
/* ==========================================================================
|
|
2474
|
+
CHAT COMPONENTS
|
|
2475
|
+
========================================================================== */
|
|
2476
|
+
|
|
2477
|
+
.qt-chat-message {
|
|
2478
|
+
padding: var(--qt-chat-message-padding);
|
|
2479
|
+
border-radius: var(--qt-chat-message-radius);
|
|
2480
|
+
max-width: 80%;
|
|
2481
|
+
}
|
|
2482
|
+
|
|
2483
|
+
.qt-chat-message-user {
|
|
2484
|
+
background-color: var(--qt-chat-user-bg);
|
|
2485
|
+
color: var(--qt-chat-user-fg);
|
|
2486
|
+
margin-left: auto;
|
|
2487
|
+
}
|
|
2488
|
+
|
|
2489
|
+
.qt-chat-message-assistant {
|
|
2490
|
+
background-color: var(--qt-chat-assistant-bg);
|
|
2491
|
+
color: var(--qt-chat-assistant-fg);
|
|
2492
|
+
border: 1px solid var(--color-border);
|
|
2493
|
+
}
|
|
2494
|
+
|
|
2495
|
+
/**
|
|
2496
|
+
* Whisper message — private messages between characters, not heard by all.
|
|
2497
|
+
*/
|
|
2498
|
+
.qt-chat-message-whisper {
|
|
2499
|
+
background: var(--qt-chat-whisper-bg);
|
|
2500
|
+
color: var(--qt-chat-whisper-fg);
|
|
2501
|
+
border: 2px dashed var(--qt-chat-whisper-border);
|
|
2502
|
+
font-style: italic;
|
|
2503
|
+
}
|
|
2504
|
+
|
|
2505
|
+
.qt-chat-whisper-label {
|
|
2506
|
+
font-size: 0.75rem;
|
|
2507
|
+
color: var(--qt-chat-whisper-label-fg);
|
|
2508
|
+
font-style: italic;
|
|
2509
|
+
margin-bottom: 0.25rem;
|
|
2510
|
+
}
|
|
2511
|
+
|
|
2512
|
+
.qt-chat-message-whisper-overheard {
|
|
2513
|
+
opacity: 0.6;
|
|
2514
|
+
}
|
|
2515
|
+
|
|
2516
|
+
/**
|
|
2517
|
+
* Pascal result — the outcome of a custom tool (pseudo-tool) roll, announced by
|
|
2518
|
+
* Pascal the Croupier. The accent carries the outcome's semantic `state`.
|
|
2519
|
+
* Built on the --qt-alert-* families, which every bundled theme defines.
|
|
2520
|
+
*/
|
|
2521
|
+
.qt-pascal-result {
|
|
2522
|
+
border-left: 3px solid var(--qt-alert-info-border);
|
|
2523
|
+
padding-left: 0.75rem;
|
|
2524
|
+
}
|
|
2525
|
+
|
|
2526
|
+
.qt-pascal-result--success {
|
|
2527
|
+
border-left-color: var(--qt-alert-success-border);
|
|
2528
|
+
}
|
|
2529
|
+
|
|
2530
|
+
.qt-pascal-result--partial {
|
|
2531
|
+
border-left-color: var(--qt-alert-warning-border);
|
|
2532
|
+
}
|
|
2533
|
+
|
|
2534
|
+
.qt-pascal-result--failure {
|
|
2535
|
+
border-left-color: var(--qt-alert-error-border);
|
|
2536
|
+
}
|
|
2537
|
+
|
|
2538
|
+
.qt-pascal-result--info {
|
|
2539
|
+
border-left-color: var(--qt-alert-info-border);
|
|
2540
|
+
}
|
|
2541
|
+
|
|
2542
|
+
/* --------------------------------------------------------------------------
|
|
2543
|
+
ANSWER-CONFIRMATION BADGE
|
|
2544
|
+
A quiet per-message verdict marker (Vouched / Amended / Stood by /
|
|
2545
|
+
Unvetted). The glyph carries the state; a tooltip holds the discrepancy
|
|
2546
|
+
notes. Metadata, not an alarm.
|
|
2547
|
+
-------------------------------------------------------------------------- */
|
|
2548
|
+
|
|
2549
|
+
.qt-confirmation-badge {
|
|
2550
|
+
display: inline-flex;
|
|
2551
|
+
align-items: center;
|
|
2552
|
+
gap: 0.2rem;
|
|
2553
|
+
padding: 0.05rem 0.4rem;
|
|
2554
|
+
border-radius: 0.375rem;
|
|
2555
|
+
border: 1px solid color-mix(in srgb, currentColor 25%, transparent);
|
|
2556
|
+
background: transparent;
|
|
2557
|
+
font: inherit;
|
|
2558
|
+
line-height: 1.4;
|
|
2559
|
+
cursor: help;
|
|
2560
|
+
color: var(--qt-text-secondary-fg, var(--color-muted-foreground));
|
|
2561
|
+
opacity: 0.8;
|
|
2562
|
+
user-select: none;
|
|
2563
|
+
white-space: nowrap;
|
|
2564
|
+
transition: color 150ms, background-color 150ms, border-color 150ms, opacity 150ms;
|
|
2565
|
+
}
|
|
2566
|
+
|
|
2567
|
+
/* The badge sits among the message action icons and answers the pointer the
|
|
2568
|
+
same way they do. */
|
|
2569
|
+
.qt-confirmation-badge:hover,
|
|
2570
|
+
.qt-confirmation-badge:focus-visible {
|
|
2571
|
+
opacity: 1;
|
|
2572
|
+
border-color: color-mix(in srgb, currentColor 45%, transparent);
|
|
2573
|
+
background: color-mix(in srgb, var(--color-muted) 50%, transparent);
|
|
2574
|
+
}
|
|
2575
|
+
|
|
2576
|
+
/* The tinted states (stood-by, amended) keep their own colour on hover; the
|
|
2577
|
+
quiet ones brighten to the foreground the way the action icons do. */
|
|
2578
|
+
.qt-confirmation-badge[data-confirmation-state="vouched"]:hover,
|
|
2579
|
+
.qt-confirmation-badge[data-confirmation-state="vouched"]:focus-visible,
|
|
2580
|
+
.qt-confirmation-badge[data-confirmation-state="unvetted"]:hover,
|
|
2581
|
+
.qt-confirmation-badge[data-confirmation-state="unvetted"]:focus-visible {
|
|
2582
|
+
color: var(--color-foreground);
|
|
2583
|
+
}
|
|
2584
|
+
|
|
2585
|
+
.qt-confirmation-badge:focus-visible {
|
|
2586
|
+
outline: 2px solid color-mix(in srgb, var(--color-foreground) 45%, transparent);
|
|
2587
|
+
outline-offset: 2px;
|
|
2588
|
+
}
|
|
2589
|
+
|
|
2590
|
+
.qt-chat-message-user .qt-confirmation-badge:hover,
|
|
2591
|
+
.qt-chat-message-user .qt-confirmation-badge:focus-visible {
|
|
2592
|
+
color: var(--qt-chat-user-fg);
|
|
2593
|
+
background: color-mix(in srgb, var(--qt-chat-user-fg) 15%, transparent);
|
|
2594
|
+
}
|
|
2595
|
+
|
|
2596
|
+
.qt-confirmation-badge-glyph {
|
|
2597
|
+
font-weight: 600;
|
|
2598
|
+
}
|
|
2599
|
+
|
|
2600
|
+
.qt-confirmation-badge[data-confirmation-state="stood-by"] {
|
|
2601
|
+
color: var(--qt-warning-box-fg, var(--qt-text-secondary-fg));
|
|
2602
|
+
opacity: 1;
|
|
2603
|
+
}
|
|
2604
|
+
|
|
2605
|
+
.qt-confirmation-badge[data-confirmation-state="amended"] {
|
|
2606
|
+
opacity: 1;
|
|
2607
|
+
}
|
|
2608
|
+
|
|
2609
|
+
/* ==========================================================================
|
|
2610
|
+
CHAT — STAFF ANNOUNCEMENTS
|
|
2611
|
+
Messages authored by a personified feature (the Librarian, the Host, Pascal
|
|
2612
|
+
the Croupier, …) rather than by a character. They summarise to a one-line
|
|
2613
|
+
bar, and a run of consecutive ones packs into a row of content-width chips.
|
|
2614
|
+
========================================================================== */
|
|
2615
|
+
|
|
2616
|
+
/**
|
|
2617
|
+
* Collapsed bar for Staff-authored messages.
|
|
2618
|
+
* Single-line summary: dot · sender name · kind · timestamp · chevron.
|
|
2619
|
+
* Click to expand into the regular message body.
|
|
2620
|
+
*/
|
|
2621
|
+
.qt-chat-system-bar {
|
|
2622
|
+
display: flex;
|
|
2623
|
+
align-items: center;
|
|
2624
|
+
gap: 0.625rem;
|
|
2625
|
+
width: 100%;
|
|
2626
|
+
padding: 0.25rem 0.625rem;
|
|
2627
|
+
margin: 0.125rem 0;
|
|
2628
|
+
background: var(--qt-chat-system-bar-bg);
|
|
2629
|
+
color: var(--qt-chat-system-bar-fg);
|
|
2630
|
+
border: 1px solid var(--qt-chat-system-bar-border);
|
|
2631
|
+
border-radius: var(--radius-sm, 0.25rem);
|
|
2632
|
+
font-size: 0.75rem;
|
|
2633
|
+
line-height: 1.2;
|
|
2634
|
+
text-align: left;
|
|
2635
|
+
cursor: pointer;
|
|
2636
|
+
transition: background-color 120ms ease;
|
|
2637
|
+
}
|
|
2638
|
+
|
|
2639
|
+
.qt-chat-system-bar:hover,
|
|
2640
|
+
.qt-chat-system-bar:focus-visible {
|
|
2641
|
+
background: var(--qt-chat-system-bar-hover-bg);
|
|
2642
|
+
outline: none;
|
|
2643
|
+
}
|
|
2644
|
+
|
|
2645
|
+
/* The tint alone was too faint to find; keyboard focus also gets the ring
|
|
2646
|
+
every other control wears (WCAG 2.4.7). */
|
|
2647
|
+
.qt-chat-system-bar:focus-visible {
|
|
2648
|
+
outline: 2px solid var(--color-ring);
|
|
2649
|
+
outline-offset: 2px;
|
|
2650
|
+
}
|
|
2651
|
+
|
|
2652
|
+
.qt-chat-system-bar-sender {
|
|
2653
|
+
color: var(--qt-chat-system-bar-sender-fg);
|
|
2654
|
+
font-weight: 600;
|
|
2655
|
+
white-space: nowrap;
|
|
2656
|
+
}
|
|
2657
|
+
|
|
2658
|
+
.qt-chat-system-bar-kind {
|
|
2659
|
+
flex: 1 1 auto;
|
|
2660
|
+
min-width: 0;
|
|
2661
|
+
font-style: italic;
|
|
2662
|
+
overflow: hidden;
|
|
2663
|
+
text-overflow: ellipsis;
|
|
2664
|
+
white-space: nowrap;
|
|
2665
|
+
}
|
|
2666
|
+
|
|
2667
|
+
/**
|
|
2668
|
+
* Whisper audience on an announcement bar or chip ("to Alice, Bob"). Wears the
|
|
2669
|
+
* same ink as the message body's whisper label so a private aside reads the
|
|
2670
|
+
* same whether it is collapsed to a chip or opened in full.
|
|
2671
|
+
*/
|
|
2672
|
+
.qt-chat-system-bar-whisper {
|
|
2673
|
+
flex: 0 1 auto;
|
|
2674
|
+
min-width: 0;
|
|
2675
|
+
color: var(--qt-chat-whisper-label-fg);
|
|
2676
|
+
font-style: italic;
|
|
2677
|
+
overflow: hidden;
|
|
2678
|
+
text-overflow: ellipsis;
|
|
2679
|
+
white-space: nowrap;
|
|
2680
|
+
}
|
|
2681
|
+
|
|
2682
|
+
/* Full strength: at 0.75 opacity the timestamp fell to ~3:1 on the bar. */
|
|
2683
|
+
.qt-chat-system-bar-time {
|
|
2684
|
+
color: var(--qt-chat-system-bar-fg);
|
|
2685
|
+
white-space: nowrap;
|
|
2686
|
+
}
|
|
2687
|
+
|
|
2688
|
+
.qt-chat-system-bar-chevron {
|
|
2689
|
+
flex-shrink: 0;
|
|
2690
|
+
width: 0.875rem;
|
|
2691
|
+
height: 0.875rem;
|
|
2692
|
+
opacity: 0.7;
|
|
2693
|
+
}
|
|
2694
|
+
|
|
2695
|
+
/**
|
|
2696
|
+
* Variant rendered at the top of an *expanded* Staff-authored message, giving
|
|
2697
|
+
* the reader a prominent click target to re-collapse it.
|
|
2698
|
+
*/
|
|
2699
|
+
.qt-chat-system-bar-expanded {
|
|
2700
|
+
margin-bottom: 0.25rem;
|
|
2701
|
+
}
|
|
2702
|
+
|
|
2703
|
+
/**
|
|
2704
|
+
* Packed announcement chips. A run of consecutive *collapsed* Staff messages
|
|
2705
|
+
* renders as one flex-wrapping row of content-width chips instead of a
|
|
2706
|
+
* full-width bar each.
|
|
2707
|
+
*/
|
|
2708
|
+
.qt-chat-announcement-group {
|
|
2709
|
+
display: flex;
|
|
2710
|
+
flex-wrap: wrap;
|
|
2711
|
+
gap: 0.375rem;
|
|
2712
|
+
width: 95%;
|
|
2713
|
+
max-width: var(--qt-chat-message-row-max-width);
|
|
2714
|
+
margin: 1.5rem auto 0;
|
|
2715
|
+
align-items: flex-start;
|
|
2716
|
+
}
|
|
2717
|
+
|
|
2718
|
+
/**
|
|
2719
|
+
* A single collapsed announcement, sized to its content (never full width).
|
|
2720
|
+
* Reuses the -sender / -kind / -time / -chevron element classes above; only the
|
|
2721
|
+
* -kind sizing differs (see the override below).
|
|
2722
|
+
*/
|
|
2723
|
+
.qt-chat-announcement-chip {
|
|
2724
|
+
display: inline-flex;
|
|
2725
|
+
align-items: center;
|
|
2726
|
+
gap: 0.5rem;
|
|
2727
|
+
flex: 0 1 auto;
|
|
2728
|
+
min-width: 0;
|
|
2729
|
+
max-width: 100%;
|
|
2730
|
+
padding: 0.25rem 0.625rem;
|
|
2731
|
+
background: var(--qt-chat-system-bar-bg);
|
|
2732
|
+
color: var(--qt-chat-system-bar-fg);
|
|
2733
|
+
border: 1px solid var(--qt-chat-system-bar-border);
|
|
2734
|
+
border-radius: var(--radius-sm, 0.25rem);
|
|
2735
|
+
font-size: 0.75rem;
|
|
2736
|
+
line-height: 1.2;
|
|
2737
|
+
text-align: left;
|
|
2738
|
+
cursor: pointer;
|
|
2739
|
+
transition: background-color 120ms ease;
|
|
2740
|
+
}
|
|
2741
|
+
|
|
2742
|
+
.qt-chat-announcement-chip:hover,
|
|
2743
|
+
.qt-chat-announcement-chip:focus-visible {
|
|
2744
|
+
background: var(--qt-chat-system-bar-hover-bg);
|
|
2745
|
+
outline: none;
|
|
2746
|
+
}
|
|
2747
|
+
|
|
2748
|
+
/* The tint alone was too faint to find; keyboard focus also gets the ring
|
|
2749
|
+
every other control wears (WCAG 2.4.7). */
|
|
2750
|
+
.qt-chat-announcement-chip:focus-visible {
|
|
2751
|
+
outline: 2px solid var(--color-ring);
|
|
2752
|
+
outline-offset: 2px;
|
|
2753
|
+
}
|
|
2754
|
+
|
|
2755
|
+
/* Inside a chip the kind must not greedily fill the row; cap it so a long kind
|
|
2756
|
+
doesn't dominate a packed row. */
|
|
2757
|
+
.qt-chat-announcement-chip .qt-chat-system-bar-kind {
|
|
2758
|
+
flex: 0 1 auto;
|
|
2759
|
+
max-width: 22ch;
|
|
2760
|
+
}
|
|
2761
|
+
|
|
2762
|
+
/* Same cap for a long audience list — a whisper to five people must not push
|
|
2763
|
+
the timestamp and chevron off the chip. */
|
|
1845
2764
|
.qt-chat-announcement-chip .qt-chat-system-bar-whisper {
|
|
1846
2765
|
max-width: 18ch;
|
|
1847
2766
|
}
|
|
1848
2767
|
|
|
1849
|
-
/* A whispered announcement carries the whisper's border colour, so a private
|
|
1850
|
-
aside is distinguishable from a public one before it is ever expanded. */
|
|
1851
|
-
.qt-chat-announcement-chip-whisper {
|
|
1852
|
-
border-color: var(--qt-chat-whisper-label-fg);
|
|
2768
|
+
/* A whispered announcement carries the whisper's border colour, so a private
|
|
2769
|
+
aside is distinguishable from a public one before it is ever expanded. */
|
|
2770
|
+
.qt-chat-announcement-chip-whisper {
|
|
2771
|
+
border-color: var(--qt-chat-whisper-label-fg);
|
|
2772
|
+
}
|
|
2773
|
+
|
|
2774
|
+
/**
|
|
2775
|
+
* Importance dot before the sender name. Filled for high/medium, hollow for
|
|
2776
|
+
* low, so the eye lands on what matters and skims past the low-noise chatter.
|
|
2777
|
+
*/
|
|
2778
|
+
.qt-chat-announcement-dot {
|
|
2779
|
+
flex-shrink: 0;
|
|
2780
|
+
width: 0.5rem;
|
|
2781
|
+
height: 0.5rem;
|
|
2782
|
+
border-radius: 9999px;
|
|
2783
|
+
border: 1px solid transparent;
|
|
2784
|
+
}
|
|
2785
|
+
|
|
2786
|
+
.qt-chat-announcement-dot-high {
|
|
2787
|
+
background: var(--qt-chat-announcement-dot-high);
|
|
2788
|
+
}
|
|
2789
|
+
|
|
2790
|
+
.qt-chat-announcement-dot-medium {
|
|
2791
|
+
background: var(--qt-chat-announcement-dot-medium);
|
|
2792
|
+
}
|
|
2793
|
+
|
|
2794
|
+
.qt-chat-announcement-dot-low {
|
|
2795
|
+
background: transparent;
|
|
2796
|
+
border-color: var(--qt-chat-announcement-dot-low);
|
|
2797
|
+
}
|
|
2798
|
+
|
|
2799
|
+
/**
|
|
2800
|
+
* Outcome dot for a Pascal roll announcement, which replaces the importance dot:
|
|
2801
|
+
* a roll has a verdict of its own — success / partial / failure / info — and
|
|
2802
|
+
* that verdict is what the reader is looking for. Filled with the solid
|
|
2803
|
+
* --qt-alert-*-fg (the -border tints are alpha-thin and vanish at 8px); the
|
|
2804
|
+
* bar's leading accent below uses the -border tints, as .qt-pascal-result does.
|
|
2805
|
+
*/
|
|
2806
|
+
.qt-chat-announcement-dot-outcome-success {
|
|
2807
|
+
background: var(--qt-alert-success-fg);
|
|
2808
|
+
}
|
|
2809
|
+
|
|
2810
|
+
.qt-chat-announcement-dot-outcome-partial {
|
|
2811
|
+
background: var(--qt-alert-warning-fg);
|
|
2812
|
+
}
|
|
2813
|
+
|
|
2814
|
+
.qt-chat-announcement-dot-outcome-failure {
|
|
2815
|
+
background: var(--qt-alert-error-fg);
|
|
2816
|
+
}
|
|
2817
|
+
|
|
2818
|
+
.qt-chat-announcement-dot-outcome-info {
|
|
2819
|
+
background: var(--qt-alert-info-fg);
|
|
2820
|
+
}
|
|
2821
|
+
|
|
2822
|
+
/**
|
|
2823
|
+
* The bar/chip of a Pascal roll wears the same .qt-pascal-result accent as the
|
|
2824
|
+
* outcome bubble itself, so one outcome reads identically wherever it is shown.
|
|
2825
|
+
*
|
|
2826
|
+
* These compound selectors only restate that accent: .qt-pascal-result is
|
|
2827
|
+
* declared above, and both wrappers set `border` and `padding` SHORTHANDS at
|
|
2828
|
+
* equal specificity, so the plain family would lose on source order. Nothing
|
|
2829
|
+
* new is styled here — change the accent itself at .qt-pascal-result.
|
|
2830
|
+
*/
|
|
2831
|
+
.qt-chat-system-bar.qt-pascal-result,
|
|
2832
|
+
.qt-chat-announcement-chip.qt-pascal-result {
|
|
2833
|
+
border-left-width: 3px;
|
|
2834
|
+
border-left-color: var(--qt-alert-info-border);
|
|
2835
|
+
padding-left: 0.75rem;
|
|
2836
|
+
}
|
|
2837
|
+
|
|
2838
|
+
.qt-chat-system-bar.qt-pascal-result--success,
|
|
2839
|
+
.qt-chat-announcement-chip.qt-pascal-result--success {
|
|
2840
|
+
border-left-color: var(--qt-alert-success-border);
|
|
2841
|
+
}
|
|
2842
|
+
|
|
2843
|
+
.qt-chat-system-bar.qt-pascal-result--partial,
|
|
2844
|
+
.qt-chat-announcement-chip.qt-pascal-result--partial {
|
|
2845
|
+
border-left-color: var(--qt-alert-warning-border);
|
|
2846
|
+
}
|
|
2847
|
+
|
|
2848
|
+
.qt-chat-system-bar.qt-pascal-result--failure,
|
|
2849
|
+
.qt-chat-announcement-chip.qt-pascal-result--failure {
|
|
2850
|
+
border-left-color: var(--qt-alert-error-border);
|
|
2851
|
+
}
|
|
2852
|
+
|
|
2853
|
+
.qt-chat-system-bar.qt-pascal-result--info,
|
|
2854
|
+
.qt-chat-announcement-chip.qt-pascal-result--info {
|
|
2855
|
+
border-left-color: var(--qt-alert-info-border);
|
|
2856
|
+
}
|
|
2857
|
+
|
|
2858
|
+
/**
|
|
2859
|
+
* Deus Ex Machina — established facts in the Salon.
|
|
2860
|
+
*
|
|
2861
|
+
* Mirrors app/styles/qt-components/_chat.css. Built on existing tokens only (the --qt-alert-info-* family and --color-ring,
|
|
2862
|
+
* the focus-ring colour), so every bundled theme renders it without per-theme
|
|
2863
|
+
* work and the armed frame holds the focus ring's own contrast.
|
|
2864
|
+
*
|
|
2865
|
+
* - .qt-chat-composer-established-fact: the composer's editor wrapper while
|
|
2866
|
+
* `/deus` is armed — a frame and a faint tint, so the operator can see the
|
|
2867
|
+
* next line will be posted as fact.
|
|
2868
|
+
* - .qt-chat-message-established-fact: the small ribbon on an operator line
|
|
2869
|
+
* posted as fact.
|
|
2870
|
+
* - .qt-chat-established-fact: the accent on a machine fact's bar/chip.
|
|
2871
|
+
* - .qt-chat-established-fact-row / -band: a machine fact renders as a
|
|
2872
|
+
* full-width band (no avatar) rather than a speech bubble.
|
|
2873
|
+
*/
|
|
2874
|
+
.qt-chat-composer-established-fact .qt-chat-composer-input {
|
|
2875
|
+
border-color: var(--color-ring);
|
|
2876
|
+
box-shadow: inset 0 0 0 1px var(--color-ring);
|
|
2877
|
+
background-image: linear-gradient(var(--qt-alert-info-bg), var(--qt-alert-info-bg));
|
|
2878
|
+
}
|
|
2879
|
+
|
|
2880
|
+
/* The ribbon sits on whatever the theme paints the speaker's bubble, so it
|
|
2881
|
+
takes the bubble's own text colour (every theme pairs those) and stands
|
|
2882
|
+
apart by weight and small caps rather than by a hue of its own. */
|
|
2883
|
+
.qt-chat-message-established-fact {
|
|
2884
|
+
font-size: 0.75rem;
|
|
2885
|
+
font-weight: 600;
|
|
2886
|
+
font-variant-caps: all-small-caps;
|
|
2887
|
+
letter-spacing: 0.04em;
|
|
2888
|
+
color: inherit;
|
|
2889
|
+
margin-bottom: 0.25rem;
|
|
2890
|
+
}
|
|
2891
|
+
|
|
2892
|
+
.qt-chat-system-bar.qt-chat-established-fact,
|
|
2893
|
+
.qt-chat-announcement-chip.qt-chat-established-fact {
|
|
2894
|
+
border-left-width: 3px;
|
|
2895
|
+
border-left-color: var(--color-ring);
|
|
2896
|
+
padding-left: 0.75rem;
|
|
2897
|
+
}
|
|
2898
|
+
|
|
2899
|
+
.qt-chat-established-fact-row {
|
|
2900
|
+
width: 100%;
|
|
2901
|
+
max-width: none;
|
|
2902
|
+
}
|
|
2903
|
+
|
|
2904
|
+
.qt-chat-established-fact-band {
|
|
2905
|
+
width: 100%;
|
|
2906
|
+
background: var(--qt-alert-info-bg);
|
|
2907
|
+
border: 1px solid var(--qt-alert-info-border);
|
|
2908
|
+
border-left: 3px solid var(--color-ring);
|
|
2909
|
+
box-shadow: none;
|
|
2910
|
+
}
|
|
2911
|
+
|
|
2912
|
+
/* The toggle that arms Deus Ex Machina, seated in the corner of the composer's
|
|
2913
|
+
"speaking as" portrait. A small frosted tile at rest; armed, it wears the
|
|
2914
|
+
composer frame's own ring and tint so the two read as one state. */
|
|
2915
|
+
.qt-chat-established-fact-toggle {
|
|
2916
|
+
display: inline-flex;
|
|
2917
|
+
align-items: center;
|
|
2918
|
+
justify-content: center;
|
|
2919
|
+
width: 1.625rem;
|
|
2920
|
+
height: 1.625rem;
|
|
2921
|
+
padding: 0;
|
|
2922
|
+
border: 1px solid var(--color-border);
|
|
2923
|
+
border-radius: var(--radius-sm);
|
|
2924
|
+
background-color: color-mix(in srgb, var(--color-background) 82%, transparent);
|
|
2925
|
+
color: var(--color-foreground);
|
|
2926
|
+
cursor: pointer;
|
|
2927
|
+
opacity: 0.85;
|
|
2928
|
+
transition: opacity 150ms ease, border-color 150ms ease, box-shadow 150ms ease;
|
|
2929
|
+
}
|
|
2930
|
+
|
|
2931
|
+
.qt-chat-established-fact-toggle:hover,
|
|
2932
|
+
.qt-chat-established-fact-toggle:focus-visible {
|
|
2933
|
+
opacity: 1;
|
|
2934
|
+
}
|
|
2935
|
+
|
|
2936
|
+
.qt-chat-established-fact-toggle:focus-visible {
|
|
2937
|
+
outline: 2px solid var(--color-ring);
|
|
2938
|
+
outline-offset: 1px;
|
|
2939
|
+
}
|
|
2940
|
+
|
|
2941
|
+
.qt-chat-established-fact-toggle[aria-pressed="true"] {
|
|
2942
|
+
opacity: 1;
|
|
2943
|
+
border-color: var(--color-ring);
|
|
2944
|
+
box-shadow: inset 0 0 0 1px var(--color-ring);
|
|
2945
|
+
background-image: linear-gradient(var(--qt-alert-info-bg), var(--qt-alert-info-bg));
|
|
2946
|
+
}
|
|
2947
|
+
|
|
2948
|
+
.qt-chat-established-fact-toggle:disabled {
|
|
2949
|
+
cursor: not-allowed;
|
|
2950
|
+
opacity: 0.5;
|
|
2951
|
+
}
|
|
2952
|
+
|
|
2953
|
+
/**
|
|
2954
|
+
* Silent message — inner thoughts and actions from character in silent mode.
|
|
2955
|
+
* Distinguished from whispers by a dotted border (vs dashed) and sage/teal tones.
|
|
2956
|
+
*/
|
|
2957
|
+
.qt-chat-message-silent {
|
|
2958
|
+
background: var(--qt-chat-silent-bg);
|
|
2959
|
+
color: var(--qt-chat-silent-fg);
|
|
2960
|
+
border: 2px dotted var(--qt-chat-silent-border);
|
|
2961
|
+
font-style: italic;
|
|
2962
|
+
}
|
|
2963
|
+
|
|
2964
|
+
.qt-chat-silent-label {
|
|
2965
|
+
font-size: 0.75rem;
|
|
2966
|
+
color: var(--qt-chat-silent-label-fg);
|
|
2967
|
+
font-style: italic;
|
|
2968
|
+
margin-bottom: 0.25rem;
|
|
2969
|
+
}
|
|
2970
|
+
|
|
2971
|
+
/**
|
|
2972
|
+
* Regeneration — a line being re-rolled in place.
|
|
2973
|
+
*
|
|
2974
|
+
* Two states, one bubble. Before the first token the old line is still there
|
|
2975
|
+
* but visibly out of service (dimmed, desaturated, unselectable) under a plate
|
|
2976
|
+
* that says what is happening. From the first token the plate and the old line
|
|
2977
|
+
* are both gone and the new prose streams in their place.
|
|
2978
|
+
*/
|
|
2979
|
+
.qt-chat-message-regenerating {
|
|
2980
|
+
border-color: color-mix(in srgb, var(--qt-response-status-streaming-fg) 45%, transparent);
|
|
2981
|
+
}
|
|
2982
|
+
|
|
2983
|
+
.qt-chat-regenerating {
|
|
2984
|
+
position: relative;
|
|
2985
|
+
}
|
|
2986
|
+
|
|
2987
|
+
.qt-chat-regenerating-original {
|
|
2988
|
+
opacity: 0.3;
|
|
2989
|
+
filter: grayscale(0.8);
|
|
2990
|
+
pointer-events: none;
|
|
2991
|
+
user-select: none;
|
|
2992
|
+
}
|
|
2993
|
+
|
|
2994
|
+
.qt-chat-regenerating-plate {
|
|
2995
|
+
position: absolute;
|
|
2996
|
+
inset: 0;
|
|
2997
|
+
display: flex;
|
|
2998
|
+
align-items: center;
|
|
2999
|
+
justify-content: center;
|
|
3000
|
+
gap: 0.5rem;
|
|
3001
|
+
color: var(--qt-response-status-streaming-fg);
|
|
3002
|
+
}
|
|
3003
|
+
|
|
3004
|
+
/* The words are in the bubble's own ink: the streaming green is a status
|
|
3005
|
+
accent, and on a mid-tone bubble it fell below 3:1. The green stays on the
|
|
3006
|
+
border and the quill. */
|
|
3007
|
+
.qt-chat-regenerating-plate-text {
|
|
3008
|
+
color: var(--qt-chat-regenerating-plate-fg, var(--qt-chat-assistant-fg, var(--color-foreground)));
|
|
3009
|
+
font-size: 0.875rem;
|
|
3010
|
+
line-height: 1.25rem;
|
|
3011
|
+
font-weight: 500;
|
|
3012
|
+
padding: 0.375rem 0.75rem;
|
|
3013
|
+
border-radius: 0.375rem;
|
|
3014
|
+
background: color-mix(in srgb, var(--qt-chat-assistant-bg) 88%, transparent);
|
|
3015
|
+
border: 1px solid color-mix(in srgb, var(--qt-response-status-streaming-fg) 35%, transparent);
|
|
3016
|
+
letter-spacing: 0.02em;
|
|
3017
|
+
}
|
|
3018
|
+
|
|
3019
|
+
/**
|
|
3020
|
+
* Message action bar — the per-message toolbar (copy, source, edit, delete,
|
|
3021
|
+
* regenerate, swipe arrows) along the bottom of a bubble.
|
|
3022
|
+
*/
|
|
3023
|
+
.qt-chat-message-action-bar {
|
|
3024
|
+
display: flex;
|
|
3025
|
+
align-items: center;
|
|
3026
|
+
gap: 0.75rem;
|
|
3027
|
+
margin-top: 0.5rem;
|
|
3028
|
+
padding-top: 0.5rem;
|
|
3029
|
+
border-top: 1px solid color-mix(in srgb, var(--color-border) 50%, transparent);
|
|
3030
|
+
}
|
|
3031
|
+
|
|
3032
|
+
.qt-chat-message-action-bar-icons {
|
|
3033
|
+
display: flex;
|
|
3034
|
+
align-items: center;
|
|
3035
|
+
gap: 0.25rem;
|
|
3036
|
+
}
|
|
3037
|
+
|
|
3038
|
+
/** The bar of a line that is mid-replacement: nothing on it is safe to press. */
|
|
3039
|
+
.qt-chat-message-action-bar-disabled {
|
|
3040
|
+
pointer-events: none;
|
|
3041
|
+
opacity: 0.4;
|
|
3042
|
+
}
|
|
3043
|
+
|
|
3044
|
+
.qt-chat-message-action-icon {
|
|
3045
|
+
padding: 0.375rem;
|
|
3046
|
+
border-radius: 0.25rem;
|
|
3047
|
+
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
|
3048
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
3049
|
+
transition-duration: 150ms;
|
|
3050
|
+
color: var(--color-muted-foreground);
|
|
3051
|
+
cursor: pointer;
|
|
3052
|
+
}
|
|
3053
|
+
|
|
3054
|
+
.qt-chat-message-action-icon:hover {
|
|
3055
|
+
color: var(--color-foreground);
|
|
3056
|
+
background: color-mix(in srgb, var(--color-muted) 50%, transparent);
|
|
3057
|
+
}
|
|
3058
|
+
|
|
3059
|
+
.qt-chat-message-action-icon-danger:hover {
|
|
3060
|
+
color: var(--qt-status-danger-fg);
|
|
3061
|
+
background: color-mix(in srgb, var(--qt-status-danger-bg) 50%, transparent);
|
|
3062
|
+
}
|
|
3063
|
+
|
|
3064
|
+
.qt-chat-message-action-icon svg,
|
|
3065
|
+
.qt-chat-message-action-icon .qt-icon {
|
|
3066
|
+
width: 1rem;
|
|
3067
|
+
height: 1rem;
|
|
3068
|
+
}
|
|
3069
|
+
|
|
3070
|
+
/** User message action icons — light colours on the user bubble's ground. */
|
|
3071
|
+
.qt-chat-message-user .qt-chat-message-action-bar {
|
|
3072
|
+
border-top-color: color-mix(in srgb, var(--qt-chat-user-fg) 30%, transparent);
|
|
3073
|
+
}
|
|
3074
|
+
|
|
3075
|
+
.qt-chat-message-user .qt-chat-message-action-icon {
|
|
3076
|
+
color: color-mix(in srgb, var(--qt-chat-user-fg) 70%, transparent);
|
|
3077
|
+
}
|
|
3078
|
+
|
|
3079
|
+
.qt-chat-message-user .qt-chat-message-action-icon:hover {
|
|
3080
|
+
color: var(--qt-chat-user-fg);
|
|
3081
|
+
background: color-mix(in srgb, var(--qt-chat-user-fg) 15%, transparent);
|
|
3082
|
+
}
|
|
3083
|
+
|
|
3084
|
+
.qt-chat-message-user .qt-chat-message-action-icon-danger:hover {
|
|
3085
|
+
color: hsl(0 100% 85%);
|
|
3086
|
+
background: color-mix(in srgb, hsl(0 70% 50%) 25%, transparent);
|
|
3087
|
+
}
|
|
3088
|
+
|
|
3089
|
+
.qt-chat-message-action-timestamp {
|
|
3090
|
+
font-size: 0.75rem;
|
|
3091
|
+
line-height: 1rem;
|
|
3092
|
+
color: var(--color-muted-foreground);
|
|
3093
|
+
margin-left: auto;
|
|
3094
|
+
}
|
|
3095
|
+
|
|
3096
|
+
.qt-chat-message-user .qt-chat-message-action-timestamp {
|
|
3097
|
+
color: color-mix(in srgb, var(--qt-chat-user-fg) 70%, transparent);
|
|
3098
|
+
}
|
|
3099
|
+
|
|
3100
|
+
/**
|
|
3101
|
+
* Response status strip — the line above the composer that narrates a turn as
|
|
3102
|
+
* it happens ("Gathering memories and context...", "Ada is responding...",
|
|
3103
|
+
* "Regenerating Ada's reply..."). Coloured per stage.
|
|
3104
|
+
*/
|
|
3105
|
+
.qt-chat-response-status {
|
|
3106
|
+
display: flex;
|
|
3107
|
+
align-items: center;
|
|
3108
|
+
gap: 0.5rem;
|
|
3109
|
+
padding: 0.375rem 0.75rem;
|
|
3110
|
+
font-size: 0.875rem;
|
|
3111
|
+
line-height: 1.25rem;
|
|
3112
|
+
margin-bottom: 0.5rem;
|
|
3113
|
+
border-radius: 0.375rem;
|
|
3114
|
+
background: var(--qt-response-status-bg);
|
|
3115
|
+
color: var(--qt-response-status-fg);
|
|
3116
|
+
border: 1px solid var(--qt-response-status-border);
|
|
3117
|
+
animation: qt-status-fade-in 150ms ease-out;
|
|
3118
|
+
}
|
|
3119
|
+
|
|
3120
|
+
.qt-chat-response-status-icon {
|
|
3121
|
+
flex-shrink: 0;
|
|
3122
|
+
width: 1rem;
|
|
3123
|
+
height: 1rem;
|
|
3124
|
+
}
|
|
3125
|
+
|
|
3126
|
+
.qt-chat-response-status-text {
|
|
3127
|
+
font-weight: 500;
|
|
3128
|
+
}
|
|
3129
|
+
|
|
3130
|
+
.qt-chat-response-status[data-stage="compressing"] {
|
|
3131
|
+
color: var(--qt-response-status-compressing-fg);
|
|
3132
|
+
border-color: color-mix(in srgb, var(--qt-response-status-compressing-fg) 30%, transparent);
|
|
3133
|
+
}
|
|
3134
|
+
|
|
3135
|
+
.qt-chat-response-status[data-stage="gathering"] {
|
|
3136
|
+
color: var(--qt-response-status-gathering-fg);
|
|
3137
|
+
border-color: color-mix(in srgb, var(--qt-response-status-gathering-fg) 30%, transparent);
|
|
3138
|
+
}
|
|
3139
|
+
|
|
3140
|
+
.qt-chat-response-status[data-stage="building"] {
|
|
3141
|
+
color: var(--qt-response-status-building-fg);
|
|
3142
|
+
border-color: color-mix(in srgb, var(--qt-response-status-building-fg) 30%, transparent);
|
|
3143
|
+
}
|
|
3144
|
+
|
|
3145
|
+
.qt-chat-response-status[data-stage="sending"] {
|
|
3146
|
+
color: var(--qt-response-status-sending-fg);
|
|
3147
|
+
border-color: color-mix(in srgb, var(--qt-response-status-sending-fg) 30%, transparent);
|
|
3148
|
+
}
|
|
3149
|
+
|
|
3150
|
+
.qt-chat-response-status[data-stage="streaming"] {
|
|
3151
|
+
color: var(--qt-response-status-streaming-fg);
|
|
3152
|
+
border-color: color-mix(in srgb, var(--qt-response-status-streaming-fg) 30%, transparent);
|
|
1853
3153
|
}
|
|
1854
3154
|
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
.qt-chat-announcement-dot {
|
|
1860
|
-
flex-shrink: 0;
|
|
1861
|
-
width: 0.5rem;
|
|
1862
|
-
height: 0.5rem;
|
|
1863
|
-
border-radius: 9999px;
|
|
1864
|
-
border: 1px solid transparent;
|
|
3155
|
+
.qt-chat-response-status[data-stage="regenerating"],
|
|
3156
|
+
.qt-chat-response-status[data-stage="saving"] {
|
|
3157
|
+
color: var(--qt-response-status-streaming-fg);
|
|
3158
|
+
border-color: color-mix(in srgb, var(--qt-response-status-streaming-fg) 30%, transparent);
|
|
1865
3159
|
}
|
|
1866
3160
|
|
|
1867
|
-
.qt-chat-
|
|
1868
|
-
|
|
3161
|
+
.qt-chat-response-status[data-stage="tool_executing"] {
|
|
3162
|
+
color: var(--qt-response-status-tool-fg);
|
|
3163
|
+
border-color: color-mix(in srgb, var(--qt-response-status-tool-fg) 30%, transparent);
|
|
1869
3164
|
}
|
|
1870
3165
|
|
|
1871
|
-
|
|
1872
|
-
|
|
3166
|
+
@keyframes qt-status-fade-in {
|
|
3167
|
+
from { opacity: 0; transform: translateY(-4px); }
|
|
3168
|
+
to { opacity: 1; transform: translateY(0); }
|
|
1873
3169
|
}
|
|
1874
3170
|
|
|
1875
|
-
|
|
1876
|
-
|
|
1877
|
-
|
|
3171
|
+
@media (prefers-reduced-motion: reduce) {
|
|
3172
|
+
.qt-chat-response-status { animation: none; }
|
|
3173
|
+
.qt-chat-response-status-icon .animate-pulse { animation: none; }
|
|
1878
3174
|
}
|
|
1879
3175
|
|
|
1880
3176
|
/**
|
|
1881
|
-
*
|
|
1882
|
-
*
|
|
1883
|
-
* that verdict is what the reader is looking for. Filled with the solid
|
|
1884
|
-
* --qt-alert-*-fg (the -border tints are alpha-thin and vanish at 8px); the
|
|
1885
|
-
* bar's leading accent below uses the -border tints, as .qt-pascal-result does.
|
|
3177
|
+
* Wardrobe action notice — inline summary of outfit changes.
|
|
3178
|
+
* Double border with warm amber/gold tones, distinct from whisper (dashed) and silent (dotted).
|
|
1886
3179
|
*/
|
|
1887
|
-
.qt-chat-
|
|
1888
|
-
background: var(--qt-
|
|
3180
|
+
.qt-chat-wardrobe-notice {
|
|
3181
|
+
background: var(--qt-chat-wardrobe-bg);
|
|
3182
|
+
color: var(--qt-chat-wardrobe-fg);
|
|
3183
|
+
border: 3px double var(--qt-chat-wardrobe-border);
|
|
3184
|
+
border-radius: var(--radius-md, 0.375rem);
|
|
3185
|
+
padding: 0.5rem 0.75rem;
|
|
3186
|
+
margin-bottom: 0.5rem;
|
|
3187
|
+
font-size: 0.8125rem;
|
|
3188
|
+
line-height: 1.4;
|
|
1889
3189
|
}
|
|
1890
3190
|
|
|
1891
|
-
.qt-chat-
|
|
1892
|
-
|
|
3191
|
+
.qt-chat-wardrobe-label {
|
|
3192
|
+
font-size: 0.6875rem;
|
|
3193
|
+
color: var(--qt-chat-wardrobe-label-fg);
|
|
3194
|
+
font-weight: 600;
|
|
3195
|
+
text-transform: uppercase;
|
|
3196
|
+
letter-spacing: 0.05em;
|
|
3197
|
+
margin-bottom: 0.25rem;
|
|
1893
3198
|
}
|
|
1894
3199
|
|
|
1895
|
-
.qt-chat-
|
|
1896
|
-
|
|
3200
|
+
.qt-chat-wardrobe-summary {
|
|
3201
|
+
color: var(--qt-chat-wardrobe-fg);
|
|
1897
3202
|
}
|
|
1898
3203
|
|
|
1899
|
-
|
|
1900
|
-
|
|
3204
|
+
/**
|
|
3205
|
+
* Status badges for silent/absent participants
|
|
3206
|
+
*/
|
|
3207
|
+
.qt-badge-silent {
|
|
3208
|
+
background: var(--qt-chat-silent-bg);
|
|
3209
|
+
color: var(--qt-chat-silent-label-fg);
|
|
3210
|
+
border: 1px solid var(--qt-chat-silent-border);
|
|
3211
|
+
border-radius: 9999px;
|
|
3212
|
+
padding: 0.125rem 0.5rem;
|
|
3213
|
+
font-weight: 600;
|
|
3214
|
+
font-size: 0.75rem;
|
|
3215
|
+
}
|
|
3216
|
+
|
|
3217
|
+
.qt-badge-absent {
|
|
3218
|
+
background: color-mix(in srgb, var(--color-muted) 40%, transparent);
|
|
3219
|
+
color: var(--color-muted-foreground);
|
|
3220
|
+
border: 1px solid var(--color-muted);
|
|
3221
|
+
border-radius: 9999px;
|
|
3222
|
+
padding: 0.125rem 0.5rem;
|
|
3223
|
+
font-weight: 600;
|
|
3224
|
+
font-size: 0.75rem;
|
|
3225
|
+
opacity: 0.8;
|
|
1901
3226
|
}
|
|
1902
3227
|
|
|
1903
3228
|
/**
|
|
1904
|
-
*
|
|
1905
|
-
*
|
|
1906
|
-
*
|
|
1907
|
-
* These compound selectors only restate that accent: .qt-pascal-result is
|
|
1908
|
-
* declared above, and both wrappers set `border` and `padding` SHORTHANDS at
|
|
1909
|
-
* equal specificity, so the plain family would lose on source order. Nothing
|
|
1910
|
-
* new is styled here — change the accent itself at .qt-pascal-result.
|
|
3229
|
+
* Status overlay on participant avatar — small icon badge in the
|
|
3230
|
+
* bottom-right corner, visible when sidebar is collapsed.
|
|
1911
3231
|
*/
|
|
1912
|
-
.qt-
|
|
1913
|
-
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
|
|
3232
|
+
.qt-participant-status-overlay {
|
|
3233
|
+
position: absolute;
|
|
3234
|
+
bottom: -0.125rem;
|
|
3235
|
+
right: -0.125rem;
|
|
3236
|
+
width: 1.125rem;
|
|
3237
|
+
height: 1.125rem;
|
|
3238
|
+
border-radius: 9999px;
|
|
3239
|
+
display: flex;
|
|
3240
|
+
align-items: center;
|
|
3241
|
+
justify-content: center;
|
|
3242
|
+
border: 1.5px solid var(--color-background);
|
|
3243
|
+
z-index: 2;
|
|
1917
3244
|
}
|
|
1918
3245
|
|
|
1919
|
-
.qt-
|
|
1920
|
-
|
|
1921
|
-
|
|
3246
|
+
.qt-participant-status-overlay-silent {
|
|
3247
|
+
background: var(--qt-chat-silent-border);
|
|
3248
|
+
color: white;
|
|
1922
3249
|
}
|
|
1923
3250
|
|
|
1924
|
-
.qt-
|
|
1925
|
-
|
|
1926
|
-
|
|
3251
|
+
.qt-participant-status-overlay-absent {
|
|
3252
|
+
background: var(--color-muted);
|
|
3253
|
+
color: var(--color-muted-foreground);
|
|
1927
3254
|
}
|
|
1928
3255
|
|
|
1929
|
-
.qt-
|
|
1930
|
-
|
|
1931
|
-
border-left-color: var(--qt-alert-error-border);
|
|
3256
|
+
.qt-participant-card-silent {
|
|
3257
|
+
border-color: var(--qt-chat-silent-border);
|
|
1932
3258
|
}
|
|
1933
3259
|
|
|
1934
|
-
.qt-chat-
|
|
1935
|
-
|
|
1936
|
-
|
|
3260
|
+
.qt-chat-composer {
|
|
3261
|
+
display: flex;
|
|
3262
|
+
align-items: flex-end;
|
|
3263
|
+
gap: 0.5rem;
|
|
3264
|
+
padding: 1rem;
|
|
3265
|
+
background-color: var(--color-background);
|
|
3266
|
+
border: 1px solid var(--color-border);
|
|
3267
|
+
border-radius: var(--radius-lg);
|
|
1937
3268
|
}
|
|
1938
3269
|
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
* posted as fact.
|
|
1951
|
-
* - .qt-chat-established-fact: the accent on a machine fact's bar/chip.
|
|
1952
|
-
* - .qt-chat-established-fact-row / -band: a machine fact renders as a
|
|
1953
|
-
* full-width band (no avatar) rather than a speech bubble.
|
|
1954
|
-
*/
|
|
1955
|
-
.qt-chat-composer-established-fact .qt-chat-composer-input {
|
|
1956
|
-
border-color: var(--color-ring);
|
|
1957
|
-
box-shadow: inset 0 0 0 1px var(--color-ring);
|
|
1958
|
-
background-image: linear-gradient(var(--qt-alert-info-bg), var(--qt-alert-info-bg));
|
|
3270
|
+
.qt-chat-composer-input {
|
|
3271
|
+
flex: 1;
|
|
3272
|
+
min-height: 2.5rem;
|
|
3273
|
+
padding: 0.5rem 0.75rem;
|
|
3274
|
+
background-color: transparent;
|
|
3275
|
+
border: none;
|
|
3276
|
+
resize: none;
|
|
3277
|
+
font-family: inherit;
|
|
3278
|
+
font-size: 0.875rem;
|
|
3279
|
+
line-height: 1.5;
|
|
3280
|
+
color: var(--color-foreground);
|
|
1959
3281
|
}
|
|
1960
3282
|
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
.qt-chat-message-established-fact {
|
|
1965
|
-
font-size: 0.75rem;
|
|
1966
|
-
font-weight: 600;
|
|
1967
|
-
font-variant-caps: all-small-caps;
|
|
1968
|
-
letter-spacing: 0.04em;
|
|
1969
|
-
color: inherit;
|
|
1970
|
-
margin-bottom: 0.25rem;
|
|
3283
|
+
.qt-chat-composer-input:focus,
|
|
3284
|
+
.qt-chat-composer-input:focus-within {
|
|
3285
|
+
outline: none;
|
|
1971
3286
|
}
|
|
1972
3287
|
|
|
1973
|
-
|
|
1974
|
-
.qt-
|
|
1975
|
-
|
|
1976
|
-
|
|
1977
|
-
|
|
3288
|
+
/* Composer action buttons: Send, the soft interrupt (raise a hand) and the
|
|
3289
|
+
hard Stop. Mirrors app/styles/qt-components/_chat.css. */
|
|
3290
|
+
.qt-chat-composer-actions {
|
|
3291
|
+
display: flex;
|
|
3292
|
+
flex-direction: column;
|
|
3293
|
+
align-items: center;
|
|
3294
|
+
gap: 0.375rem;
|
|
3295
|
+
flex-shrink: 0;
|
|
1978
3296
|
}
|
|
1979
3297
|
|
|
1980
|
-
.qt-chat-
|
|
1981
|
-
|
|
1982
|
-
|
|
3298
|
+
.qt-chat-composer-actions .qt-chat-composer-send {
|
|
3299
|
+
height: 2.5rem;
|
|
3300
|
+
width: 2.5rem;
|
|
1983
3301
|
}
|
|
1984
3302
|
|
|
1985
|
-
.qt-chat-
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
3303
|
+
.qt-chat-composer-send {
|
|
3304
|
+
display: inline-flex;
|
|
3305
|
+
align-items: center;
|
|
3306
|
+
justify-content: center;
|
|
3307
|
+
height: 3rem;
|
|
3308
|
+
width: 3rem;
|
|
3309
|
+
border-radius: 9999px;
|
|
3310
|
+
transition: all 200ms;
|
|
3311
|
+
cursor: pointer;
|
|
3312
|
+
background: var(--qt-button-primary-bg);
|
|
3313
|
+
color: var(--qt-button-primary-fg);
|
|
3314
|
+
box-shadow: var(--qt-button-primary-shadow);
|
|
3315
|
+
}
|
|
3316
|
+
|
|
3317
|
+
.qt-chat-composer-send:focus-visible {
|
|
3318
|
+
outline: none;
|
|
3319
|
+
box-shadow: 0 0 0 2px var(--color-background), 0 0 0 4px var(--color-ring);
|
|
3320
|
+
}
|
|
3321
|
+
|
|
3322
|
+
.qt-chat-composer-send:disabled {
|
|
3323
|
+
opacity: 0.5;
|
|
3324
|
+
cursor: not-allowed;
|
|
3325
|
+
}
|
|
3326
|
+
|
|
3327
|
+
.qt-chat-composer-send:hover:not(:disabled) {
|
|
3328
|
+
background: var(--qt-button-primary-hover-bg);
|
|
3329
|
+
}
|
|
3330
|
+
|
|
3331
|
+
.qt-chat-continue-button {
|
|
3332
|
+
background: var(--qt-status-info-bg);
|
|
3333
|
+
color: var(--qt-status-info-fg);
|
|
3334
|
+
border: 1px solid var(--qt-status-info-border);
|
|
3335
|
+
}
|
|
3336
|
+
|
|
3337
|
+
.qt-chat-stop-button {
|
|
3338
|
+
background: var(--qt-status-danger-bg);
|
|
3339
|
+
color: var(--qt-status-danger-fg);
|
|
3340
|
+
border: 1px solid var(--qt-status-danger-border);
|
|
3341
|
+
}
|
|
3342
|
+
|
|
3343
|
+
.qt-chat-stop-button:hover:not(:disabled) {
|
|
3344
|
+
background: color-mix(in srgb, var(--qt-status-danger-bg) 70%, black);
|
|
1991
3345
|
}
|
|
1992
3346
|
|
|
1993
|
-
|
|
1994
|
-
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
display: inline-flex;
|
|
1998
|
-
align-items: center;
|
|
1999
|
-
justify-content: center;
|
|
2000
|
-
width: 1.625rem;
|
|
2001
|
-
height: 1.625rem;
|
|
2002
|
-
padding: 0;
|
|
2003
|
-
border: 1px solid var(--color-border);
|
|
2004
|
-
border-radius: var(--radius-sm);
|
|
2005
|
-
background-color: color-mix(in srgb, var(--color-background) 82%, transparent);
|
|
2006
|
-
color: var(--color-foreground);
|
|
2007
|
-
cursor: pointer;
|
|
2008
|
-
opacity: 0.85;
|
|
2009
|
-
transition: opacity 150ms ease, border-color 150ms ease, box-shadow 150ms ease;
|
|
3347
|
+
.qt-chat-interrupt-button {
|
|
3348
|
+
background: var(--qt-status-warning-bg);
|
|
3349
|
+
color: var(--qt-status-warning-fg);
|
|
3350
|
+
border: 1px solid var(--qt-status-warning-border);
|
|
2010
3351
|
}
|
|
2011
3352
|
|
|
2012
|
-
.qt-chat-
|
|
2013
|
-
|
|
2014
|
-
opacity: 1;
|
|
3353
|
+
.qt-chat-interrupt-button:hover:not(:disabled) {
|
|
3354
|
+
background: color-mix(in srgb, var(--qt-status-warning-bg) 70%, black);
|
|
2015
3355
|
}
|
|
2016
3356
|
|
|
2017
|
-
.qt-chat-
|
|
2018
|
-
|
|
2019
|
-
|
|
3357
|
+
.qt-chat-interrupt-button-raised {
|
|
3358
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--qt-status-warning-border) 45%, transparent);
|
|
3359
|
+
animation: qt-hand-raised-pulse 1.6s ease-in-out infinite;
|
|
2020
3360
|
}
|
|
2021
3361
|
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
box-shadow: inset 0 0 0 1px var(--color-ring);
|
|
2026
|
-
background-image: linear-gradient(var(--qt-alert-info-bg), var(--qt-alert-info-bg));
|
|
3362
|
+
@keyframes qt-hand-raised-pulse {
|
|
3363
|
+
0%, 100% { box-shadow: 0 0 0 3px color-mix(in srgb, var(--qt-status-warning-border) 45%, transparent); }
|
|
3364
|
+
50% { box-shadow: 0 0 0 6px color-mix(in srgb, var(--qt-status-warning-border) 15%, transparent); }
|
|
2027
3365
|
}
|
|
2028
3366
|
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
opacity: 0.5;
|
|
3367
|
+
@media (prefers-reduced-motion: reduce) {
|
|
3368
|
+
.qt-chat-interrupt-button-raised { animation: none; }
|
|
2032
3369
|
}
|
|
2033
3370
|
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
border: 2px dotted var(--qt-chat-silent-border);
|
|
2042
|
-
font-style: italic;
|
|
3371
|
+
/* Composer punctuation warnings — painted by PunctuationLintPlugin through the
|
|
3372
|
+
CSS Custom Highlight API, so no element carries a class. Only background and
|
|
3373
|
+
text-decoration are styleable on a ::highlight. */
|
|
3374
|
+
::highlight(qt-punctuation-warning) {
|
|
3375
|
+
background-color: var(--qt-punctuation-warning-bg);
|
|
3376
|
+
text-decoration: underline wavy var(--qt-punctuation-warning-underline);
|
|
3377
|
+
text-decoration-thickness: 2px;
|
|
2043
3378
|
}
|
|
2044
3379
|
|
|
2045
|
-
.
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
|
|
3380
|
+
/* Prose mode (a template like Novel: unmarked narration, quoted dialogue).
|
|
3381
|
+
The no-dialogue tint covers every narrated run while the draft has no
|
|
3382
|
+
dialogue at all; the preview marks narration and ((asides)) the way the
|
|
3383
|
+
rendered message will set them. ::highlight cannot set font-style, so
|
|
3384
|
+
narration is told apart by colour rather than italics. */
|
|
3385
|
+
::highlight(qt-punctuation-no-dialogue) {
|
|
3386
|
+
background-color: var(--qt-punctuation-no-dialogue-bg);
|
|
3387
|
+
text-decoration: underline dotted var(--qt-punctuation-no-dialogue-underline);
|
|
3388
|
+
text-decoration-thickness: 2px;
|
|
2050
3389
|
}
|
|
2051
3390
|
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
* Two states, one bubble. Before the first token the old line is still there
|
|
2056
|
-
* but visibly out of service (dimmed, desaturated, unselectable) under a plate
|
|
2057
|
-
* that says what is happening. From the first token the plate and the old line
|
|
2058
|
-
* are both gone and the new prose streams in their place.
|
|
2059
|
-
*/
|
|
2060
|
-
.qt-chat-message-regenerating {
|
|
2061
|
-
border-color: color-mix(in srgb, var(--qt-response-status-streaming-fg) 45%, transparent);
|
|
3391
|
+
::highlight(qt-composer-narration) {
|
|
3392
|
+
color: var(--qt-composer-narration-fg);
|
|
3393
|
+
background-color: var(--qt-composer-narration-bg);
|
|
2062
3394
|
}
|
|
2063
3395
|
|
|
2064
|
-
|
|
3396
|
+
::highlight(qt-composer-ooc) {
|
|
3397
|
+
color: var(--qt-composer-ooc-fg);
|
|
3398
|
+
background-color: var(--qt-composer-ooc-bg);
|
|
3399
|
+
}
|
|
3400
|
+
|
|
3401
|
+
/* Lexical editor rich text node styles */
|
|
3402
|
+
.qt-lexical-contenteditable {
|
|
3403
|
+
overflow-y: auto;
|
|
2065
3404
|
position: relative;
|
|
2066
3405
|
}
|
|
2067
3406
|
|
|
2068
|
-
.qt-
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
pointer-events: none;
|
|
2072
|
-
user-select: none;
|
|
3407
|
+
.qt-lexical-contenteditable [contenteditable] {
|
|
3408
|
+
outline: none;
|
|
3409
|
+
min-height: 1.5em;
|
|
2073
3410
|
}
|
|
2074
3411
|
|
|
2075
|
-
.qt-
|
|
3412
|
+
.qt-lexical-placeholder {
|
|
3413
|
+
color: var(--color-muted-foreground);
|
|
3414
|
+
font-size: 0.875rem;
|
|
3415
|
+
pointer-events: none;
|
|
2076
3416
|
position: absolute;
|
|
2077
|
-
|
|
2078
|
-
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
|
|
2082
|
-
|
|
3417
|
+
top: 0;
|
|
3418
|
+
left: 0;
|
|
3419
|
+
padding: var(--qt-input-padding-y, 0.5rem) var(--qt-input-padding-x, 0.75rem);
|
|
3420
|
+
overflow: hidden;
|
|
3421
|
+
text-overflow: ellipsis;
|
|
3422
|
+
white-space: nowrap;
|
|
2083
3423
|
}
|
|
2084
3424
|
|
|
2085
|
-
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
.qt-chat-regenerating-plate-text {
|
|
2089
|
-
color: var(--qt-chat-regenerating-plate-fg, var(--qt-chat-assistant-fg, var(--color-foreground)));
|
|
2090
|
-
font-size: 0.875rem;
|
|
2091
|
-
line-height: 1.25rem;
|
|
2092
|
-
font-weight: 500;
|
|
2093
|
-
padding: 0.375rem 0.75rem;
|
|
2094
|
-
border-radius: 0.375rem;
|
|
2095
|
-
background: color-mix(in srgb, var(--qt-chat-assistant-bg) 88%, transparent);
|
|
2096
|
-
border: 1px solid color-mix(in srgb, var(--qt-response-status-streaming-fg) 35%, transparent);
|
|
2097
|
-
letter-spacing: 0.02em;
|
|
3425
|
+
.qt-lexical-root {
|
|
3426
|
+
outline: none;
|
|
3427
|
+
min-height: 1.5em;
|
|
2098
3428
|
}
|
|
2099
3429
|
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
* regenerate, swipe arrows) along the bottom of a bubble.
|
|
2103
|
-
*/
|
|
2104
|
-
.qt-chat-message-action-bar {
|
|
2105
|
-
display: flex;
|
|
2106
|
-
align-items: center;
|
|
2107
|
-
gap: 0.75rem;
|
|
2108
|
-
margin-top: 0.5rem;
|
|
2109
|
-
padding-top: 0.5rem;
|
|
2110
|
-
border-top: 1px solid color-mix(in srgb, var(--color-border) 50%, transparent);
|
|
3430
|
+
.qt-lexical-paragraph {
|
|
3431
|
+
margin: 0;
|
|
2111
3432
|
}
|
|
2112
3433
|
|
|
2113
|
-
.qt-
|
|
2114
|
-
|
|
2115
|
-
align-items: center;
|
|
2116
|
-
gap: 0.25rem;
|
|
3434
|
+
.qt-lexical-bold {
|
|
3435
|
+
font-weight: 700;
|
|
2117
3436
|
}
|
|
2118
3437
|
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
pointer-events: none;
|
|
2122
|
-
opacity: 0.4;
|
|
3438
|
+
.qt-lexical-italic {
|
|
3439
|
+
font-style: italic;
|
|
2123
3440
|
}
|
|
2124
3441
|
|
|
2125
|
-
.qt-
|
|
2126
|
-
|
|
2127
|
-
border-radius: 0.25rem;
|
|
2128
|
-
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
|
2129
|
-
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
2130
|
-
transition-duration: 150ms;
|
|
2131
|
-
color: var(--color-muted-foreground);
|
|
2132
|
-
cursor: pointer;
|
|
3442
|
+
.qt-lexical-underline {
|
|
3443
|
+
text-decoration: underline;
|
|
2133
3444
|
}
|
|
2134
3445
|
|
|
2135
|
-
.qt-
|
|
2136
|
-
|
|
2137
|
-
background: color-mix(in srgb, var(--color-muted) 50%, transparent);
|
|
3446
|
+
.qt-lexical-strikethrough {
|
|
3447
|
+
text-decoration: line-through;
|
|
2138
3448
|
}
|
|
2139
3449
|
|
|
2140
|
-
.qt-
|
|
2141
|
-
|
|
2142
|
-
|
|
3450
|
+
.qt-lexical-code {
|
|
3451
|
+
font-family: monospace;
|
|
3452
|
+
font-size: 0.75rem;
|
|
3453
|
+
background: rgba(0, 0, 0, 0.1);
|
|
3454
|
+
padding: 0.1em 0.3em;
|
|
3455
|
+
border-radius: 0.2em;
|
|
2143
3456
|
}
|
|
2144
3457
|
|
|
2145
|
-
.qt-
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
|
|
3458
|
+
.qt-lexical-h1 {
|
|
3459
|
+
font-size: 1.25rem;
|
|
3460
|
+
font-weight: bold;
|
|
3461
|
+
margin: 0.5em 0 0.25em;
|
|
2149
3462
|
}
|
|
2150
3463
|
|
|
2151
|
-
|
|
2152
|
-
|
|
2153
|
-
|
|
3464
|
+
.qt-lexical-h2 {
|
|
3465
|
+
font-size: 1.125rem;
|
|
3466
|
+
font-weight: bold;
|
|
3467
|
+
margin: 0.4em 0 0.2em;
|
|
2154
3468
|
}
|
|
2155
3469
|
|
|
2156
|
-
.qt-
|
|
2157
|
-
|
|
3470
|
+
.qt-lexical-h3 {
|
|
3471
|
+
font-size: 1rem;
|
|
3472
|
+
font-weight: 600;
|
|
3473
|
+
margin: 0.3em 0 0.15em;
|
|
2158
3474
|
}
|
|
2159
3475
|
|
|
2160
|
-
.qt-
|
|
2161
|
-
|
|
2162
|
-
|
|
3476
|
+
.qt-lexical-h4 {
|
|
3477
|
+
font-size: 0.875rem;
|
|
3478
|
+
font-weight: 600;
|
|
3479
|
+
margin: 0.25em 0 0.1em;
|
|
2163
3480
|
}
|
|
2164
3481
|
|
|
2165
|
-
.qt-
|
|
2166
|
-
|
|
2167
|
-
|
|
3482
|
+
.qt-lexical-h5 {
|
|
3483
|
+
font-size: 0.75rem;
|
|
3484
|
+
font-weight: 600;
|
|
3485
|
+
margin: 0.2em 0 0.1em;
|
|
2168
3486
|
}
|
|
2169
3487
|
|
|
2170
|
-
.qt-
|
|
3488
|
+
.qt-lexical-h6 {
|
|
2171
3489
|
font-size: 0.75rem;
|
|
2172
|
-
|
|
2173
|
-
|
|
2174
|
-
margin-left: auto;
|
|
3490
|
+
font-weight: 500;
|
|
3491
|
+
margin: 0.2em 0 0.1em;
|
|
2175
3492
|
}
|
|
2176
3493
|
|
|
2177
|
-
.qt-
|
|
2178
|
-
|
|
3494
|
+
.qt-lexical-ul {
|
|
3495
|
+
list-style-type: disc;
|
|
3496
|
+
padding-left: 1.5rem;
|
|
3497
|
+
margin: 0.25em 0;
|
|
2179
3498
|
}
|
|
2180
3499
|
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
*/
|
|
2186
|
-
.qt-chat-response-status {
|
|
2187
|
-
display: flex;
|
|
2188
|
-
align-items: center;
|
|
2189
|
-
gap: 0.5rem;
|
|
2190
|
-
padding: 0.375rem 0.75rem;
|
|
2191
|
-
font-size: 0.875rem;
|
|
2192
|
-
line-height: 1.25rem;
|
|
2193
|
-
margin-bottom: 0.5rem;
|
|
2194
|
-
border-radius: 0.375rem;
|
|
2195
|
-
background: var(--qt-response-status-bg);
|
|
2196
|
-
color: var(--qt-response-status-fg);
|
|
2197
|
-
border: 1px solid var(--qt-response-status-border);
|
|
2198
|
-
animation: qt-status-fade-in 150ms ease-out;
|
|
3500
|
+
.qt-lexical-ol {
|
|
3501
|
+
list-style-type: decimal;
|
|
3502
|
+
padding-left: 1.5rem;
|
|
3503
|
+
margin: 0.25em 0;
|
|
2199
3504
|
}
|
|
2200
3505
|
|
|
2201
|
-
.qt-
|
|
2202
|
-
|
|
2203
|
-
width: 1rem;
|
|
2204
|
-
height: 1rem;
|
|
3506
|
+
.qt-lexical-li {
|
|
3507
|
+
margin: 0.1em 0;
|
|
2205
3508
|
}
|
|
2206
3509
|
|
|
2207
|
-
|
|
2208
|
-
|
|
3510
|
+
/*
|
|
3511
|
+
* Wrapper item for a sub-list. Lexical represents nesting as a list item whose
|
|
3512
|
+
* only child is another list, so this <li> is structure rather than content —
|
|
3513
|
+
* left to itself it draws the parent list's bullet right beside the sub-list's
|
|
3514
|
+
* own first bullet.
|
|
3515
|
+
*/
|
|
3516
|
+
.qt-lexical-li-nested {
|
|
3517
|
+
list-style-type: none;
|
|
3518
|
+
margin: 0;
|
|
2209
3519
|
}
|
|
2210
3520
|
|
|
2211
|
-
.qt-
|
|
2212
|
-
|
|
2213
|
-
|
|
3521
|
+
.qt-lexical-li-nested::before,
|
|
3522
|
+
.qt-lexical-li-nested::after {
|
|
3523
|
+
display: none;
|
|
2214
3524
|
}
|
|
2215
3525
|
|
|
2216
|
-
|
|
2217
|
-
|
|
2218
|
-
|
|
3526
|
+
/* Checklist items */
|
|
3527
|
+
.qt-lexical-checklist {
|
|
3528
|
+
list-style: none;
|
|
3529
|
+
padding-left: 0;
|
|
2219
3530
|
}
|
|
2220
3531
|
|
|
2221
|
-
.qt-
|
|
2222
|
-
|
|
2223
|
-
|
|
3532
|
+
.qt-lexical-li-checked,
|
|
3533
|
+
.qt-lexical-li-unchecked {
|
|
3534
|
+
position: relative;
|
|
3535
|
+
padding-left: 1.5rem;
|
|
3536
|
+
list-style: none;
|
|
3537
|
+
margin: 0.15em 0;
|
|
2224
3538
|
}
|
|
2225
3539
|
|
|
2226
|
-
.qt-
|
|
2227
|
-
|
|
2228
|
-
|
|
3540
|
+
.qt-lexical-li-checked::before,
|
|
3541
|
+
.qt-lexical-li-unchecked::before {
|
|
3542
|
+
content: '';
|
|
3543
|
+
position: absolute;
|
|
3544
|
+
left: 0;
|
|
3545
|
+
top: 0.25rem;
|
|
3546
|
+
width: 1rem;
|
|
3547
|
+
height: 1rem;
|
|
3548
|
+
border-radius: 0.25rem;
|
|
3549
|
+
border: 1px solid var(--qt-border-color, var(--color-border));
|
|
3550
|
+
cursor: pointer;
|
|
2229
3551
|
}
|
|
2230
3552
|
|
|
2231
|
-
.qt-
|
|
2232
|
-
|
|
2233
|
-
border-color:
|
|
3553
|
+
.qt-lexical-li-checked::before {
|
|
3554
|
+
background: var(--color-primary);
|
|
3555
|
+
border-color: var(--color-primary);
|
|
3556
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='white'%3E%3Cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3E%3C/svg%3E");
|
|
3557
|
+
background-size: 12px 12px;
|
|
3558
|
+
background-position: center;
|
|
3559
|
+
background-repeat: no-repeat;
|
|
2234
3560
|
}
|
|
2235
3561
|
|
|
2236
|
-
.qt-
|
|
2237
|
-
.
|
|
2238
|
-
|
|
2239
|
-
border-color: color-mix(in srgb, var(--qt-response-status-streaming-fg) 30%, transparent);
|
|
3562
|
+
.qt-lexical-li-checked {
|
|
3563
|
+
opacity: 0.6;
|
|
3564
|
+
text-decoration: line-through;
|
|
2240
3565
|
}
|
|
2241
3566
|
|
|
2242
|
-
.qt-
|
|
2243
|
-
|
|
2244
|
-
|
|
3567
|
+
.qt-lexical-blockquote {
|
|
3568
|
+
border-left: 4px solid rgba(0, 0, 0, 0.2);
|
|
3569
|
+
padding-left: 0.75rem;
|
|
3570
|
+
font-style: italic;
|
|
3571
|
+
margin: 0.25em 0;
|
|
2245
3572
|
}
|
|
2246
3573
|
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
3574
|
+
.qt-lexical-link {
|
|
3575
|
+
text-decoration: underline;
|
|
3576
|
+
color: var(--color-primary);
|
|
2250
3577
|
}
|
|
2251
3578
|
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
3579
|
+
.qt-lexical-code-block {
|
|
3580
|
+
font-family: monospace;
|
|
3581
|
+
font-size: 0.75rem;
|
|
3582
|
+
background: rgba(0, 0, 0, 0.15);
|
|
3583
|
+
padding: 0.5em 0.75em;
|
|
3584
|
+
border-radius: 0.3em;
|
|
3585
|
+
margin: 0.25em 0;
|
|
3586
|
+
overflow-x: auto;
|
|
3587
|
+
tab-size: 2;
|
|
2255
3588
|
}
|
|
2256
3589
|
|
|
3590
|
+
/* ==========================================================================
|
|
3591
|
+
CHAT MESSAGE LINKS
|
|
3592
|
+
========================================================================== */
|
|
3593
|
+
|
|
2257
3594
|
/**
|
|
2258
|
-
*
|
|
2259
|
-
*
|
|
3595
|
+
* Links inside rendered chat messages must be visibly clickable. The default
|
|
3596
|
+
* .qt-link decoration is `none`, which leaves markdown links indistinguishable
|
|
3597
|
+
* from surrounding prose. Force a colored, underlined treatment in this scope.
|
|
2260
3598
|
*/
|
|
2261
|
-
.qt-chat-
|
|
2262
|
-
|
|
2263
|
-
color: var(--qt-
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
padding: 0.5rem 0.75rem;
|
|
2267
|
-
margin-bottom: 0.5rem;
|
|
2268
|
-
font-size: 0.8125rem;
|
|
2269
|
-
line-height: 1.4;
|
|
3599
|
+
.qt-chat-message-content a,
|
|
3600
|
+
.qt-chat-message-content a.qt-link {
|
|
3601
|
+
color: var(--qt-link-color, var(--color-primary));
|
|
3602
|
+
text-decoration: underline;
|
|
3603
|
+
text-underline-offset: 2px;
|
|
2270
3604
|
}
|
|
2271
|
-
|
|
2272
|
-
.qt-chat-
|
|
2273
|
-
|
|
2274
|
-
|
|
2275
|
-
font-weight: 600;
|
|
2276
|
-
text-transform: uppercase;
|
|
2277
|
-
letter-spacing: 0.05em;
|
|
2278
|
-
margin-bottom: 0.25rem;
|
|
3605
|
+
.qt-chat-message-content a:hover,
|
|
3606
|
+
.qt-chat-message-content a.qt-link:hover {
|
|
3607
|
+
color: var(--qt-link-hover-color, var(--color-primary));
|
|
3608
|
+
text-decoration: underline;
|
|
2279
3609
|
}
|
|
2280
3610
|
|
|
2281
|
-
|
|
2282
|
-
|
|
2283
|
-
|
|
3611
|
+
/* ==========================================================================
|
|
3612
|
+
DOCUMENT MODE - Split-panel layout (Scriptorium Phase 3.5)
|
|
3613
|
+
========================================================================== */
|
|
2284
3614
|
|
|
2285
3615
|
/**
|
|
2286
|
-
*
|
|
3616
|
+
* Split layout container for Document Mode
|
|
3617
|
+
* Wraps the chat pane + divider + document pane inside .qt-chat-main
|
|
2287
3618
|
*/
|
|
2288
|
-
.qt-
|
|
2289
|
-
|
|
2290
|
-
|
|
2291
|
-
|
|
2292
|
-
|
|
2293
|
-
padding: 0.125rem 0.5rem;
|
|
2294
|
-
font-weight: 600;
|
|
2295
|
-
font-size: 0.75rem;
|
|
3619
|
+
.qt-doc-split-layout {
|
|
3620
|
+
display: flex;
|
|
3621
|
+
flex-direction: row;
|
|
3622
|
+
height: 100%;
|
|
3623
|
+
overflow: hidden;
|
|
2296
3624
|
}
|
|
2297
3625
|
|
|
2298
|
-
|
|
2299
|
-
|
|
2300
|
-
|
|
2301
|
-
|
|
2302
|
-
|
|
2303
|
-
|
|
2304
|
-
|
|
2305
|
-
|
|
2306
|
-
|
|
3626
|
+
/**
|
|
3627
|
+
* Chat pane in split mode
|
|
3628
|
+
* Min-width prevents the chat from becoming unusable
|
|
3629
|
+
*/
|
|
3630
|
+
.qt-doc-chat-pane {
|
|
3631
|
+
display: flex;
|
|
3632
|
+
flex-direction: column;
|
|
3633
|
+
height: 100%;
|
|
3634
|
+
overflow: hidden;
|
|
3635
|
+
min-width: 320px;
|
|
2307
3636
|
}
|
|
2308
3637
|
|
|
2309
3638
|
/**
|
|
2310
|
-
*
|
|
2311
|
-
*
|
|
3639
|
+
* Draggable divider between chat and document panes
|
|
3640
|
+
* 6px wide handle with a visible grip indicator
|
|
2312
3641
|
*/
|
|
2313
|
-
.qt-
|
|
2314
|
-
|
|
2315
|
-
|
|
2316
|
-
right: -0.125rem;
|
|
2317
|
-
width: 1.125rem;
|
|
2318
|
-
height: 1.125rem;
|
|
2319
|
-
border-radius: 9999px;
|
|
3642
|
+
.qt-doc-divider {
|
|
3643
|
+
flex-shrink: 0;
|
|
3644
|
+
height: 100%;
|
|
2320
3645
|
display: flex;
|
|
2321
3646
|
align-items: center;
|
|
2322
3647
|
justify-content: center;
|
|
2323
|
-
|
|
2324
|
-
|
|
2325
|
-
|
|
2326
|
-
|
|
2327
|
-
|
|
2328
|
-
|
|
2329
|
-
color: white;
|
|
2330
|
-
}
|
|
2331
|
-
|
|
2332
|
-
.qt-participant-status-overlay-absent {
|
|
2333
|
-
background: var(--color-muted);
|
|
2334
|
-
color: var(--color-muted-foreground);
|
|
3648
|
+
width: 6px;
|
|
3649
|
+
cursor: col-resize;
|
|
3650
|
+
background: var(--color-border);
|
|
3651
|
+
transition: background 0.15s ease;
|
|
3652
|
+
user-select: none;
|
|
3653
|
+
touch-action: none;
|
|
2335
3654
|
}
|
|
2336
3655
|
|
|
2337
|
-
.qt-
|
|
2338
|
-
|
|
3656
|
+
.qt-doc-divider:hover,
|
|
3657
|
+
.qt-doc-divider.qt-doc-divider-active {
|
|
3658
|
+
background: var(--color-primary);
|
|
2339
3659
|
}
|
|
2340
3660
|
|
|
2341
|
-
|
|
3661
|
+
/** Grip dots indicator on the divider */
|
|
3662
|
+
.qt-doc-divider-grip {
|
|
2342
3663
|
display: flex;
|
|
2343
|
-
|
|
2344
|
-
gap: 0.
|
|
2345
|
-
padding: 1rem;
|
|
2346
|
-
background-color: var(--color-background);
|
|
2347
|
-
border: 1px solid var(--color-border);
|
|
2348
|
-
border-radius: var(--radius-lg);
|
|
3664
|
+
flex-direction: column;
|
|
3665
|
+
gap: 0.25rem;
|
|
2349
3666
|
}
|
|
2350
3667
|
|
|
2351
|
-
.qt-
|
|
2352
|
-
|
|
2353
|
-
|
|
2354
|
-
|
|
2355
|
-
|
|
2356
|
-
|
|
2357
|
-
resize: none;
|
|
2358
|
-
font-family: inherit;
|
|
2359
|
-
font-size: 0.875rem;
|
|
2360
|
-
line-height: 1.5;
|
|
2361
|
-
color: var(--color-foreground);
|
|
3668
|
+
.qt-doc-divider-grip span {
|
|
3669
|
+
display: block;
|
|
3670
|
+
width: 3px;
|
|
3671
|
+
height: 3px;
|
|
3672
|
+
border-radius: 50%;
|
|
3673
|
+
background: var(--color-muted-foreground);
|
|
2362
3674
|
}
|
|
2363
3675
|
|
|
2364
|
-
.qt-
|
|
2365
|
-
.qt-
|
|
2366
|
-
|
|
3676
|
+
.qt-doc-divider:hover .qt-doc-divider-grip span,
|
|
3677
|
+
.qt-doc-divider.qt-doc-divider-active .qt-doc-divider-grip span {
|
|
3678
|
+
background: var(--qt-primary-fg, var(--color-primary-foreground));
|
|
2367
3679
|
}
|
|
2368
3680
|
|
|
2369
|
-
|
|
2370
|
-
|
|
2371
|
-
|
|
3681
|
+
/**
|
|
3682
|
+
* Document pane container
|
|
3683
|
+
* Sits to the right of the divider in split mode
|
|
3684
|
+
*/
|
|
3685
|
+
.qt-doc-pane {
|
|
2372
3686
|
display: flex;
|
|
2373
3687
|
flex-direction: column;
|
|
2374
|
-
|
|
2375
|
-
|
|
2376
|
-
|
|
2377
|
-
|
|
2378
|
-
|
|
2379
|
-
.qt-chat-composer-actions .qt-chat-composer-send {
|
|
2380
|
-
height: 2.5rem;
|
|
2381
|
-
width: 2.5rem;
|
|
2382
|
-
}
|
|
2383
|
-
|
|
2384
|
-
.qt-chat-composer-send {
|
|
2385
|
-
display: inline-flex;
|
|
2386
|
-
align-items: center;
|
|
2387
|
-
justify-content: center;
|
|
2388
|
-
height: 3rem;
|
|
2389
|
-
width: 3rem;
|
|
2390
|
-
border-radius: 9999px;
|
|
2391
|
-
transition: all 200ms;
|
|
2392
|
-
cursor: pointer;
|
|
2393
|
-
background: var(--qt-button-primary-bg);
|
|
2394
|
-
color: var(--qt-button-primary-fg);
|
|
2395
|
-
box-shadow: var(--qt-button-primary-shadow);
|
|
3688
|
+
height: 100%;
|
|
3689
|
+
overflow: hidden;
|
|
3690
|
+
min-width: 360px;
|
|
3691
|
+
background: color-mix(in srgb, var(--qt-content-bg) 92%, transparent);
|
|
3692
|
+
border-left: 1px solid var(--color-border);
|
|
2396
3693
|
}
|
|
2397
3694
|
|
|
2398
|
-
|
|
2399
|
-
|
|
2400
|
-
|
|
3695
|
+
/**
|
|
3696
|
+
* Vertical (top/bottom) split inside the right pane — used when both
|
|
3697
|
+
* Document Mode and Terminal Mode are active. Document on top, terminal
|
|
3698
|
+
* on bottom, with a draggable horizontal divider between them.
|
|
3699
|
+
*/
|
|
3700
|
+
.qt-doc-vertical-split-layout {
|
|
3701
|
+
display: flex;
|
|
3702
|
+
flex-direction: column;
|
|
3703
|
+
height: 100%;
|
|
3704
|
+
width: 100%;
|
|
3705
|
+
overflow: hidden;
|
|
2401
3706
|
}
|
|
2402
3707
|
|
|
2403
|
-
.qt-
|
|
2404
|
-
|
|
2405
|
-
|
|
3708
|
+
.qt-doc-vertical-pane {
|
|
3709
|
+
display: flex;
|
|
3710
|
+
flex-direction: column;
|
|
3711
|
+
width: 100%;
|
|
3712
|
+
overflow: hidden;
|
|
3713
|
+
min-height: 200px;
|
|
2406
3714
|
}
|
|
2407
3715
|
|
|
2408
|
-
.qt-
|
|
2409
|
-
|
|
3716
|
+
.qt-doc-vertical-divider {
|
|
3717
|
+
flex-shrink: 0;
|
|
3718
|
+
width: 100%;
|
|
3719
|
+
display: flex;
|
|
3720
|
+
align-items: center;
|
|
3721
|
+
justify-content: center;
|
|
3722
|
+
height: 6px;
|
|
3723
|
+
cursor: row-resize;
|
|
3724
|
+
background: var(--color-border);
|
|
3725
|
+
transition: background 0.15s ease;
|
|
3726
|
+
user-select: none;
|
|
3727
|
+
touch-action: none;
|
|
2410
3728
|
}
|
|
2411
3729
|
|
|
2412
|
-
.qt-
|
|
2413
|
-
|
|
2414
|
-
|
|
2415
|
-
border: 1px solid var(--qt-status-info-border);
|
|
3730
|
+
.qt-doc-vertical-divider:hover,
|
|
3731
|
+
.qt-doc-vertical-divider.qt-doc-vertical-divider-active {
|
|
3732
|
+
background: var(--color-primary);
|
|
2416
3733
|
}
|
|
2417
3734
|
|
|
2418
|
-
.qt-
|
|
2419
|
-
|
|
2420
|
-
|
|
2421
|
-
|
|
3735
|
+
.qt-doc-vertical-divider-grip {
|
|
3736
|
+
display: flex;
|
|
3737
|
+
flex-direction: row;
|
|
3738
|
+
gap: 0.25rem;
|
|
2422
3739
|
}
|
|
2423
3740
|
|
|
2424
|
-
.qt-
|
|
2425
|
-
|
|
3741
|
+
.qt-doc-vertical-divider-grip span {
|
|
3742
|
+
display: block;
|
|
3743
|
+
width: 3px;
|
|
3744
|
+
height: 3px;
|
|
3745
|
+
border-radius: 50%;
|
|
3746
|
+
background: var(--color-muted-foreground);
|
|
2426
3747
|
}
|
|
2427
3748
|
|
|
2428
|
-
.qt-
|
|
2429
|
-
|
|
2430
|
-
|
|
2431
|
-
border: 1px solid var(--qt-status-warning-border);
|
|
3749
|
+
.qt-doc-vertical-divider:hover .qt-doc-vertical-divider-grip span,
|
|
3750
|
+
.qt-doc-vertical-divider.qt-doc-vertical-divider-active .qt-doc-vertical-divider-grip span {
|
|
3751
|
+
background: var(--qt-primary-fg, var(--color-primary-foreground));
|
|
2432
3752
|
}
|
|
2433
3753
|
|
|
2434
|
-
|
|
2435
|
-
|
|
3754
|
+
/**
|
|
3755
|
+
* Focus mode — document pane fills the entire main area
|
|
3756
|
+
* Chat pane is hidden
|
|
3757
|
+
*/
|
|
3758
|
+
.qt-doc-focus-mode .qt-doc-editor-area {
|
|
3759
|
+
max-width: 640px;
|
|
3760
|
+
margin-left: auto;
|
|
3761
|
+
margin-right: auto;
|
|
2436
3762
|
}
|
|
2437
3763
|
|
|
2438
|
-
|
|
2439
|
-
|
|
2440
|
-
|
|
3764
|
+
/**
|
|
3765
|
+
* Document header bar
|
|
3766
|
+
* Contains title, badges, and mode toggle buttons
|
|
3767
|
+
*/
|
|
3768
|
+
.qt-doc-header {
|
|
3769
|
+
display: flex;
|
|
3770
|
+
align-items: center;
|
|
3771
|
+
gap: 0.5rem;
|
|
3772
|
+
padding-left: 1rem;
|
|
3773
|
+
padding-right: 1rem;
|
|
3774
|
+
padding-top: 0.5rem;
|
|
3775
|
+
padding-bottom: 0.5rem;
|
|
3776
|
+
flex-shrink: 0;
|
|
3777
|
+
border-bottom: 1px solid var(--color-border);
|
|
3778
|
+
background: color-mix(in srgb, var(--qt-content-bg) 95%, transparent);
|
|
2441
3779
|
}
|
|
2442
3780
|
|
|
2443
|
-
|
|
2444
|
-
|
|
2445
|
-
|
|
3781
|
+
/** Green "Document" badge in the header */
|
|
3782
|
+
.qt-doc-badge {
|
|
3783
|
+
display: inline-flex;
|
|
3784
|
+
align-items: center;
|
|
3785
|
+
padding-left: 0.5rem;
|
|
3786
|
+
padding-right: 0.5rem;
|
|
3787
|
+
padding-top: 0.125rem;
|
|
3788
|
+
padding-bottom: 0.125rem;
|
|
3789
|
+
border-radius: 9999px;
|
|
3790
|
+
font-size: 0.75rem;
|
|
3791
|
+
line-height: 1rem;
|
|
3792
|
+
font-weight: 500;
|
|
3793
|
+
background: var(--qt-success-bg, color-mix(in srgb, #22c55e 15%, var(--qt-content-bg)));
|
|
3794
|
+
color: var(--qt-success-fg, #22c55e);
|
|
2446
3795
|
}
|
|
2447
3796
|
|
|
2448
|
-
|
|
2449
|
-
|
|
3797
|
+
/** Editable document title in the header */
|
|
3798
|
+
.qt-doc-title {
|
|
3799
|
+
flex: 1 1 0%;
|
|
3800
|
+
font-size: 0.875rem;
|
|
3801
|
+
line-height: 1.25rem;
|
|
3802
|
+
font-weight: 500;
|
|
3803
|
+
overflow: hidden;
|
|
3804
|
+
text-overflow: ellipsis;
|
|
3805
|
+
white-space: nowrap;
|
|
3806
|
+
color: var(--color-foreground);
|
|
2450
3807
|
}
|
|
2451
3808
|
|
|
2452
|
-
|
|
2453
|
-
|
|
2454
|
-
|
|
2455
|
-
|
|
2456
|
-
|
|
2457
|
-
|
|
2458
|
-
|
|
3809
|
+
.qt-doc-title-input {
|
|
3810
|
+
font-size: 0.875rem;
|
|
3811
|
+
line-height: 1.25rem;
|
|
3812
|
+
font-weight: 500;
|
|
3813
|
+
width: 100%;
|
|
3814
|
+
background-color: transparent;
|
|
3815
|
+
border-width: 0 0 1px;
|
|
3816
|
+
border-style: dashed;
|
|
3817
|
+
border-color: var(--color-border);
|
|
3818
|
+
color: var(--color-foreground);
|
|
3819
|
+
outline: none;
|
|
2459
3820
|
}
|
|
2460
3821
|
|
|
2461
|
-
|
|
2462
|
-
|
|
2463
|
-
dialogue at all; the preview marks narration and ((asides)) the way the
|
|
2464
|
-
rendered message will set them. ::highlight cannot set font-style, so
|
|
2465
|
-
narration is told apart by colour rather than italics. */
|
|
2466
|
-
::highlight(qt-punctuation-no-dialogue) {
|
|
2467
|
-
background-color: var(--qt-punctuation-no-dialogue-bg);
|
|
2468
|
-
text-decoration: underline dotted var(--qt-punctuation-no-dialogue-underline);
|
|
2469
|
-
text-decoration-thickness: 2px;
|
|
3822
|
+
.qt-doc-title-input:focus {
|
|
3823
|
+
border-color: var(--color-primary);
|
|
2470
3824
|
}
|
|
2471
3825
|
|
|
2472
|
-
|
|
2473
|
-
|
|
2474
|
-
|
|
3826
|
+
/** Header action buttons (maximize, show chat, exit) */
|
|
3827
|
+
.qt-doc-header-button {
|
|
3828
|
+
padding: 0.375rem;
|
|
3829
|
+
border-radius: 0.25rem;
|
|
3830
|
+
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
|
3831
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
3832
|
+
transition-duration: 150ms;
|
|
3833
|
+
color: var(--color-muted-foreground);
|
|
2475
3834
|
}
|
|
2476
3835
|
|
|
2477
|
-
|
|
2478
|
-
color: var(--
|
|
2479
|
-
background
|
|
3836
|
+
.qt-doc-header-button:hover {
|
|
3837
|
+
color: var(--color-foreground);
|
|
3838
|
+
background: var(--qt-hover-bg, color-mix(in srgb, var(--color-foreground) 10%, transparent));
|
|
2480
3839
|
}
|
|
2481
3840
|
|
|
2482
|
-
|
|
2483
|
-
.qt-
|
|
2484
|
-
|
|
2485
|
-
|
|
3841
|
+
/** Compact qtap:// URL line shown under the document header */
|
|
3842
|
+
.qt-doc-uri-row {
|
|
3843
|
+
display: flex;
|
|
3844
|
+
align-items: center;
|
|
3845
|
+
gap: 0.5rem;
|
|
3846
|
+
padding-left: 1rem;
|
|
3847
|
+
padding-right: 1rem;
|
|
3848
|
+
padding-top: 0.25rem;
|
|
3849
|
+
padding-bottom: 0.25rem;
|
|
3850
|
+
flex-shrink: 0;
|
|
3851
|
+
border-bottom: 1px solid var(--color-border);
|
|
3852
|
+
background: color-mix(in srgb, var(--qt-content-bg) 95%, transparent);
|
|
2486
3853
|
}
|
|
2487
3854
|
|
|
2488
|
-
.qt-
|
|
2489
|
-
|
|
2490
|
-
|
|
3855
|
+
.qt-doc-uri-label {
|
|
3856
|
+
font-size: 10px;
|
|
3857
|
+
font-weight: 600;
|
|
3858
|
+
text-transform: uppercase;
|
|
3859
|
+
letter-spacing: 0.025em;
|
|
3860
|
+
color: var(--color-muted-foreground);
|
|
2491
3861
|
}
|
|
2492
3862
|
|
|
2493
|
-
.qt-
|
|
2494
|
-
|
|
2495
|
-
|
|
2496
|
-
pointer-events: none;
|
|
2497
|
-
position: absolute;
|
|
2498
|
-
top: 0;
|
|
2499
|
-
left: 0;
|
|
2500
|
-
padding: var(--qt-input-padding-y, 0.5rem) var(--qt-input-padding-x, 0.75rem);
|
|
3863
|
+
.qt-doc-uri-value {
|
|
3864
|
+
min-width: 0;
|
|
3865
|
+
flex: 1 1 0%;
|
|
2501
3866
|
overflow: hidden;
|
|
2502
3867
|
text-overflow: ellipsis;
|
|
2503
3868
|
white-space: nowrap;
|
|
3869
|
+
font-size: 0.75rem;
|
|
3870
|
+
line-height: 1rem;
|
|
3871
|
+
font-family: var(--font-mono);
|
|
3872
|
+
color: var(--color-muted-foreground);
|
|
2504
3873
|
}
|
|
2505
3874
|
|
|
2506
|
-
.qt-
|
|
2507
|
-
|
|
2508
|
-
|
|
3875
|
+
.qt-doc-uri-copy-button {
|
|
3876
|
+
padding: 0.25rem;
|
|
3877
|
+
border-radius: 0.25rem;
|
|
3878
|
+
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
|
3879
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
3880
|
+
transition-duration: 150ms;
|
|
3881
|
+
color: var(--color-muted-foreground);
|
|
2509
3882
|
}
|
|
2510
3883
|
|
|
2511
|
-
.qt-
|
|
2512
|
-
|
|
3884
|
+
.qt-doc-uri-copy-button:hover {
|
|
3885
|
+
color: var(--color-foreground);
|
|
3886
|
+
background: var(--qt-hover-bg, color-mix(in srgb, var(--color-foreground) 10%, transparent));
|
|
2513
3887
|
}
|
|
2514
3888
|
|
|
2515
|
-
|
|
2516
|
-
|
|
3889
|
+
/**
|
|
3890
|
+
* Document editor toolbar
|
|
3891
|
+
* Formatting buttons for the document pane, always visible
|
|
3892
|
+
*/
|
|
3893
|
+
.qt-doc-toolbar {
|
|
3894
|
+
display: flex;
|
|
3895
|
+
align-items: center;
|
|
3896
|
+
gap: 0.25rem;
|
|
3897
|
+
padding-left: 1rem;
|
|
3898
|
+
padding-right: 1rem;
|
|
3899
|
+
padding-top: 0.375rem;
|
|
3900
|
+
padding-bottom: 0.375rem;
|
|
3901
|
+
flex-shrink: 0;
|
|
3902
|
+
border-bottom: 1px solid var(--color-border);
|
|
3903
|
+
background: color-mix(in srgb, var(--qt-content-bg) 95%, transparent);
|
|
2517
3904
|
}
|
|
2518
3905
|
|
|
2519
|
-
|
|
2520
|
-
|
|
3906
|
+
/**
|
|
3907
|
+
* Document editor area
|
|
3908
|
+
* Fills available vertical space, independently scrollable
|
|
3909
|
+
*/
|
|
3910
|
+
.qt-doc-editor-area {
|
|
3911
|
+
flex: 1 1 0%;
|
|
3912
|
+
overflow-y: auto;
|
|
3913
|
+
position: relative;
|
|
3914
|
+
padding: 1rem 1.5rem;
|
|
3915
|
+
background: var(--color-background);
|
|
2521
3916
|
}
|
|
2522
3917
|
|
|
2523
|
-
|
|
2524
|
-
|
|
3918
|
+
/**
|
|
3919
|
+
* Status bar at the bottom of the document pane
|
|
3920
|
+
*/
|
|
3921
|
+
.qt-doc-status-bar {
|
|
3922
|
+
display: flex;
|
|
3923
|
+
align-items: center;
|
|
3924
|
+
gap: 1rem;
|
|
3925
|
+
padding-left: 1rem;
|
|
3926
|
+
padding-right: 1rem;
|
|
3927
|
+
padding-top: 0.25rem;
|
|
3928
|
+
padding-bottom: 0.25rem;
|
|
3929
|
+
flex-shrink: 0;
|
|
3930
|
+
font-size: 0.75rem;
|
|
3931
|
+
line-height: 1rem;
|
|
3932
|
+
border-top: 1px solid var(--color-border);
|
|
3933
|
+
color: var(--color-muted-foreground);
|
|
3934
|
+
background: color-mix(in srgb, var(--qt-content-bg) 95%, transparent);
|
|
2525
3935
|
}
|
|
2526
3936
|
|
|
2527
|
-
.qt-
|
|
2528
|
-
|
|
3937
|
+
.qt-doc-status-item {
|
|
3938
|
+
display: inline-flex;
|
|
3939
|
+
align-items: center;
|
|
3940
|
+
gap: 0.25rem;
|
|
2529
3941
|
}
|
|
2530
3942
|
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
2534
|
-
|
|
2535
|
-
|
|
2536
|
-
border-radius:
|
|
3943
|
+
/** Saving indicator dot animation */
|
|
3944
|
+
.qt-doc-status-saving {
|
|
3945
|
+
display: inline-block;
|
|
3946
|
+
width: 0.375rem;
|
|
3947
|
+
height: 0.375rem;
|
|
3948
|
+
border-radius: 9999px;
|
|
3949
|
+
background: var(--qt-warning-fg, #f59e0b);
|
|
3950
|
+
animation: qt-doc-pulse 1s ease-in-out infinite;
|
|
2537
3951
|
}
|
|
2538
3952
|
|
|
2539
|
-
|
|
2540
|
-
|
|
2541
|
-
|
|
2542
|
-
margin: 0.5em 0 0.25em;
|
|
3953
|
+
@keyframes qt-doc-pulse {
|
|
3954
|
+
0%, 100% { opacity: 0.4; }
|
|
3955
|
+
50% { opacity: 1; }
|
|
2543
3956
|
}
|
|
2544
3957
|
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
3958
|
+
/** Saved indicator dot */
|
|
3959
|
+
.qt-doc-status-saved {
|
|
3960
|
+
display: inline-block;
|
|
3961
|
+
width: 0.375rem;
|
|
3962
|
+
height: 0.375rem;
|
|
3963
|
+
border-radius: 9999px;
|
|
3964
|
+
background: var(--qt-success-fg, #22c55e);
|
|
2549
3965
|
}
|
|
2550
3966
|
|
|
2551
|
-
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
|
|
3967
|
+
/**
|
|
3968
|
+
* "Open document" button in composer toolbar
|
|
3969
|
+
* Hidden at viewport widths below 1026px (not enough space for split pane)
|
|
3970
|
+
* When used inside qt-chat-toolbar, inherits toolbar button styling
|
|
3971
|
+
*/
|
|
3972
|
+
@media (max-width: 1025px) {
|
|
3973
|
+
.qt-doc-open-button {
|
|
3974
|
+
display: none !important;
|
|
3975
|
+
}
|
|
2555
3976
|
}
|
|
2556
3977
|
|
|
2557
|
-
|
|
2558
|
-
|
|
2559
|
-
|
|
2560
|
-
|
|
3978
|
+
/* Document Gutter */
|
|
3979
|
+
.qt-doc-editor-with-gutter {
|
|
3980
|
+
display: flex;
|
|
3981
|
+
flex-direction: row;
|
|
3982
|
+
flex: 1;
|
|
3983
|
+
min-height: 0;
|
|
3984
|
+
overflow-y: auto;
|
|
2561
3985
|
}
|
|
2562
3986
|
|
|
2563
|
-
.qt-
|
|
2564
|
-
|
|
2565
|
-
|
|
2566
|
-
|
|
3987
|
+
.qt-doc-gutter {
|
|
3988
|
+
position: relative;
|
|
3989
|
+
flex-shrink: 0;
|
|
3990
|
+
width: 20px;
|
|
3991
|
+
border-right: 1px solid var(--qt-border-color, rgba(128, 128, 128, 0.2));
|
|
2567
3992
|
}
|
|
2568
3993
|
|
|
2569
|
-
.qt-
|
|
2570
|
-
|
|
2571
|
-
|
|
2572
|
-
|
|
3994
|
+
.qt-doc-gutter-change {
|
|
3995
|
+
position: absolute;
|
|
3996
|
+
left: 6px;
|
|
3997
|
+
width: 3px;
|
|
3998
|
+
border-radius: 1.5px;
|
|
3999
|
+
background-color: var(--qt-gutter-change-color, #3b82f6);
|
|
4000
|
+
opacity: 0.6;
|
|
2573
4001
|
}
|
|
2574
4002
|
|
|
2575
|
-
.qt-
|
|
2576
|
-
|
|
2577
|
-
|
|
2578
|
-
|
|
4003
|
+
.qt-doc-gutter-eye {
|
|
4004
|
+
position: absolute;
|
|
4005
|
+
left: 2px;
|
|
4006
|
+
width: 16px;
|
|
4007
|
+
height: 16px;
|
|
4008
|
+
color: var(--qt-gutter-eye-color, #f59e0b);
|
|
4009
|
+
opacity: 0.85;
|
|
4010
|
+
pointer-events: none;
|
|
2579
4011
|
}
|
|
2580
4012
|
|
|
2581
|
-
|
|
2582
|
-
|
|
2583
|
-
|
|
2584
|
-
margin: 0.25em 0;
|
|
2585
|
-
}
|
|
4013
|
+
/* ==========================================================================
|
|
4014
|
+
CHAT SIDEBAR RESIZER
|
|
4015
|
+
========================================================================== */
|
|
2586
4016
|
|
|
2587
|
-
|
|
2588
|
-
|
|
4017
|
+
/**
|
|
4018
|
+
* Drag handle on the inner (left) edge of the expanded sidebar.
|
|
4019
|
+
* Transparent until hovered/active so it doesn't read as a second border.
|
|
4020
|
+
* Visuals mirror .qt-doc-divider / .qt-doc-divider-grip.
|
|
4021
|
+
*/
|
|
4022
|
+
.qt-chat-sidebar-resizer {
|
|
4023
|
+
position: absolute;
|
|
4024
|
+
top: 0;
|
|
4025
|
+
bottom: 0;
|
|
4026
|
+
left: 0;
|
|
4027
|
+
width: 10px;
|
|
4028
|
+
transform: translateX(-50%);
|
|
4029
|
+
z-index: 20;
|
|
4030
|
+
cursor: col-resize;
|
|
4031
|
+
user-select: none;
|
|
4032
|
+
touch-action: none;
|
|
4033
|
+
display: flex;
|
|
4034
|
+
align-items: center;
|
|
4035
|
+
justify-content: center;
|
|
2589
4036
|
}
|
|
2590
4037
|
|
|
2591
|
-
|
|
2592
|
-
|
|
2593
|
-
|
|
2594
|
-
|
|
2595
|
-
|
|
2596
|
-
|
|
2597
|
-
|
|
2598
|
-
|
|
2599
|
-
|
|
4038
|
+
.qt-chat-sidebar-resizer::before {
|
|
4039
|
+
content: '';
|
|
4040
|
+
position: absolute;
|
|
4041
|
+
top: 0;
|
|
4042
|
+
bottom: 0;
|
|
4043
|
+
left: 50%;
|
|
4044
|
+
width: 2px;
|
|
4045
|
+
transform: translateX(-50%);
|
|
4046
|
+
background: transparent;
|
|
4047
|
+
transition: background 0.15s ease;
|
|
2600
4048
|
}
|
|
2601
4049
|
|
|
2602
|
-
.qt-
|
|
2603
|
-
.qt-
|
|
2604
|
-
|
|
4050
|
+
.qt-chat-sidebar-resizer:hover::before,
|
|
4051
|
+
.qt-chat-sidebar-resizer:focus-visible::before,
|
|
4052
|
+
.qt-chat-sidebar-resizer-active::before {
|
|
4053
|
+
background: var(--color-primary);
|
|
2605
4054
|
}
|
|
2606
4055
|
|
|
2607
|
-
|
|
2608
|
-
|
|
2609
|
-
list-style: none;
|
|
2610
|
-
padding-left: 0;
|
|
4056
|
+
.qt-chat-sidebar-resizer:focus-visible {
|
|
4057
|
+
outline: none;
|
|
2611
4058
|
}
|
|
2612
4059
|
|
|
2613
|
-
.qt-
|
|
2614
|
-
|
|
4060
|
+
.qt-chat-sidebar-resizer-grip {
|
|
4061
|
+
display: flex;
|
|
4062
|
+
flex-direction: column;
|
|
4063
|
+
gap: 0.25rem;
|
|
2615
4064
|
position: relative;
|
|
2616
|
-
|
|
2617
|
-
|
|
2618
|
-
|
|
4065
|
+
z-index: 1;
|
|
4066
|
+
opacity: 0;
|
|
4067
|
+
transition: opacity 0.15s ease;
|
|
2619
4068
|
}
|
|
2620
4069
|
|
|
2621
|
-
.qt-
|
|
2622
|
-
.qt-
|
|
2623
|
-
|
|
2624
|
-
|
|
2625
|
-
left: 0;
|
|
2626
|
-
top: 0.25rem;
|
|
2627
|
-
width: 1rem;
|
|
2628
|
-
height: 1rem;
|
|
2629
|
-
border-radius: 0.25rem;
|
|
2630
|
-
border: 1px solid var(--qt-border-color, rgba(0, 0, 0, 0.3));
|
|
2631
|
-
cursor: pointer;
|
|
4070
|
+
.qt-chat-sidebar-resizer:hover .qt-chat-sidebar-resizer-grip,
|
|
4071
|
+
.qt-chat-sidebar-resizer:focus-visible .qt-chat-sidebar-resizer-grip,
|
|
4072
|
+
.qt-chat-sidebar-resizer-active .qt-chat-sidebar-resizer-grip {
|
|
4073
|
+
opacity: 1;
|
|
2632
4074
|
}
|
|
2633
4075
|
|
|
2634
|
-
.qt-
|
|
2635
|
-
|
|
2636
|
-
|
|
2637
|
-
|
|
2638
|
-
|
|
2639
|
-
background
|
|
2640
|
-
background-repeat: no-repeat;
|
|
4076
|
+
.qt-chat-sidebar-resizer-grip span {
|
|
4077
|
+
display: block;
|
|
4078
|
+
width: 3px;
|
|
4079
|
+
height: 3px;
|
|
4080
|
+
border-radius: 50%;
|
|
4081
|
+
background: var(--color-muted-foreground);
|
|
2641
4082
|
}
|
|
2642
4083
|
|
|
2643
|
-
|
|
2644
|
-
|
|
2645
|
-
|
|
4084
|
+
/* ==========================================================================
|
|
4085
|
+
MEMORY SOURCE HIGHLIGHT
|
|
4086
|
+
Applied when scrolling to a message from memory provenance link
|
|
4087
|
+
========================================================================== */
|
|
4088
|
+
|
|
4089
|
+
/**
|
|
4090
|
+
* Highlight animation for message when navigated from memory source link
|
|
4091
|
+
*/
|
|
4092
|
+
.qt-memory-source-highlight {
|
|
4093
|
+
animation: memory-highlight-pulse 1s ease-in-out 2;
|
|
4094
|
+
position: relative;
|
|
2646
4095
|
}
|
|
2647
4096
|
|
|
2648
|
-
.qt-
|
|
2649
|
-
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
|
|
4097
|
+
.qt-memory-source-highlight::after {
|
|
4098
|
+
content: '';
|
|
4099
|
+
position: absolute;
|
|
4100
|
+
inset: -4px;
|
|
4101
|
+
border: 2px solid var(--color-primary);
|
|
4102
|
+
border-radius: var(--qt-chat-message-radius);
|
|
4103
|
+
pointer-events: none;
|
|
4104
|
+
animation: memory-highlight-border 3s ease-out forwards;
|
|
2653
4105
|
}
|
|
2654
4106
|
|
|
2655
|
-
|
|
2656
|
-
|
|
2657
|
-
|
|
4107
|
+
@keyframes memory-highlight-pulse {
|
|
4108
|
+
0%, 100% {
|
|
4109
|
+
background-color: transparent;
|
|
4110
|
+
}
|
|
4111
|
+
50% {
|
|
4112
|
+
background-color: color-mix(in srgb, var(--color-primary) 10%, transparent);
|
|
4113
|
+
}
|
|
2658
4114
|
}
|
|
2659
4115
|
|
|
2660
|
-
|
|
2661
|
-
|
|
2662
|
-
|
|
2663
|
-
|
|
2664
|
-
|
|
2665
|
-
|
|
2666
|
-
|
|
2667
|
-
|
|
2668
|
-
|
|
4116
|
+
@keyframes memory-highlight-border {
|
|
4117
|
+
0% {
|
|
4118
|
+
opacity: 1;
|
|
4119
|
+
}
|
|
4120
|
+
80% {
|
|
4121
|
+
opacity: 1;
|
|
4122
|
+
}
|
|
4123
|
+
100% {
|
|
4124
|
+
opacity: 0;
|
|
4125
|
+
}
|
|
2669
4126
|
}
|
|
2670
4127
|
|
|
2671
4128
|
/* ==========================================================================
|
|
@@ -2715,7 +4172,7 @@
|
|
|
2715
4172
|
}
|
|
2716
4173
|
|
|
2717
4174
|
.qt-formatting-button:hover:not(:disabled) {
|
|
2718
|
-
background: var(--qt-content-bg-hover);
|
|
4175
|
+
background: var(--qt-content-bg-hover, var(--color-muted));
|
|
2719
4176
|
border-color: var(--color-foreground);
|
|
2720
4177
|
}
|
|
2721
4178
|
|
|
@@ -2927,6 +4384,13 @@
|
|
|
2927
4384
|
outline: none;
|
|
2928
4385
|
}
|
|
2929
4386
|
|
|
4387
|
+
/* The tint alone was too faint to find; keyboard focus also gets the ring
|
|
4388
|
+
every other control wears (WCAG 2.4.7). */
|
|
4389
|
+
.qt-mention-chip:focus-visible {
|
|
4390
|
+
outline: 2px solid var(--color-ring);
|
|
4391
|
+
outline-offset: 2px;
|
|
4392
|
+
}
|
|
4393
|
+
|
|
2930
4394
|
/* ==========================================================================
|
|
2931
4395
|
TYPEAHEAD MENU
|
|
2932
4396
|
==========================================================================
|
|
@@ -3005,7 +4469,7 @@
|
|
|
3005
4469
|
flex: none;
|
|
3006
4470
|
font-size: 0.75rem;
|
|
3007
4471
|
line-height: 1rem;
|
|
3008
|
-
color: var(--qt-text-secondary-fg, var(--
|
|
4472
|
+
color: var(--qt-text-secondary-fg, var(--color-muted-foreground));
|
|
3009
4473
|
}
|
|
3010
4474
|
|
|
3011
4475
|
.qt-typeahead-empty {
|
|
@@ -3013,7 +4477,7 @@
|
|
|
3013
4477
|
text-align: center;
|
|
3014
4478
|
font-size: 0.875rem;
|
|
3015
4479
|
line-height: 1.25rem;
|
|
3016
|
-
color: var(--qt-text-secondary-fg, var(--
|
|
4480
|
+
color: var(--qt-text-secondary-fg, var(--color-muted-foreground));
|
|
3017
4481
|
}
|
|
3018
4482
|
|
|
3019
4483
|
/* ==========================================================================
|
|
@@ -3052,7 +4516,7 @@
|
|
|
3052
4516
|
line-height: 1rem;
|
|
3053
4517
|
font-weight: 600;
|
|
3054
4518
|
background: var(--qt-popover-bg);
|
|
3055
|
-
color: var(--qt-text-secondary-fg, var(--
|
|
4519
|
+
color: var(--qt-text-secondary-fg, var(--color-muted-foreground));
|
|
3056
4520
|
}
|
|
3057
4521
|
|
|
3058
4522
|
.qt-emoji-picker-row {
|
|
@@ -3075,7 +4539,7 @@
|
|
|
3075
4539
|
}
|
|
3076
4540
|
|
|
3077
4541
|
.qt-emoji-picker-cell:hover {
|
|
3078
|
-
background: var(--qt-content-bg-hover);
|
|
4542
|
+
background: var(--qt-content-bg-hover, var(--color-muted));
|
|
3079
4543
|
}
|
|
3080
4544
|
|
|
3081
4545
|
.qt-emoji-picker-cell:focus-visible {
|
|
@@ -3090,7 +4554,7 @@
|
|
|
3090
4554
|
text-align: center;
|
|
3091
4555
|
font-size: 0.875rem;
|
|
3092
4556
|
line-height: 1.25rem;
|
|
3093
|
-
color: var(--qt-text-secondary-fg, var(--
|
|
4557
|
+
color: var(--qt-text-secondary-fg, var(--color-muted-foreground));
|
|
3094
4558
|
}
|
|
3095
4559
|
|
|
3096
4560
|
/* Lexical table styling */
|
|
@@ -4947,6 +6411,31 @@
|
|
|
4947
6411
|
box-shadow: 0 3px 0 0 var(--qt-tab-active-border) inset;
|
|
4948
6412
|
}
|
|
4949
6413
|
|
|
6414
|
+
/* The tab's selectable part: a bare button carrying the icon and label, so
|
|
6415
|
+
the tab is keyboard-operable without nesting the close button inside it.
|
|
6416
|
+
Its focus ring is drawn on the whole tab, which is what the eye reads. */
|
|
6417
|
+
.qt-tab-select {
|
|
6418
|
+
display: inline-flex;
|
|
6419
|
+
align-items: center;
|
|
6420
|
+
gap: inherit;
|
|
6421
|
+
min-width: 0;
|
|
6422
|
+
padding: 0;
|
|
6423
|
+
border: none;
|
|
6424
|
+
background: none;
|
|
6425
|
+
color: inherit;
|
|
6426
|
+
font: inherit;
|
|
6427
|
+
cursor: pointer;
|
|
6428
|
+
}
|
|
6429
|
+
|
|
6430
|
+
.qt-tab-select:focus-visible {
|
|
6431
|
+
outline: none;
|
|
6432
|
+
}
|
|
6433
|
+
|
|
6434
|
+
.qt-tab-strip .qt-tab:has(.qt-tab-select:focus-visible) {
|
|
6435
|
+
outline: 2px solid var(--color-ring);
|
|
6436
|
+
outline-offset: 2px;
|
|
6437
|
+
}
|
|
6438
|
+
|
|
4950
6439
|
.qt-tab-label {
|
|
4951
6440
|
max-width: 14rem;
|
|
4952
6441
|
overflow: hidden;
|
|
@@ -4963,7 +6452,8 @@
|
|
|
4963
6452
|
height: 1.5rem;
|
|
4964
6453
|
margin: -0.175rem -0.25rem -0.175rem 0;
|
|
4965
6454
|
border-radius: 0.25rem;
|
|
4966
|
-
|
|
6455
|
+
/* 0.8, not 0.55: the dimmer cross fell under the 3:1 a control's icon needs. */
|
|
6456
|
+
opacity: 0.8;
|
|
4967
6457
|
transition: opacity 0.15s ease, background 0.15s ease;
|
|
4968
6458
|
}
|
|
4969
6459
|
|
|
@@ -5388,7 +6878,7 @@ li:is(.qt-chat-narration, .qt-chat-ooc, .qt-chat-inner-monologue) {
|
|
|
5388
6878
|
|
|
5389
6879
|
.qt-storyteller-mode-option:hover {
|
|
5390
6880
|
background: var(--qt-storyteller-mode-hover-bg, var(--color-accent));
|
|
5391
|
-
color: var(--qt-storyteller-mode-hover-fg, var(--color-foreground));
|
|
6881
|
+
color: var(--qt-storyteller-mode-hover-fg, var(--color-accent-foreground));
|
|
5392
6882
|
}
|
|
5393
6883
|
|
|
5394
6884
|
.qt-storyteller-mode-option-active,
|
|
@@ -5649,6 +7139,7 @@ li:is(.qt-chat-narration, .qt-chat-ooc, .qt-chat-inner-monologue) {
|
|
|
5649
7139
|
|
|
5650
7140
|
.qt-intervene-toggle:hover {
|
|
5651
7141
|
background-color: var(--qt-intervene-toggle-hover-bg, var(--color-accent));
|
|
7142
|
+
color: var(--qt-intervene-toggle-hover-fg, var(--color-accent-foreground));
|
|
5652
7143
|
}
|
|
5653
7144
|
|
|
5654
7145
|
/* A field the author has hidden from the dialog. */
|
|
@@ -5666,6 +7157,271 @@ li:is(.qt-chat-narration, .qt-chat-ooc, .qt-chat-inner-monologue) {
|
|
|
5666
7157
|
);
|
|
5667
7158
|
}
|
|
5668
7159
|
|
|
7160
|
+
/* ============================================================================
|
|
7161
|
+
ALERTS
|
|
7162
|
+
============================================================================ */
|
|
7163
|
+
|
|
7164
|
+
.qt-alert,
|
|
7165
|
+
.qt-alert-success,
|
|
7166
|
+
.qt-alert-warning,
|
|
7167
|
+
.qt-alert-error,
|
|
7168
|
+
.qt-alert-info {
|
|
7169
|
+
border-radius: 0.5rem;
|
|
7170
|
+
border-width: 1px;
|
|
7171
|
+
border-style: solid;
|
|
7172
|
+
padding: 0.75rem 1rem;
|
|
7173
|
+
font-size: 0.875rem;
|
|
7174
|
+
line-height: 1.25rem;
|
|
7175
|
+
}
|
|
7176
|
+
|
|
7177
|
+
.qt-alert-success {
|
|
7178
|
+
background-color: var(--qt-alert-success-bg);
|
|
7179
|
+
color: var(--qt-alert-success-fg);
|
|
7180
|
+
border-color: var(--qt-alert-success-border);
|
|
7181
|
+
}
|
|
7182
|
+
|
|
7183
|
+
.qt-alert-warning {
|
|
7184
|
+
background-color: var(--qt-alert-warning-bg);
|
|
7185
|
+
color: var(--qt-alert-warning-fg);
|
|
7186
|
+
border-color: var(--qt-alert-warning-border);
|
|
7187
|
+
}
|
|
7188
|
+
|
|
7189
|
+
.qt-alert-error {
|
|
7190
|
+
background-color: var(--qt-alert-error-bg);
|
|
7191
|
+
color: var(--qt-alert-error-fg);
|
|
7192
|
+
border-color: var(--qt-alert-error-border);
|
|
7193
|
+
}
|
|
7194
|
+
|
|
7195
|
+
.qt-alert-info {
|
|
7196
|
+
background-color: var(--qt-alert-info-bg);
|
|
7197
|
+
color: var(--qt-alert-info-fg);
|
|
7198
|
+
border-color: var(--qt-alert-info-border);
|
|
7199
|
+
}
|
|
7200
|
+
|
|
7201
|
+
/* Secondary-text helpers inside an alert take the alert's own foreground.
|
|
7202
|
+
qt-text-small and its kin paint the muted grey, which on an alert's tint
|
|
7203
|
+
fell to ~3.6:1 (Art Deco dark) and ~4.1:1 (default dark); the alert's
|
|
7204
|
+
foreground is the colour chosen to sit on that tint. Specificity is two
|
|
7205
|
+
classes — enough to outrank the helper, no more. */
|
|
7206
|
+
:is(.qt-alert, .qt-alert-success, .qt-alert-warning, .qt-alert-error, .qt-alert-info)
|
|
7207
|
+
:is(.qt-text-small, .qt-text-muted, .qt-text-secondary, .qt-text-xs) {
|
|
7208
|
+
color: inherit;
|
|
7209
|
+
}
|
|
7210
|
+
|
|
7211
|
+
/* A link inside an alert's running text takes the alert's colour (qt-link's
|
|
7212
|
+
muted grey fell to ~3.6:1 on the tint) and is underlined, so it is not
|
|
7213
|
+
told from the words around it by colour alone (WCAG 1.4.1). */
|
|
7214
|
+
:is(.qt-alert, .qt-alert-success, .qt-alert-warning, .qt-alert-error, .qt-alert-info) a {
|
|
7215
|
+
color: inherit;
|
|
7216
|
+
text-decoration: underline;
|
|
7217
|
+
text-underline-offset: 2px;
|
|
7218
|
+
}
|
|
7219
|
+
|
|
7220
|
+
/* ============================================================================
|
|
7221
|
+
SETTINGS PAGE - Background image readability
|
|
7222
|
+
When a subsystem background image is shown on the settings page,
|
|
7223
|
+
tabs and header text need opaque/contrasted treatments to remain legible.
|
|
7224
|
+
============================================================================ */
|
|
7225
|
+
|
|
7226
|
+
/* Frosted header banner behind title and subtitle */
|
|
7227
|
+
.qt-page-container[style*="--story-background-url"] .qt-settings-header {
|
|
7228
|
+
border-radius: 0.5rem;
|
|
7229
|
+
padding: 1rem;
|
|
7230
|
+
margin-left: -1rem;
|
|
7231
|
+
margin-right: -1rem;
|
|
7232
|
+
background: color-mix(in srgb, var(--color-background) 80%, transparent);
|
|
7233
|
+
backdrop-filter: blur(8px);
|
|
7234
|
+
-webkit-backdrop-filter: blur(8px);
|
|
7235
|
+
}
|
|
7236
|
+
|
|
7237
|
+
/* Opaque inactive tab backgrounds. 90/10, not 85/15: the stronger tint left
|
|
7238
|
+
the muted tab label at 4.3:1 on the default and Rains light palettes. */
|
|
7239
|
+
.qt-page-container[style*="--story-background-url"] .qt-tab-group .qt-tab {
|
|
7240
|
+
background: color-mix(in srgb, var(--color-background) 90%, var(--color-muted-foreground) 10%);
|
|
7241
|
+
border-color: var(--color-border);
|
|
7242
|
+
}
|
|
7243
|
+
|
|
7244
|
+
.qt-page-container[style*="--story-background-url"] .qt-tab-group .qt-tab:hover:not(.qt-tab-active) {
|
|
7245
|
+
background: color-mix(in srgb, var(--color-background) 84%, var(--color-muted-foreground) 16%);
|
|
7246
|
+
}
|
|
7247
|
+
|
|
7248
|
+
/* Active tab matches the panel background so it merges into it */
|
|
7249
|
+
.qt-page-container[style*="--story-background-url"] .qt-tab-group .qt-tab.qt-tab-active {
|
|
7250
|
+
background: color-mix(in srgb, var(--color-background) 88%, transparent);
|
|
7251
|
+
border-color: var(--color-border);
|
|
7252
|
+
}
|
|
7253
|
+
|
|
7254
|
+
.qt-page-container[style*="--story-background-url"] .qt-tab-group .qt-tab.qt-tab-active::after {
|
|
7255
|
+
background: color-mix(in srgb, var(--color-background) 88%, transparent);
|
|
7256
|
+
}
|
|
7257
|
+
|
|
7258
|
+
/* Remove gap between tabs and panel so they connect as a folder */
|
|
7259
|
+
.qt-page-container[style*="--story-background-url"] .qt-tab-divider {
|
|
7260
|
+
display: none;
|
|
7261
|
+
}
|
|
7262
|
+
|
|
7263
|
+
/* Collapse the margin between tab nav wrapper and content panel */
|
|
7264
|
+
.qt-page-container[style*="--story-background-url"] :has(> .qt-tab-group) {
|
|
7265
|
+
margin-bottom: 0 !important;
|
|
7266
|
+
}
|
|
7267
|
+
|
|
7268
|
+
.qt-page-container[style*="--story-background-url"] .qt-tab-group {
|
|
7269
|
+
/* Nudge tabs down onto the panel border so the active tab overlaps it */
|
|
7270
|
+
position: relative;
|
|
7271
|
+
z-index: 1;
|
|
7272
|
+
margin-bottom: -1px;
|
|
7273
|
+
}
|
|
7274
|
+
|
|
7275
|
+
/* Settings content panel - the "folder" body below the tabs. */
|
|
7276
|
+
.qt-page-container[style*="--story-background-url"] .qt-settings-panel {
|
|
7277
|
+
border-bottom-left-radius: 0.5rem;
|
|
7278
|
+
border-bottom-right-radius: 0.5rem;
|
|
7279
|
+
padding: 1.5rem 1rem;
|
|
7280
|
+
margin-left: -1rem;
|
|
7281
|
+
margin-right: -1rem;
|
|
7282
|
+
background: color-mix(in srgb, var(--color-background) 88%, transparent);
|
|
7283
|
+
backdrop-filter: blur(12px);
|
|
7284
|
+
-webkit-backdrop-filter: blur(12px);
|
|
7285
|
+
border: 1px solid var(--color-border);
|
|
7286
|
+
border-top: 1px solid var(--color-border);
|
|
7287
|
+
min-height: 40vh;
|
|
7288
|
+
}
|
|
7289
|
+
|
|
7290
|
+
/* ============================================================================
|
|
7291
|
+
FOOTER
|
|
7292
|
+
============================================================================ */
|
|
7293
|
+
|
|
7294
|
+
.qt-footer {
|
|
7295
|
+
border-top-width: 1px;
|
|
7296
|
+
border-top-style: solid;
|
|
7297
|
+
padding: 1rem;
|
|
7298
|
+
background: var(--qt-app-header-bg);
|
|
7299
|
+
border-color: var(--qt-footer-border);
|
|
7300
|
+
backdrop-filter: var(--qt-app-header-blur);
|
|
7301
|
+
-webkit-backdrop-filter: var(--qt-app-header-blur);
|
|
7302
|
+
position: relative;
|
|
7303
|
+
z-index: 20;
|
|
7304
|
+
}
|
|
7305
|
+
|
|
7306
|
+
.qt-footer-container {
|
|
7307
|
+
display: flex;
|
|
7308
|
+
flex-wrap: wrap;
|
|
7309
|
+
align-items: center;
|
|
7310
|
+
justify-content: center;
|
|
7311
|
+
gap: 1rem;
|
|
7312
|
+
font-size: 0.875rem;
|
|
7313
|
+
line-height: 1.25rem;
|
|
7314
|
+
color: var(--qt-footer-fg);
|
|
7315
|
+
}
|
|
7316
|
+
|
|
7317
|
+
.qt-footer-link {
|
|
7318
|
+
display: flex;
|
|
7319
|
+
align-items: center;
|
|
7320
|
+
gap: 0.25rem;
|
|
7321
|
+
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
|
7322
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
7323
|
+
transition-duration: 150ms;
|
|
7324
|
+
color: var(--qt-footer-fg);
|
|
7325
|
+
}
|
|
7326
|
+
|
|
7327
|
+
.qt-footer-link:hover {
|
|
7328
|
+
color: var(--qt-footer-link-hover);
|
|
7329
|
+
}
|
|
7330
|
+
|
|
7331
|
+
.qt-footer-path {
|
|
7332
|
+
font-family: monospace;
|
|
7333
|
+
font-size: 0.75rem;
|
|
7334
|
+
line-height: 1rem;
|
|
7335
|
+
display: none;
|
|
7336
|
+
overflow: hidden;
|
|
7337
|
+
text-overflow: ellipsis;
|
|
7338
|
+
white-space: nowrap;
|
|
7339
|
+
max-width: 24rem;
|
|
7340
|
+
color: var(--qt-footer-fg);
|
|
7341
|
+
cursor: pointer;
|
|
7342
|
+
background: none;
|
|
7343
|
+
border: none;
|
|
7344
|
+
padding: 0;
|
|
7345
|
+
transition: color 0.15s ease;
|
|
7346
|
+
}
|
|
7347
|
+
|
|
7348
|
+
/* Full strength at rest: the old 0.7 opacity left the path at ~2.9:1 on the
|
|
7349
|
+
footer. Hover marks itself by colour and underline instead. */
|
|
7350
|
+
.qt-footer-path:hover {
|
|
7351
|
+
color: var(--qt-footer-link-hover);
|
|
7352
|
+
text-decoration: underline;
|
|
7353
|
+
}
|
|
7354
|
+
|
|
7355
|
+
.qt-footer-separator {
|
|
7356
|
+
display: none;
|
|
7357
|
+
}
|
|
7358
|
+
|
|
7359
|
+
@media (min-width: 40rem) {
|
|
7360
|
+
.qt-footer-path,
|
|
7361
|
+
.qt-footer-separator {
|
|
7362
|
+
display: inline;
|
|
7363
|
+
}
|
|
7364
|
+
}
|
|
7365
|
+
|
|
7366
|
+
/* ============================================================================
|
|
7367
|
+
SETTINGS FORM SHELLS
|
|
7368
|
+
Shared semantic wrappers for settings cards and toggle rows.
|
|
7369
|
+
============================================================================ */
|
|
7370
|
+
|
|
7371
|
+
.qt-settings-shell {
|
|
7372
|
+
padding: 1rem;
|
|
7373
|
+
border-width: 1px;
|
|
7374
|
+
border-style: solid;
|
|
7375
|
+
border-radius: 0.25rem;
|
|
7376
|
+
border-color: var(--qt-card-border);
|
|
7377
|
+
background: color-mix(in srgb, var(--color-card) 96%, transparent);
|
|
7378
|
+
}
|
|
7379
|
+
|
|
7380
|
+
.qt-settings-shell-tight {
|
|
7381
|
+
padding: 0.75rem;
|
|
7382
|
+
border-width: 1px;
|
|
7383
|
+
border-style: solid;
|
|
7384
|
+
border-radius: 0.25rem;
|
|
7385
|
+
border-color: var(--qt-card-border);
|
|
7386
|
+
background: color-mix(in srgb, var(--color-card) 96%, transparent);
|
|
7387
|
+
}
|
|
7388
|
+
|
|
7389
|
+
.qt-settings-section-heading {
|
|
7390
|
+
font-size: 0.875rem;
|
|
7391
|
+
line-height: 1.25rem;
|
|
7392
|
+
font-weight: 500;
|
|
7393
|
+
color: var(--qt-text-primary-fg, var(--color-foreground));
|
|
7394
|
+
}
|
|
7395
|
+
|
|
7396
|
+
.qt-settings-field-group > :not(:last-child) {
|
|
7397
|
+
margin-bottom: 0.5rem;
|
|
7398
|
+
}
|
|
7399
|
+
|
|
7400
|
+
.qt-settings-toggle-row {
|
|
7401
|
+
display: flex;
|
|
7402
|
+
align-items: flex-start;
|
|
7403
|
+
gap: 0.75rem;
|
|
7404
|
+
padding: 1rem;
|
|
7405
|
+
border-width: 1px;
|
|
7406
|
+
border-style: solid;
|
|
7407
|
+
border-radius: 0.25rem;
|
|
7408
|
+
cursor: pointer;
|
|
7409
|
+
border-color: var(--qt-card-border);
|
|
7410
|
+
transition: background-color 150ms ease;
|
|
7411
|
+
}
|
|
7412
|
+
|
|
7413
|
+
/* The accent fill carries its own foreground: on themes with a bold accent
|
|
7414
|
+
(Art Deco and Great Estate dark, Madman's Box) the row's ordinary text
|
|
7415
|
+
fell to ~1.4:1 on hover. */
|
|
7416
|
+
.qt-settings-toggle-row:hover {
|
|
7417
|
+
background: var(--qt-card-hover-bg, var(--color-accent));
|
|
7418
|
+
color: var(--qt-card-hover-fg, var(--color-accent-foreground));
|
|
7419
|
+
}
|
|
7420
|
+
|
|
7421
|
+
.qt-settings-toggle-row:hover :where(*) {
|
|
7422
|
+
color: var(--qt-card-hover-fg, var(--color-accent-foreground));
|
|
7423
|
+
}
|
|
7424
|
+
|
|
5669
7425
|
/* ============================================================================
|
|
5670
7426
|
REDUCED MOTION — every theme honours the OS setting
|
|
5671
7427
|
============================================================================ */
|