@validation-os/dashboard 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/styles.css CHANGED
@@ -294,14 +294,45 @@
294
294
  .vos-nav-item.is-active .vos-nav-ic {
295
295
  opacity: 1;
296
296
  }
297
+ .vos-nav-alert {
298
+ margin-left: auto;
299
+ display: inline-flex;
300
+ align-items: center;
301
+ justify-content: center;
302
+ min-width: 18px;
303
+ height: 18px;
304
+ padding: 0 5px;
305
+ border-radius: 999px;
306
+ background: var(--vos-crit);
307
+ color: #fff;
308
+ font-size: 11px;
309
+ font-weight: 600;
310
+ }
297
311
  .vos-nav-count {
298
312
  margin-left: auto;
299
313
  font-size: 12px;
300
314
  color: var(--vos-faint);
301
315
  }
316
+ .vos-nav-alert + .vos-nav-count {
317
+ margin-left: 6px;
318
+ }
302
319
  .vos-nav-item.is-active .vos-nav-count {
303
320
  color: var(--vos-accent-text);
304
321
  }
322
+ .vos-nav-default {
323
+ margin-left: auto;
324
+ font-size: 9px;
325
+ letter-spacing: 0.04em;
326
+ text-transform: uppercase;
327
+ color: var(--vos-faint);
328
+ border: 1px solid var(--vos-border);
329
+ border-radius: 4px;
330
+ padding: 1px 4px;
331
+ }
332
+ .vos-nav-item.is-active .vos-nav-default {
333
+ color: var(--vos-accent-text);
334
+ border-color: var(--vos-accent-text);
335
+ }
305
336
 
306
337
  .vos-main {
307
338
  grid-area: main;
@@ -324,6 +355,25 @@
324
355
  color: var(--vos-muted);
325
356
  font-size: 13px;
326
357
  }
358
+ .vos-crumbs {
359
+ display: flex;
360
+ align-items: center;
361
+ gap: 7px;
362
+ font-size: 12.5px;
363
+ color: var(--vos-muted);
364
+ margin-bottom: 14px;
365
+ }
366
+ .vos-crumbs button {
367
+ border: none;
368
+ background: none;
369
+ color: var(--vos-accent-text);
370
+ cursor: pointer;
371
+ font: inherit;
372
+ padding: 0;
373
+ }
374
+ .vos-crumbs button:hover {
375
+ text-decoration: underline;
376
+ }
327
377
 
328
378
  /* ── buttons ───────────────────────────────────────────────────────────── */
329
379
  .vos-btn {
@@ -969,3 +1019,1017 @@ textarea.vos-input {
969
1019
  font-size: 13px;
970
1020
  color: var(--vos-text);
971
1021
  }
1022
+
1023
+ /* ── portfolio pipeline (OPS-1300) ─────────────────────────────────────── */
1024
+
1025
+ /* headline: the one burn-up reading, a single meter (not a chart) */
1026
+ .vos-pipe-hero {
1027
+ background: var(--vos-surface);
1028
+ border: 1px solid var(--vos-border);
1029
+ border-radius: var(--vos-radius);
1030
+ box-shadow: var(--vos-shadow);
1031
+ padding: 20px 24px;
1032
+ margin-bottom: 20px;
1033
+ display: flex;
1034
+ align-items: center;
1035
+ justify-content: space-between;
1036
+ gap: 28px;
1037
+ flex-wrap: wrap;
1038
+ }
1039
+ .vos-pipe-eyebrow {
1040
+ text-transform: uppercase;
1041
+ letter-spacing: 0.07em;
1042
+ font-size: 11px;
1043
+ font-weight: 600;
1044
+ color: var(--vos-muted);
1045
+ }
1046
+ .vos-pipe-big {
1047
+ font-family: var(--vos-mono);
1048
+ font-size: 54px;
1049
+ font-weight: 600;
1050
+ letter-spacing: -0.03em;
1051
+ line-height: 1;
1052
+ margin: 6px 0 4px;
1053
+ color: var(--vos-text);
1054
+ }
1055
+ .vos-pipe-big span {
1056
+ font-size: 26px;
1057
+ color: var(--vos-muted);
1058
+ }
1059
+ .vos-pipe-sub {
1060
+ font-size: 13px;
1061
+ color: var(--vos-muted);
1062
+ }
1063
+ .vos-pipe-figs {
1064
+ display: flex;
1065
+ gap: 26px;
1066
+ }
1067
+ .vos-pipe-fig {
1068
+ text-align: right;
1069
+ }
1070
+ .vos-pipe-fv {
1071
+ font-family: var(--vos-mono);
1072
+ font-variant-numeric: tabular-nums;
1073
+ font-size: 22px;
1074
+ font-weight: 600;
1075
+ color: var(--vos-text);
1076
+ }
1077
+ .vos-pipe-fl {
1078
+ font-size: 11px;
1079
+ color: var(--vos-muted);
1080
+ margin-top: 1px;
1081
+ }
1082
+
1083
+ /* stage legend: the four meters every belief carries */
1084
+ .vos-pipe-stages {
1085
+ display: flex;
1086
+ align-items: stretch;
1087
+ margin: 0 0 10px;
1088
+ flex-wrap: wrap;
1089
+ }
1090
+ .vos-pipe-stage {
1091
+ flex: 1;
1092
+ min-width: 150px;
1093
+ display: flex;
1094
+ gap: 8px;
1095
+ align-items: flex-start;
1096
+ padding: 8px 12px;
1097
+ }
1098
+ .vos-pipe-idx {
1099
+ font-family: var(--vos-mono);
1100
+ font-size: 11px;
1101
+ font-weight: 600;
1102
+ color: #fff;
1103
+ background: var(--vos-accent);
1104
+ width: 18px;
1105
+ height: 18px;
1106
+ border-radius: 5px;
1107
+ display: grid;
1108
+ place-items: center;
1109
+ flex: none;
1110
+ }
1111
+ .vos-pipe-idx-open {
1112
+ background: transparent;
1113
+ color: var(--vos-accent-text);
1114
+ border: 1px dashed var(--vos-accent);
1115
+ }
1116
+ .vos-pipe-skname {
1117
+ font-size: 12.5px;
1118
+ font-weight: 600;
1119
+ }
1120
+ .vos-pipe-skdesc {
1121
+ font-size: 11px;
1122
+ color: var(--vos-muted);
1123
+ line-height: 1.35;
1124
+ }
1125
+ .vos-pipe-arrow {
1126
+ align-self: center;
1127
+ color: var(--vos-border-strong);
1128
+ flex: none;
1129
+ padding: 0 2px;
1130
+ }
1131
+
1132
+ /* the board */
1133
+ .vos-pipe-board {
1134
+ overflow: visible;
1135
+ }
1136
+ .vos-pipe-boardhead {
1137
+ display: flex;
1138
+ align-items: center;
1139
+ justify-content: space-between;
1140
+ padding: 12px 16px;
1141
+ border-bottom: 1px solid var(--vos-border);
1142
+ }
1143
+ .vos-pipe-bt {
1144
+ font-size: 13px;
1145
+ font-weight: 600;
1146
+ }
1147
+ .vos-pipe-bt span {
1148
+ color: var(--vos-muted);
1149
+ font-weight: 400;
1150
+ }
1151
+ .vos-pipe-sortnote {
1152
+ font-size: 11.5px;
1153
+ color: var(--vos-muted);
1154
+ }
1155
+
1156
+ .vos-pipe-row {
1157
+ display: grid;
1158
+ grid-template-columns: 4px minmax(200px, 1.4fr) minmax(280px, 2fr) 92px;
1159
+ align-items: center;
1160
+ gap: 14px;
1161
+ border-bottom: 1px solid var(--vos-border);
1162
+ position: relative;
1163
+ }
1164
+ .vos-pipe-row:last-child {
1165
+ border-bottom: 0;
1166
+ }
1167
+ .vos-pipe-row:hover {
1168
+ background: var(--vos-surface-2);
1169
+ }
1170
+ .vos-pipe-stripe {
1171
+ align-self: stretch;
1172
+ }
1173
+
1174
+ .vos-pipe-belief {
1175
+ text-align: left;
1176
+ border: 0;
1177
+ background: none;
1178
+ font: inherit;
1179
+ color: inherit;
1180
+ cursor: pointer;
1181
+ padding: 14px 0;
1182
+ display: block;
1183
+ }
1184
+ .vos-pipe-stmt {
1185
+ display: block;
1186
+ font-size: 13.5px;
1187
+ font-weight: 550;
1188
+ line-height: 1.35;
1189
+ color: var(--vos-text);
1190
+ }
1191
+ .vos-pipe-belief:hover .vos-pipe-stmt {
1192
+ color: var(--vos-accent-text);
1193
+ }
1194
+ .vos-pipe-bmeta {
1195
+ display: flex;
1196
+ gap: 8px;
1197
+ align-items: center;
1198
+ margin-top: 5px;
1199
+ font-size: 11px;
1200
+ color: var(--vos-faint);
1201
+ }
1202
+ .vos-pipe-impact-track {
1203
+ width: 46px;
1204
+ height: 4px;
1205
+ border-radius: 2px;
1206
+ background: var(--vos-surface-2);
1207
+ overflow: hidden;
1208
+ display: inline-block;
1209
+ vertical-align: middle;
1210
+ }
1211
+ .vos-pipe-impact-track i {
1212
+ display: block;
1213
+ height: 100%;
1214
+ background: var(--vos-border-strong);
1215
+ }
1216
+
1217
+ /* the connected four-meter track */
1218
+ .vos-pipe-prog {
1219
+ display: flex;
1220
+ align-items: stretch;
1221
+ gap: 2px;
1222
+ padding: 14px 0;
1223
+ }
1224
+ .vos-pipe-seg {
1225
+ flex: 1;
1226
+ min-width: 0;
1227
+ }
1228
+ .vos-pipe-track {
1229
+ height: 22px;
1230
+ border-radius: 4px;
1231
+ background: var(--vos-surface-2);
1232
+ position: relative;
1233
+ overflow: hidden;
1234
+ }
1235
+ .vos-pipe-track i {
1236
+ position: absolute;
1237
+ top: 0;
1238
+ bottom: 0;
1239
+ left: 0;
1240
+ border-radius: 4px;
1241
+ }
1242
+ .vos-pipe-fill-accent {
1243
+ background: var(--vos-accent);
1244
+ }
1245
+ .vos-pipe-known {
1246
+ background: linear-gradient(
1247
+ 90deg,
1248
+ var(--vos-crit-weak),
1249
+ var(--vos-surface-2) 50%,
1250
+ var(--vos-good-weak)
1251
+ );
1252
+ }
1253
+ .vos-pipe-known-mid {
1254
+ position: absolute;
1255
+ left: 50%;
1256
+ top: 2px;
1257
+ bottom: 2px;
1258
+ width: 1px;
1259
+ background: var(--vos-border-strong);
1260
+ }
1261
+ .vos-pipe-known-pos {
1262
+ left: 50%;
1263
+ background: var(--vos-good);
1264
+ border-radius: 0 4px 4px 0;
1265
+ }
1266
+ .vos-pipe-known-neg {
1267
+ right: 50%;
1268
+ left: auto;
1269
+ background: var(--vos-crit);
1270
+ border-radius: 4px 0 0 4px;
1271
+ }
1272
+ .vos-pipe-cap {
1273
+ display: flex;
1274
+ align-items: center;
1275
+ gap: 5px;
1276
+ margin-top: 5px;
1277
+ }
1278
+ .vos-pipe-capn {
1279
+ font-family: var(--vos-mono);
1280
+ font-size: 10px;
1281
+ font-weight: 600;
1282
+ color: var(--vos-faint);
1283
+ }
1284
+ .vos-pipe-capv {
1285
+ font-size: 11px;
1286
+ font-weight: 600;
1287
+ }
1288
+ .vos-pipe-flag {
1289
+ font-size: 10px;
1290
+ font-weight: 700;
1291
+ text-transform: uppercase;
1292
+ letter-spacing: 0.04em;
1293
+ color: var(--vos-crit);
1294
+ background: var(--vos-crit-weak);
1295
+ padding: 1px 5px;
1296
+ border-radius: 4px;
1297
+ }
1298
+
1299
+ /* risk cell */
1300
+ .vos-pipe-risk {
1301
+ text-align: right;
1302
+ padding-right: 16px;
1303
+ }
1304
+ .vos-pipe-rv {
1305
+ font-family: var(--vos-mono);
1306
+ font-size: 20px;
1307
+ font-weight: 700;
1308
+ line-height: 1;
1309
+ }
1310
+ .vos-pipe-rl {
1311
+ font-size: 10px;
1312
+ text-transform: uppercase;
1313
+ letter-spacing: 0.05em;
1314
+ color: var(--vos-muted);
1315
+ }
1316
+ .vos-pipe-conf {
1317
+ margin-top: 5px;
1318
+ font-family: var(--vos-mono);
1319
+ font-size: 10.5px;
1320
+ }
1321
+
1322
+ /* hover actions */
1323
+ .vos-pipe-actions {
1324
+ position: absolute;
1325
+ right: 12px;
1326
+ top: 50%;
1327
+ transform: translateY(-50%);
1328
+ display: flex;
1329
+ gap: 6px;
1330
+ opacity: 0;
1331
+ transition: opacity 0.12s;
1332
+ background: linear-gradient(90deg, transparent, var(--vos-surface-2) 22%);
1333
+ padding-left: 40px;
1334
+ }
1335
+ .vos-pipe-row:hover .vos-pipe-actions,
1336
+ .vos-pipe-row:focus-within .vos-pipe-actions {
1337
+ opacity: 1;
1338
+ }
1339
+
1340
+ /* resolved / hidden */
1341
+ .vos-pipe-resolved {
1342
+ margin-top: 14px;
1343
+ }
1344
+ .vos-pipe-disclosure {
1345
+ background: var(--vos-surface);
1346
+ border: 1px dashed var(--vos-border-strong);
1347
+ border-radius: var(--vos-radius);
1348
+ padding: 12px 16px;
1349
+ font-size: 13px;
1350
+ color: var(--vos-muted);
1351
+ cursor: pointer;
1352
+ list-style: none;
1353
+ }
1354
+ .vos-pipe-disclosure::-webkit-details-marker {
1355
+ display: none;
1356
+ }
1357
+ .vos-pipe-disclosure::before {
1358
+ content: "▸";
1359
+ display: inline-block;
1360
+ margin-right: 8px;
1361
+ transition: transform 0.15s;
1362
+ }
1363
+ .vos-pipe-resolved[open] .vos-pipe-disclosure::before {
1364
+ transform: rotate(90deg);
1365
+ }
1366
+ .vos-pipe-disclosure:hover {
1367
+ border-color: var(--vos-accent);
1368
+ color: var(--vos-accent-text);
1369
+ }
1370
+ .vos-pipe-resolved-body {
1371
+ margin-top: 8px;
1372
+ border: 1px solid var(--vos-border);
1373
+ border-radius: var(--vos-radius);
1374
+ overflow: hidden;
1375
+ background: var(--vos-surface);
1376
+ }
1377
+ .vos-pipe-rrow {
1378
+ width: 100%;
1379
+ display: grid;
1380
+ grid-template-columns: minmax(200px, 1fr) 90px 120px;
1381
+ gap: 12px;
1382
+ align-items: center;
1383
+ padding: 11px 16px;
1384
+ border-bottom: 1px solid var(--vos-border);
1385
+ border-left: 0;
1386
+ border-right: 0;
1387
+ border-top: 0;
1388
+ background: none;
1389
+ font: inherit;
1390
+ text-align: left;
1391
+ cursor: pointer;
1392
+ }
1393
+ .vos-pipe-rrow:last-child {
1394
+ border-bottom: 0;
1395
+ }
1396
+ .vos-pipe-rrow:hover {
1397
+ background: var(--vos-surface-2);
1398
+ }
1399
+ .vos-pipe-rstmt {
1400
+ font-size: 13px;
1401
+ color: var(--vos-muted);
1402
+ text-decoration: line-through;
1403
+ text-decoration-color: var(--vos-border-strong);
1404
+ }
1405
+ .vos-pipe-retired {
1406
+ font-family: var(--vos-mono);
1407
+ font-size: 12px;
1408
+ color: var(--vos-good);
1409
+ text-align: right;
1410
+ }
1411
+ .vos-pipe-foot {
1412
+ margin-top: 16px;
1413
+ line-height: 1.6;
1414
+ }
1415
+ .vos-pipe-foot b {
1416
+ color: var(--vos-text);
1417
+ font-weight: 600;
1418
+ }
1419
+
1420
+ @media (max-width: 760px) {
1421
+ .vos-pipe-row {
1422
+ grid-template-columns: 4px 1fr;
1423
+ }
1424
+ .vos-pipe-prog,
1425
+ .vos-pipe-risk {
1426
+ grid-column: 2;
1427
+ padding-top: 0;
1428
+ text-align: left;
1429
+ }
1430
+ .vos-pipe-actions {
1431
+ position: static;
1432
+ opacity: 1;
1433
+ transform: none;
1434
+ background: none;
1435
+ padding: 0 0 14px 2px;
1436
+ grid-column: 2;
1437
+ }
1438
+ }
1439
+
1440
+ /* ── front door: "next move" (OPS-1304) ────────────────────────────────── */
1441
+ .vos-next {
1442
+ display: flex;
1443
+ flex-direction: column;
1444
+ gap: 16px;
1445
+ max-width: 640px;
1446
+ margin: 0 auto;
1447
+ }
1448
+
1449
+ /* The hero — one belief, one act, centred. */
1450
+ .vos-hero {
1451
+ display: flex;
1452
+ flex-direction: column;
1453
+ align-items: center;
1454
+ text-align: center;
1455
+ gap: 14px;
1456
+ padding: 34px 28px;
1457
+ }
1458
+ .vos-hero-kill {
1459
+ border-color: var(--vos-crit);
1460
+ }
1461
+ .vos-hero-eyebrow {
1462
+ font-size: 11px;
1463
+ text-transform: uppercase;
1464
+ letter-spacing: 0.08em;
1465
+ color: var(--vos-faint);
1466
+ font-weight: 700;
1467
+ }
1468
+ .vos-hero-belief {
1469
+ font-size: 22px;
1470
+ font-weight: 700;
1471
+ line-height: 1.3;
1472
+ letter-spacing: -0.01em;
1473
+ color: var(--vos-text);
1474
+ background: none;
1475
+ border: none;
1476
+ cursor: pointer;
1477
+ padding: 0;
1478
+ max-width: 30ch;
1479
+ }
1480
+ .vos-hero-belief:hover {
1481
+ color: var(--vos-accent-text);
1482
+ }
1483
+ .vos-hero-act {
1484
+ height: 40px;
1485
+ padding: 0 22px;
1486
+ font-size: 14px;
1487
+ }
1488
+ .vos-hero-agent {
1489
+ display: flex;
1490
+ flex-direction: column;
1491
+ align-items: center;
1492
+ gap: 8px;
1493
+ }
1494
+ .vos-agent-note {
1495
+ font-size: 12px;
1496
+ color: var(--vos-muted);
1497
+ }
1498
+
1499
+ /* Risk chip — seen, not read: a bar and a plain label, no number. */
1500
+ .vos-riskchip {
1501
+ display: inline-flex;
1502
+ align-items: center;
1503
+ gap: 9px;
1504
+ }
1505
+ .vos-riskchip .vos-risk-bar {
1506
+ width: 84px;
1507
+ height: 7px;
1508
+ }
1509
+ .vos-riskchip-label {
1510
+ font-size: 12.5px;
1511
+ font-weight: 600;
1512
+ }
1513
+
1514
+ /* Why-this panel adapts the drawer's reveal to a standalone card. */
1515
+ .vos-next-why {
1516
+ border: 1px solid var(--vos-border);
1517
+ border-radius: var(--vos-radius);
1518
+ margin-top: 0;
1519
+ max-width: 640px;
1520
+ margin-left: auto;
1521
+ margin-right: auto;
1522
+ width: 100%;
1523
+ }
1524
+ .vos-why-reason {
1525
+ font-size: 13px;
1526
+ color: var(--vos-text);
1527
+ margin: 0;
1528
+ }
1529
+ .vos-why-formula {
1530
+ font-size: 12.5px;
1531
+ color: var(--vos-muted);
1532
+ margin: 0;
1533
+ }
1534
+ .vos-why-rank {
1535
+ /* ── Record page (OPS-1286) ──────────────────────────────────────────────── */
1536
+ .vos-record-head {
1537
+ align-items: flex-start;
1538
+ }
1539
+ .vos-pill-row {
1540
+ display: flex;
1541
+ flex-wrap: wrap;
1542
+ gap: 6px;
1543
+ margin-top: 10px;
1544
+ }
1545
+ .vos-record-cols {
1546
+ display: flex;
1547
+ flex-direction: column;
1548
+ gap: 24px;
1549
+ }
1550
+ .vos-meter-grid {
1551
+ display: grid;
1552
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
1553
+ gap: 16px;
1554
+ }
1555
+ .vos-meter {
1556
+ padding: 14px;
1557
+ border: 1px solid var(--vos-border);
1558
+ border-radius: var(--vos-radius);
1559
+ background: var(--vos-surface);
1560
+ }
1561
+ .vos-meter-head {
1562
+ display: flex;
1563
+ align-items: center;
1564
+ justify-content: space-between;
1565
+ gap: 8px;
1566
+ }
1567
+ .vos-meter-label {
1568
+ font-size: 12px;
1569
+ text-transform: uppercase;
1570
+ letter-spacing: 0.04em;
1571
+ color: var(--vos-muted);
1572
+ }
1573
+ .vos-meter-val {
1574
+ font-family: var(--vos-mono);
1575
+ font-size: 28px;
1576
+ font-weight: 600;
1577
+ margin: 6px 0;
1578
+ }
1579
+ .vos-section-title {
1580
+ margin: 0 0 10px;
1581
+ font-size: 14px;
1582
+ font-weight: 600;
1583
+ }
1584
+ .vos-human-field {
1585
+ margin-bottom: 12px;
1586
+ }
1587
+ .vos-human-field p,
1588
+ .vos-record-prose p {
1589
+ font-size: 14px;
1590
+ line-height: 1.6;
1591
+ color: var(--vos-text);
1592
+ margin: 4px 0 0;
1593
+ }
1594
+ .vos-panels {
1595
+ display: grid;
1596
+ grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
1597
+ gap: 16px;
1598
+ }
1599
+ .vos-panel {
1600
+ padding: 14px;
1601
+ border: 1px solid var(--vos-border);
1602
+ border-radius: var(--vos-radius);
1603
+ background: var(--vos-surface);
1604
+ }
1605
+ .vos-panel-head {
1606
+ display: flex;
1607
+ align-items: center;
1608
+ gap: 8px;
1609
+ margin: 0 0 10px;
1610
+ font-size: 13px;
1611
+ font-weight: 600;
1612
+ }
1613
+ .vos-backlinks {
1614
+ list-style: none;
1615
+ margin: 0;
1616
+ padding: 0;
1617
+ display: flex;
1618
+ flex-direction: column;
1619
+ gap: 4px;
1620
+ }
1621
+ .vos-why-rank li {
1622
+ display: flex;
1623
+ align-items: center;
1624
+ gap: 10px;
1625
+ font-size: 12.5px;
1626
+ color: var(--vos-muted);
1627
+ }
1628
+ .vos-why-rank-top {
1629
+ color: var(--vos-text);
1630
+ font-weight: 600;
1631
+ }
1632
+ .vos-why-rank-title {
1633
+ .vos-backlink {
1634
+ display: flex;
1635
+ align-items: center;
1636
+ gap: 10px;
1637
+ width: 100%;
1638
+ border: none;
1639
+ background: none;
1640
+ padding: 8px;
1641
+ border-radius: 8px;
1642
+ font: inherit;
1643
+ color: var(--vos-text);
1644
+ text-align: left;
1645
+ cursor: pointer;
1646
+ }
1647
+ .vos-backlink:hover {
1648
+ background: var(--vos-bg);
1649
+ }
1650
+ .vos-backlink-title {
1651
+ flex: 1;
1652
+ min-width: 0;
1653
+ overflow: hidden;
1654
+ text-overflow: ellipsis;
1655
+ white-space: nowrap;
1656
+ }
1657
+ .vos-why-rank-score {
1658
+ font-family: var(--vos-mono);
1659
+ font-variant-numeric: tabular-nums;
1660
+ }
1661
+
1662
+ /* Stage stepper (Framed→Planned→Tested→Known) — hidden behind Why this. */
1663
+ .vos-stepper {
1664
+ display: flex;
1665
+ gap: 6px;
1666
+ flex-wrap: wrap;
1667
+ }
1668
+ .vos-step {
1669
+ font-size: 11px;
1670
+ padding: 3px 9px;
1671
+ border-radius: 999px;
1672
+ background: var(--vos-surface-2);
1673
+ color: var(--vos-faint);
1674
+ }
1675
+ .vos-step-done {
1676
+ color: var(--vos-muted);
1677
+ }
1678
+ .vos-step-at {
1679
+ background: var(--vos-accent-weak);
1680
+ color: var(--vos-accent-text);
1681
+ font-weight: 700;
1682
+ }
1683
+
1684
+ /* On deck — title-only runners-up + an act pill. */
1685
+ .vos-ondeck {
1686
+ display: flex;
1687
+ flex-direction: column;
1688
+ gap: 8px;
1689
+ }
1690
+ .vos-ondeck-row {
1691
+ display: flex;
1692
+ align-items: center;
1693
+ gap: 11px;
1694
+ padding: 10px 12px;
1695
+ background: var(--vos-surface);
1696
+ border: 1px solid var(--vos-border);
1697
+ border-radius: var(--vos-radius);
1698
+ }
1699
+ .vos-ondeck-row .vos-risk-bar {
1700
+ flex: 0 0 46px;
1701
+ }
1702
+ .vos-ondeck-title {
1703
+ flex: 1;
1704
+ min-width: 0;
1705
+ overflow: hidden;
1706
+ text-overflow: ellipsis;
1707
+ white-space: nowrap;
1708
+ text-align: left;
1709
+ background: none;
1710
+ border: none;
1711
+ cursor: pointer;
1712
+ color: var(--vos-text);
1713
+ font: inherit;
1714
+ font-size: 13px;
1715
+ }
1716
+ .vos-ondeck-title:hover {
1717
+ color: var(--vos-accent-text);
1718
+ }
1719
+ .vos-ondeck-act {
1720
+ cursor: pointer;
1721
+ border: none;
1722
+ font: inherit;
1723
+ }
1724
+
1725
+ .vos-override {
1726
+ align-self: center;
1727
+ background: none;
1728
+ border: none;
1729
+ cursor: pointer;
1730
+ color: var(--vos-muted);
1731
+ font: inherit;
1732
+ font-size: 12.5px;
1733
+ padding: 4px;
1734
+ }
1735
+ .vos-override:hover {
1736
+ color: var(--vos-accent-text);
1737
+ }
1738
+ .vos-linkbtn {
1739
+ background: none;
1740
+ border: none;
1741
+ padding: 0;
1742
+ cursor: pointer;
1743
+ color: var(--vos-accent-text);
1744
+ font: inherit;
1745
+ font-weight: 600;
1746
+ }
1747
+
1748
+ /* Step-in form extras (score-impact slider + decision radios). */
1749
+ .vos-slider-row {
1750
+ display: flex;
1751
+ align-items: center;
1752
+ gap: 12px;
1753
+ }
1754
+ .vos-slider {
1755
+ flex: 1;
1756
+ accent-color: var(--vos-accent);
1757
+ }
1758
+ .vos-slider-num {
1759
+ width: 72px;
1760
+ flex: 0 0 auto;
1761
+ }
1762
+ .vos-field-hint {
1763
+ font-size: 11.5px;
1764
+ color: var(--vos-muted);
1765
+ margin: 6px 0 0;
1766
+ }
1767
+ .vos-radio {
1768
+ display: flex;
1769
+ align-items: flex-start;
1770
+ gap: 8px;
1771
+ font-size: 12.5px;
1772
+ color: var(--vos-text);
1773
+ margin-top: 6px;
1774
+ cursor: pointer;
1775
+ }
1776
+ .vos-radio input {
1777
+ margin-top: 2px;
1778
+ accent-color: var(--vos-accent);
1779
+ .vos-chip {
1780
+ display: inline-flex;
1781
+ align-items: center;
1782
+ gap: 5px;
1783
+ flex-shrink: 0;
1784
+ font-size: 12px;
1785
+ }
1786
+ .vos-chip-k {
1787
+ opacity: 0.7;
1788
+ font-size: 10px;
1789
+ text-transform: uppercase;
1790
+ letter-spacing: 0.03em;
1791
+ }
1792
+ .vos-bars {
1793
+ list-style: none;
1794
+ margin: 0;
1795
+ padding: 0;
1796
+ display: flex;
1797
+ flex-direction: column;
1798
+ gap: 6px;
1799
+ }
1800
+ .vos-bar-line {
1801
+ display: flex;
1802
+ align-items: center;
1803
+ justify-content: space-between;
1804
+ gap: 10px;
1805
+ padding: 8px 10px;
1806
+ border: 1px solid var(--vos-border);
1807
+ border-radius: 8px;
1808
+ font-size: 13px;
1809
+ }
1810
+ .vos-journey-host {
1811
+ margin-top: 24px;
1812
+ padding: 16px;
1813
+ border: 1px dashed var(--vos-border-strong);
1814
+ border-radius: var(--vos-radius);
1815
+ }
1816
+
1817
+ /* ── List surface: tabs, controls, groups (OPS-1287) ─────────────────────── */
1818
+ .vos-tabs {
1819
+ display: flex;
1820
+ flex-wrap: wrap;
1821
+ gap: 4px;
1822
+ margin: 16px 0 12px;
1823
+ border-bottom: 1px solid var(--vos-border);
1824
+ }
1825
+ .vos-tab {
1826
+ display: inline-flex;
1827
+ align-items: center;
1828
+ gap: 6px;
1829
+ border: none;
1830
+ background: none;
1831
+ padding: 8px 12px;
1832
+ margin-bottom: -1px;
1833
+ font: inherit;
1834
+ font-size: 13px;
1835
+ color: var(--vos-muted);
1836
+ cursor: pointer;
1837
+ border-bottom: 2px solid transparent;
1838
+ }
1839
+ .vos-tab:hover {
1840
+ color: var(--vos-text);
1841
+ }
1842
+ .vos-tab.is-active {
1843
+ color: var(--vos-text);
1844
+ border-bottom-color: var(--vos-accent);
1845
+ font-weight: 600;
1846
+ }
1847
+ .vos-tab-badge {
1848
+ display: inline-flex;
1849
+ align-items: center;
1850
+ justify-content: center;
1851
+ min-width: 18px;
1852
+ height: 18px;
1853
+ padding: 0 5px;
1854
+ border-radius: 999px;
1855
+ background: var(--vos-crit);
1856
+ color: #fff;
1857
+ font-size: 11px;
1858
+ font-weight: 600;
1859
+ }
1860
+ .vos-view-controls {
1861
+ display: flex;
1862
+ flex-wrap: wrap;
1863
+ align-items: center;
1864
+ gap: 10px;
1865
+ margin-bottom: 14px;
1866
+ }
1867
+ .vos-saved-views {
1868
+ display: flex;
1869
+ flex-wrap: wrap;
1870
+ align-items: center;
1871
+ gap: 8px;
1872
+ margin-bottom: 14px;
1873
+ }
1874
+ .vos-saved-label {
1875
+ font-size: 11px;
1876
+ text-transform: uppercase;
1877
+ letter-spacing: 0.04em;
1878
+ color: var(--vos-muted);
1879
+ }
1880
+ .vos-saved-view {
1881
+ display: inline-flex;
1882
+ align-items: center;
1883
+ border: 1px solid var(--vos-border-strong);
1884
+ border-radius: 999px;
1885
+ overflow: hidden;
1886
+ }
1887
+ .vos-saved-apply {
1888
+ border: none;
1889
+ background: var(--vos-bg);
1890
+ padding: 3px 10px;
1891
+ font: inherit;
1892
+ font-size: 12px;
1893
+ color: var(--vos-text);
1894
+ cursor: pointer;
1895
+ }
1896
+ .vos-saved-apply:hover {
1897
+ color: var(--vos-accent-text);
1898
+ }
1899
+ .vos-saved-x {
1900
+ border: none;
1901
+ border-left: 1px solid var(--vos-border);
1902
+ background: var(--vos-bg);
1903
+ padding: 3px 8px;
1904
+ font: inherit;
1905
+ color: var(--vos-muted);
1906
+ cursor: pointer;
1907
+ }
1908
+ .vos-saved-x:hover {
1909
+ color: var(--vos-crit);
1910
+ }
1911
+ .vos-search {
1912
+ max-width: 260px;
1913
+ flex: 1 1 180px;
1914
+ }
1915
+ .vos-control {
1916
+ display: inline-flex;
1917
+ align-items: center;
1918
+ gap: 6px;
1919
+ font-size: 13px;
1920
+ color: var(--vos-muted);
1921
+ }
1922
+ .vos-control select {
1923
+ width: auto;
1924
+ }
1925
+ .vos-groups {
1926
+ display: flex;
1927
+ flex-direction: column;
1928
+ gap: 20px;
1929
+ }
1930
+ .vos-group-head {
1931
+ display: flex;
1932
+ align-items: center;
1933
+ gap: 8px;
1934
+ margin: 0 0 8px;
1935
+ font-size: 13px;
1936
+ font-weight: 600;
1937
+ text-transform: uppercase;
1938
+ letter-spacing: 0.04em;
1939
+ color: var(--vos-muted);
1940
+ }
1941
+ .vos-group-n {
1942
+ display: inline-flex;
1943
+ align-items: center;
1944
+ justify-content: center;
1945
+ min-width: 20px;
1946
+ padding: 0 6px;
1947
+ border-radius: 999px;
1948
+ background: var(--vos-bg);
1949
+ border: 1px solid var(--vos-border);
1950
+ font-size: 11px;
1951
+ font-weight: 600;
1952
+ color: var(--vos-muted);
1953
+ }
1954
+
1955
+ /* ── Glossary auto-linking (OPS-1285) ─────────────────────────────────────── */
1956
+ /* A dotted inline link; its definition-preview popover shows on hover/focus. */
1957
+ .vos-gloss {
1958
+ position: relative;
1959
+ display: inline;
1960
+ }
1961
+ .vos-gloss-term {
1962
+ border: none;
1963
+ background: none;
1964
+ padding: 0;
1965
+ font: inherit;
1966
+ color: inherit;
1967
+ cursor: help;
1968
+ text-decoration: underline dotted var(--vos-accent);
1969
+ text-underline-offset: 2px;
1970
+ }
1971
+ .vos-gloss-term:hover,
1972
+ .vos-gloss-term:focus-visible {
1973
+ color: var(--vos-accent-text);
1974
+ }
1975
+ .vos-gloss-pop {
1976
+ position: absolute;
1977
+ z-index: 40;
1978
+ left: 0;
1979
+ top: calc(100% + 6px);
1980
+ width: max-content;
1981
+ max-width: 320px;
1982
+ display: none;
1983
+ flex-direction: column;
1984
+ gap: 8px;
1985
+ padding: 12px;
1986
+ background: var(--vos-surface);
1987
+ border: 1px solid var(--vos-border-strong);
1988
+ border-radius: var(--vos-radius);
1989
+ box-shadow: var(--vos-shadow-lg);
1990
+ text-align: left;
1991
+ white-space: normal;
1992
+ }
1993
+ .vos-gloss:hover .vos-gloss-pop,
1994
+ .vos-gloss:focus-within .vos-gloss-pop {
1995
+ display: flex;
1996
+ }
1997
+ .vos-gloss-pop-head {
1998
+ display: flex;
1999
+ align-items: center;
2000
+ justify-content: space-between;
2001
+ gap: 8px;
2002
+ }
2003
+ .vos-gloss-pop-def {
2004
+ font-size: 13px;
2005
+ color: var(--vos-text);
2006
+ line-height: 1.5;
2007
+ }
2008
+ .vos-gloss-pop-neighbours {
2009
+ display: flex;
2010
+ flex-wrap: wrap;
2011
+ align-items: center;
2012
+ gap: 6px;
2013
+ padding-top: 6px;
2014
+ border-top: 1px solid var(--vos-border);
2015
+ }
2016
+ .vos-gloss-pop-label {
2017
+ font-size: 11px;
2018
+ text-transform: uppercase;
2019
+ letter-spacing: 0.04em;
2020
+ color: var(--vos-muted);
2021
+ width: 100%;
2022
+ }
2023
+ .vos-gloss-chip {
2024
+ border: 1px solid var(--vos-border-strong);
2025
+ background: var(--vos-bg);
2026
+ border-radius: 999px;
2027
+ padding: 2px 10px;
2028
+ font-size: 12px;
2029
+ color: var(--vos-text);
2030
+ cursor: pointer;
2031
+ }
2032
+ .vos-gloss-chip:hover {
2033
+ border-color: var(--vos-accent);
2034
+ color: var(--vos-accent-text);
2035
+ }