ec-web 0.0.28 → 0.0.29

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.
@@ -326,6 +326,21 @@ tr:hover td { background: var(--bg2); }
326
326
  .col-title { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 8px 12px; color: var(--dim); font-size: 11px; text-transform: uppercase; position: sticky; top: 0; background: var(--bg); border-bottom: 1px solid var(--border); }
327
327
  .col-count { color: var(--fg); font-variant-numeric: tabular-nums; }
328
328
  .msg-peers .list-item .name { display: flex; align-items: center; gap: 4px; min-width: 0; }
329
+ .msg-aids-list { display: block; }
330
+ .msg-tree-view { display: none; }
331
+ .msg-tree-title { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 8px 12px; color: var(--dim); font-size: 11px; text-transform: uppercase; position: sticky; top: 0; background: var(--bg); border-bottom: 1px solid var(--border); z-index: 1; }
332
+ .msg-tree-agent { border-bottom: 1px solid var(--border); }
333
+ .msg-tree-agent-toggle { display: flex; align-items: flex-start; gap: 7px; width: 100%; padding: 9px 10px; border: 0; background: transparent; color: var(--fg); text-align: left; cursor: pointer; font: inherit; }
334
+ .msg-tree-agent-toggle:hover { background: var(--bg2); }
335
+ .msg-tree-agent.sel > .msg-tree-agent-toggle { background: var(--bg3); color: var(--fg); }
336
+ .msg-tree-chevron { width: 14px; flex: 0 0 14px; color: var(--dim); line-height: 1.4; text-align: center; }
337
+ .msg-tree-agent-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
338
+ .msg-tree-agent-main .name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
339
+ .msg-tree-agent-main .sub { color: var(--dim); font-size: 11px; line-height: 1.35; }
340
+ .msg-tree-chats { border-top: 1px solid var(--border); }
341
+ .msg-tree-chat { padding-left: 31px; background: color-mix(in srgb, var(--bg) 72%, var(--bg2)); }
342
+ .msg-tree-chat:hover { background: var(--bg2); }
343
+ .msg-tree-empty { padding: 10px 14px 10px 31px; color: var(--dim); font-size: 11px; }
329
344
  .msg-peer-title { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
330
345
  .msg-partition-mark {
331
346
  display: inline-flex; align-items: center; flex-shrink: 0; height: 18px; padding: 0 5px;
@@ -385,12 +400,18 @@ tr:hover td { background: var(--bg2); }
385
400
  [data-theme="dark"] .msg-channel-daemon,
386
401
  [data-theme="dark"] .msg-channel-other { --msg-channel-color: #a8b6c6; }
387
402
 
388
- .msg-session-header { height: 44px; min-height: 44px; padding: 12px 16px; box-sizing: border-box; z-index: 2; }
403
+ .sess-header.msg-session-header { height: auto; min-height: 0; padding: 0; box-sizing: border-box; z-index: 2; }
389
404
  .msg-session-header .sh-title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
390
- .msg-session-context-row { display: flex; align-items: baseline; gap: 28px; min-width: 0; }
391
- .msg-session-id-row { display: flex; align-items: baseline; gap: 10px; min-width: 0; flex-shrink: 0; }
392
- .msg-session-id { color: var(--fg); font-family: ui-monospace, "SF Mono", Consolas, monospace; font-size: 12px; line-height: 1.35; white-space: nowrap; }
393
- .msg-session-grid { display: grid; grid-template-columns: repeat(6, max-content); justify-content: space-between; gap: 16px; min-width: 0; flex: 1; }
405
+ .msg-session-context-row { display: block; min-width: 0; }
406
+ .msg-session-id-row { display: flex; align-items: center; gap: 10px; min-width: 0; min-height: 32px; padding: 0 12px; cursor: pointer; user-select: none; }
407
+ .msg-session-id-row:hover { background: var(--bg3); }
408
+ .msg-session-id-row:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
409
+ .msg-session-id { flex: 1 1 auto; min-width: 0; color: var(--fg); font-family: ui-monospace, "SF Mono", Consolas, monospace; font-size: 12px; line-height: 1.35; white-space: normal; overflow-wrap: anywhere; word-break: break-word; }
410
+ .msg-session-toggle { display: inline-grid; place-items: center; flex: 0 0 24px; width: 24px; height: 24px; margin-left: auto; color: var(--dim); font-size: 16px; line-height: 1; pointer-events: none; }
411
+ .msg-session-toggle-icon { display: block; }
412
+ .msg-session-grid { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 8px 16px; min-width: 0; padding: 0 12px 8px; cursor: pointer; user-select: none; }
413
+ .msg-session-grid:hover { background: var(--bg3); }
414
+ .msg-session-grid:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
394
415
  .msg-session-stat { display: flex; align-items: baseline; min-width: 0; gap: 8px; }
395
416
  .msg-session-label { color: var(--dim); font-size: 10px; line-height: 1.2; flex-shrink: 0; }
396
417
  .msg-session-value { overflow: hidden; color: var(--fg); font-size: 12px; line-height: 1.35; text-overflow: ellipsis; white-space: nowrap; }
@@ -438,6 +459,14 @@ tr:hover td { background: var(--bg2); }
438
459
 
439
460
  /* 会话头 */
440
461
  .sess-header { position: sticky; top: 0; background: var(--bg2); border-bottom: 1px solid var(--border); padding: 12px 20px; z-index: 1; }
462
+ .sess-header-collapsible { padding: 0; }
463
+ .sess-header-toggle-row { display: flex; align-items: center; gap: 10px; min-width: 0; min-height: 42px; padding: 8px 20px; cursor: pointer; user-select: none; }
464
+ .sess-header-toggle-row:hover, .sess-header-details:hover { background: var(--bg3); }
465
+ .sess-header-toggle-row:focus-visible, .sess-header-details:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
466
+ .sess-header-toggle-row .sh-title { flex: 1; min-width: 0; margin: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
467
+ .sess-header-toggle { display: inline-grid; place-items: center; flex: 0 0 24px; width: 24px; height: 24px; margin-left: auto; color: var(--dim); font-size: 16px; line-height: 1; pointer-events: none; }
468
+ .sess-header-toggle-icon { display: block; }
469
+ .sess-header-details { padding: 0 20px 12px; cursor: pointer; user-select: none; }
441
470
  .sh-title { font-size: 15px; font-weight: 600; margin-bottom: 8px; }
442
471
  .sh-title-row { display: flex; align-items: center; height: 24px; min-width: 0; }
443
472
  .sh-title-row .sh-title { flex: 1; min-width: 0; margin-bottom: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
@@ -976,14 +1005,35 @@ a.ctrl-btn { display: inline-flex; align-items: center; text-decoration: none; l
976
1005
  border-bottom: 1px solid var(--border);
977
1006
  background: var(--bg2);
978
1007
  }
979
- .agent-ops-cell { white-space: nowrap; vertical-align: middle; }
1008
+ .agent-ops-cell {
1009
+ position: sticky;
1010
+ right: 0;
1011
+ z-index: 2;
1012
+ width: 1%;
1013
+ min-width: 92px;
1014
+ white-space: nowrap;
1015
+ vertical-align: middle;
1016
+ background: var(--bg);
1017
+ box-shadow: -1px 0 0 var(--border);
1018
+ }
1019
+ #view-agents .agents-table th:last-child {
1020
+ position: sticky;
1021
+ right: 0;
1022
+ z-index: 4;
1023
+ width: 1%;
1024
+ min-width: 92px;
1025
+ background: var(--bg2);
1026
+ box-shadow: -1px 0 0 var(--border);
1027
+ }
1028
+ #view-agents .agents-table td.agent-ops-cell:has(.ops-more.open) { z-index: 5; }
1029
+ #view-agents .agents-table tr:hover td.agent-ops-cell { background: var(--bg2); }
980
1030
 
981
1031
  /* disabled 行淡化 */
982
1032
  tr.ag-disabled td { opacity: .5; }
983
1033
  tr.ag-disabled .ag-name { color: var(--dim); }
984
1034
 
985
1035
  /* 操作区:主按钮 + ··· 下拉 */
986
- .agent-ops { display: flex; align-items: center; gap: 5px; }
1036
+ .agent-ops { display: inline-flex; align-items: center; gap: 5px; min-width: max-content; }
987
1037
  .agent-ops .ctrl-btn { padding: 2px 9px; font-size: 11px; }
988
1038
  .ops-enable { color: var(--green) !important; border-color: var(--green) !important; }
989
1039
  .ops-clear-queue { color: var(--orange) !important; border-color: var(--orange) !important; }
@@ -1081,7 +1131,7 @@ tr.ag-disabled .ag-name { color: var(--dim); }
1081
1131
 
1082
1132
  /* 两行一个 agent:主行 + 信息行 */
1083
1133
  #view-agents tr.ag-main > td { border-bottom: none; padding-bottom: 3px; }
1084
- #view-agents tr.ag-sub > td { padding-top: 0; padding-bottom: 9px; color: var(--dim); }
1134
+ #view-agents tr.ag-sub > td { padding-top: 0; padding-bottom: 9px; color: var(--dim); border-bottom: none; }
1085
1135
  #view-agents tr.ag-main:hover td, #view-agents tr.ag-sub:hover td { background: var(--bg2); }
1086
1136
 
1087
1137
  /* AID 单元:状态点 + 显示名(主) + aid(次,dim) */
@@ -1658,8 +1708,6 @@ tr.ag-disabled .ag-name { color: var(--dim); }
1658
1708
  /* 渠道标:非 AUN 渠道才渲染,用冷色和消息标记区分开 */
1659
1709
  .ag-msg .mtag-channel { color: var(--blue); font-weight: 600; }
1660
1710
  .ag-msg .mtags { color: var(--magenta); font-size: 10.5px; }
1661
- .ag-path { font-family: ui-monospace, Consolas, monospace; font-size: 10.5px; color: var(--dim); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 70vw; }
1662
-
1663
1711
  /* 消息 tooltip(JS 定位的单例浮层)*/
1664
1712
  .msg-tip-src { display: none; }
1665
1713
  .msg-tip { display: none; position: fixed; top: 0; left: 0; z-index: 200; background: var(--bg2); border: 1px solid var(--border); border-radius: 8px; box-shadow: 0 4px 16px rgba(0,0,0,.2); padding: 8px 12px; min-width: 300px; max-width: 600px; white-space: normal; }
@@ -1745,6 +1793,11 @@ tr.ag-disabled .ag-name { color: var(--dim); }
1745
1793
  .trig-table-col .trig-prompt { max-width: 240px; overflow: hidden; text-overflow: ellipsis; }
1746
1794
  .trig-table-col tr.trig-disabled td:not(:last-child) { color: var(--dim); }
1747
1795
  .trig-table-col tr.trig-disabled td:last-child { color: var(--fg); }
1796
+ .trig-table-col .trig-id-col,
1797
+ .trig-table-col .trig-subscription-col,
1798
+ .trig-table-col .trig-target-channel-col,
1799
+ .trig-table-col .trig-channel-id-col,
1800
+ .trig-table-col .trig-channel-type-col { display: none !important; }
1748
1801
  .trig-badge { display: inline-block; padding: 1px 7px; border-radius: 9px; font-size: 11px; border: 1px solid transparent; white-space: nowrap; }
1749
1802
  .trig-badge-active { color: var(--green, #3fb950); border-color: var(--green, #3fb950); }
1750
1803
  .trig-badge-disabled { color: var(--dim); border-color: var(--border); }
@@ -1788,6 +1841,12 @@ tr.ag-disabled .ag-name { color: var(--dim); }
1788
1841
  .trig-history-drawer {
1789
1842
  width: min(980px, 100vw);
1790
1843
  }
1844
+ .trig-history-actions { align-items: center; }
1845
+ .trig-history-count {
1846
+ margin-right: auto;
1847
+ color: var(--dim);
1848
+ font-size: 12px;
1849
+ }
1791
1850
  .trig-history-content {
1792
1851
  display: grid;
1793
1852
  grid-template-columns: 300px minmax(0, 1fr);
@@ -1797,31 +1856,24 @@ tr.ag-disabled .ag-name { color: var(--dim); }
1797
1856
  }
1798
1857
  .trig-history-list-pane {
1799
1858
  min-width: 0;
1859
+ min-height: 0;
1800
1860
  overflow-y: auto;
1801
1861
  border-right: 1px solid var(--border);
1802
1862
  background: var(--bg);
1803
1863
  }
1804
- .trig-history-pane-title {
1805
- position: sticky;
1806
- top: 0;
1807
- z-index: 1;
1808
- padding: 10px 12px;
1809
- border-bottom: 1px solid var(--border);
1810
- background: var(--bg2);
1811
- color: var(--dim);
1812
- font-size: 11px;
1813
- font-weight: 700;
1814
- }
1815
1864
  .trig-history-list {
1816
1865
  display: flex;
1817
1866
  flex-direction: column;
1818
1867
  }
1868
+ .trig-history-entry {
1869
+ border-bottom: 1px solid var(--border);
1870
+ }
1819
1871
  .trig-history-item {
1820
1872
  width: 100%;
1821
1873
  min-width: 0;
1822
1874
  padding: 10px 12px;
1823
1875
  border: 0;
1824
- border-bottom: 1px solid var(--border);
1876
+ border-bottom: 0;
1825
1877
  border-left: 3px solid transparent;
1826
1878
  background: transparent;
1827
1879
  color: var(--fg);
@@ -1843,6 +1895,14 @@ tr.ag-disabled .ag-name { color: var(--dim); }
1843
1895
  font-size: 12px;
1844
1896
  font-variant-numeric: tabular-nums;
1845
1897
  }
1898
+ .trig-history-chevron {
1899
+ margin-left: auto;
1900
+ color: var(--dim);
1901
+ font-size: 18px;
1902
+ line-height: 1;
1903
+ transition: transform .15s ease;
1904
+ }
1905
+ .trig-history-entry.expanded .trig-history-chevron { transform: rotate(90deg); color: var(--accent); }
1846
1906
  .trig-history-item-meta {
1847
1907
  display: flex;
1848
1908
  gap: 5px 10px;
@@ -1856,15 +1916,6 @@ tr.ag-disabled .ag-name { color: var(--dim); }
1856
1916
  text-overflow: ellipsis;
1857
1917
  white-space: nowrap;
1858
1918
  }
1859
- .trig-history-item-preview {
1860
- margin-top: 6px;
1861
- overflow: hidden;
1862
- color: var(--dim);
1863
- font-size: 11px;
1864
- line-height: 1.35;
1865
- text-overflow: ellipsis;
1866
- white-space: nowrap;
1867
- }
1868
1919
  .trig-run-status {
1869
1920
  flex-shrink: 0;
1870
1921
  padding: 1px 6px;
@@ -1881,12 +1932,24 @@ tr.ag-disabled .ag-name { color: var(--dim); }
1881
1932
  .trig-run-status-skipped { color: var(--orange); border-color: color-mix(in srgb, var(--orange) 55%, var(--border)); }
1882
1933
  .trig-run-status-failed { color: var(--red); border-color: color-mix(in srgb, var(--red) 55%, var(--border)); }
1883
1934
  .trig-run-status-dry-run { color: var(--accent); border-color: color-mix(in srgb, var(--accent) 55%, var(--border)); }
1884
- .trig-history-detail {
1935
+ .trig-history-detail-pane {
1885
1936
  min-width: 0;
1937
+ min-height: 0;
1886
1938
  overflow-y: auto;
1887
- padding: 16px 18px 24px;
1888
1939
  background: var(--bg2);
1889
1940
  }
1941
+ .trig-history-detail,
1942
+ .trig-history-inline-detail {
1943
+ min-width: 0;
1944
+ padding: 14px 16px 22px;
1945
+ border-top: 1px solid var(--border);
1946
+ background: var(--bg2);
1947
+ }
1948
+ .trig-history-inline-detail { display: none; }
1949
+ .trig-history-detail-pane > .trig-history-detail {
1950
+ min-height: 100%;
1951
+ border-top: 0;
1952
+ }
1890
1953
  .trig-history-detail-title {
1891
1954
  display: flex;
1892
1955
  align-items: center;
@@ -2119,16 +2182,27 @@ tr.ag-disabled .ag-name { color: var(--dim); }
2119
2182
  .trig-edit-grid .ag-edit-field-wide {
2120
2183
  grid-column: 1 / -1;
2121
2184
  }
2122
- @media (max-width: 760px) {
2185
+ @media (orientation: portrait) {
2186
+ .trig-history-drawer { width: 100vw; }
2123
2187
  .trig-history-backdrop { justify-content: flex-start; }
2124
2188
  .trig-history-content {
2125
- grid-template-columns: 1fr;
2126
- grid-template-rows: minmax(160px, 38dvh) minmax(0, 1fr);
2189
+ display: flex;
2190
+ flex-direction: column;
2127
2191
  }
2128
2192
  .trig-history-list-pane {
2129
- border-right: 0;
2130
- border-bottom: 1px solid var(--border);
2193
+ flex: 1;
2194
+ min-height: 0;
2195
+ border: 0;
2196
+ }
2197
+ .trig-history-detail-pane {
2198
+ display: none;
2131
2199
  }
2200
+ .trig-history-inline-detail {
2201
+ display: block;
2202
+ }
2203
+ }
2204
+
2205
+ @media (max-width: 760px), (orientation: portrait) {
2132
2206
  .trig-history-summary { grid-template-columns: 1fr; }
2133
2207
  .trig-exec-grid,
2134
2208
  .trig-limit-grid,
@@ -4934,3 +5008,504 @@ textarea.basic-settings-control { min-height: 78px; resize: vertical; line-heigh
4934
5008
  .basic-settings-secondary-btn,
4935
5009
  .basic-settings-primary-btn { padding-inline: 9px; }
4936
5010
  }
5011
+
5012
+ /* ── Responsive console layout ──
5013
+ The application remains server-rendered vanilla HTML. These rules only
5014
+ change the geometry and visibility of the existing view containers. */
5015
+ :root { --topbar-height: 44px; }
5016
+ html, body { min-width: 0; }
5017
+ body { min-height: 100vh; }
5018
+ .app { min-width: 0; min-height: 100vh; height: 100dvh; }
5019
+ .content, .view, .msg-layout, .msg-columns, .sess-layout, .trig-layout { min-width: 0; min-height: 0; }
5020
+ .content { padding-bottom: env(safe-area-inset-bottom); }
5021
+ .topbar { min-width: 0; padding-left: max(12px, env(safe-area-inset-left)); padding-right: max(12px, env(safe-area-inset-right)); }
5022
+ .topbar > * { min-width: 0; }
5023
+ .topbar-spacer { flex: 1 1 auto; }
5024
+ .mobile-menu-btn, .mobile-page-title, .mobile-nav-drawer, .mobile-nav-backdrop { display: none; }
5025
+
5026
+ /* Messages: three columns on wide screens, stacked selection rail on narrow
5027
+ landscape/portrait screens. */
5028
+ .msg-layout { display: flex; flex-direction: column; height: 100%; }
5029
+ .msg-columns { display: grid; grid-template-columns: 220px 260px minmax(0, 1fr); height: 100%; flex: 1; overflow: hidden; }
5030
+ .msg-columns > .msg-col { width: auto; min-width: 0; height: 100%; overflow: auto; }
5031
+ .msg-mobile-controls { display: none; }
5032
+ .msg-stream { min-width: 0; }
5033
+ .msg-stream .detail-toolbar { position: sticky; top: 0; z-index: 3; }
5034
+
5035
+ /* Sessions use two columns: the list (with filters above it) and the detail. */
5036
+ .sess-layout { display: grid; grid-template-columns: 360px minmax(0, 1fr); height: 100%; overflow: hidden; }
5037
+ .sess-list, .sess-detail { width: auto; min-width: 0; height: 100%; overflow: hidden; }
5038
+ .sess-list { border-right: 1px solid var(--border); display: flex; flex-direction: column; }
5039
+ .sess-detail { overflow-y: auto; }
5040
+ .sess-list .sess-items { min-height: 0; }
5041
+ .detail-toolbar { display: flex; align-items: center; gap: 10px; min-height: 42px; padding: 8px 14px; background: var(--bg2); border-bottom: 1px solid var(--border); }
5042
+ .sess-detail-toolbar .sess-view-control { margin-left: auto; }
5043
+ .detail-toolbar-title, .detail-placeholder { color: var(--dim); font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
5044
+ .view.detail-fullscreen .msg-columns, .view.detail-fullscreen .sess-layout { grid-template-columns: minmax(0, 1fr); }
5045
+ .view.detail-fullscreen .msg-mobile-controls, .view.detail-fullscreen #msg-aids, .view.detail-fullscreen #msg-peers,
5046
+ .view.detail-fullscreen #sess-list { display: none; }
5047
+ .view.detail-fullscreen #msg-stream, .view.detail-fullscreen #sess-detail { display: block; grid-column: 1; width: 100%; }
5048
+
5049
+ /* Logs: low-frequency filters collapse behind one touch-sized control. */
5050
+ .log-more-filters { display: none; min-height: 30px; border: 1px solid var(--border); border-radius: 5px; background: var(--bg); color: var(--fg); padding: 0 10px; cursor: pointer; font: inherit; white-space: nowrap; }
5051
+ .log-more-filters:hover { border-color: var(--accent); }
5052
+
5053
+ /* Trigger rows become compact cards on phones while retaining the existing
5054
+ operation buttons and drawers. */
5055
+ .trig-row { transition: background .12s ease; }
5056
+
5057
+ /* Agent table: keep the dense desktop table, but expose the identity, state,
5058
+ queue, model, recent activity and operations as the compact mobile card. */
5059
+
5060
+ @media (min-width: 901px) and (max-width: 1199px) and (orientation: landscape) {
5061
+ .msg-columns { grid-template-columns: minmax(150px, 21vw) minmax(180px, 25vw) minmax(0, 1fr); }
5062
+ .msg-columns #msg-aids, .msg-columns #msg-peers, .msg-columns #msg-stream { grid-column: auto; grid-row: auto; height: 100%; }
5063
+ .sess-layout { grid-template-columns: minmax(260px, 30vw) minmax(0, 1fr); }
5064
+ }
5065
+
5066
+ /* A tall Pad keeps the detail preview visible but stacks the two selection
5067
+ rails in the first column, matching the portrait two-column interaction. */
5068
+ @media (min-width: 901px) and (max-width: 1199px) and (orientation: portrait) {
5069
+ .msg-columns { grid-template-columns: minmax(220px, 34%) minmax(0, 1fr); }
5070
+ .msg-columns #msg-aids, .msg-columns #msg-peers { grid-column: 1; width: auto; border-right: 1px solid var(--border); }
5071
+ .msg-columns #msg-aids { grid-row: 1; height: 44%; border-bottom: 1px solid var(--border); }
5072
+ .msg-columns #msg-peers { grid-row: 2; height: 56%; }
5073
+ .msg-columns #msg-stream { grid-column: 2; grid-row: 1 / span 2; }
5074
+ .sess-layout { grid-template-columns: minmax(220px, 34%) minmax(0, 1fr); }
5075
+ .sess-list { grid-column: 1; grid-row: 1; }
5076
+ .sess-detail { grid-column: 2; grid-row: 1; }
5077
+ }
5078
+
5079
+ @media (max-width: 1199px) {
5080
+ .topbar { gap: 10px; }
5081
+ .tabs { gap: 2px; overflow-x: auto; scrollbar-width: none; }
5082
+ .tabs::-webkit-scrollbar { display: none; }
5083
+ .tab { padding-inline: 9px; }
5084
+ .build-ts { display: none !important; }
5085
+ }
5086
+
5087
+ @media (max-width: 900px) {
5088
+ .topbar { height: 48px; gap: 10px; }
5089
+ .mobile-menu-btn { display: inline-flex; align-items: center; justify-content: center; width: 36px; height: 36px; flex: 0 0 36px; border: 1px solid var(--border); border-radius: 6px; background: var(--bg); color: var(--fg); font-size: 20px; cursor: pointer; }
5090
+ .brand { display: none; }
5091
+ .mobile-page-title { display: block; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 600; }
5092
+ .topbar-spacer { display: none; }
5093
+ .tabs { display: none; }
5094
+ .build-ts, #lang-btn, #theme-btn, #basic-settings-btn, #logout-btn { display: none !important; }
5095
+ .conn-status { margin-left: auto; font-size: 11px; white-space: nowrap; }
5096
+ .mobile-nav-backdrop { position: fixed; inset: 0; z-index: 20; background: rgba(0,0,0,.34); }
5097
+ .mobile-nav-backdrop.open { display: block; }
5098
+ .mobile-nav-drawer { display: flex; position: fixed; z-index: 21; inset: 0 auto 0 0; width: min(320px, 86vw); flex-direction: column; background: var(--bg2); border-right: 1px solid var(--border); box-shadow: 12px 0 30px rgba(0,0,0,.18); transform: translateX(-102%); transition: transform .18s ease; padding: max(10px, env(safe-area-inset-top)) 0 max(10px, env(safe-area-inset-bottom)); }
5099
+ .mobile-nav-drawer.open { transform: translateX(0); }
5100
+ .mobile-nav-head { display: flex; align-items: center; justify-content: space-between; min-height: 48px; padding: 0 14px; border-bottom: 1px solid var(--border); }
5101
+ .icon-btn { width: 34px; height: 34px; border: 1px solid var(--border); border-radius: 6px; background: var(--bg); color: var(--fg); font-size: 22px; cursor: pointer; }
5102
+ .mobile-nav-list { display: flex; flex-direction: column; gap: 3px; padding: 10px; overflow-y: auto; }
5103
+ .mobile-nav-item, .mobile-nav-tool { min-height: 42px; border: 0; border-radius: 6px; padding: 8px 12px; background: transparent; color: var(--fg); text-align: left; font: inherit; cursor: pointer; }
5104
+ .mobile-nav-item:hover, .mobile-nav-tool:hover, .mobile-nav-item.active { background: var(--bg3); color: var(--accent); }
5105
+ .mobile-nav-tools { display: flex; flex-direction: column; gap: 3px; padding: 10px; border-top: 1px solid var(--border); margin-top: auto; }
5106
+ .mobile-nav-tool { display: flex; align-items: center; gap: 10px; }
5107
+ body.mobile-nav-open { overflow: hidden; }
5108
+ .msg-mobile-controls { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 8px; padding: 8px 10px; background: var(--bg2); border-bottom: 1px solid var(--border); flex-shrink: 0; }
5109
+ .msg-mobile-controls label { display: flex; flex-direction: column; gap: 3px; min-width: 0; color: var(--dim); font-size: 10px; }
5110
+ .msg-mobile-controls select { width: 100%; min-width: 0; min-height: 34px; border: 1px solid var(--border); border-radius: 6px; background: var(--bg); color: var(--fg); padding: 0 8px; font: inherit; }
5111
+ .msg-columns { grid-template-columns: minmax(190px, 34%) minmax(0, 1fr); }
5112
+ .msg-columns #msg-aids, .msg-columns #msg-peers { grid-column: 1; width: auto; border-right: 1px solid var(--border); }
5113
+ .msg-columns #msg-aids { grid-row: 1; height: 44%; border-bottom: 1px solid var(--border); }
5114
+ .msg-columns #msg-peers { grid-row: 2; height: 56%; }
5115
+ .msg-columns #msg-stream { grid-column: 2; grid-row: 1 / span 2; }
5116
+ .sess-layout { grid-template-columns: minmax(210px, 34%) minmax(0, 1fr); }
5117
+ .sess-list { grid-column: 1; grid-row: 1; }
5118
+ .sess-detail { grid-column: 2; grid-row: 1; }
5119
+ .sess-select-row { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 4px; }
5120
+ .log-toolbar { overflow: visible; }
5121
+ .log-more-filters { display: inline-flex; align-items: center; justify-content: center; }
5122
+ .log-toolbar:not(.filters-expanded) .log-secondary-control { display: none; }
5123
+ .log-toolbar.filters-expanded .log-secondary-control { display: flex; }
5124
+ }
5125
+
5126
+ /* Portrait devices keep the desktop tool access in the top bar. The title
5127
+ yields space first so language, theme, settings and logout remain visible. */
5128
+ @media (max-width: 900px) and (orientation: portrait) {
5129
+ .topbar { gap: 6px; }
5130
+ .mobile-page-title { flex: 1 1 auto; }
5131
+ #lang-btn,
5132
+ #theme-btn,
5133
+ #basic-settings-btn,
5134
+ #logout-btn {
5135
+ display: inline-flex !important;
5136
+ align-items: center;
5137
+ justify-content: center;
5138
+ flex: 0 0 auto;
5139
+ margin-left: 0;
5140
+ }
5141
+ #lang-btn,
5142
+ #theme-btn,
5143
+ #basic-settings-btn { width: 30px; height: 30px; padding: 0; }
5144
+ #logout-btn { min-width: 32px; min-height: 30px; padding: 2px 5px; font-size: 11px; }
5145
+ }
5146
+
5147
+ @media (max-width: 720px) {
5148
+ /* The view itself must remain the vertical scroll owner on phones. The
5149
+ inner panes still own their own scroll where they are intentionally
5150
+ split into columns. */
5151
+ .view { overflow-x: hidden; overflow-y: auto; }
5152
+ .msg-columns { grid-template-columns: minmax(155px, 38%) minmax(0, 1fr); }
5153
+ .msg-mobile-controls { grid-template-columns: 1fr 1fr; }
5154
+ .sess-layout { grid-template-columns: minmax(0, 42%) minmax(0, 1fr); }
5155
+ .sess-filter { padding: 8px; }
5156
+ .sess-items .list-item { padding: 10px 9px; }
5157
+ .detail-toolbar { padding-inline: 10px; }
5158
+ .log-toolbar { grid-template-columns: 1fr 1fr; display: grid; gap: 8px; padding: 8px 10px; }
5159
+ .log-primary-control, .log-search { min-width: 0; }
5160
+ .log-search { grid-column: 1 / -1; }
5161
+ .log-more-filters { width: 100%; }
5162
+ .log-toolbar.filters-expanded .log-secondary-control { display: flex; }
5163
+ .log-line { grid-template-columns: 96px 52px minmax(0, 1fr); gap: 7px; padding: 5px 10px; }
5164
+ .log-module { max-width: 100%; }
5165
+ #view-agents { padding: 0 8px; overflow-x: hidden; overflow-y: auto; }
5166
+ #view-agents table { display: block; width: 100%; }
5167
+ #view-agents table thead { display: none; }
5168
+ #view-agents table tbody, #view-agents table tr { display: block; }
5169
+ #view-agents tr.ag-main { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 6px 10px; margin: 8px 0 0; padding: 10px; border: 1px solid var(--border); border-radius: 8px 8px 0 0; background: var(--bg2); }
5170
+ #view-agents tr.ag-main > td { display: none; padding: 0; border: 0; min-width: 0; }
5171
+ #view-agents tr.ag-main > td:nth-child(1), #view-agents tr.ag-main > td:nth-child(2), #view-agents tr.ag-main > td:nth-child(3), #view-agents tr.ag-main > td:nth-child(4), #view-agents tr.ag-main > td:nth-child(11), #view-agents tr.ag-main > td:nth-child(12) { display: block; }
5172
+ #view-agents tr.ag-main > td:nth-child(1) { grid-column: 1; grid-row: 1; }
5173
+ #view-agents tr.ag-main > td:nth-child(2) { grid-column: 2; grid-row: 1; text-align: right; }
5174
+ #view-agents tr.ag-main > td:nth-child(3) { grid-column: 1; grid-row: 2; }
5175
+ #view-agents tr.ag-main > td:nth-child(4) { grid-column: 2; grid-row: 2; text-align: right; font-size: 11px; }
5176
+ #view-agents tr.ag-main > td:nth-child(11) { grid-column: 1; grid-row: 3; color: var(--dim); font-size: 11px; }
5177
+ #view-agents tr.ag-main > td:nth-child(12) { grid-column: 2; grid-row: 3; text-align: right; }
5178
+ #view-agents tr.ag-sub { display: block; margin: 0 0 8px; padding: 0 10px 9px; border: 1px solid var(--border); border-top: 0; border-radius: 0 0 8px 8px; background: var(--bg2); }
5179
+ #view-agents tr.ag-sub > td { display: block; padding: 0; border: 0; }
5180
+ .agent-ops { justify-content: flex-end; flex-wrap: wrap; }
5181
+ .agent-ops .ctrl-btn { min-height: 30px; }
5182
+ .trig-layout { flex-direction: column; overflow: auto; }
5183
+ .trig-agents-col { width: 100%; max-height: 118px; border-right: 0; border-bottom: 1px solid var(--border); }
5184
+ .trig-agents-col.collapsed { width: 100%; height: 38px; min-height: 38px; }
5185
+ .trig-table-col { overflow: visible; }
5186
+ .trig-table-col table, .trig-table-col tbody { display: block; width: 100%; }
5187
+ .trig-table-col thead { display: none; }
5188
+ .trig-table-col tr.trig-row { display: block; margin: 8px 10px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg2); overflow: hidden; }
5189
+ .trig-table-col tr.trig-row td { display: none; white-space: normal; max-width: none; padding: 8px 10px; border-bottom: 1px solid var(--border); }
5190
+ .trig-table-col tr.trig-row td:nth-child(1), .trig-table-col tr.trig-row td:nth-child(2), .trig-table-col tr.trig-row td:nth-child(4), .trig-table-col tr.trig-row td:nth-child(7), .trig-table-col tr.trig-row td:nth-child(9), .trig-table-col tr.trig-row td:nth-child(11), .trig-table-col tr.trig-row td:last-child { display: flex; align-items: baseline; gap: 8px; }
5191
+ .trig-table-col tr.trig-row td:nth-child(1) { font-weight: 600; }
5192
+ .trig-table-col tr.trig-row td::before { content: attr(data-mobile-label); }
5193
+ .trig-table-col tr.trig-row td::before { flex: 0 0 68px; color: var(--dim); font-size: 10px; }
5194
+ .trig-table-col tr.trig-row.trig-expanded td { display: flex; }
5195
+ .trig-table-col tr.trig-row td.trig-ops-col { position: static; }
5196
+ .trig-table-col tr.trig-row td:last-child { border-bottom: 0; }
5197
+ .trig-table-col .trig-ops { margin-left: auto; }
5198
+ }
5199
+
5200
+ @media (max-width: 479px) {
5201
+ .msg-mobile-controls { grid-template-columns: 1fr; }
5202
+ .msg-columns { display: block; overflow: auto; }
5203
+ .msg-columns #msg-aids, .msg-columns #msg-peers { display: none; }
5204
+ .msg-columns #msg-stream { display: block; height: 100%; }
5205
+ .sess-layout { display: block; overflow: auto; }
5206
+ .sess-list { height: auto; min-height: 42%; border-right: 0; }
5207
+ .sess-detail { display: none; height: 100%; }
5208
+ .view.detail-fullscreen .sess-list { display: none; }
5209
+ .view.detail-fullscreen .sess-detail { display: block; }
5210
+ .view.detail-fullscreen .sess-layout { display: block; }
5211
+ .log-toolbar { grid-template-columns: 1fr; }
5212
+ .log-follow { justify-content: flex-start; }
5213
+ .log-line { display: block; padding: 6px 10px; }
5214
+ .log-time, .log-level, .log-module { display: inline-block; margin-right: 7px; }
5215
+ .log-content { margin-top: 3px; }
5216
+ .mobile-nav-drawer { width: min(300px, 88vw); }
5217
+ }
5218
+
5219
+ /* Portrait log pages keep only the four high-frequency controls in one row:
5220
+ source, level, line count and follow-tail. */
5221
+ @media (max-width: 900px) and (orientation: portrait) {
5222
+ .log-toolbar {
5223
+ display: grid;
5224
+ grid-template-columns: minmax(0, 1.3fr) minmax(0, .9fr) minmax(0, .9fr) max-content;
5225
+ gap: 6px;
5226
+ overflow: hidden;
5227
+ padding: 8px 10px;
5228
+ }
5229
+ .log-toolbar .log-secondary-control:not(.log-limit-control),
5230
+ .log-toolbar .log-search,
5231
+ .log-toolbar .log-more-filters { display: none !important; }
5232
+ .log-toolbar .log-limit-control,
5233
+ .log-toolbar:not(.filters-expanded) .log-limit-control { display: flex !important; }
5234
+ .log-toolbar .log-control,
5235
+ .log-toolbar .log-follow { min-width: 0; }
5236
+ .log-toolbar select { height: 30px; min-width: 0; padding-inline: 5px; font-size: 11px; }
5237
+ .log-toolbar .log-follow { gap: 4px; font-size: 11px; }
5238
+ }
5239
+
5240
+ /* Keep agents and triggers as scannable lists in portrait mode. The compact
5241
+ card treatment is reserved for narrow landscape windows only. */
5242
+ @media (max-width: 900px) and (orientation: portrait) {
5243
+ #view-agents { padding: 0; overflow-x: hidden; overflow-y: auto; }
5244
+ #view-agents table { display: table; width: 100%; min-width: 0; }
5245
+ #view-agents table thead { display: table-header-group; }
5246
+ #view-agents table tbody { display: table-row-group; }
5247
+ #view-agents table tr { display: table-row; }
5248
+ #view-agents table th, #view-agents table td { display: table-cell; }
5249
+ #view-agents tr.ag-main {
5250
+ display: table-row; margin: 0; padding: 0; border: 0; border-radius: 0; background: transparent;
5251
+ }
5252
+ #view-agents tr.ag-main > td,
5253
+ #view-agents tr.ag-main > td:nth-child(n) {
5254
+ display: table-cell; padding: 7px 12px; border: 0; border-bottom: 1px solid var(--border); min-width: 0;
5255
+ }
5256
+ #view-agents tr.ag-sub {
5257
+ display: table-row; margin: 0; padding: 0; border: 0; border-radius: 0; background: transparent;
5258
+ }
5259
+ #view-agents tr.ag-sub > td { display: table-cell; padding: 0 12px 9px; border: 0; }
5260
+ .agent-ops { justify-content: flex-start; flex-wrap: nowrap; }
5261
+ .agent-ops .ctrl-btn { min-height: 0; }
5262
+
5263
+ .trig-layout { flex-direction: row; overflow: hidden; }
5264
+ .trig-agents-col { width: 200px; max-height: none; border-right: 1px solid var(--border); border-bottom: 0; }
5265
+ .trig-agents-col.collapsed { width: 34px; height: auto; min-height: 0; }
5266
+ .trig-table-col { overflow: auto; }
5267
+ .trig-table-col table { display: table; width: max-content; min-width: 100%; }
5268
+ .trig-table-col tbody { display: table-row-group; width: auto; }
5269
+ .trig-table-col thead { display: table-header-group; }
5270
+ .trig-table-col tr.trig-row {
5271
+ display: table-row; margin: 0; border: 0; border-radius: 0; background: transparent; overflow: visible;
5272
+ }
5273
+ .trig-table-col tr.trig-row td,
5274
+ .trig-table-col tr.trig-row td:nth-child(n),
5275
+ .trig-table-col tr.trig-row.trig-expanded td {
5276
+ display: table-cell; white-space: nowrap; max-width: none; padding: 6px 10px; border-bottom: 1px solid var(--border);
5277
+ }
5278
+ .trig-table-col tr.trig-row td::before { content: none; display: none; }
5279
+ .trig-table-col tr.trig-row td.trig-ops-col { position: sticky; right: 0; }
5280
+ .trig-table-col tr.trig-row td:last-child { border-bottom: 1px solid var(--border); }
5281
+ .trig-table-col .trig-ops { margin-left: 0; }
5282
+ }
5283
+
5284
+ /* The left rail already identifies the selected agent in every portrait
5285
+ layout, so the duplicate Agent column is hidden from the trigger table. */
5286
+ @media (orientation: portrait) {
5287
+ .trig-table-col .trig-agent-col { display: none !important; }
5288
+ }
5289
+
5290
+ /* In the two-column message layout, Agent and Chats share one expandable
5291
+ navigation rail. The independent selectors are reserved for the narrowest
5292
+ single-column layout. */
5293
+ @media (min-width: 480px) and (max-width: 900px),
5294
+ (min-width: 901px) and (max-width: 1199px) and (orientation: portrait) {
5295
+ .msg-mobile-controls { display: none !important; }
5296
+ .msg-columns #msg-aids {
5297
+ grid-column: 1;
5298
+ grid-row: 1;
5299
+ height: 100%;
5300
+ border-right: 1px solid var(--border);
5301
+ border-bottom: 0;
5302
+ }
5303
+ .msg-columns #msg-peers { display: none !important; }
5304
+ .msg-columns #msg-stream { grid-column: 2; grid-row: 1; height: 100%; }
5305
+ .msg-aids-list { display: none; }
5306
+ .msg-tree-view { display: block; }
5307
+ }
5308
+
5309
+ /* Agent statistics are useful on wide screens, but they should never force
5310
+ the Agent view itself to scroll horizontally on a narrow viewport. */
5311
+ @media (max-width: 1199px) {
5312
+ #view-agents { overflow-x: hidden; overflow-y: auto; }
5313
+ #view-agents .agents-table {
5314
+ width: 100%;
5315
+ min-width: 0;
5316
+ /* Let the browser size text columns naturally. Fixed layout was making
5317
+ the operation cell collapse when the statistics columns were hidden. */
5318
+ table-layout: auto;
5319
+ }
5320
+ #view-agents .agents-table th,
5321
+ #view-agents .agents-table td {
5322
+ min-width: 0;
5323
+ overflow: visible;
5324
+ text-overflow: clip;
5325
+ }
5326
+ #view-agents .agents-table th:not(:last-child),
5327
+ #view-agents .agents-table td:not(.agent-ops-cell) {
5328
+ overflow: hidden;
5329
+ text-overflow: ellipsis;
5330
+ }
5331
+ #view-agents .agents-table-enabled th:nth-child(6),
5332
+ #view-agents .agents-table-enabled td:nth-child(6),
5333
+ #view-agents .agents-table-enabled th:nth-child(7),
5334
+ #view-agents .agents-table-enabled td:nth-child(7),
5335
+ #view-agents .agents-table-enabled th:nth-child(8),
5336
+ #view-agents .agents-table-enabled td:nth-child(8),
5337
+ #view-agents .agents-table-enabled th:nth-child(9),
5338
+ #view-agents .agents-table-enabled td:nth-child(9),
5339
+ #view-agents .agents-table-enabled th:nth-child(10),
5340
+ #view-agents .agents-table-enabled td:nth-child(10) {
5341
+ display: none;
5342
+ }
5343
+ #view-agents .agents-table-enabled .agent-ops-cell {
5344
+ width: 1%;
5345
+ min-width: 92px;
5346
+ white-space: nowrap;
5347
+ }
5348
+ #view-agents .agents-table-disabled .agent-ops-cell {
5349
+ width: 1%;
5350
+ min-width: 92px;
5351
+ white-space: nowrap;
5352
+ }
5353
+ #view-agents .agents-table .agent-ops-cell { overflow: visible; }
5354
+ #view-agents .agents-table-enabled .agent-ops { flex-wrap: wrap; gap: 3px; }
5355
+ }
5356
+
5357
+ @media (max-width: 900px) and (orientation: portrait) {
5358
+ /* Portrait agents stay a real table. Keep the action cell readable and
5359
+ allow the outer view to scroll vertically when rows exceed the viewport. */
5360
+ #view-agents { overflow-x: hidden; overflow-y: auto; }
5361
+ #view-agents .agents-table th,
5362
+ #view-agents .agents-table th:last-child { background: var(--bg2); }
5363
+ #view-agents .agents-table-enabled th:nth-child(1),
5364
+ #view-agents .agents-table-enabled td:nth-child(1) { width: 30%; }
5365
+ #view-agents .agents-table-enabled th:nth-child(2),
5366
+ #view-agents .agents-table-enabled td:nth-child(2) { width: 13%; }
5367
+ #view-agents .agents-table-enabled th:nth-child(3),
5368
+ #view-agents .agents-table-enabled td:nth-child(3) { width: 12%; }
5369
+ #view-agents .agents-table-enabled th:nth-child(4),
5370
+ #view-agents .agents-table-enabled td:nth-child(4) { width: 13%; }
5371
+ #view-agents .agents-table-enabled th:nth-child(5),
5372
+ #view-agents .agents-table-enabled td:nth-child(5) { width: 10%; }
5373
+ #view-agents .agents-table-enabled th:nth-child(11),
5374
+ #view-agents .agents-table-enabled td:nth-child(11) { width: 12%; }
5375
+ #view-agents .agents-table-enabled th:nth-child(12),
5376
+ #view-agents .agents-table-enabled td:nth-child(12) { width: 1%; min-width: 92px; }
5377
+ #view-agents .agents-table-enabled .agent-ops-cell { white-space: normal; }
5378
+ #view-agents .agents-table-enabled .agent-ops { flex-wrap: wrap; }
5379
+ #view-agents .agents-table-disabled th:nth-child(1),
5380
+ #view-agents .agents-table-disabled td:nth-child(1) { width: 86%; }
5381
+ #view-agents .agents-table-disabled th:nth-child(2),
5382
+ #view-agents .agents-table-disabled td:nth-child(2) { width: 1%; min-width: 92px; }
5383
+ #view-agents .agents-table-disabled .agent-ops-cell { white-space: normal; }
5384
+ }
5385
+
5386
+ /* Narrow screens use the same list/table treatment as the horizontal view.
5387
+ This final block intentionally overrides the older compact-card rules above
5388
+ so rows keep their column alignment and the page can scroll vertically. */
5389
+ @media (max-width: 720px) {
5390
+ #view-agents { padding: 0; overflow-x: hidden; overflow-y: auto; }
5391
+ #view-agents .agents-table {
5392
+ display: table;
5393
+ width: 100%;
5394
+ max-width: 100%;
5395
+ min-width: 0;
5396
+ table-layout: auto;
5397
+ }
5398
+ #view-agents .agents-table thead { display: table-header-group; }
5399
+ #view-agents .agents-table tbody { display: table-row-group; }
5400
+ #view-agents .agents-table tr,
5401
+ #view-agents .agents-table tr.ag-main,
5402
+ #view-agents .agents-table tr.ag-sub { display: table-row; }
5403
+ #view-agents .agents-table th,
5404
+ #view-agents .agents-table td,
5405
+ #view-agents .agents-table tr.ag-main > td,
5406
+ #view-agents .agents-table tr.ag-sub > td {
5407
+ display: table-cell;
5408
+ min-width: 0;
5409
+ padding: 7px 8px;
5410
+ border: 0;
5411
+ border-bottom: 1px solid var(--border);
5412
+ background: transparent;
5413
+ vertical-align: middle;
5414
+ }
5415
+ #view-agents .agents-table th,
5416
+ #view-agents .agents-table th:last-child { background: var(--bg2); }
5417
+ /* The row reset above restores table-cell display for alignment; reapply
5418
+ the narrow-screen statistics policy afterwards so hidden cells do not
5419
+ consume zero-width columns before the operations cell. */
5420
+ #view-agents .agents-table-enabled th:nth-child(6),
5421
+ #view-agents .agents-table-enabled td:nth-child(6),
5422
+ #view-agents .agents-table-enabled th:nth-child(7),
5423
+ #view-agents .agents-table-enabled td:nth-child(7),
5424
+ #view-agents .agents-table-enabled th:nth-child(8),
5425
+ #view-agents .agents-table-enabled td:nth-child(8),
5426
+ #view-agents .agents-table-enabled th:nth-child(9),
5427
+ #view-agents .agents-table-enabled td:nth-child(9),
5428
+ #view-agents .agents-table-enabled th:nth-child(10),
5429
+ #view-agents .agents-table-enabled td:nth-child(10),
5430
+ #view-agents .agents-table-enabled tr.ag-main > td:nth-child(6),
5431
+ #view-agents .agents-table-enabled tr.ag-main > td:nth-child(7),
5432
+ #view-agents .agents-table-enabled tr.ag-main > td:nth-child(8),
5433
+ #view-agents .agents-table-enabled tr.ag-main > td:nth-child(9),
5434
+ #view-agents .agents-table-enabled tr.ag-main > td:nth-child(10) { display: none; }
5435
+ #view-agents .agents-table tr.ag-sub > td { padding-top: 0; padding-bottom: 8px; border-bottom: none; }
5436
+ #view-agents .agents-table-enabled tr.ag-main > td { border-bottom: none; }
5437
+ #view-agents .agents-table-enabled th:nth-child(1),
5438
+ #view-agents .agents-table-enabled td:nth-child(1) { width: 24%; }
5439
+ #view-agents .agents-table-enabled th:nth-child(2),
5440
+ #view-agents .agents-table-enabled td:nth-child(2) { width: 10%; }
5441
+ #view-agents .agents-table-enabled th:nth-child(3),
5442
+ #view-agents .agents-table-enabled td:nth-child(3) { width: 8%; }
5443
+ #view-agents .agents-table-enabled th:nth-child(4),
5444
+ #view-agents .agents-table-enabled td:nth-child(4) { width: 13%; }
5445
+ #view-agents .agents-table-enabled th:nth-child(5),
5446
+ #view-agents .agents-table-enabled td:nth-child(5) { width: 10%; }
5447
+ #view-agents .agents-table-enabled th:nth-child(11),
5448
+ #view-agents .agents-table-enabled td:nth-child(11) { width: 13%; }
5449
+ #view-agents .agents-table-enabled th:nth-child(12),
5450
+ #view-agents .agents-table-enabled td:nth-child(12) { width: 1%; min-width: 92px; }
5451
+ #view-agents .agents-table-enabled td:not(.agent-ops-cell) {
5452
+ overflow: hidden;
5453
+ text-overflow: ellipsis;
5454
+ white-space: normal;
5455
+ }
5456
+ #view-agents .agents-table-enabled .agent-ops-cell {
5457
+ min-width: 92px;
5458
+ overflow: visible;
5459
+ white-space: normal;
5460
+ }
5461
+ #view-agents .agents-table-disabled .agent-ops-cell {
5462
+ min-width: 92px;
5463
+ overflow: visible;
5464
+ white-space: normal;
5465
+ }
5466
+ #view-agents .agents-table td.agent-ops-cell { background: var(--bg); box-shadow: -1px 0 0 var(--border); }
5467
+ #view-agents .agents-table tr:hover td.agent-ops-cell { background: var(--bg2); }
5468
+ #view-agents .agents-table-enabled .agent-ops,
5469
+ #view-agents .agents-table-disabled .agent-ops {
5470
+ justify-content: flex-start;
5471
+ flex-wrap: wrap;
5472
+ gap: 3px;
5473
+ }
5474
+ #view-agents .agents-table-enabled .agent-ops .ctrl-btn,
5475
+ #view-agents .agents-table-disabled .agent-ops .ctrl-btn {
5476
+ min-height: 26px;
5477
+ padding: 2px 5px;
5478
+ font-size: 10px;
5479
+ }
5480
+ #view-agents .agents-table-enabled .agent-ops-cell .agent-ops { min-width: 0; }
5481
+ #view-agents .agents-table-disabled th:nth-child(1),
5482
+ #view-agents .agents-table-disabled td:nth-child(1) { width: 86%; }
5483
+ #view-agents .agents-table-disabled th:nth-child(2),
5484
+ #view-agents .agents-table-disabled td:nth-child(2) { width: 1%; min-width: 92px; }
5485
+ #view-agents .agents-table-disabled td:nth-child(1) {
5486
+ overflow: hidden;
5487
+ text-overflow: ellipsis;
5488
+ white-space: normal;
5489
+ }
5490
+
5491
+ .trig-layout { flex-direction: row; overflow: hidden; }
5492
+ .trig-agents-col { width: min(200px, 34vw); max-height: none; border-right: 1px solid var(--border); border-bottom: 0; }
5493
+ .trig-agents-col.collapsed { width: 34px; height: auto; min-height: 0; }
5494
+ .trig-table-col { overflow: auto; }
5495
+ .trig-table-col table { display: table; width: max-content; min-width: 100%; }
5496
+ .trig-table-col tbody { display: table-row-group; }
5497
+ .trig-table-col thead { display: table-header-group; }
5498
+ .trig-table-col tr.trig-row { display: table-row; margin: 0; border: 0; border-radius: 0; background: transparent; overflow: visible; }
5499
+ .trig-table-col tr.trig-row td,
5500
+ .trig-table-col tr.trig-row td:nth-child(n),
5501
+ .trig-table-col tr.trig-row.trig-expanded td {
5502
+ display: table-cell;
5503
+ white-space: nowrap;
5504
+ max-width: none;
5505
+ padding: 6px 10px;
5506
+ border-bottom: 1px solid var(--border);
5507
+ }
5508
+ .trig-table-col tr.trig-row td::before { content: none; display: none; }
5509
+ .trig-table-col tr.trig-row td.trig-ops-col { position: sticky; right: 0; }
5510
+ .trig-table-col .trig-ops { margin-left: 0; }
5511
+ }