@youtyan/code-viewer 0.6.1 → 0.6.2

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/web/style.css CHANGED
@@ -485,8 +485,19 @@ body[data-code-font-size="xlarge"] { --code-font-size: 15px; }
485
485
  color: var(--attn);
486
486
  border-color: var(--attn);
487
487
  }
488
+ .ai-context-action {
489
+ width: auto;
490
+ gap: 6px;
491
+ padding: 0 10px;
492
+ }
493
+ .ai-context-label {
494
+ font-size: 11px;
495
+ font-weight: 600;
496
+ white-space: nowrap;
497
+ }
488
498
  #auto-update {
489
499
  width: auto;
500
+ gap: 6px;
490
501
  padding: 0 8px;
491
502
  font-size: 11px;
492
503
  font-weight: 600;
@@ -496,12 +507,6 @@ body[data-code-font-size="xlarge"] { --code-font-size: 15px; }
496
507
  border-color: var(--success);
497
508
  color: var(--success);
498
509
  }
499
- #cancel-requests {
500
- width: auto;
501
- padding: 0 8px;
502
- font-size: 11px;
503
- font-weight: 600;
504
- }
505
510
  #cancel-requests.active {
506
511
  color: var(--danger);
507
512
  border-color: var(--danger);
@@ -532,14 +537,7 @@ body[data-code-font-size="xlarge"] { --code-font-size: 15px; }
532
537
  line-height: 1;
533
538
  white-space: nowrap;
534
539
  }
535
- #meta .num {
536
- display: inline-flex; gap: 8px;
537
- font-variant-numeric: tabular-nums;
538
- font-size: 12px;
539
- }
540
- #meta .num .add { color: var(--success); font-weight: 600; }
541
- #meta .num .del { color: var(--danger); font-weight: 600; }
542
- #meta .updated-at {
540
+ #meta .chip {
543
541
  display: inline-flex;
544
542
  align-items: center;
545
543
  gap: 4px;
@@ -547,12 +545,40 @@ body[data-code-font-size="xlarge"] { --code-font-size: 15px; }
547
545
  background: var(--bg-soft);
548
546
  border: 1px solid var(--border);
549
547
  border-radius: 999px;
550
- padding: 3px 8px;
548
+ padding: 3px 9px;
551
549
  font-size: 11px;
552
550
  line-height: 1;
553
551
  font-variant-numeric: tabular-nums;
554
552
  white-space: nowrap;
555
553
  }
554
+ #meta .chip-files { color: var(--fg); font-weight: 600; }
555
+ #meta .chip-add { color: var(--success); font-weight: 600; border-color: color-mix(in srgb, var(--success) 35%, var(--border)); }
556
+ #meta .chip-del { color: var(--danger); font-weight: 600; border-color: color-mix(in srgb, var(--danger) 35%, var(--border)); }
557
+ #meta .chip-added { color: var(--success); border-color: color-mix(in srgb, var(--success) 35%, var(--border)); }
558
+ #meta .chip-deleted { color: var(--danger); border-color: color-mix(in srgb, var(--danger) 35%, var(--border)); }
559
+ #meta .chip-renamed { color: var(--done); border-color: color-mix(in srgb, var(--done) 35%, var(--border)); }
560
+ #meta .chip-heavy { color: var(--attn); border-color: color-mix(in srgb, var(--attn) 35%, var(--border)); }
561
+ #meta .chip-binary,
562
+ #meta .chip-media { color: var(--fg-muted); }
563
+ #meta .chip-viewed-empty { color: var(--fg-muted); }
564
+ #meta .chip-viewed-partial { color: var(--attn); border-color: color-mix(in srgb, var(--attn) 35%, var(--border)); }
565
+ #meta .chip-viewed-done { color: var(--done); border-color: color-mix(in srgb, var(--done) 35%, var(--border)); }
566
+ #meta .chip-next-unviewed {
567
+ font: inherit;
568
+ cursor: pointer;
569
+ color: var(--accent-emph);
570
+ border-color: color-mix(in srgb, var(--accent-emph) 35%, var(--border));
571
+ }
572
+ #meta .chip-next-unviewed:hover:not(:disabled) {
573
+ background: var(--bg-soft);
574
+ border-color: var(--border-strong);
575
+ }
576
+ #meta .chip-next-unviewed:disabled {
577
+ cursor: default;
578
+ opacity: 0.45;
579
+ color: var(--fg-muted);
580
+ border-color: var(--border);
581
+ }
556
582
  .ref-pickers {
557
583
  display: flex;
558
584
  align-items: center;
@@ -641,6 +667,10 @@ body.gdp-diff-page #repo-target-wrap {
641
667
  }
642
668
  .ref-pickers > button {
643
669
  width: 24px; height: 26px;
670
+ display: inline-flex;
671
+ align-items: center;
672
+ justify-content: center;
673
+ padding: 0;
644
674
  border: 1px solid var(--border);
645
675
  background: var(--bg);
646
676
  color: var(--fg-muted);
@@ -649,6 +679,11 @@ body.gdp-diff-page #repo-target-wrap {
649
679
  font-size: 13px;
650
680
  transition: background 0.12s, color 0.12s;
651
681
  }
682
+ .ref-pickers > button svg {
683
+ display: block;
684
+ width: 14px;
685
+ height: 14px;
686
+ }
652
687
  .ref-pickers > button:hover {
653
688
  background: var(--accent);
654
689
  color: #fff;
@@ -982,13 +1017,35 @@ body.gdp-diff-page #repo-target-wrap {
982
1017
  @keyframes gdp-spin { to { transform: rotate(360deg); } }
983
1018
 
984
1019
  #status {
985
- width: 8px; height: 8px; border-radius: 50%;
1020
+ display: inline-flex;
1021
+ align-items: center;
1022
+ height: 24px;
1023
+ padding: 0 9px 0 8px;
1024
+ border: 1px solid var(--border);
1025
+ border-radius: 999px;
1026
+ background: color-mix(in srgb, var(--bg) 72%, var(--bg-soft));
1027
+ color: var(--fg-muted);
1028
+ font-size: 11px;
1029
+ font-weight: 600;
1030
+ line-height: 1;
1031
+ white-space: nowrap;
1032
+ }
1033
+ #status::before {
1034
+ content: "";
1035
+ flex: 0 0 auto;
1036
+ width: 6px;
1037
+ height: 6px;
1038
+ margin-right: 6px;
1039
+ border-radius: 50%;
986
1040
  background: var(--fg-subtle);
987
1041
  transition: background 0.2s ease, box-shadow 0.2s ease;
988
1042
  }
989
- #status.live { background: #2ea043; box-shadow: 0 0 0 3px rgba(46,160,67,0.20); }
990
- #status.refreshing { background: #d29922; box-shadow: 0 0 0 3px rgba(210,153,34,0.25); }
991
- #status.error { background: var(--danger); box-shadow: 0 0 0 3px rgba(207,34,46,0.20); }
1043
+ #status.live::before { background: #2ea043; box-shadow: 0 0 0 3px rgba(46,160,67,0.20); }
1044
+ #status.refreshing::before { background: #d29922; box-shadow: 0 0 0 3px rgba(210,153,34,0.25); }
1045
+ #status.error::before { background: var(--danger); box-shadow: 0 0 0 3px rgba(207,34,46,0.20); }
1046
+ #status.live { color: var(--success); }
1047
+ #status.refreshing { color: var(--attn); }
1048
+ #status.error { color: var(--danger); }
992
1049
 
993
1050
  /* ===== Top-edge loading bar (indeterminate) ===== */
994
1051
  #load-bar {
@@ -1178,6 +1235,78 @@ body.gdp-history-page #topbar .ref-pickers {
1178
1235
  flex: 1 1 auto;
1179
1236
  min-width: 0;
1180
1237
  }
1238
+ .history-refresh {
1239
+ position: relative;
1240
+ display: inline-flex;
1241
+ align-items: center;
1242
+ justify-content: center;
1243
+ flex: 0 0 auto;
1244
+ width: auto;
1245
+ min-width: 28px;
1246
+ height: 28px;
1247
+ padding: 0 7px;
1248
+ gap: 4px;
1249
+ border: 1px solid transparent;
1250
+ border-radius: 4px;
1251
+ background: transparent;
1252
+ color: var(--fg-muted);
1253
+ cursor: pointer;
1254
+ }
1255
+ .history-refresh:hover {
1256
+ background: var(--bg);
1257
+ color: var(--fg);
1258
+ }
1259
+ .history-refresh:focus-visible {
1260
+ outline: 2px solid var(--accent);
1261
+ outline-offset: -1px;
1262
+ }
1263
+ .history-refresh[disabled] {
1264
+ cursor: default;
1265
+ opacity: 0.7;
1266
+ }
1267
+ .history-refresh.spinning svg {
1268
+ animation: gdp-spin 0.7s linear infinite;
1269
+ }
1270
+ .history-refresh.has-update {
1271
+ color: var(--accent);
1272
+ border-color: var(--accent);
1273
+ box-shadow: 0 0 0 1px var(--accent-subtle);
1274
+ }
1275
+ .history-refresh.has-update::after {
1276
+ content: "";
1277
+ position: absolute;
1278
+ top: 1px;
1279
+ right: 1px;
1280
+ width: 7px;
1281
+ height: 7px;
1282
+ border-radius: 50%;
1283
+ background: var(--accent);
1284
+ box-shadow: 0 0 0 2px var(--bg-soft);
1285
+ }
1286
+ .history-refresh svg {
1287
+ width: 16px;
1288
+ height: 16px;
1289
+ flex: 0 0 auto;
1290
+ pointer-events: none;
1291
+ }
1292
+ .history-refresh-label {
1293
+ line-height: 1;
1294
+ white-space: nowrap;
1295
+ font-size: 12px;
1296
+ font-weight: 600;
1297
+ }
1298
+ .history-refresh-result {
1299
+ min-width: 0;
1300
+ max-width: 180px;
1301
+ overflow: hidden;
1302
+ text-overflow: ellipsis;
1303
+ white-space: nowrap;
1304
+ line-height: 1;
1305
+ }
1306
+ .history-refresh-result.pending {
1307
+ color: var(--accent);
1308
+ font-weight: 600;
1309
+ }
1181
1310
  .history-filter-wrap {
1182
1311
  position: relative;
1183
1312
  padding: 7px 12px 9px;
@@ -1220,10 +1349,49 @@ body.gdp-history-page #topbar .ref-pickers {
1220
1349
  font: inherit;
1221
1350
  font-size: 13px;
1222
1351
  line-height: 30px;
1223
- padding: 0 11px 0 34px;
1352
+ padding: 0 60px 0 34px;
1224
1353
  outline: none;
1225
1354
  transition: border-color 0.12s ease, background-color 0.12s ease, box-shadow 0.12s ease;
1226
1355
  }
1356
+ .history-filter-clear,
1357
+ .sb-filter-clear,
1358
+ .db-table-filter-clear {
1359
+ position: absolute;
1360
+ z-index: 1;
1361
+ right: 19px;
1362
+ top: 23px;
1363
+ transform: translateY(-50%);
1364
+ height: 22px;
1365
+ min-width: 42px;
1366
+ padding: 0 8px;
1367
+ border: 1px solid var(--border);
1368
+ border-radius: 6px;
1369
+ background: var(--bg);
1370
+ color: var(--fg-muted);
1371
+ font: inherit;
1372
+ font-size: 11px;
1373
+ font-weight: 600;
1374
+ line-height: 20px;
1375
+ cursor: pointer;
1376
+ }
1377
+ .history-filter-clear[hidden],
1378
+ .sb-filter-clear[hidden],
1379
+ .db-table-filter-clear[hidden] {
1380
+ display: none;
1381
+ }
1382
+ .history-filter-clear:hover,
1383
+ .sb-filter-clear:hover,
1384
+ .db-table-filter-clear:hover {
1385
+ color: var(--fg);
1386
+ border-color: var(--accent);
1387
+ background: color-mix(in srgb, var(--accent-muted) 42%, var(--bg));
1388
+ }
1389
+ .history-filter-clear:focus-visible,
1390
+ .sb-filter-clear:focus-visible,
1391
+ .db-table-filter-clear:focus-visible {
1392
+ outline: none;
1393
+ box-shadow: 0 0 0 3px var(--accent-muted);
1394
+ }
1227
1395
  #history-filter:hover,
1228
1396
  .history-filter:hover {
1229
1397
  border-color: var(--border);
@@ -1240,6 +1408,13 @@ body.gdp-history-page #topbar .ref-pickers {
1240
1408
  color: var(--fg-subtle);
1241
1409
  opacity: 1;
1242
1410
  }
1411
+ #history-filter::-webkit-search-decoration,
1412
+ #history-filter::-webkit-search-cancel-button,
1413
+ .history-filter::-webkit-search-decoration,
1414
+ .history-filter::-webkit-search-cancel-button {
1415
+ -webkit-appearance: none;
1416
+ appearance: none;
1417
+ }
1243
1418
  .history-banner {
1244
1419
  margin: 8px 10px 0;
1245
1420
  padding: 6px 10px;
@@ -1285,6 +1460,10 @@ body.gdp-history-page #topbar .ref-pickers {
1285
1460
  background: var(--bg-mute);
1286
1461
  border-left-color: var(--accent);
1287
1462
  }
1463
+ .history-item-fresh {
1464
+ background: color-mix(in srgb, var(--accent-subtle) 55%, transparent);
1465
+ border-left-color: var(--accent);
1466
+ }
1288
1467
  .history-item-worktree {
1289
1468
  background: color-mix(in srgb, var(--bg-soft) 72%, var(--bg-mute));
1290
1469
  color: var(--fg-muted);
@@ -1693,7 +1872,7 @@ body[data-focus-scope="main"] #content {
1693
1872
  font: inherit;
1694
1873
  font-size: 13px;
1695
1874
  line-height: 30px;
1696
- padding: 0 11px 0 34px;
1875
+ padding: 0 60px 0 34px;
1697
1876
  outline: none;
1698
1877
  transition: border-color 0.12s ease, background-color 0.12s ease, box-shadow 0.12s ease;
1699
1878
  }
@@ -1714,6 +1893,11 @@ body[data-focus-scope="main"] #content {
1714
1893
  color: var(--fg-subtle);
1715
1894
  opacity: 1;
1716
1895
  }
1896
+ #sb-filter::-webkit-search-decoration,
1897
+ #sb-filter::-webkit-search-cancel-button {
1898
+ -webkit-appearance: none;
1899
+ appearance: none;
1900
+ }
1717
1901
 
1718
1902
  /* ===== Sidebar resizer (drag right edge to resize) ===== */
1719
1903
  #sidebar-resizer {
@@ -1926,6 +2110,70 @@ body.gdp-history-resizing * {
1926
2110
  background: var(--bg-mute);
1927
2111
  }
1928
2112
 
2113
+ .quick-help-btn {
2114
+ font-weight: 700;
2115
+ }
2116
+ #quick-help-popover {
2117
+ position: fixed;
2118
+ right: 16px;
2119
+ top: calc(var(--global-header-h) + 8px);
2120
+ width: min(420px, calc(100vw - 32px));
2121
+ max-width: calc(100vw - 32px);
2122
+ max-height: min(70vh, 560px);
2123
+ overflow-y: auto;
2124
+ /* Transient popover: must sit above the annotation panel (45). */
2125
+ z-index: 70;
2126
+ padding: 12px;
2127
+ border: 1px solid var(--border);
2128
+ border-radius: 8px;
2129
+ background: var(--bg);
2130
+ box-shadow: var(--shadow);
2131
+ }
2132
+ #quick-help-popover[hidden] { display: none; }
2133
+ .quick-help-head {
2134
+ display: flex;
2135
+ align-items: center;
2136
+ justify-content: space-between;
2137
+ gap: 12px;
2138
+ margin-bottom: 10px;
2139
+ }
2140
+ #quick-help-close {
2141
+ border: 0;
2142
+ background: transparent;
2143
+ color: var(--fg-muted);
2144
+ cursor: pointer;
2145
+ font-size: 18px;
2146
+ line-height: 20px;
2147
+ }
2148
+ #quick-help-popover .gdp-help-group {
2149
+ margin: 0 0 14px;
2150
+ }
2151
+ #quick-help-popover .gdp-help-group h3 {
2152
+ margin: 0 0 6px;
2153
+ font-size: 13px;
2154
+ }
2155
+ #quick-help-popover .gdp-help-group th {
2156
+ width: auto;
2157
+ white-space: nowrap;
2158
+ }
2159
+ .quick-help-foot {
2160
+ position: sticky;
2161
+ bottom: 0;
2162
+ z-index: 1;
2163
+ margin-top: 4px;
2164
+ padding-top: 10px;
2165
+ border-top: 1px solid var(--border);
2166
+ background: var(--bg);
2167
+ }
2168
+ .quick-help-foot a {
2169
+ color: var(--accent);
2170
+ font-size: 12px;
2171
+ text-decoration: none;
2172
+ }
2173
+ .quick-help-foot a:hover {
2174
+ text-decoration: underline;
2175
+ }
2176
+
1929
2177
  body.gdp-help-page #topbar,
1930
2178
  body.gdp-help-page #sidebar,
1931
2179
  body.gdp-help-page #sidebar-resizer {
@@ -2224,7 +2472,7 @@ body.gdp-help-page #content {
2224
2472
 
2225
2473
  #filelist.tree .tree-file {
2226
2474
  display: grid;
2227
- grid-template-columns: 16px 16px minmax(0, 1fr) auto;
2475
+ grid-template-columns: 16px 16px minmax(0, 1fr) auto auto;
2228
2476
  align-items: center;
2229
2477
  gap: 8px;
2230
2478
  padding: var(--sidebar-row-y) 12px var(--sidebar-row-y) var(--lvl-pad, 12px);
@@ -2301,7 +2549,7 @@ body.gdp-help-page #content {
2301
2549
  #filelist { list-style: none; margin: 0; padding: 6px 0 0; }
2302
2550
  #filelist li {
2303
2551
  display: grid;
2304
- grid-template-columns: 16px 1fr auto;
2552
+ grid-template-columns: 16px 1fr auto auto;
2305
2553
  align-items: center;
2306
2554
  gap: 8px;
2307
2555
  padding: calc(var(--sidebar-row-y) + 2px) 14px calc(var(--sidebar-row-y) + 2px) 12px;
@@ -2366,6 +2614,38 @@ body.gdp-help-page #content {
2366
2614
  [data-theme="dark"] .badge.D { background: rgba(248,81,73,0.20); color: var(--danger); }
2367
2615
  [data-theme="dark"] .badge.R { background: rgba(163,113,247,0.20); color: var(--done); }
2368
2616
 
2617
+ /* Sidebar row marker for files worth a second look before diving in:
2618
+ heavy diffs, binary/media files, or Git commit entries. Same semantics as
2619
+ the diff card header's .size-tag, sized down for dense file list rows. */
2620
+ .kind-tag {
2621
+ width: 14px; height: 14px;
2622
+ display: inline-flex;
2623
+ align-items: center;
2624
+ justify-content: center;
2625
+ border-radius: 3px;
2626
+ font-size: 9px;
2627
+ font-weight: 700;
2628
+ letter-spacing: 0;
2629
+ flex-shrink: 0;
2630
+ }
2631
+ .kind-tag.heavy { background: #fff8c5; color: var(--attn); }
2632
+ .kind-tag.binary { background: #ddf4ff; color: var(--accent-emph); }
2633
+ .kind-tag.submodule,
2634
+ .kind-tag.gitlink {
2635
+ width: auto;
2636
+ min-width: 22px;
2637
+ padding: 0 4px;
2638
+ background: #ddf4ff;
2639
+ color: var(--accent-emph);
2640
+ }
2641
+ [data-theme="dark"] .kind-tag.heavy { background: rgba(210,153,34,0.15); color: var(--attn); }
2642
+ [data-theme="dark"] .kind-tag.binary { background: rgba(56,139,253,0.15); color: var(--accent-emph); }
2643
+ [data-theme="dark"] .kind-tag.submodule,
2644
+ [data-theme="dark"] .kind-tag.gitlink {
2645
+ background: rgba(56,139,253,0.15);
2646
+ color: var(--accent-emph);
2647
+ }
2648
+
2369
2649
  /* ===== Main content area ===== */
2370
2650
  #content {
2371
2651
  margin-left: var(--sidebar-w);
@@ -2388,8 +2668,83 @@ body:not(.gdp-file-detail-page):not(.gdp-history-page) #diff::after {
2388
2668
  display: flex; flex-direction: column; align-items: center; justify-content: center;
2389
2669
  padding: 80px 16px; color: var(--fg-muted); text-align: center;
2390
2670
  }
2391
- .empty .emoji { font-size: 40px; margin-bottom: 8px; }
2671
+ .empty .empty-icon {
2672
+ display: inline-flex;
2673
+ align-items: center;
2674
+ justify-content: center;
2675
+ width: 44px;
2676
+ height: 44px;
2677
+ margin-bottom: 10px;
2678
+ border: 1px solid var(--border);
2679
+ border-radius: 8px;
2680
+ background: var(--bg-soft);
2681
+ color: var(--fg-muted);
2682
+ }
2683
+ .empty .empty-icon .octicon {
2684
+ width: 22px;
2685
+ height: 22px;
2686
+ }
2392
2687
  .empty h2 { color: var(--fg); margin: 0 0 4px; font-size: 18px; font-weight: 600; }
2688
+ .empty.empty-with-actions p {
2689
+ max-width: 440px;
2690
+ margin: 0;
2691
+ line-height: 1.5;
2692
+ }
2693
+ .empty-actions {
2694
+ display: flex;
2695
+ flex-wrap: wrap;
2696
+ justify-content: center;
2697
+ gap: 8px;
2698
+ margin-top: 16px;
2699
+ }
2700
+ .empty-actions[hidden] { display: none; }
2701
+ .empty-action {
2702
+ min-height: 34px;
2703
+ display: inline-flex;
2704
+ align-items: center;
2705
+ justify-content: center;
2706
+ gap: 6px;
2707
+ padding: 0 12px;
2708
+ border: 1px solid var(--border);
2709
+ border-radius: 6px;
2710
+ background: var(--bg);
2711
+ color: var(--fg);
2712
+ font: inherit;
2713
+ font-size: 13px;
2714
+ line-height: 1;
2715
+ text-decoration: none;
2716
+ cursor: pointer;
2717
+ box-shadow: var(--shadow-sm);
2718
+ }
2719
+ .empty-action:hover {
2720
+ border-color: var(--border-strong);
2721
+ background: var(--bg-soft);
2722
+ }
2723
+ .empty-action:focus-visible {
2724
+ outline: 2px solid var(--accent);
2725
+ outline-offset: 2px;
2726
+ }
2727
+ .empty-action-primary {
2728
+ border-color: var(--accent);
2729
+ background: var(--accent);
2730
+ color: var(--fg-onemphasis);
2731
+ }
2732
+ .empty-action-primary:hover {
2733
+ border-color: var(--accent-emph);
2734
+ background: var(--accent-emph);
2735
+ }
2736
+ .empty-action-icon {
2737
+ display: inline-flex;
2738
+ width: 16px;
2739
+ height: 16px;
2740
+ }
2741
+ .empty-action-icon .octicon {
2742
+ width: 16px;
2743
+ height: 16px;
2744
+ }
2745
+ .empty-action.spinning .empty-action-icon {
2746
+ animation: gdp-spin 0.7s linear infinite;
2747
+ }
2393
2748
  .empty.hidden { display: none; }
2394
2749
 
2395
2750
  /* ===== diff2html overrides ===== */
@@ -4024,6 +4379,11 @@ body.gdp-file-detail-page.gdp-repo-blob-page .sb-filter-wrap::after {
4024
4379
  left: 22px;
4025
4380
  top: 27px;
4026
4381
  }
4382
+ body.gdp-repo-page .sb-filter-clear,
4383
+ body.gdp-file-detail-page.gdp-repo-blob-page .sb-filter-clear {
4384
+ right: 7px;
4385
+ top: 22px;
4386
+ }
4027
4387
  body.gdp-file-detail-page {
4028
4388
  --chrome-h: var(--global-header-h);
4029
4389
  }
@@ -4209,6 +4569,32 @@ body.gdp-file-detail-page #empty {
4209
4569
  font-size: 12px;
4210
4570
  white-space: nowrap;
4211
4571
  }
4572
+
4573
+ /* commit 型で非 browsable (submodule / 非worktree ref) な行。フォルダ/ファイルと
4574
+ 混同されないよう、通常行と別の cursor / アイコン色 / meta chip で区別する。 */
4575
+ .gdp-repo-row-gitlink {
4576
+ cursor: default;
4577
+ }
4578
+ .gdp-repo-row-gitlink:hover {
4579
+ background: var(--bg);
4580
+ }
4581
+ .gdp-repo-row .d2h-icon-wrapper.gdp-repo-row-gitlink-icon {
4582
+ color: var(--attn);
4583
+ background: color-mix(in srgb, var(--attn) 12%, transparent);
4584
+ border-radius: 4px;
4585
+ }
4586
+ .gdp-repo-row .meta.gdp-repo-row-gitlink-badge {
4587
+ display: inline-flex;
4588
+ align-items: center;
4589
+ width: fit-content;
4590
+ color: var(--attn);
4591
+ background: color-mix(in srgb, var(--attn) 10%, transparent);
4592
+ border: 1px solid color-mix(in srgb, var(--attn) 35%, var(--border));
4593
+ border-radius: 999px;
4594
+ padding: 2px 8px;
4595
+ font-size: 11px;
4596
+ line-height: 1.4;
4597
+ }
4212
4598
  .gdp-context-menu {
4213
4599
  position: fixed;
4214
4600
  z-index: 1000;
@@ -4625,6 +5011,50 @@ body.gdp-file-detail-page #empty {
4625
5011
  }
4626
5012
  #content { margin-left: 0; max-width: none; padding-top: calc(var(--chrome-h) + 240px); }
4627
5013
  .controls input[type="search"] { width: 130px; }
5014
+ .app-menu {
5015
+ flex-shrink: 1;
5016
+ min-width: 0;
5017
+ overflow-x: auto;
5018
+ scrollbar-width: thin;
5019
+ }
5020
+ .ai-context-label { display: none; }
5021
+ .ai-context-action { padding: 0; }
5022
+ #status .status-label { display: none; }
5023
+ #status { padding: 0 6px 0 8px; }
5024
+ #status::before { margin-right: 0; }
5025
+ #meta { flex-wrap: wrap; row-gap: 4px; }
5026
+ .d2h-file-header,
5027
+ .d2h-file-header.d2h-sticky-header {
5028
+ height: auto !important;
5029
+ min-height: 82px;
5030
+ flex-wrap: wrap;
5031
+ align-items: center;
5032
+ align-content: center;
5033
+ row-gap: 6px;
5034
+ }
5035
+ .d2h-file-header .d2h-file-name-wrapper {
5036
+ flex: 1 1 calc(100% - 44px);
5037
+ min-width: 160px;
5038
+ order: 1;
5039
+ }
5040
+ .d2h-file-header > .gdp-file-toggle {
5041
+ order: 0;
5042
+ }
5043
+ .d2h-file-header > .d2h-file-collapse {
5044
+ order: 2;
5045
+ margin-left: 0;
5046
+ }
5047
+ .d2h-file-header > .gdp-stat-text {
5048
+ order: 3;
5049
+ margin-left: 0;
5050
+ }
5051
+ .d2h-file-header > .gdp-stat-squares {
5052
+ order: 4;
5053
+ }
5054
+ .d2h-file-header > .gdp-view-file {
5055
+ order: 5;
5056
+ margin-left: auto;
5057
+ }
4628
5058
  body.gdp-history-page #history-panel {
4629
5059
  position: static;
4630
5060
  width: auto;
@@ -4641,6 +5071,76 @@ body.gdp-file-detail-page #empty {
4641
5071
  }
4642
5072
  }
4643
5073
 
5074
+ @media (max-width: 640px) {
5075
+ body {
5076
+ --topbar-h: 112px;
5077
+ }
5078
+ #global-header {
5079
+ gap: 8px;
5080
+ padding: 0 10px;
5081
+ }
5082
+ #topbar {
5083
+ align-items: flex-start;
5084
+ padding-top: 8px;
5085
+ padding-bottom: 8px;
5086
+ }
5087
+ .brand {
5088
+ flex: 0 0 auto;
5089
+ max-width: 28px;
5090
+ }
5091
+ .brand .title,
5092
+ #project-branch,
5093
+ .global-actions .global-help-link,
5094
+ .product-label {
5095
+ display: none;
5096
+ }
5097
+ .app-menu {
5098
+ flex: 1 1 0;
5099
+ min-width: 0;
5100
+ gap: 4px;
5101
+ padding-left: 8px;
5102
+ overflow-x: auto;
5103
+ scrollbar-width: none;
5104
+ }
5105
+ .app-menu::-webkit-scrollbar {
5106
+ display: none;
5107
+ }
5108
+ .app-menu-item {
5109
+ height: 28px;
5110
+ padding: 0 7px;
5111
+ font-size: 13px;
5112
+ }
5113
+ .global-actions {
5114
+ flex: 0 0 auto;
5115
+ margin-left: 0;
5116
+ gap: 4px;
5117
+ }
5118
+ #annotations-toggle,
5119
+ #viewer-settings,
5120
+ #doctor-btn,
5121
+ #cancel-requests,
5122
+ #theme {
5123
+ width: 24px;
5124
+ height: 24px;
5125
+ }
5126
+ #auto-update {
5127
+ padding: 0 6px;
5128
+ }
5129
+ }
5130
+
5131
+ @media (max-width: 360px) {
5132
+ .d2h-file-header .d2h-tag {
5133
+ display: none;
5134
+ }
5135
+ .d2h-file-header .d2h-file-name {
5136
+ flex: 1 1 auto;
5137
+ min-width: 72px;
5138
+ }
5139
+ .d2h-file-header .d2h-file-name-wrapper {
5140
+ min-width: 0;
5141
+ }
5142
+ }
5143
+
4644
5144
  /* ===== File shell (placeholder + loaded card) ===== */
4645
5145
  .gdp-file-shell {
4646
5146
  background: var(--bg);
@@ -5263,10 +5763,29 @@ html[data-theme="dark"] .db-session-log-sql span[style] {
5263
5763
  font-size: 12px;
5264
5764
  cursor: pointer;
5265
5765
  font-family: inherit;
5766
+ display: inline-flex;
5767
+ align-items: center;
5768
+ gap: 4px;
5266
5769
  }
5267
5770
  .db-query-history-action:hover {
5268
5771
  background: var(--bg-mute);
5269
5772
  }
5773
+ .db-query-history-action[disabled] {
5774
+ cursor: default;
5775
+ opacity: 0.7;
5776
+ }
5777
+ .db-query-history-action svg {
5778
+ width: 14px;
5779
+ height: 14px;
5780
+ flex: 0 0 auto;
5781
+ }
5782
+ .db-query-history-refresh-result {
5783
+ align-self: center;
5784
+ line-height: 1;
5785
+ }
5786
+ .db-query-history-refresh.spinning svg {
5787
+ animation: gdp-spin 0.7s linear infinite;
5788
+ }
5270
5789
  .db-query-history-danger {
5271
5790
  color: var(--danger, #d32f2f);
5272
5791
  }
@@ -5295,6 +5814,22 @@ html[data-theme="dark"] .db-session-log-sql span[style] {
5295
5814
  padding: 40px 16px;
5296
5815
  font-size: 13px;
5297
5816
  }
5817
+ .db-query-history-detail-meta {
5818
+ display: flex;
5819
+ align-items: center;
5820
+ flex-wrap: wrap;
5821
+ gap: 8px;
5822
+ padding: 6px 8px;
5823
+ margin-bottom: 10px;
5824
+ border: 1px solid var(--border);
5825
+ border-radius: 4px;
5826
+ background: var(--bg-soft);
5827
+ color: var(--fg-muted);
5828
+ font-size: 11px;
5829
+ }
5830
+ .db-query-history-detail-meta .db-query-history-by {
5831
+ color: var(--fg);
5832
+ }
5298
5833
  .db-query-history-detail-actions {
5299
5834
  display: flex;
5300
5835
  gap: 8px;
@@ -5429,10 +5964,15 @@ html[data-theme="dark"] .db-session-log-sql span[style] {
5429
5964
  border-radius: 6px;
5430
5965
  background: var(--bg-soft);
5431
5966
  color: var(--fg-muted);
5432
- font-size: 12px;
5433
- padding: 2px 8px;
5967
+ display: inline-flex;
5968
+ align-items: center;
5969
+ justify-content: center;
5970
+ width: 30px;
5971
+ height: 30px;
5972
+ padding: 0;
5434
5973
  cursor: pointer;
5435
5974
  line-height: 1;
5975
+ flex: 0 0 auto;
5436
5976
  }
5437
5977
  #annotation-player-toggle:hover,
5438
5978
  #annotation-player-prev:hover,
@@ -5442,6 +5982,11 @@ html[data-theme="dark"] .db-session-log-sql span[style] {
5442
5982
  background: var(--bg-mute);
5443
5983
  color: var(--fg);
5444
5984
  }
5985
+ #annotation-player .octicon {
5986
+ display: block;
5987
+ width: 16px;
5988
+ height: 16px;
5989
+ }
5445
5990
  #annotation-player-progress {
5446
5991
  margin-left: auto;
5447
5992
  opacity: .7;
@@ -5677,8 +6222,6 @@ html[data-theme="dark"] .db-session-log-sql span[style] {
5677
6222
  color: var(--fg-subtle);
5678
6223
  white-space: nowrap;
5679
6224
  }
5680
- #annotation-detail-prev,
5681
- #annotation-detail-next,
5682
6225
  #annotation-detail-close {
5683
6226
  border: 1px solid var(--border);
5684
6227
  border-radius: 6px;
@@ -6187,6 +6730,51 @@ body[data-sidebar-font-size="xlarge"] .db-container {
6187
6730
  padding: 8px;
6188
6731
  border-bottom: 1px solid var(--border);
6189
6732
  }
6733
+ .db-select-row {
6734
+ display: flex;
6735
+ align-items: center;
6736
+ gap: 6px;
6737
+ min-width: 0;
6738
+ }
6739
+ .db-select-row .db-file-select {
6740
+ flex: 1 1 auto;
6741
+ min-width: 0;
6742
+ }
6743
+ .db-refresh-btn {
6744
+ flex: 0 0 auto;
6745
+ width: auto;
6746
+ min-width: 30px;
6747
+ padding: 0 7px;
6748
+ gap: 4px;
6749
+ border: 1px solid var(--border);
6750
+ background: var(--bg);
6751
+ font-weight: 500;
6752
+ }
6753
+ .db-refresh-btn[disabled] {
6754
+ cursor: default;
6755
+ opacity: 0.7;
6756
+ }
6757
+ .db-refresh-btn.spinning svg {
6758
+ animation: gdp-spin 0.7s linear infinite;
6759
+ }
6760
+ .db-refresh-label {
6761
+ line-height: 1;
6762
+ white-space: nowrap;
6763
+ }
6764
+ .db-refresh-result {
6765
+ flex: 0 0 auto;
6766
+ color: var(--fg-subtle);
6767
+ font-size: var(--db-font-xs);
6768
+ white-space: nowrap;
6769
+ }
6770
+ .db-refresh-result.changed {
6771
+ color: var(--accent);
6772
+ font-weight: 600;
6773
+ }
6774
+ .db-grid-refresh-result {
6775
+ align-self: center;
6776
+ line-height: 1;
6777
+ }
6190
6778
 
6191
6779
  /* explorer (redis/es/s3) の第1階層セレクタ (Databases / Indices / Bucket+View)
6192
6780
  を抱える sidebar 内 host。kind が SQL のときは中身が全て hidden になるため
@@ -6240,11 +6828,12 @@ body[data-sidebar-font-size="xlarge"] .db-container {
6240
6828
  }
6241
6829
 
6242
6830
  .db-table-filter-wrap {
6831
+ position: relative;
6243
6832
  padding: 4px 8px;
6244
6833
  }
6245
6834
  .db-table-filter {
6246
6835
  width: 100%;
6247
- padding: 4px 8px 4px 24px;
6836
+ padding: 4px 34px 4px 24px;
6248
6837
  border: 1px solid var(--border);
6249
6838
  border-radius: 6px;
6250
6839
  background: var(--bg);
@@ -6260,6 +6849,22 @@ body[data-sidebar-font-size="xlarge"] .db-container {
6260
6849
  outline-offset: -1px;
6261
6850
  border-color: var(--accent);
6262
6851
  }
6852
+ .db-table-filter-clear {
6853
+ right: 12px;
6854
+ top: 50%;
6855
+ height: 20px;
6856
+ min-width: 24px;
6857
+ padding: 0 5px;
6858
+ border-radius: 5px;
6859
+ display: inline-flex;
6860
+ align-items: center;
6861
+ justify-content: center;
6862
+ }
6863
+ .db-table-filter-clear svg {
6864
+ width: 12px;
6865
+ height: 12px;
6866
+ display: block;
6867
+ }
6263
6868
  .db-table-list {
6264
6869
  flex: 1;
6265
6870
  overflow-y: auto;
@@ -6272,6 +6877,9 @@ body[data-sidebar-font-size="xlarge"] .db-container {
6272
6877
  text-align: center;
6273
6878
  font-size: var(--db-font-md);
6274
6879
  }
6880
+ .db-table-list-empty-actions {
6881
+ margin-top: 10px;
6882
+ }
6275
6883
 
6276
6884
  .db-table-group-header {
6277
6885
  padding: 6px 12px 2px;
@@ -6467,6 +7075,18 @@ body[data-sidebar-font-size="xlarge"] .db-container {
6467
7075
  overflow: hidden;
6468
7076
  background: var(--bg);
6469
7077
  }
7078
+ .db-no-datastores {
7079
+ flex: 1;
7080
+ min-height: 0;
7081
+ }
7082
+ .db-no-datastores[hidden] {
7083
+ display: none !important;
7084
+ }
7085
+ .db-no-datastores-actions {
7086
+ display: flex;
7087
+ justify-content: center;
7088
+ margin-top: 4px;
7089
+ }
6470
7090
 
6471
7091
  /* ---------- Tab bar ---------- */
6472
7092
  .db-tab-bar {
@@ -6998,6 +7618,10 @@ html[data-theme="dark"] .db-query-highlight span[style] {
6998
7618
  }
6999
7619
 
7000
7620
  .db-schema-header {
7621
+ display: flex;
7622
+ align-items: center;
7623
+ justify-content: space-between;
7624
+ gap: 8px;
7001
7625
  font-size: 14px;
7002
7626
  font-weight: 600;
7003
7627
  color: var(--fg);
@@ -7008,6 +7632,15 @@ html[data-theme="dark"] .db-query-highlight span[style] {
7008
7632
  .db-schema-header:first-child {
7009
7633
  margin-top: 0;
7010
7634
  }
7635
+ .db-schema-header-title {
7636
+ min-width: 0;
7637
+ overflow: hidden;
7638
+ text-overflow: ellipsis;
7639
+ white-space: nowrap;
7640
+ }
7641
+ .db-schema-refresh {
7642
+ flex: 0 0 auto;
7643
+ }
7011
7644
 
7012
7645
  .db-schema-table {
7013
7646
  border-collapse: collapse;
@@ -7078,8 +7711,18 @@ html[data-theme="dark"] .db-schema-table tr.pk-row {
7078
7711
  }
7079
7712
 
7080
7713
  .db-grid-filter-icon {
7081
- font-size: var(--db-font-md);
7082
7714
  flex-shrink: 0;
7715
+ display: inline-flex;
7716
+ align-items: center;
7717
+ justify-content: center;
7718
+ width: 16px;
7719
+ height: 16px;
7720
+ color: var(--fg-muted);
7721
+ }
7722
+ .db-grid-filter-icon svg {
7723
+ display: block;
7724
+ width: 16px;
7725
+ height: 16px;
7083
7726
  }
7084
7727
 
7085
7728
  .db-grid-filter-input {
@@ -7099,18 +7742,84 @@ html[data-theme="dark"] .db-schema-table tr.pk-row {
7099
7742
  border-color: var(--accent);
7100
7743
  }
7101
7744
 
7745
+ .db-grid-filter-actions {
7746
+ display: flex;
7747
+ align-items: center;
7748
+ gap: 6px;
7749
+ flex: 0 0 auto;
7750
+ margin-left: auto;
7751
+ }
7752
+
7102
7753
  .db-grid-filter-clear {
7103
- border: none;
7104
- background: none;
7754
+ flex: 0 0 auto;
7755
+ height: 24px;
7756
+ border-color: color-mix(in srgb, var(--danger) 34%, var(--border));
7757
+ background: color-mix(in srgb, var(--danger) 8%, var(--bg));
7105
7758
  color: var(--fg-muted);
7106
- font-size: 16px;
7107
- cursor: pointer;
7108
- padding: 0 4px;
7109
- line-height: 1;
7759
+ font-size: var(--db-font-sm);
7760
+ padding: 0 8px;
7110
7761
  }
7111
7762
  .db-grid-filter-clear:hover {
7763
+ background: color-mix(in srgb, var(--danger) 14%, var(--bg));
7112
7764
  color: var(--danger);
7113
7765
  }
7766
+ .db-grid-refresh {
7767
+ width: auto;
7768
+ min-width: 30px;
7769
+ height: 24px;
7770
+ padding: 0 8px;
7771
+ border: 1px solid var(--border);
7772
+ border-radius: 4px;
7773
+ background: var(--bg);
7774
+ color: var(--fg-muted);
7775
+ cursor: pointer;
7776
+ display: inline-flex;
7777
+ align-items: center;
7778
+ justify-content: center;
7779
+ gap: 4px;
7780
+ font-size: var(--db-font-base);
7781
+ font-weight: 500;
7782
+ }
7783
+ .db-grid-refresh:hover {
7784
+ color: var(--fg);
7785
+ border-color: var(--accent);
7786
+ background: var(--bg);
7787
+ }
7788
+ .db-grid-refresh.has-filters {
7789
+ border-color: color-mix(in srgb, var(--accent) 56%, var(--border));
7790
+ background: color-mix(in srgb, var(--accent) 10%, var(--bg));
7791
+ color: var(--fg);
7792
+ }
7793
+ .db-grid-refresh.has-filters:hover {
7794
+ background: color-mix(in srgb, var(--accent) 16%, var(--bg));
7795
+ }
7796
+ .db-grid-refresh svg {
7797
+ width: 16px;
7798
+ height: 16px;
7799
+ display: block;
7800
+ flex: 0 0 auto;
7801
+ }
7802
+ .db-grid-refresh-label {
7803
+ line-height: 1;
7804
+ white-space: nowrap;
7805
+ }
7806
+ .db-grid-refresh[disabled] {
7807
+ cursor: default;
7808
+ opacity: 0.7;
7809
+ }
7810
+ .db-grid-refresh.spinning svg {
7811
+ animation: gdp-spin 0.7s linear infinite;
7812
+ }
7813
+
7814
+ @media (max-width: 720px) {
7815
+ .db-grid-refresh {
7816
+ width: 30px;
7817
+ padding: 0;
7818
+ }
7819
+ .db-grid-refresh-label {
7820
+ display: none;
7821
+ }
7822
+ }
7114
7823
 
7115
7824
  /* ---------- Data Grid: Column Filter Row ---------- */
7116
7825
  .db-grid-filter-row-wrap {
@@ -7298,10 +8007,19 @@ html[data-theme="dark"] .db-schema-table tr.pk-row {
7298
8007
 
7299
8008
  /* ---------- Foreign-key related data ---------- */
7300
8009
  .db-grid-header-fk-icon {
8010
+ display: inline-flex;
8011
+ align-items: center;
8012
+ justify-content: center;
7301
8013
  margin-left: 4px;
7302
- font-size: 10px;
8014
+ width: 12px;
8015
+ height: 12px;
7303
8016
  opacity: 0.7;
7304
8017
  }
8018
+ .db-grid-header-fk-icon svg {
8019
+ display: block;
8020
+ width: 12px;
8021
+ height: 12px;
8022
+ }
7305
8023
 
7306
8024
  .db-grid-cell-fk {
7307
8025
  color: var(--accent, var(--link, #2563eb));
@@ -7354,7 +8072,17 @@ html[data-theme="dark"] .db-schema-table tr.pk-row {
7354
8072
 
7355
8073
  .db-related-title {
7356
8074
  flex-shrink: 0;
7357
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
8075
+ display: inline-flex;
8076
+ align-items: center;
8077
+ justify-content: center;
8078
+ width: 16px;
8079
+ height: 16px;
8080
+ color: var(--accent);
8081
+ }
8082
+ .db-related-title svg {
8083
+ display: block;
8084
+ width: 16px;
8085
+ height: 16px;
7358
8086
  }
7359
8087
 
7360
8088
  .db-related-close {
@@ -7464,15 +8192,23 @@ html[data-theme="dark"] .db-schema-table tr.pk-row {
7464
8192
  }
7465
8193
 
7466
8194
  .db-grid-export-toggle {
8195
+ display: inline-flex;
8196
+ align-items: center;
8197
+ justify-content: center;
8198
+ width: 30px;
8199
+ height: 24px;
7467
8200
  border: 1px solid var(--border);
7468
8201
  border-radius: 4px;
7469
8202
  background: var(--bg);
7470
8203
  color: var(--fg-muted);
7471
- font-size: var(--db-font-md);
7472
- line-height: 1;
7473
- padding: 3px 7px;
8204
+ padding: 0;
7474
8205
  cursor: pointer;
7475
8206
  }
8207
+ .db-grid-export-toggle svg {
8208
+ display: block;
8209
+ width: 16px;
8210
+ height: 16px;
8211
+ }
7476
8212
  .db-grid-export-toggle:hover {
7477
8213
  color: var(--fg);
7478
8214
  border-color: var(--accent);
@@ -9210,6 +9946,15 @@ body.db-resizing {
9210
9946
  font-size: var(--db-font-sm);
9211
9947
  line-height: 1.5;
9212
9948
  }
9949
+ .db-pane-empty-actions {
9950
+ display: flex;
9951
+ flex-wrap: wrap;
9952
+ justify-content: center;
9953
+ gap: 8px;
9954
+ }
9955
+ .db-pane-empty-actions[hidden] {
9956
+ display: none;
9957
+ }
9213
9958
 
9214
9959
  /* ---------- Elasticsearch explorer ---------- */
9215
9960
  .es-explorer {