@unbrained/pm-web 2026.6.14 → 2026.7.10

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/public/styles.css CHANGED
@@ -168,7 +168,7 @@
168
168
  }
169
169
  .theme-toggle:hover { border-color: var(--accent); color: var(--accent); }
170
170
 
171
- html, body { height: 100%; font-family: 'Inter', sans-serif; background: var(--bg-base); color: var(--text-primary); font-size: 14px; line-height: 1.5; }
171
+ html, body { height: 100%; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; background: var(--bg-base); color: var(--text-primary); font-size: 14px; line-height: 1.5; }
172
172
 
173
173
  /* ── Scrollbars ── */
174
174
  ::-webkit-scrollbar { width: 6px; height: 6px; }
@@ -194,7 +194,7 @@ html, body { height: 100%; font-family: 'Inter', sans-serif; background: var(--b
194
194
  }
195
195
  .auth-brand { text-align: center; z-index: 1; }
196
196
  .auth-logo {
197
- font-family: 'JetBrains Mono', monospace; font-size: 48px; font-weight: 500;
197
+ font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace; font-size: 48px; font-weight: 500;
198
198
  color: var(--accent); letter-spacing: -2px; margin-bottom: 16px;
199
199
  }
200
200
  .auth-logo span { color: var(--text-secondary); }
@@ -265,7 +265,7 @@ html, body { height: 100%; font-family: 'Inter', sans-serif; background: var(--b
265
265
  display: flex; align-items: center; padding: 0 16px; gap: 12px; flex-shrink: 0;
266
266
  z-index: 100;
267
267
  }
268
- .nav-logo { font-family: 'JetBrains Mono', monospace; font-size: 18px; color: var(--accent); font-weight: 500; letter-spacing: -1px; flex-shrink: 0; }
268
+ .nav-logo { font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace; font-size: 18px; color: var(--accent); font-weight: 500; letter-spacing: -1px; flex-shrink: 0; }
269
269
  .nav-logo span { color: var(--text-muted); }
270
270
  .nav-divider { width: 1px; height: 20px; background: var(--border-light); flex-shrink: 0; }
271
271
  .project-selector-wrap { flex: 1; max-width: 320px; }
@@ -280,7 +280,7 @@ html, body { height: 100%; font-family: 'Inter', sans-serif; background: var(--b
280
280
  .nav-search-hint {
281
281
  font-size: 11px; color: var(--text-muted); background: var(--bg-input);
282
282
  border: 1px solid var(--border); border-radius: 6px; padding: 4px 8px;
283
- font-family: 'JetBrains Mono', monospace; cursor: pointer; transition: var(--transition);
283
+ font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace; cursor: pointer; transition: var(--transition);
284
284
  }
285
285
  .nav-search-hint:hover { border-color: var(--accent); color: var(--text-secondary); }
286
286
  .user-menu { display: flex; align-items: center; gap: 8px; }
@@ -315,7 +315,7 @@ html, body { height: 100%; font-family: 'Inter', sans-serif; background: var(--b
315
315
  .sidebar-item-icon { font-size: 14px; width: 18px; text-align: center; flex-shrink: 0; }
316
316
  .sidebar-badge {
317
317
  margin-left: auto; font-size: 10px; background: var(--bg-card);
318
- color: var(--text-muted); padding: 1px 6px; border-radius: 10px; font-family: 'JetBrains Mono', monospace;
318
+ color: var(--text-muted); padding: 1px 6px; border-radius: 10px; font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace;
319
319
  }
320
320
  .sidebar-item.active .sidebar-badge { background: var(--accent-dim); color: var(--accent); }
321
321
 
@@ -367,7 +367,7 @@ html, body { height: 100%; font-family: 'Inter', sans-serif; background: var(--b
367
367
  }
368
368
  .item-row:hover { border-color: var(--border-light); background: var(--bg-sidebar-hover); transform: translateX(2px); }
369
369
  .item-type-icon { font-size: 14px; width: 20px; text-align: center; flex-shrink: 0; color: var(--text-muted); }
370
- .item-id { font-family: 'JetBrains Mono', monospace; font-size: 11px; color: var(--text-muted); flex-shrink: 0; min-width: 70px; }
370
+ .item-id { font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace; font-size: 11px; color: var(--text-muted); flex-shrink: 0; min-width: 70px; }
371
371
  .item-title { flex: 1; font-size: 13px; font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
372
372
  .item-meta { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
373
373
  .status-badge {
@@ -391,7 +391,7 @@ html, body { height: 100%; font-family: 'Inter', sans-serif; background: var(--b
391
391
  .priority-5 { background: var(--priority-5); }
392
392
 
393
393
  .item-tags { display: flex; gap: 4px; flex-wrap: wrap; }
394
- .tag { font-size: 10px; background: rgba(45,212,191,0.1); color: var(--accent); padding: 1px 6px; border-radius: 4px; font-family: 'JetBrains Mono', monospace; }
394
+ .tag { font-size: 10px; background: rgba(45,212,191,0.1); color: var(--accent); padding: 1px 6px; border-radius: 4px; font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace; }
395
395
 
396
396
  /* ── Empty State ── */
397
397
  .empty-state { padding: 48px; text-align: center; color: var(--text-muted); }
@@ -431,7 +431,7 @@ html, body { height: 100%; font-family: 'Inter', sans-serif; background: var(--b
431
431
 
432
432
  /* ── Item Detail ── */
433
433
  .item-detail-header { margin-bottom: 24px; }
434
- .item-detail-id { font-family: 'JetBrains Mono', monospace; font-size: 12px; color: var(--text-muted); margin-bottom: 6px; }
434
+ .item-detail-id { font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace; font-size: 12px; color: var(--text-muted); margin-bottom: 6px; }
435
435
  .item-detail-title { font-size: 20px; font-weight: 600; margin-bottom: 12px; line-height: 1.3; }
436
436
  .item-detail-meta { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
437
437
  .meta-chip {
@@ -467,13 +467,13 @@ html, body { height: 100%; font-family: 'Inter', sans-serif; background: var(--b
467
467
  .stats-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 12px; margin-bottom: 24px; }
468
468
  .stat-card { background: var(--bg-card2); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 16px; }
469
469
  .stat-icon { font-size: 16px; color: var(--text-muted); margin-bottom: 6px; line-height: 1; }
470
- .stat-value { font-size: 28px; font-weight: 700; font-family: 'JetBrains Mono', monospace; color: var(--accent); line-height: 1; }
470
+ .stat-value { font-size: 28px; font-weight: 700; font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace; color: var(--accent); line-height: 1; }
471
471
  .stat-label { font-size: 11px; color: var(--text-muted); margin-top: 4px; text-transform: uppercase; letter-spacing: 0.5px; }
472
472
 
473
473
  .breakdown-row { display: flex; align-items: center; gap: 10px; padding: 6px 0; border-bottom: 1px solid var(--border); }
474
474
  .breakdown-row:last-child { border-bottom: none; }
475
475
  .breakdown-label { flex: 1; font-size: 13px; color: var(--text-secondary); }
476
- .breakdown-count { font-family: 'JetBrains Mono', monospace; font-size: 13px; color: var(--text-primary); min-width: 30px; text-align: right; }
476
+ .breakdown-count { font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace; font-size: 13px; color: var(--text-primary); min-width: 30px; text-align: right; }
477
477
  .breakdown-bar-wrap { width: 80px; height: 4px; background: var(--border); border-radius: 2px; overflow: hidden; }
478
478
  .breakdown-bar { height: 100%; background: var(--accent); border-radius: 2px; transition: width 0.5s ease; }
479
479
 
@@ -482,12 +482,12 @@ html, body { height: 100%; font-family: 'Inter', sans-serif; background: var(--b
482
482
  .calendar-event:hover { background: var(--bg-sidebar-hover); }
483
483
  .calendar-event-title { font-size: 13px; font-weight: 500; }
484
484
  .calendar-event-date { font-size: 11px; color: var(--text-muted); margin-top: 2px; }
485
- .calendar-event-id { font-family: 'JetBrains Mono', monospace; font-size: 10px; color: var(--text-muted); }
485
+ .calendar-event-id { font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace; font-size: 10px; color: var(--text-muted); }
486
486
 
487
487
  /* ── Context ── */
488
488
  .context-section { margin-bottom: 20px; }
489
489
  .context-section-title { font-size: 13px; font-weight: 600; color: var(--accent); margin-bottom: 10px; display: flex; align-items: center; gap: 8px; }
490
- .context-block { background: var(--bg-input); border: 1px solid var(--border); border-radius: var(--radius); padding: 12px 14px; font-family: 'JetBrains Mono', monospace; font-size: 12px; color: var(--text-secondary); white-space: pre-wrap; overflow-x: auto; }
490
+ .context-block { background: var(--bg-input); border: 1px solid var(--border); border-radius: var(--radius); padding: 12px 14px; font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace; font-size: 12px; color: var(--text-secondary); white-space: pre-wrap; overflow-x: auto; }
491
491
  .context-item-row { display: flex; align-items: center; gap: 10px; padding: 6px 0; border-bottom: 1px solid var(--border); font-size: 13px; }
492
492
  .context-item-row:last-child { border-bottom: none; }
493
493
 
@@ -553,7 +553,7 @@ body.graph-mode #app-body {
553
553
  white-space: nowrap;
554
554
  }
555
555
  .graph-mode-chip {
556
- font-family: 'JetBrains Mono', monospace;
556
+ font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace;
557
557
  font-size: 9px;
558
558
  font-weight: 500;
559
559
  padding: 2px 7px;
@@ -608,7 +608,7 @@ body.graph-mode #app-body {
608
608
  outline: none;
609
609
  color: var(--text-primary);
610
610
  font-size: 13px;
611
- font-family: 'Inter', sans-serif;
611
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
612
612
  }
613
613
  .graph-search-hud-input::placeholder { color: var(--text-muted); }
614
614
  .graph-preset-rail {
@@ -656,7 +656,7 @@ body.graph-mode #app-body {
656
656
  }
657
657
  .graph-preset-btn strong {
658
658
  color: var(--text-muted);
659
- font-family: 'JetBrains Mono', monospace;
659
+ font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace;
660
660
  font-size: 9px;
661
661
  font-weight: 600;
662
662
  text-transform: uppercase;
@@ -677,7 +677,7 @@ body.graph-mode #app-body {
677
677
  border-radius: 6px;
678
678
  color: var(--text-secondary);
679
679
  font-size: 12px;
680
- font-family: 'Inter', sans-serif;
680
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
681
681
  padding: 5px 10px;
682
682
  cursor: pointer;
683
683
  white-space: nowrap;
@@ -783,7 +783,7 @@ body.graph-mode #app-body {
783
783
  cursor: pointer;
784
784
  transition: background 0.15s;
785
785
  text-align: center;
786
- font-family: 'Inter', sans-serif;
786
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
787
787
  }
788
788
  .graph-scope-btn:hover { background: rgba(45,212,191,0.18); }
789
789
  .graph-dep-mode-btn {
@@ -800,7 +800,7 @@ body.graph-mode #app-body {
800
800
  font-size: 12px;
801
801
  padding: 7px 9px;
802
802
  cursor: pointer;
803
- font-family: 'Inter', sans-serif;
803
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
804
804
  }
805
805
  .graph-dep-mode-btn:hover,
806
806
  .graph-dep-mode-btn.active {
@@ -810,7 +810,7 @@ body.graph-mode #app-body {
810
810
  }
811
811
  .graph-dep-mode-btn strong {
812
812
  color: #fb923c;
813
- font-family: 'JetBrains Mono', monospace;
813
+ font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace;
814
814
  font-size: 10px;
815
815
  text-transform: uppercase;
816
816
  }
@@ -986,12 +986,12 @@ body.graph-mode #app-body {
986
986
  text-overflow: ellipsis;
987
987
  }
988
988
  .graph-rel-id {
989
- font-family: 'JetBrains Mono', monospace;
989
+ font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace;
990
990
  font-size: 11px;
991
991
  color: var(--text-muted);
992
992
  }
993
993
  .graph-rel-type {
994
- font-family: 'JetBrains Mono', monospace;
994
+ font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace;
995
995
  font-size: 10px;
996
996
  color: var(--accent);
997
997
  border: 1px solid var(--border-light);
@@ -1006,7 +1006,7 @@ body.graph-mode #app-body {
1006
1006
  margin-top: 4px;
1007
1007
  font-size: 10px;
1008
1008
  color: var(--text-muted);
1009
- font-family: 'JetBrains Mono', monospace;
1009
+ font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace;
1010
1010
  }
1011
1011
  .graph-rel-props em {
1012
1012
  color: var(--text-secondary);
@@ -1027,7 +1027,7 @@ body.graph-mode #app-body {
1027
1027
  font-size: 13px;
1028
1028
  color: var(--text-secondary);
1029
1029
  }
1030
- .graph-type-row strong { color: var(--text-primary); font-family: 'JetBrains Mono', monospace; }
1030
+ .graph-type-row strong { color: var(--text-primary); font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace; }
1031
1031
  .graph-node-list { display: flex; flex-direction: column; gap: 6px; }
1032
1032
  .graph-node {
1033
1033
  width: 100%;
@@ -1128,7 +1128,7 @@ body.graph-mode #app-body {
1128
1128
  border-radius: 6px;
1129
1129
  color: var(--text-secondary);
1130
1130
  font-size: 12px;
1131
- font-family: 'Inter', sans-serif;
1131
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
1132
1132
  padding: 5px 8px;
1133
1133
  cursor: pointer;
1134
1134
  outline: none;
@@ -1154,7 +1154,7 @@ body.graph-mode #app-body {
1154
1154
  margin-bottom: 6px;
1155
1155
  }
1156
1156
  .graph-selected-title { font-size: 15px; font-weight: 700; color: var(--text-primary); line-height: 1.3; }
1157
- .graph-selected-meta { margin-top: 4px; color: var(--text-muted); font-family: 'JetBrains Mono', monospace; font-size: 11px; overflow-wrap: anywhere; }
1157
+ .graph-selected-meta { margin-top: 4px; color: var(--text-muted); font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace; font-size: 11px; overflow-wrap: anywhere; }
1158
1158
  .graph-selected-actions { display: flex; gap: 8px; margin-top: 12px; flex-wrap: wrap; }
1159
1159
  .graph-selected-counts {
1160
1160
  display: flex;
@@ -1166,7 +1166,7 @@ body.graph-mode #app-body {
1166
1166
  border: 1px solid var(--border);
1167
1167
  border-radius: 999px;
1168
1168
  color: var(--text-secondary);
1169
- font-family: 'JetBrains Mono', monospace;
1169
+ font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace;
1170
1170
  font-size: 10px;
1171
1171
  padding: 4px 8px;
1172
1172
  }
@@ -1211,7 +1211,7 @@ body.graph-mode #app-body {
1211
1211
  .graph-blocker-row:hover { border-color: rgba(251,146,60,0.42); }
1212
1212
  .graph-blocker-row span {
1213
1213
  color: #fb923c;
1214
- font-family: 'JetBrains Mono', monospace;
1214
+ font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace;
1215
1215
  font-size: 9px;
1216
1216
  text-transform: uppercase;
1217
1217
  }
@@ -1283,7 +1283,7 @@ body.graph-mode #app-body {
1283
1283
  .graph-neighbor:hover strong { color: var(--text-primary); }
1284
1284
  .graph-rel-badge {
1285
1285
  display: inline-block;
1286
- font-family: 'JetBrains Mono', monospace;
1286
+ font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace;
1287
1287
  font-size: 9px;
1288
1288
  color: var(--accent);
1289
1289
  border: 1px solid var(--border-light);
@@ -1328,14 +1328,14 @@ body.graph-mode #app-body {
1328
1328
  display: block;
1329
1329
  margin-top: 2px;
1330
1330
  color: var(--text-muted);
1331
- font-family: 'JetBrains Mono', monospace;
1331
+ font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace;
1332
1332
  font-size: 10px;
1333
1333
  font-style: normal;
1334
1334
  }
1335
1335
  .graph-insight-row b {
1336
1336
  align-self: center;
1337
1337
  color: var(--accent);
1338
- font-family: 'JetBrains Mono', monospace;
1338
+ font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace;
1339
1339
  }
1340
1340
  .graph-insight-row small {
1341
1341
  grid-column: 1 / -1;
@@ -1385,7 +1385,7 @@ body.graph-mode #app-body {
1385
1385
  }
1386
1386
  .graph-chain-row i {
1387
1387
  color: var(--text-muted);
1388
- font-family: 'JetBrains Mono', monospace;
1388
+ font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace;
1389
1389
  font-style: normal;
1390
1390
  font-weight: 500;
1391
1391
  }
@@ -1400,7 +1400,7 @@ body.graph-mode #app-body {
1400
1400
  .graph-path-label {
1401
1401
  margin-bottom: 6px;
1402
1402
  color: var(--text-muted);
1403
- font-family: 'JetBrains Mono', monospace;
1403
+ font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace;
1404
1404
  font-size: 10px;
1405
1405
  text-transform: uppercase;
1406
1406
  }
@@ -1466,7 +1466,7 @@ body.graph-mode #app-body {
1466
1466
  white-space: nowrap;
1467
1467
  }
1468
1468
  .graph-physics-val {
1469
- font-family: 'JetBrains Mono', monospace;
1469
+ font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace;
1470
1470
  font-size: 10px;
1471
1471
  color: var(--accent);
1472
1472
  text-align: right;
@@ -1512,7 +1512,7 @@ body.graph-mode #app-body {
1512
1512
  gap: 6px;
1513
1513
  }
1514
1514
  .graph-depth-val {
1515
- font-family: 'JetBrains Mono', monospace;
1515
+ font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace;
1516
1516
  font-size: 10px;
1517
1517
  color: var(--accent);
1518
1518
  min-width: 14px;
@@ -1576,7 +1576,7 @@ body.graph-mode #app-body {
1576
1576
  border: none;
1577
1577
  width: 100%;
1578
1578
  text-align: left;
1579
- font-family: 'Inter', sans-serif;
1579
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
1580
1580
  }
1581
1581
  .graph-ctx-item:hover {
1582
1582
  background: rgba(148,163,184,0.08);
@@ -1634,7 +1634,7 @@ body.graph-mode #app-body {
1634
1634
  display: block;
1635
1635
  margin-top: 2px;
1636
1636
  color: var(--text-muted);
1637
- font-family: 'JetBrains Mono', monospace;
1637
+ font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace;
1638
1638
  font-size: 11px;
1639
1639
  }
1640
1640
  .admin-pill {
@@ -1713,10 +1713,10 @@ body.graph-mode #app-body {
1713
1713
  }
1714
1714
  .project-card:hover { border-color: var(--accent); transform: translateY(-2px); box-shadow: 0 8px 24px rgba(0,0,0,0.3); }
1715
1715
  .project-card-name { font-size: 16px; font-weight: 600; margin-bottom: 4px; }
1716
- .project-card-slug { font-family: 'JetBrains Mono', monospace; font-size: 11px; color: var(--text-muted); margin-bottom: 8px; }
1716
+ .project-card-slug { font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace; font-size: 11px; color: var(--text-muted); margin-bottom: 8px; }
1717
1717
  .project-card-desc { font-size: 13px; color: var(--text-secondary); line-height: 1.5; }
1718
1718
  .project-card-meta { display: flex; justify-content: space-between; align-items: center; margin-top: 16px; }
1719
- .project-card-prefix { font-family: 'JetBrains Mono', monospace; font-size: 11px; background: var(--accent-glow); color: var(--accent); padding: 2px 8px; border-radius: 4px; }
1719
+ .project-card-prefix { font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace; font-size: 11px; background: var(--accent-glow); color: var(--accent); padding: 2px 8px; border-radius: 4px; }
1720
1720
  .project-card-date { font-size: 11px; color: var(--text-muted); }
1721
1721
  .project-card-del { position: absolute; top: 12px; right: 12px; opacity: 0; transition: var(--transition); }
1722
1722
  .project-card:hover .project-card-del { opacity: 1; }
@@ -1743,7 +1743,7 @@ body.graph-mode #app-body {
1743
1743
  hr.section-divider { border: none; border-top: 1px solid var(--border); margin: 20px 0; }
1744
1744
 
1745
1745
  /* ── Code/mono snippets ── */
1746
- .mono { font-family: 'JetBrains Mono', monospace; }
1746
+ .mono { font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace; }
1747
1747
 
1748
1748
  /* ── Two-col layout ── */
1749
1749
  .two-col { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
@@ -1763,7 +1763,7 @@ hr.section-divider { border: none; border-top: 1px solid var(--border); margin:
1763
1763
  .notes-item-meta { font-size: 11px; color: var(--text-muted); margin-bottom: 4px; }
1764
1764
  .test-item { padding: 10px 0; border-bottom: 1px solid var(--border); display: flex; align-items: flex-start; gap: 10px; }
1765
1765
  .test-item:last-child { border-bottom: none; }
1766
- .test-item-cmd { font-family: 'JetBrains Mono', monospace; font-size: 12px; background: var(--bg-input); border-radius: 4px; padding: 2px 6px; }
1766
+ .test-item-cmd { font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace; font-size: 12px; background: var(--bg-input); border-radius: 4px; padding: 2px 6px; }
1767
1767
  .health-score-display { text-align: center; padding: 32px; }
1768
1768
  .health-score-number { font-size: 72px; font-weight: 700; line-height: 1; }
1769
1769
  .health-score-label { font-size: 14px; color: var(--text-secondary); margin-top: 8px; }
@@ -1773,7 +1773,7 @@ hr.section-divider { border: none; border-top: 1px solid var(--border); margin:
1773
1773
  .dep-row { display: flex; align-items: center; gap: 10px; padding: 7px 0; border-bottom: 1px solid var(--border); font-size: 13px; }
1774
1774
  .dep-row:last-child { border-bottom: none; }
1775
1775
  .dep-rel { font-size: 10px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; background: var(--bg-input); color: var(--text-muted); padding: 2px 7px; border-radius: 4px; flex-shrink: 0; }
1776
- .dep-id { font-family: 'JetBrains Mono', monospace; font-size: 11px; color: var(--accent); cursor: pointer; text-decoration: underline; text-underline-offset: 2px; }
1776
+ .dep-id { font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace; font-size: 11px; color: var(--accent); cursor: pointer; text-decoration: underline; text-underline-offset: 2px; }
1777
1777
  .learning-row { padding: 8px 0; border-bottom: 1px solid var(--border); font-size: 13px; color: var(--text-secondary); line-height: 1.6; }
1778
1778
  .learning-row:last-child { border-bottom: none; }
1779
1779
  .share-row { display: flex; align-items: center; gap: 10px; padding: 8px 0; border-bottom: 1px solid var(--border); font-size: 13px; }
@@ -1898,7 +1898,7 @@ hr.section-divider { border: none; border-top: 1px solid var(--border); margin:
1898
1898
  /* ── Files ── */
1899
1899
  .file-row { display: flex; align-items: center; gap: 10px; padding: 7px 0; border-bottom: 1px solid var(--border); font-size: 13px; }
1900
1900
  .file-row:last-child { border-bottom: none; }
1901
- .file-path { font-family: 'JetBrains Mono', monospace; font-size: 12px; color: var(--accent); flex: 1; }
1901
+ .file-path { font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Liberation Mono', monospace; font-size: 12px; color: var(--accent); flex: 1; }
1902
1902
 
1903
1903
  /* ── SSE Real-time Indicator ── */
1904
1904
  .sse-indicator {
@@ -0,0 +1,27 @@
1
+ <!DOCTYPE html>
2
+ <html lang="de" data-theme="auto">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <meta name="description" content="Terms for pm-web.">
7
+ <title>Terms - pm-web</title>
8
+ <link rel="stylesheet" href="/styles.css?v=20">
9
+ <link rel="stylesheet" href="/legal-common.css?v=1">
10
+ </head>
11
+ <body class="legal-shell">
12
+ <nav class="legal-nav"><a class="legal-brand" href="/">pm-web</a><div class="legal-links"><a href="/legal-notice">Legal Notice</a><a href="/privacy-policy">Privacy Policy</a><a href="/cookie-settings">Cookies</a></div></nav>
13
+ <main class="legal-main">
14
+ <p class="legal-kicker">Legal</p>
15
+ <h1>Terms</h1>
16
+ <p class="legal-updated">Stand: 26. Juni 2026</p>
17
+ <section class="legal-section"><h2>Geltungsbereich</h2><p>Diese Bedingungen gelten fuer die Nutzung von pm-web.unbrained.dev. Abweichende Bedingungen gelten nur, wenn sie schriftlich bestaetigt wurden.</p></section>
18
+ <section class="legal-section"><h2>Nutzung und Verfuegbarkeit</h2><p>pm-web wird ohne kostenpflichtige Servicegarantie bereitgestellt. Funktionen koennen geaendert, eingeschraenkt oder eingestellt werden, soweit dies fuer Betrieb, Sicherheit oder Weiterentwicklung erforderlich ist.</p></section>
19
+ <section class="legal-section"><h2>Nutzerpflichten</h2><p>Nutzer muessen Zugangsdaten schuetzen, keine rechtswidrigen Inhalte speichern und keine Handlungen setzen, die Sicherheit oder Verfuegbarkeit der Anwendung beeintraechtigen.</p></section>
20
+ <section class="legal-section"><h2>Inhalte und Open Source</h2><p>pm-web ist eine Software- und Projektmanagement-Anwendung. Fuer Open-Source-Komponenten gelten die jeweiligen Lizenztexte in den verlinkten Repositories.</p></section>
21
+ <section class="legal-section"><h2>Haftung</h2><p>Eine Haftung besteht nur nach den gesetzlichen Bestimmungen. Fuer leichte Fahrlaessigkeit wird, soweit rechtlich zulaessig, nur bei Verletzung wesentlicher Vertragspflichten gehaftet.</p></section>
22
+ <section class="legal-section"><h2>Kontakt</h2><p>Fragen zu diesen Bedingungen bitte an <a href="mailto:stefan@preu.at">stefan@preu.at</a>.</p></section>
23
+ </main>
24
+ <div class="cookie-consent" id="cookie-consent" hidden><div class="cookie-consent-text"><strong>Cookie Settings</strong><span>We only use technically necessary storage for sign-in, security, and preferences. No optional tracking cookies.</span></div><div class="cookie-consent-actions"><a href="/privacy-policy">Privacy Policy</a><button type="button" class="btn btn-secondary btn-sm" data-cookie-decline>Necessary only</button><button type="button" class="btn btn-primary btn-sm" data-cookie-accept>Got it</button></div></div>
25
+ <script src="/cookie-consent.js?v=1"></script>
26
+ </body>
27
+ </html>