@youtyan/code-viewer 0.6.3 → 0.6.4

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
@@ -53,6 +53,7 @@
53
53
  --history-w: 320px;
54
54
  --sidebar-restore-rail-w: 44px;
55
55
  --annotation-panel-w: 380px;
56
+ --journal-task-editor-w: 380px;
56
57
  /* shadows */
57
58
  --shadow-sm: 0 1px 0 rgba(31,35,40,0.04);
58
59
  --shadow-md: 0 3px 6px rgba(140,149,159,0.15);
@@ -692,15 +693,15 @@ body.gdp-diff-page #repo-target-wrap {
692
693
  }
693
694
  #ref-reset:hover { background: var(--bg-mute); color: var(--danger); border-color: var(--danger); }
694
695
  #reload-prom {
695
- width: 28px; height: 26px;
696
- font-size: 14px;
696
+ width: 24px; height: 26px;
697
697
  margin-left: 6px;
698
- background: var(--accent);
699
- color: #fff;
700
- border-color: var(--accent);
701
698
  }
702
- #reload-prom:hover { background: var(--accent-emph); border-color: var(--accent-emph); }
703
- #reload-prom.spinning { animation: gdp-spin 0.7s linear infinite; }
699
+ #reload-prom.spinning {
700
+ color: var(--accent);
701
+ }
702
+ #reload-prom.spinning svg {
703
+ animation: gdp-spin 0.7s linear infinite;
704
+ }
704
705
  @keyframes gdp-spin { to { transform: rotate(360deg); } }
705
706
  #hide-tests {
706
707
  width: auto !important;
@@ -1242,11 +1243,10 @@ body.gdp-history-page #topbar .ref-pickers {
1242
1243
  align-items: center;
1243
1244
  justify-content: center;
1244
1245
  flex: 0 0 auto;
1245
- width: auto;
1246
+ width: 28px;
1246
1247
  min-width: 28px;
1247
1248
  height: 28px;
1248
- padding: 0 7px;
1249
- gap: 4px;
1249
+ padding: 0;
1250
1250
  border: 1px solid transparent;
1251
1251
  border-radius: 4px;
1252
1252
  background: transparent;
@@ -1269,9 +1269,7 @@ body.gdp-history-page #topbar .ref-pickers {
1269
1269
  animation: gdp-spin 0.7s linear infinite;
1270
1270
  }
1271
1271
  .history-refresh.has-update {
1272
- color: var(--accent);
1273
- border-color: var(--accent);
1274
- box-shadow: 0 0 0 1px var(--accent-subtle);
1272
+ color: var(--fg-muted);
1275
1273
  }
1276
1274
  .history-refresh.has-update::after {
1277
1275
  content: "";
@@ -1291,6 +1289,7 @@ body.gdp-history-page #topbar .ref-pickers {
1291
1289
  pointer-events: none;
1292
1290
  }
1293
1291
  .history-refresh-label {
1292
+ display: none;
1294
1293
  line-height: 1;
1295
1294
  white-space: nowrap;
1296
1295
  font-size: 12px;
@@ -6456,187 +6455,1682 @@ body.gdp-database-page #load-bar {
6456
6455
  top: var(--global-header-h);
6457
6456
  }
6458
6457
 
6459
- .gdp-database-page #content {
6458
+ /* ============================================================
6459
+ Journal
6460
+ ============================================================ */
6461
+
6462
+ .gdp-journal-page #topbar,
6463
+ .gdp-journal-page #sidebar,
6464
+ .gdp-journal-page #sidebar-toggle,
6465
+ .gdp-journal-page #sidebar-resizer,
6466
+ .gdp-journal-page #query-history-panel {
6467
+ display: none !important;
6468
+ }
6469
+
6470
+ body.gdp-journal-page {
6471
+ --chrome-h: var(--global-header-h);
6472
+ }
6473
+
6474
+ body.gdp-journal-page #load-bar {
6475
+ top: var(--global-header-h);
6476
+ }
6477
+
6478
+ .gdp-journal-page #content {
6460
6479
  margin-left: 0;
6461
6480
  padding: var(--global-header-h) 0 0;
6462
6481
  min-height: 0;
6463
6482
  max-width: none;
6464
6483
  }
6465
6484
 
6466
- .db-root,
6467
- .db-container {
6468
- --db-font-sm: 11px;
6469
- --db-font-base: 12px;
6470
- --db-font-md: 13px;
6471
- --db-font-mono: 13px;
6485
+ .journal-page {
6486
+ height: calc(100vh - var(--global-header-h));
6487
+ min-height: 0;
6488
+ display: flex;
6489
+ flex-direction: column;
6490
+ background: var(--bg);
6491
+ color: var(--fg);
6472
6492
  }
6473
6493
 
6474
- .db-container {
6494
+ .journal-header {
6495
+ flex: 0 0 auto;
6496
+ min-height: 48px;
6475
6497
  display: flex;
6476
- flex-direction: column;
6477
- /* `.db-tab-host` の中に置かれるので親の高さに合わせる。
6478
- Round 5 multi-tab 以前は #content 直下だったため calc(100vh - header) で
6479
- 固定していたが、いまは .db-root > .db-tabs-bar (固定) + .db-tab-host
6480
- (flex: 1) の下にいるため、ここで自分で viewport 高さを再計算すると
6481
- 親より縦長になり sidebar 末尾の history toggle が下にはみ出す。 */
6482
- height: 100%;
6483
- min-height: 0;
6484
- overflow: hidden;
6485
- font-size: var(--db-font-base);
6498
+ align-items: center;
6499
+ gap: 10px;
6500
+ padding: 10px 14px;
6501
+ border-bottom: 1px solid var(--border);
6502
+ background: var(--bg-soft);
6486
6503
  }
6487
- body[data-sidebar-font-size="compact"] .db-root,
6488
- body[data-sidebar-font-size="compact"] .db-container {
6489
- --db-font-sm: 10px;
6490
- --db-font-base: 11px;
6491
- --db-font-md: 12px;
6492
- --db-font-mono: 12px;
6504
+
6505
+ .journal-title {
6506
+ font-size: 14px;
6507
+ font-weight: 700;
6493
6508
  }
6494
- body[data-sidebar-font-size="large"] .db-root,
6495
- body[data-sidebar-font-size="large"] .db-container {
6496
- --db-font-sm: 12px;
6497
- --db-font-base: 14px;
6498
- --db-font-md: 15px;
6499
- --db-font-mono: 14px;
6509
+
6510
+ .journal-tabs {
6511
+ margin-left: 4px;
6500
6512
  }
6501
- body[data-sidebar-font-size="xlarge"] .db-root,
6502
- body[data-sidebar-font-size="xlarge"] .db-container {
6503
- --db-font-sm: 13px;
6504
- --db-font-base: 15px;
6505
- --db-font-md: 16px;
6506
- --db-font-mono: 15px;
6513
+
6514
+ .journal-icon-action {
6515
+ color: var(--fg-muted);
6507
6516
  }
6508
- .db-upper-area {
6509
- display: flex;
6510
- flex: 1;
6517
+
6518
+ .journal-icon-action:hover {
6519
+ color: var(--fg);
6520
+ }
6521
+
6522
+ .journal-status {
6523
+ min-width: 0;
6524
+ color: var(--fg-muted);
6525
+ font-size: 12px;
6511
6526
  overflow: hidden;
6527
+ text-overflow: ellipsis;
6528
+ white-space: nowrap;
6512
6529
  }
6513
- .db-history-resizer {
6514
- height: 5px;
6515
- cursor: row-resize;
6516
- background: var(--border);
6517
- flex-shrink: 0;
6530
+
6531
+ .journal-content {
6532
+ flex: 1 1 auto;
6533
+ min-height: 0;
6534
+ overflow: hidden;
6518
6535
  }
6519
- .db-history-resizer:hover,
6520
- .db-history-resizer.active {
6521
- background: var(--accent);
6522
- opacity: 0.5;
6536
+
6537
+ .journal-daily-layout {
6538
+ height: 100%;
6539
+ min-height: 0;
6540
+ display: grid;
6541
+ grid-template-columns: 520px minmax(360px, 1fr) 320px;
6542
+ gap: 0;
6523
6543
  }
6524
- .db-history-resizer[hidden] { display: none; }
6525
- .db-history-pane {
6526
- height: 220px;
6527
- min-height: 60px;
6528
- flex-shrink: 0;
6529
- overflow: hidden;
6530
- border-top: 1px solid var(--border);
6531
- background: var(--bg);
6532
- /* flex container にしないと、子 (.db-history-pane-content) の flex:1 が
6533
- * 効かず、子がコンテンツサイズに伸びて親の overflow:hidden が clip するだけ
6534
- * の状態になる。結果、子内部の overflow-y:auto がスクロールバーを出さない。 */
6535
- display: flex;
6536
- flex-direction: column;
6544
+
6545
+ .journal-calendar,
6546
+ .journal-related,
6547
+ .journal-task-editor {
6548
+ min-width: 0;
6549
+ border-right: 1px solid var(--border);
6550
+ background: var(--bg-soft);
6551
+ overflow: auto;
6537
6552
  }
6538
- .db-history-pane[hidden] { display: none; }
6539
- .db-tools-section {
6540
- border-top: 1px solid var(--border);
6541
- padding: 6px 8px;
6542
- display: flex;
6543
- flex-direction: column;
6544
- gap: 4px;
6545
- flex-shrink: 0;
6553
+
6554
+ .journal-related,
6555
+ .journal-task-editor {
6556
+ border-right: 0;
6557
+ border-left: 1px solid var(--border);
6558
+ background: var(--bg);
6546
6559
  }
6547
6560
 
6548
- /* ---------- Icon toolbar (案 B 改: TablePlus / Beekeeper 風) ---------- */
6549
- .db-icon-toolbar {
6561
+ .journal-calendar-head,
6562
+ .journal-section-head,
6563
+ .journal-task-column-head {
6550
6564
  display: flex;
6551
- flex-direction: row;
6552
6565
  align-items: center;
6553
- gap: 2px;
6554
- padding: 4px 6px;
6555
- border-bottom: 1px solid var(--border);
6556
- background: var(--bg);
6557
- flex-shrink: 0;
6558
- min-height: 36px;
6559
- }
6560
- .db-icon-toolbar[hidden] {
6561
- display: none !important;
6566
+ justify-content: space-between;
6567
+ gap: 8px;
6562
6568
  }
6563
6569
 
6564
- /* sidebar の設定トグル行。dbToolbar 直下に並ぶ。複数トグルを横に並べる
6565
- 想定なので flex-wrap で折り返し。 */
6566
- .db-prefs-bar {
6567
- display: flex;
6568
- flex-wrap: wrap;
6569
- gap: 6px;
6570
- padding: 6px 8px;
6570
+ .journal-calendar-head {
6571
+ padding: 12px;
6571
6572
  border-bottom: 1px solid var(--border);
6572
- background: var(--bg-soft);
6573
6573
  }
6574
- .db-prefs-bar[hidden] {
6575
- display: none;
6576
- }
6577
- /* ラベル付きピル形式の永続化トグル (Rails FK 推測など)。active 時は
6578
- accent 色のチントで「ON」が一目で分かるようにする。 */
6579
- .db-pref-toggle {
6574
+
6575
+ .journal-calendar-head button,
6576
+ .journal-section-head button,
6577
+ .journal-editor-actions button,
6578
+ .journal-markdown-toolbar button {
6579
+ min-height: 30px;
6580
6580
  display: inline-flex;
6581
6581
  align-items: center;
6582
- gap: 6px;
6583
- padding: 3px 8px;
6582
+ justify-content: center;
6583
+ gap: 5px;
6584
6584
  border: 1px solid var(--border);
6585
- border-radius: 999px;
6585
+ border-radius: 6px;
6586
6586
  background: var(--bg);
6587
- color: var(--fg-muted);
6587
+ color: var(--fg);
6588
6588
  cursor: pointer;
6589
- font-size: var(--db-font-sm);
6590
- }
6591
- .db-pref-toggle:hover {
6592
- background: var(--bg-hover, var(--bg-soft));
6589
+ font: inherit;
6590
+ font-size: 12px;
6591
+ line-height: 1;
6593
6592
  }
6594
- .db-pref-toggle.active {
6595
- border-color: color-mix(in srgb, var(--accent) 45%, var(--border));
6596
- color: var(--accent);
6597
- background: color-mix(in srgb, var(--accent) 12%, var(--bg));
6593
+
6594
+ .journal-section-head button span,
6595
+ .journal-editor-actions button span,
6596
+ .journal-markdown-toolbar button span {
6597
+ line-height: 1;
6598
6598
  }
6599
- .db-pref-toggle svg {
6599
+
6600
+ .journal-section-head button svg,
6601
+ .journal-editor-actions button svg,
6602
+ .journal-markdown-toolbar button svg {
6603
+ display: block;
6600
6604
  flex: 0 0 auto;
6605
+ width: 16px;
6606
+ height: 16px;
6601
6607
  }
6602
- .db-pref-toggle-label {
6603
- white-space: nowrap;
6608
+
6609
+ .journal-calendar-head button:hover,
6610
+ .journal-section-head button:hover,
6611
+ .journal-editor-actions button:hover,
6612
+ .journal-markdown-toolbar button:hover {
6613
+ background: var(--bg-mute);
6614
+ border-color: var(--border-strong);
6604
6615
  }
6605
6616
 
6606
- /* 推測 FK は実 FK と区別。関連パネルのリスト項目に淡いマーカーを乗せる。 */
6607
- .db-related-list-inferred {
6608
- background: color-mix(in srgb, var(--attn, var(--accent)) 6%, transparent);
6617
+ .journal-calendar-grid {
6618
+ display: grid;
6619
+ grid-template-columns: repeat(7, minmax(0, 1fr));
6620
+ gap: 4px;
6621
+ padding: 12px;
6609
6622
  }
6610
- .db-related-list-inferred-badge {
6611
- display: inline-block;
6612
- margin-left: 6px;
6613
- padding: 0 5px;
6614
- border-radius: 4px;
6615
- background: color-mix(in srgb, var(--attn, var(--accent)) 18%, var(--bg));
6616
- color: var(--attn, var(--accent));
6617
- font-size: 9px;
6623
+
6624
+ .journal-weekday {
6625
+ height: 24px;
6626
+ display: grid;
6627
+ place-items: center;
6628
+ color: var(--fg-subtle);
6629
+ font-size: 11px;
6618
6630
  font-weight: 600;
6619
- letter-spacing: 0.04em;
6620
- text-transform: uppercase;
6621
- vertical-align: middle;
6622
6631
  }
6623
- .db-icon-btn {
6624
- display: inline-flex;
6625
- align-items: center;
6626
- justify-content: center;
6627
- width: 30px;
6628
- height: 28px;
6629
- padding: 0;
6630
- border: none;
6632
+
6633
+ .journal-day-button {
6634
+ position: relative;
6635
+ height: 70px;
6636
+ min-width: 0;
6637
+ display: flex;
6638
+ flex-direction: column;
6639
+ align-items: stretch;
6640
+ border: 1px solid transparent;
6641
+ border-radius: 6px;
6631
6642
  background: transparent;
6632
- color: var(--fg-muted);
6633
- border-radius: 4px;
6634
- cursor: pointer;
6635
- font-size: var(--db-font-base);
6636
- transition: background-color 0.12s, color 0.12s;
6637
- }
6638
- .db-icon-btn:hover {
6639
- background: var(--bg-soft);
6643
+ color: var(--fg);
6644
+ cursor: pointer;
6645
+ font: inherit;
6646
+ font-size: 12px;
6647
+ padding: 4px 2px;
6648
+ }
6649
+
6650
+ .journal-day-button:hover {
6651
+ background: var(--bg);
6652
+ border-color: var(--border);
6653
+ }
6654
+
6655
+ .journal-day-button.muted {
6656
+ color: var(--fg-subtle);
6657
+ }
6658
+
6659
+ .journal-day-button.today {
6660
+ border-color: var(--accent);
6661
+ }
6662
+
6663
+ .journal-day-button.active {
6664
+ background: var(--accent-subtle);
6665
+ border-color: var(--accent);
6666
+ color: var(--fg);
6667
+ box-shadow: inset 0 0 0 1px var(--accent);
6668
+ }
6669
+
6670
+ .journal-day-button.has-entry::after {
6671
+ content: "";
6672
+ position: absolute;
6673
+ left: calc(50% - 2px);
6674
+ top: 22px;
6675
+ width: 4px;
6676
+ height: 4px;
6677
+ border-radius: 50%;
6678
+ background: var(--success);
6679
+ }
6680
+
6681
+ .journal-day-number {
6682
+ flex: 0 0 auto;
6683
+ align-self: center;
6684
+ line-height: 18px;
6685
+ min-width: 20px;
6686
+ border-radius: 999px;
6687
+ padding: 0 4px;
6688
+ }
6689
+
6690
+ .journal-day-button.active .journal-day-number {
6691
+ background: var(--accent);
6692
+ color: var(--fg-onemphasis);
6693
+ }
6694
+
6695
+ .journal-day-ranges {
6696
+ min-width: 0;
6697
+ display: flex;
6698
+ flex-direction: column;
6699
+ gap: 2px;
6700
+ margin-top: auto;
6701
+ pointer-events: none;
6702
+ }
6703
+
6704
+ .journal-day-range {
6705
+ min-width: 0;
6706
+ height: 12px;
6707
+ border-radius: 0;
6708
+ margin-inline: -3px;
6709
+ background: var(--accent);
6710
+ color: var(--fg-onemphasis);
6711
+ font-size: 9px;
6712
+ font-weight: 700;
6713
+ line-height: 12px;
6714
+ overflow: hidden;
6715
+ padding: 0 3px;
6716
+ text-align: left;
6717
+ text-overflow: ellipsis;
6718
+ white-space: nowrap;
6719
+ opacity: 0.88;
6720
+ }
6721
+
6722
+ .journal-day-range.start {
6723
+ margin-left: 0;
6724
+ border-top-left-radius: 999px;
6725
+ border-bottom-left-radius: 999px;
6726
+ }
6727
+
6728
+ .journal-day-range.end {
6729
+ margin-right: 0;
6730
+ border-top-right-radius: 999px;
6731
+ border-bottom-right-radius: 999px;
6732
+ }
6733
+
6734
+ .journal-day-range.single {
6735
+ margin-inline: 2px;
6736
+ border-radius: 999px;
6737
+ }
6738
+
6739
+ .journal-day-range-more {
6740
+ align-self: stretch;
6741
+ min-width: 0;
6742
+ height: 13px;
6743
+ display: flex;
6744
+ align-items: center;
6745
+ justify-content: flex-start;
6746
+ border-radius: 4px;
6747
+ background: transparent;
6748
+ color: var(--fg-muted);
6749
+ font-size: 9px;
6750
+ font-weight: 700;
6751
+ line-height: 1;
6752
+ margin-inline: -1px;
6753
+ overflow: hidden;
6754
+ padding: 0 3px;
6755
+ text-overflow: ellipsis;
6756
+ white-space: nowrap;
6757
+ }
6758
+
6759
+ .journal-day-button.active .journal-day-range-more {
6760
+ background: color-mix(in srgb, var(--bg) 72%, var(--accent-subtle));
6761
+ color: var(--fg-muted);
6762
+ }
6763
+
6764
+ .journal-range-p0 {
6765
+ background: var(--danger);
6766
+ }
6767
+
6768
+ .journal-range-p1 {
6769
+ background: var(--attn);
6770
+ }
6771
+
6772
+ .journal-range-p2 {
6773
+ background: var(--accent);
6774
+ }
6775
+
6776
+ .journal-range-p3 {
6777
+ background: var(--fg-subtle);
6778
+ }
6779
+
6780
+ .journal-editor {
6781
+ min-width: 0;
6782
+ min-height: 0;
6783
+ display: flex;
6784
+ flex-direction: column;
6785
+ gap: 10px;
6786
+ padding: 12px;
6787
+ overflow: auto;
6788
+ }
6789
+
6790
+ .journal-entry-list {
6791
+ display: flex;
6792
+ gap: 6px;
6793
+ overflow-x: auto;
6794
+ padding-bottom: 2px;
6795
+ }
6796
+
6797
+ .journal-entry-row {
6798
+ max-width: 240px;
6799
+ min-height: 28px;
6800
+ border: 1px solid var(--border);
6801
+ border-radius: 6px;
6802
+ background: var(--bg);
6803
+ color: var(--fg-muted);
6804
+ cursor: pointer;
6805
+ font: inherit;
6806
+ font-size: 12px;
6807
+ padding: 4px 8px;
6808
+ overflow: hidden;
6809
+ text-overflow: ellipsis;
6810
+ white-space: nowrap;
6811
+ }
6812
+
6813
+ .journal-entry-row.active {
6814
+ color: var(--accent);
6815
+ border-color: var(--accent);
6816
+ background: var(--accent-subtle);
6817
+ }
6818
+
6819
+ .journal-title-input,
6820
+ .journal-body-input,
6821
+ .journal-task-fields select,
6822
+ .journal-task-fields input,
6823
+ .journal-task-toolbar input {
6824
+ width: 100%;
6825
+ min-width: 0;
6826
+ border: 1px solid var(--border);
6827
+ border-radius: 6px;
6828
+ background: var(--bg);
6829
+ color: var(--fg);
6830
+ font: inherit;
6831
+ font-size: 13px;
6832
+ padding: 7px 9px;
6833
+ }
6834
+
6835
+ .journal-field {
6836
+ min-width: 0;
6837
+ display: flex;
6838
+ flex-direction: column;
6839
+ gap: 4px;
6840
+ }
6841
+
6842
+ .journal-field-label {
6843
+ min-width: 0;
6844
+ color: var(--fg-muted);
6845
+ font-size: 11px;
6846
+ font-weight: 700;
6847
+ line-height: 1.2;
6848
+ overflow: hidden;
6849
+ text-overflow: ellipsis;
6850
+ white-space: nowrap;
6851
+ }
6852
+
6853
+ .journal-label-editor {
6854
+ position: relative;
6855
+ width: 100%;
6856
+ min-width: 0;
6857
+ min-height: 34px;
6858
+ display: flex;
6859
+ align-items: center;
6860
+ flex-wrap: wrap;
6861
+ gap: 5px;
6862
+ border: 1px solid var(--border);
6863
+ border-radius: 6px;
6864
+ background: var(--bg);
6865
+ color: var(--fg);
6866
+ padding: 4px 5px;
6867
+ cursor: text;
6868
+ }
6869
+
6870
+ .journal-label-editor-suggestions {
6871
+ position: absolute;
6872
+ z-index: 20;
6873
+ top: calc(100% + 4px);
6874
+ left: 0;
6875
+ right: 0;
6876
+ max-height: 180px;
6877
+ overflow: auto;
6878
+ border: 1px solid var(--border);
6879
+ border-radius: 6px;
6880
+ background: var(--bg);
6881
+ box-shadow: 0 8px 24px color-mix(in srgb, var(--fg) 14%, transparent);
6882
+ padding: 4px;
6883
+ }
6884
+
6885
+ .journal-label-editor-suggestion {
6886
+ width: 100%;
6887
+ min-height: 26px;
6888
+ display: flex;
6889
+ align-items: center;
6890
+ border: 0;
6891
+ border-radius: 4px;
6892
+ background: transparent;
6893
+ color: var(--fg);
6894
+ cursor: pointer;
6895
+ font: inherit;
6896
+ font-size: 12px;
6897
+ text-align: left;
6898
+ padding: 0 8px;
6899
+ }
6900
+
6901
+ .journal-label-editor-suggestion:hover,
6902
+ .journal-label-editor-suggestion.active {
6903
+ background: var(--accent-subtle);
6904
+ color: var(--accent);
6905
+ }
6906
+
6907
+ .journal-label-editor-suggestions[hidden] {
6908
+ display: none;
6909
+ }
6910
+
6911
+ .journal-label-editor-quick {
6912
+ flex: 1 0 100%;
6913
+ min-width: 0;
6914
+ display: flex;
6915
+ align-items: center;
6916
+ gap: 5px;
6917
+ overflow-x: auto;
6918
+ padding-top: 2px;
6919
+ }
6920
+
6921
+ .journal-label-editor-quick[hidden] {
6922
+ display: none;
6923
+ }
6924
+
6925
+ .journal-label-editor-quick-chip {
6926
+ flex: 0 0 auto;
6927
+ max-width: 160px;
6928
+ min-height: 22px;
6929
+ border: 1px solid var(--border);
6930
+ border-radius: 999px;
6931
+ background: var(--bg-soft);
6932
+ color: var(--fg-muted);
6933
+ cursor: pointer;
6934
+ font: inherit;
6935
+ font-size: 11px;
6936
+ font-weight: 600;
6937
+ line-height: 1;
6938
+ overflow: hidden;
6939
+ padding: 0 8px;
6940
+ text-overflow: ellipsis;
6941
+ white-space: nowrap;
6942
+ }
6943
+
6944
+ .journal-label-editor-quick-chip:hover,
6945
+ .journal-label-editor-quick-chip:focus-visible {
6946
+ border-color: var(--accent);
6947
+ background: var(--accent-subtle);
6948
+ color: var(--accent);
6949
+ outline: none;
6950
+ }
6951
+
6952
+ .journal-label-editor-input {
6953
+ flex: 1 1 96px;
6954
+ min-width: 80px;
6955
+ border: 0;
6956
+ outline: 0;
6957
+ background: transparent;
6958
+ color: var(--fg);
6959
+ font: inherit;
6960
+ font-size: 13px;
6961
+ line-height: 22px;
6962
+ padding: 0 4px;
6963
+ }
6964
+
6965
+ .journal-label-editor-input::placeholder {
6966
+ color: var(--fg-subtle);
6967
+ }
6968
+
6969
+ .journal-label-editor-chip {
6970
+ min-width: 0;
6971
+ max-width: 100%;
6972
+ min-height: 22px;
6973
+ display: inline-flex;
6974
+ align-items: center;
6975
+ gap: 2px;
6976
+ border-radius: 999px;
6977
+ background: var(--bg-mute);
6978
+ color: var(--fg-muted);
6979
+ font-size: 11px;
6980
+ font-weight: 600;
6981
+ line-height: 1;
6982
+ padding: 0 3px 0 7px;
6983
+ }
6984
+
6985
+ .journal-label-editor-chip > span {
6986
+ min-width: 0;
6987
+ overflow: hidden;
6988
+ text-overflow: ellipsis;
6989
+ white-space: nowrap;
6990
+ }
6991
+
6992
+ .journal-label-editor-remove {
6993
+ width: 18px;
6994
+ height: 18px;
6995
+ display: inline-flex;
6996
+ align-items: center;
6997
+ justify-content: center;
6998
+ border: 0;
6999
+ border-radius: 999px;
7000
+ background: transparent;
7001
+ color: var(--fg-muted);
7002
+ cursor: pointer;
7003
+ padding: 0;
7004
+ }
7005
+
7006
+ .journal-label-editor-remove:hover,
7007
+ .journal-label-editor-remove:focus-visible {
7008
+ background: var(--bg);
7009
+ color: var(--fg);
7010
+ }
7011
+
7012
+ .journal-label-editor-remove svg {
7013
+ width: 12px;
7014
+ height: 12px;
7015
+ fill: currentColor;
7016
+ }
7017
+
7018
+ .journal-body-input {
7019
+ min-height: 220px;
7020
+ resize: vertical;
7021
+ font-family: ui-monospace, SFMono-Regular, SFMono-Regular, Consolas,
7022
+ "Liberation Mono", Menlo, monospace;
7023
+ line-height: 1.55;
7024
+ }
7025
+
7026
+ .journal-task-body-input {
7027
+ min-height: 260px;
7028
+ }
7029
+
7030
+ .journal-title-input:focus,
7031
+ .journal-label-editor:focus-within,
7032
+ .journal-body-input:focus,
7033
+ .journal-task-fields select:focus,
7034
+ .journal-task-fields input:focus,
7035
+ .journal-task-toolbar input:focus,
7036
+ .journal-day-button:focus-visible,
7037
+ .journal-label-filter:focus-visible,
7038
+ .journal-task-card:focus-visible,
7039
+ .journal-icon-action:focus-visible,
7040
+ .journal-entry-row:focus-visible,
7041
+ .journal-calendar-head button:focus-visible,
7042
+ .journal-section-head button:focus-visible,
7043
+ .journal-editor-actions button:focus-visible,
7044
+ .journal-markdown-toolbar button:focus-visible {
7045
+ outline: 2px solid var(--accent);
7046
+ outline-offset: 1px;
7047
+ }
7048
+
7049
+ .journal-editor-actions {
7050
+ display: flex;
7051
+ align-items: center;
7052
+ gap: 8px;
7053
+ flex-wrap: wrap;
7054
+ }
7055
+
7056
+ .journal-primary-action {
7057
+ background: var(--accent) !important;
7058
+ color: var(--fg-onemphasis) !important;
7059
+ border-color: var(--accent) !important;
7060
+ padding: 0 12px;
7061
+ font-weight: 600;
7062
+ }
7063
+
7064
+ .journal-danger-action {
7065
+ color: var(--danger) !important;
7066
+ }
7067
+
7068
+ .journal-related {
7069
+ padding: 12px;
7070
+ }
7071
+
7072
+ .journal-related h2 {
7073
+ margin: 0 0 10px;
7074
+ font-size: 13px;
7075
+ }
7076
+
7077
+ .journal-empty,
7078
+ .journal-column-empty {
7079
+ color: var(--fg-subtle);
7080
+ font-size: 12px;
7081
+ padding: 12px;
7082
+ }
7083
+
7084
+ .journal-tasks-layout {
7085
+ height: 100%;
7086
+ min-height: 0;
7087
+ display: grid;
7088
+ grid-template-columns: minmax(0, 1fr) var(--journal-task-editor-w);
7089
+ grid-template-rows: auto minmax(0, 1fr);
7090
+ grid-template-areas:
7091
+ "toolbar toolbar"
7092
+ "board editor";
7093
+ }
7094
+
7095
+ .journal-task-toolbar {
7096
+ grid-area: toolbar;
7097
+ position: relative;
7098
+ z-index: 10;
7099
+ display: grid;
7100
+ grid-template-columns: 220px minmax(0, 1fr) auto;
7101
+ grid-template-areas:
7102
+ "filter queue github"
7103
+ "labels labels labels";
7104
+ gap: 10px;
7105
+ padding: 10px 12px;
7106
+ border-bottom: 1px solid var(--border);
7107
+ background: var(--bg-soft);
7108
+ }
7109
+
7110
+ .journal-task-toolbar input {
7111
+ grid-area: filter;
7112
+ }
7113
+
7114
+ .journal-command-preview {
7115
+ min-width: 0;
7116
+ display: flex;
7117
+ align-items: center;
7118
+ gap: 10px;
7119
+ overflow: hidden;
7120
+ }
7121
+
7122
+ .journal-command-preview strong {
7123
+ flex: 0 0 auto;
7124
+ font-size: 12px;
7125
+ }
7126
+
7127
+ .journal-command-preview code {
7128
+ min-width: 0;
7129
+ flex: 0 1 auto;
7130
+ max-width: min(100%, 900px);
7131
+ overflow: hidden;
7132
+ text-overflow: ellipsis;
7133
+ white-space: nowrap;
7134
+ color: var(--fg-muted);
7135
+ font-size: 12px;
7136
+ }
7137
+
7138
+ .journal-queue {
7139
+ grid-area: queue;
7140
+ }
7141
+
7142
+ .journal-queue ol {
7143
+ display: flex;
7144
+ gap: 8px;
7145
+ margin: 0;
7146
+ padding: 0;
7147
+ list-style: none;
7148
+ color: var(--fg-muted);
7149
+ font-size: 12px;
7150
+ overflow: hidden;
7151
+ }
7152
+
7153
+ .journal-queue li {
7154
+ max-width: 180px;
7155
+ overflow: hidden;
7156
+ text-overflow: ellipsis;
7157
+ white-space: nowrap;
7158
+ }
7159
+
7160
+ .journal-github-toggle {
7161
+ grid-area: github;
7162
+ min-height: 30px;
7163
+ display: inline-flex;
7164
+ align-items: center;
7165
+ gap: 6px;
7166
+ justify-self: end;
7167
+ border: 1px solid var(--border);
7168
+ border-radius: 6px;
7169
+ background: var(--bg);
7170
+ color: var(--fg);
7171
+ cursor: pointer;
7172
+ font: inherit;
7173
+ font-size: 12px;
7174
+ font-weight: 600;
7175
+ line-height: 1;
7176
+ padding: 0 10px;
7177
+ }
7178
+
7179
+ .journal-github-toggle:hover,
7180
+ .journal-github-toggle:focus-visible,
7181
+ .journal-github-toggle.active {
7182
+ border-color: var(--accent);
7183
+ background: var(--accent-subtle);
7184
+ color: var(--accent);
7185
+ outline: none;
7186
+ }
7187
+
7188
+ .journal-github-toggle-count {
7189
+ width: 3ch;
7190
+ min-width: 3ch;
7191
+ height: 18px;
7192
+ flex: 0 0 3ch;
7193
+ display: inline-grid;
7194
+ place-items: center;
7195
+ border-radius: 999px;
7196
+ background: var(--bg-mute);
7197
+ color: var(--fg-subtle);
7198
+ font-size: 11px;
7199
+ font-variant-numeric: tabular-nums;
7200
+ }
7201
+
7202
+ .journal-github-panel {
7203
+ position: absolute;
7204
+ top: calc(100% + 8px);
7205
+ right: 12px;
7206
+ width: min(680px, calc(100vw - 32px));
7207
+ height: min(620px, calc(100vh - var(--global-header-h) - 140px));
7208
+ min-width: 0;
7209
+ min-height: 260px;
7210
+ display: flex;
7211
+ flex-direction: column;
7212
+ gap: 8px;
7213
+ overflow: hidden;
7214
+ padding: 10px;
7215
+ border: 1px solid var(--border);
7216
+ border-radius: 8px;
7217
+ background: var(--bg);
7218
+ box-shadow: 0 16px 48px rgba(31, 35, 40, 0.22);
7219
+ z-index: 30;
7220
+ }
7221
+
7222
+ .journal-github-panel-head {
7223
+ display: flex;
7224
+ align-items: center;
7225
+ justify-content: space-between;
7226
+ gap: 8px;
7227
+ }
7228
+
7229
+ .journal-github-panel-head > strong {
7230
+ font-size: 12px;
7231
+ }
7232
+
7233
+ .journal-github-close {
7234
+ width: 30px;
7235
+ height: 30px;
7236
+ display: inline-grid;
7237
+ place-items: center;
7238
+ border: 1px solid var(--border);
7239
+ border-radius: 6px;
7240
+ background: var(--bg);
7241
+ color: var(--fg-muted);
7242
+ cursor: pointer;
7243
+ padding: 0;
7244
+ }
7245
+
7246
+ .journal-github-close:hover,
7247
+ .journal-github-close:focus-visible {
7248
+ color: var(--fg);
7249
+ border-color: var(--accent);
7250
+ outline: none;
7251
+ }
7252
+
7253
+ .journal-github-controls {
7254
+ min-width: 0;
7255
+ display: grid;
7256
+ grid-template-columns:
7257
+ minmax(140px, 1fr) minmax(140px, 1fr) minmax(180px, 2fr)
7258
+ 110px auto;
7259
+ gap: 6px;
7260
+ align-items: center;
7261
+ }
7262
+
7263
+ .journal-github-controls input {
7264
+ grid-column: auto;
7265
+ min-width: 0;
7266
+ width: 100%;
7267
+ }
7268
+
7269
+ .journal-github-controls select {
7270
+ min-width: 0;
7271
+ width: 100%;
7272
+ }
7273
+
7274
+ .journal-github-controls select,
7275
+ .journal-github-controls button {
7276
+ min-height: 30px;
7277
+ border: 1px solid var(--border);
7278
+ border-radius: 6px;
7279
+ background: var(--bg);
7280
+ color: var(--fg);
7281
+ font: inherit;
7282
+ font-size: 12px;
7283
+ }
7284
+
7285
+ .journal-github-controls button {
7286
+ width: 112px;
7287
+ min-width: 112px;
7288
+ flex: 0 0 112px;
7289
+ padding: 0 10px;
7290
+ cursor: pointer;
7291
+ }
7292
+
7293
+ .journal-github-controls button:hover {
7294
+ border-color: var(--accent);
7295
+ }
7296
+
7297
+ .journal-github-load-more {
7298
+ flex: 0 0 auto;
7299
+ min-height: 30px;
7300
+ border: 1px solid var(--border);
7301
+ border-radius: 6px;
7302
+ background: var(--bg);
7303
+ color: var(--accent);
7304
+ cursor: pointer;
7305
+ font: inherit;
7306
+ font-size: 12px;
7307
+ font-weight: 600;
7308
+ }
7309
+
7310
+ .journal-github-load-more:hover,
7311
+ .journal-github-load-more:focus-visible {
7312
+ border-color: var(--accent);
7313
+ background: var(--accent-subtle);
7314
+ outline: none;
7315
+ }
7316
+
7317
+ .journal-github-load-more:disabled {
7318
+ cursor: default;
7319
+ opacity: 0.65;
7320
+ }
7321
+
7322
+ .journal-github-hint {
7323
+ margin: 0;
7324
+ color: var(--fg-muted);
7325
+ font-size: 12px;
7326
+ }
7327
+
7328
+ .journal-github-issues {
7329
+ min-width: 0;
7330
+ min-height: 0;
7331
+ flex: 1 1 auto;
7332
+ display: flex;
7333
+ flex-direction: column;
7334
+ gap: 8px;
7335
+ overflow-x: hidden;
7336
+ overflow-y: auto;
7337
+ padding-right: 2px;
7338
+ }
7339
+
7340
+ .journal-github-issue-card {
7341
+ width: 100%;
7342
+ flex: 0 0 auto;
7343
+ min-height: 54px;
7344
+ display: grid;
7345
+ grid-template-columns: auto minmax(0, 1fr) auto;
7346
+ grid-template-areas:
7347
+ "head title action"
7348
+ "labels labels action";
7349
+ align-items: center;
7350
+ gap: 6px 10px;
7351
+ border: 1px solid var(--border);
7352
+ border-radius: 8px;
7353
+ background: var(--bg);
7354
+ color: var(--fg);
7355
+ cursor: grab;
7356
+ padding: 9px;
7357
+ }
7358
+
7359
+ .journal-github-issue-card:hover {
7360
+ border-color: var(--accent);
7361
+ }
7362
+
7363
+ .journal-github-issue-card.linked {
7364
+ background: var(--accent-subtle);
7365
+ }
7366
+
7367
+ .journal-github-issue-card strong {
7368
+ grid-area: title;
7369
+ display: -webkit-box;
7370
+ -webkit-box-orient: vertical;
7371
+ -webkit-line-clamp: 2;
7372
+ font-size: 12px;
7373
+ line-height: 1.35;
7374
+ overflow: hidden;
7375
+ overflow-wrap: anywhere;
7376
+ }
7377
+
7378
+ .journal-github-issue-head,
7379
+ .journal-github-issue-labels {
7380
+ display: flex;
7381
+ align-items: center;
7382
+ gap: 5px;
7383
+ }
7384
+
7385
+ .journal-github-issue-head {
7386
+ grid-area: head;
7387
+ flex-wrap: nowrap;
7388
+ }
7389
+
7390
+ .journal-github-issue-labels {
7391
+ grid-area: labels;
7392
+ min-width: 0;
7393
+ overflow: hidden;
7394
+ flex-wrap: nowrap;
7395
+ }
7396
+
7397
+ .journal-github-issue-labels .journal-label-chip {
7398
+ flex: 0 1 auto;
7399
+ }
7400
+
7401
+ .journal-github-issue-action {
7402
+ grid-area: action;
7403
+ justify-self: end;
7404
+ align-self: center;
7405
+ min-height: 26px;
7406
+ border: 1px solid var(--border);
7407
+ border-radius: 6px;
7408
+ background: var(--bg);
7409
+ color: var(--accent);
7410
+ cursor: pointer;
7411
+ font: inherit;
7412
+ font-size: 12px;
7413
+ font-weight: 600;
7414
+ line-height: 1;
7415
+ padding: 0 8px;
7416
+ }
7417
+
7418
+ .journal-github-issue-action:hover,
7419
+ .journal-github-issue-action:focus-visible {
7420
+ border-color: var(--accent);
7421
+ background: var(--accent-subtle);
7422
+ outline: none;
7423
+ }
7424
+
7425
+ .journal-github-issue-action:disabled {
7426
+ cursor: default;
7427
+ opacity: 0.65;
7428
+ }
7429
+
7430
+ .journal-github-issue-head span,
7431
+ .journal-github-linked {
7432
+ min-height: 18px;
7433
+ display: inline-flex;
7434
+ align-items: center;
7435
+ border-radius: 999px;
7436
+ background: var(--bg-mute);
7437
+ color: var(--fg-muted);
7438
+ font-size: 11px;
7439
+ font-weight: 600;
7440
+ line-height: 1;
7441
+ padding: 0 6px;
7442
+ }
7443
+
7444
+ .journal-github-linked {
7445
+ color: var(--accent);
7446
+ background: var(--accent-subtle);
7447
+ }
7448
+
7449
+ .journal-label-filters {
7450
+ grid-area: labels;
7451
+ min-width: 0;
7452
+ display: flex;
7453
+ align-items: center;
7454
+ gap: 6px;
7455
+ overflow-x: auto;
7456
+ padding-bottom: 1px;
7457
+ }
7458
+
7459
+ .journal-label-filter {
7460
+ flex: 0 0 auto;
7461
+ min-height: 26px;
7462
+ display: inline-flex;
7463
+ align-items: center;
7464
+ gap: 6px;
7465
+ border: 1px solid var(--border);
7466
+ border-radius: 999px;
7467
+ background: var(--bg);
7468
+ color: var(--fg-muted);
7469
+ cursor: pointer;
7470
+ font: inherit;
7471
+ font-size: 12px;
7472
+ line-height: 1;
7473
+ padding: 0 8px;
7474
+ max-width: 220px;
7475
+ }
7476
+
7477
+ .journal-label-filter:hover {
7478
+ color: var(--fg);
7479
+ border-color: var(--border-strong);
7480
+ }
7481
+
7482
+ .journal-label-filter.active {
7483
+ color: var(--accent);
7484
+ border-color: var(--accent);
7485
+ background: var(--accent-subtle);
7486
+ }
7487
+
7488
+ .journal-label-filter-name {
7489
+ min-width: 0;
7490
+ overflow: hidden;
7491
+ text-overflow: ellipsis;
7492
+ white-space: nowrap;
7493
+ }
7494
+
7495
+ .journal-label-filter-count {
7496
+ min-width: 18px;
7497
+ height: 18px;
7498
+ display: inline-grid;
7499
+ place-items: center;
7500
+ border-radius: 999px;
7501
+ background: var(--bg-mute);
7502
+ color: var(--fg-subtle);
7503
+ font-size: 11px;
7504
+ }
7505
+
7506
+ .journal-label-filter.active .journal-label-filter-count {
7507
+ background: var(--accent);
7508
+ color: var(--fg-onemphasis);
7509
+ }
7510
+
7511
+ .journal-task-board-wrap {
7512
+ grid-area: board;
7513
+ min-width: 0;
7514
+ min-height: 0;
7515
+ overflow: auto;
7516
+ padding: 12px;
7517
+ }
7518
+
7519
+ .journal-task-board {
7520
+ min-width: 980px;
7521
+ display: grid;
7522
+ grid-template-columns: repeat(5, minmax(180px, 1fr));
7523
+ gap: 10px;
7524
+ }
7525
+
7526
+ .journal-task-column {
7527
+ min-width: 0;
7528
+ min-height: 360px;
7529
+ border: 1px solid var(--border);
7530
+ border-radius: 8px;
7531
+ background: var(--bg-soft);
7532
+ overflow: hidden;
7533
+ }
7534
+
7535
+ .journal-task-column.drop-target {
7536
+ border-color: var(--accent);
7537
+ background: var(--accent-subtle);
7538
+ }
7539
+
7540
+ .journal-task-column-head {
7541
+ min-height: 36px;
7542
+ padding: 8px 10px;
7543
+ border-bottom: 1px solid var(--border);
7544
+ background: var(--bg);
7545
+ font-size: 12px;
7546
+ }
7547
+
7548
+ .journal-task-column-head span {
7549
+ min-width: 22px;
7550
+ height: 22px;
7551
+ display: inline-grid;
7552
+ place-items: center;
7553
+ border-radius: 999px;
7554
+ background: var(--bg-mute);
7555
+ color: var(--fg-muted);
7556
+ font-size: 11px;
7557
+ }
7558
+
7559
+ .journal-task-card {
7560
+ position: relative;
7561
+ width: calc(100% - 16px);
7562
+ min-height: 96px;
7563
+ display: flex;
7564
+ flex-direction: column;
7565
+ gap: 6px;
7566
+ margin: 8px;
7567
+ padding: 9px;
7568
+ border: 1px solid var(--border);
7569
+ border-radius: 8px;
7570
+ background: var(--bg);
7571
+ color: var(--fg);
7572
+ text-align: left;
7573
+ cursor: pointer;
7574
+ font: inherit;
7575
+ overflow: hidden;
7576
+ transform: translateY(0) scale(1);
7577
+ transition:
7578
+ border-color 0.16s ease,
7579
+ box-shadow 0.16s ease,
7580
+ background 0.16s ease,
7581
+ opacity 0.16s ease,
7582
+ transform 0.16s cubic-bezier(0.2, 0.8, 0.2, 1);
7583
+ will-change: transform, box-shadow;
7584
+ }
7585
+
7586
+ .journal-task-card.dragging {
7587
+ opacity: 0.88;
7588
+ transform: translateY(-5px) scale(1.02);
7589
+ border-color: var(--accent);
7590
+ background: color-mix(in srgb, var(--bg) 84%, var(--accent-subtle));
7591
+ box-shadow:
7592
+ 0 16px 34px rgba(15, 23, 42, 0.24),
7593
+ 0 0 0 2px var(--accent-subtle);
7594
+ cursor: grabbing;
7595
+ z-index: 2;
7596
+ animation: journal-task-card-lift 0.16s cubic-bezier(0.2, 0.8, 0.2, 1)
7597
+ both;
7598
+ }
7599
+
7600
+ .journal-task-card.drop-target {
7601
+ border-color: var(--accent);
7602
+ background: color-mix(in srgb, var(--bg) 84%, var(--accent-subtle));
7603
+ transform: translateY(1px);
7604
+ box-shadow:
7605
+ inset 0 4px 0 var(--accent),
7606
+ 0 0 0 1px var(--accent-subtle);
7607
+ }
7608
+
7609
+ .journal-task-card.drop-target.drop-after {
7610
+ box-shadow:
7611
+ inset 0 -4px 0 var(--accent),
7612
+ 0 0 0 1px var(--accent-subtle);
7613
+ }
7614
+
7615
+ .journal-task-card.compact {
7616
+ width: 100%;
7617
+ margin: 0 0 8px;
7618
+ min-height: 78px;
7619
+ }
7620
+
7621
+ .journal-task-card:hover,
7622
+ .journal-task-card.selected {
7623
+ border-color: var(--accent);
7624
+ box-shadow: 0 0 0 1px var(--accent-subtle);
7625
+ }
7626
+
7627
+ .journal-task-card.dragging:hover,
7628
+ .journal-task-card.dragging.selected {
7629
+ border-color: var(--accent);
7630
+ box-shadow:
7631
+ 0 16px 34px rgba(15, 23, 42, 0.24),
7632
+ 0 0 0 2px var(--accent-subtle);
7633
+ }
7634
+
7635
+ @keyframes journal-task-card-lift {
7636
+ from {
7637
+ opacity: 0.72;
7638
+ transform: translateY(0) scale(0.995);
7639
+ }
7640
+ 70% {
7641
+ opacity: 0.9;
7642
+ transform: translateY(-6px) scale(1.025);
7643
+ }
7644
+ to {
7645
+ opacity: 0.88;
7646
+ transform: translateY(-5px) scale(1.02);
7647
+ }
7648
+ }
7649
+
7650
+ .journal-task-card strong {
7651
+ font-size: 13px;
7652
+ line-height: 1.35;
7653
+ overflow-wrap: anywhere;
7654
+ }
7655
+
7656
+ .journal-task-card-top,
7657
+ .journal-task-labels {
7658
+ display: flex;
7659
+ align-items: center;
7660
+ gap: 5px;
7661
+ flex-wrap: wrap;
7662
+ }
7663
+
7664
+ .journal-task-card-top {
7665
+ min-height: 20px;
7666
+ }
7667
+
7668
+ .journal-task-drag-handle {
7669
+ margin-left: auto;
7670
+ width: 26px;
7671
+ min-width: 26px;
7672
+ height: 24px;
7673
+ min-height: 24px;
7674
+ display: inline-flex;
7675
+ align-items: center;
7676
+ justify-content: center;
7677
+ border: 1px solid transparent;
7678
+ border-radius: 6px;
7679
+ background: transparent;
7680
+ color: var(--fg-subtle);
7681
+ cursor: grab;
7682
+ line-height: 1;
7683
+ opacity: 0.7;
7684
+ touch-action: none;
7685
+ transition:
7686
+ background 0.14s ease,
7687
+ border-color 0.14s ease,
7688
+ color 0.14s ease,
7689
+ opacity 0.14s ease,
7690
+ transform 0.14s ease;
7691
+ }
7692
+
7693
+ .journal-task-drag-handle svg {
7694
+ display: block;
7695
+ width: 16px;
7696
+ height: 16px;
7697
+ }
7698
+
7699
+ .journal-task-card:hover .journal-task-drag-handle,
7700
+ .journal-task-card.dragging .journal-task-drag-handle,
7701
+ .journal-task-drag-handle:hover {
7702
+ border-color: var(--border);
7703
+ background: var(--bg-mute);
7704
+ color: var(--accent);
7705
+ opacity: 1;
7706
+ }
7707
+
7708
+ .journal-task-card.dragging .journal-task-drag-handle {
7709
+ background: var(--accent);
7710
+ border-color: var(--accent);
7711
+ color: white;
7712
+ cursor: grabbing;
7713
+ transform: scale(1.08);
7714
+ }
7715
+
7716
+ .journal-priority,
7717
+ .journal-task-status,
7718
+ .journal-label-chip,
7719
+ .journal-task-due,
7720
+ .journal-task-claim {
7721
+ display: inline-flex;
7722
+ align-items: center;
7723
+ max-width: 100%;
7724
+ min-height: 18px;
7725
+ padding: 0 6px;
7726
+ border-radius: 999px;
7727
+ background: var(--bg-mute);
7728
+ color: var(--fg-muted);
7729
+ font-size: 11px;
7730
+ font-weight: 600;
7731
+ line-height: 1;
7732
+ overflow: hidden;
7733
+ text-overflow: ellipsis;
7734
+ white-space: nowrap;
7735
+ }
7736
+
7737
+ .journal-priority-p0 {
7738
+ background: color-mix(in srgb, var(--danger) 14%, transparent);
7739
+ color: var(--danger);
7740
+ }
7741
+
7742
+ .journal-priority-p1 {
7743
+ background: color-mix(in srgb, var(--attn) 14%, transparent);
7744
+ color: var(--attn);
7745
+ }
7746
+
7747
+ .journal-priority-p2 {
7748
+ background: var(--accent-subtle);
7749
+ color: var(--accent);
7750
+ }
7751
+
7752
+ .journal-task-editor {
7753
+ grid-area: editor;
7754
+ position: relative;
7755
+ display: flex;
7756
+ flex-direction: column;
7757
+ gap: 10px;
7758
+ padding: 12px;
7759
+ }
7760
+
7761
+ .journal-task-editor-resizer {
7762
+ position: absolute;
7763
+ top: 0;
7764
+ bottom: 0;
7765
+ left: -5px;
7766
+ width: 10px;
7767
+ cursor: col-resize;
7768
+ z-index: 2;
7769
+ }
7770
+
7771
+ .journal-task-editor-resizer::after {
7772
+ content: "";
7773
+ position: absolute;
7774
+ top: 0;
7775
+ bottom: 0;
7776
+ left: 4px;
7777
+ width: 2px;
7778
+ background: transparent;
7779
+ }
7780
+
7781
+ .journal-task-editor-resizer:hover::after,
7782
+ .journal-task-editor-resizer:focus-visible::after,
7783
+ body.journal-task-editor-resizing .journal-task-editor-resizer::after {
7784
+ background: var(--accent);
7785
+ }
7786
+
7787
+ body.journal-task-editor-resizing {
7788
+ cursor: col-resize !important;
7789
+ }
7790
+
7791
+ body.journal-task-editor-resizing * {
7792
+ cursor: col-resize !important;
7793
+ user-select: none;
7794
+ }
7795
+
7796
+ .journal-task-fields {
7797
+ display: grid;
7798
+ grid-template-columns: 1fr 1fr;
7799
+ gap: 8px;
7800
+ }
7801
+
7802
+ .journal-markdown-toolbar {
7803
+ display: flex;
7804
+ align-items: center;
7805
+ gap: 6px;
7806
+ flex-wrap: wrap;
7807
+ }
7808
+
7809
+ .journal-markdown-toolbar button {
7810
+ min-width: 30px;
7811
+ padding: 0 8px;
7812
+ font-weight: 600;
7813
+ }
7814
+
7815
+ .journal-editor-mode {
7816
+ margin-left: auto;
7817
+ }
7818
+
7819
+ .journal-markdown-preview {
7820
+ min-height: 180px;
7821
+ max-height: 360px;
7822
+ overflow: auto;
7823
+ border: 1px solid var(--border);
7824
+ border-radius: 6px;
7825
+ background: var(--bg);
7826
+ font-size: 13px;
7827
+ line-height: 1.5;
7828
+ padding: 8px 10px;
7829
+ }
7830
+
7831
+ .journal-markdown-preview > :first-child,
7832
+ .journal-markdown-preview .gdp-markdown-preview > :first-child {
7833
+ margin-top: 0;
7834
+ }
7835
+
7836
+ .journal-markdown-preview > :last-child,
7837
+ .journal-markdown-preview .gdp-markdown-preview > :last-child {
7838
+ margin-bottom: 0;
7839
+ }
7840
+
7841
+ .journal-markdown-preview p,
7842
+ .journal-markdown-preview ul,
7843
+ .journal-markdown-preview ol,
7844
+ .journal-markdown-preview blockquote,
7845
+ .journal-markdown-preview pre,
7846
+ .journal-markdown-preview table {
7847
+ margin: 0 0 8px;
7848
+ }
7849
+
7850
+ .journal-markdown-preview ul,
7851
+ .journal-markdown-preview ol {
7852
+ padding-left: 20px;
7853
+ }
7854
+
7855
+ .journal-body-input[hidden],
7856
+ .journal-markdown-preview[hidden] {
7857
+ display: none;
7858
+ }
7859
+
7860
+ @media (max-width: 1100px) {
7861
+ .journal-daily-layout,
7862
+ .journal-tasks-layout {
7863
+ display: flex;
7864
+ flex-direction: column;
7865
+ overflow: auto;
7866
+ }
7867
+
7868
+ .journal-calendar,
7869
+ .journal-related,
7870
+ .journal-task-editor {
7871
+ border: 0;
7872
+ border-bottom: 1px solid var(--border);
7873
+ }
7874
+
7875
+ .journal-task-editor-resizer {
7876
+ display: none;
7877
+ }
7878
+
7879
+ .journal-task-toolbar {
7880
+ display: flex;
7881
+ flex-direction: column;
7882
+ }
7883
+
7884
+ .journal-github-panel {
7885
+ right: 8px;
7886
+ left: 8px;
7887
+ width: auto;
7888
+ height: min(560px, calc(100vh - var(--global-header-h) - 120px));
7889
+ }
7890
+
7891
+ .journal-github-controls {
7892
+ grid-template-columns: minmax(0, 1fr) auto;
7893
+ }
7894
+
7895
+ .journal-github-controls input {
7896
+ grid-column: 1 / -1;
7897
+ }
7898
+
7899
+ .journal-github-issues {
7900
+ flex: 0 1 auto;
7901
+ max-height: 280px;
7902
+ }
7903
+
7904
+ .journal-github-issue-card {
7905
+ min-height: 82px;
7906
+ display: flex;
7907
+ flex-direction: column;
7908
+ align-items: stretch;
7909
+ gap: 6px;
7910
+ }
7911
+
7912
+ .journal-github-issue-head,
7913
+ .journal-github-issue-labels {
7914
+ flex-wrap: wrap;
7915
+ }
7916
+
7917
+ .journal-github-issue-action {
7918
+ align-self: flex-start;
7919
+ }
7920
+
7921
+ .journal-task-board {
7922
+ min-width: 900px;
7923
+ }
7924
+ }
7925
+
7926
+ @media (max-width: 700px) {
7927
+ .journal-tasks-layout {
7928
+ overflow: auto;
7929
+ }
7930
+
7931
+ .journal-task-board-wrap {
7932
+ flex: 0 0 auto;
7933
+ overflow: visible;
7934
+ padding: 10px;
7935
+ }
7936
+
7937
+ .journal-task-board {
7938
+ min-width: 0;
7939
+ grid-template-columns: 1fr;
7940
+ gap: 8px;
7941
+ }
7942
+
7943
+ .journal-task-column {
7944
+ min-height: auto;
7945
+ }
7946
+
7947
+ .journal-task-editor {
7948
+ flex: 0 0 auto;
7949
+ overflow: visible;
7950
+ }
7951
+ }
7952
+
7953
+ .gdp-database-page #content {
7954
+ margin-left: 0;
7955
+ padding: var(--global-header-h) 0 0;
7956
+ min-height: 0;
7957
+ max-width: none;
7958
+ }
7959
+
7960
+ .db-root,
7961
+ .db-container {
7962
+ --db-font-sm: 11px;
7963
+ --db-font-base: 12px;
7964
+ --db-font-md: 13px;
7965
+ --db-font-mono: 13px;
7966
+ }
7967
+
7968
+ .db-container {
7969
+ display: flex;
7970
+ flex-direction: column;
7971
+ /* `.db-tab-host` の中に置かれるので親の高さに合わせる。
7972
+ Round 5 multi-tab 以前は #content 直下だったため calc(100vh - header) で
7973
+ 固定していたが、いまは .db-root > .db-tabs-bar (固定) + .db-tab-host
7974
+ (flex: 1) の下にいるため、ここで自分で viewport 高さを再計算すると
7975
+ 親より縦長になり sidebar 末尾の history toggle が下にはみ出す。 */
7976
+ height: 100%;
7977
+ min-height: 0;
7978
+ overflow: hidden;
7979
+ font-size: var(--db-font-base);
7980
+ }
7981
+ body[data-sidebar-font-size="compact"] .db-root,
7982
+ body[data-sidebar-font-size="compact"] .db-container {
7983
+ --db-font-sm: 10px;
7984
+ --db-font-base: 11px;
7985
+ --db-font-md: 12px;
7986
+ --db-font-mono: 12px;
7987
+ }
7988
+ body[data-sidebar-font-size="large"] .db-root,
7989
+ body[data-sidebar-font-size="large"] .db-container {
7990
+ --db-font-sm: 12px;
7991
+ --db-font-base: 14px;
7992
+ --db-font-md: 15px;
7993
+ --db-font-mono: 14px;
7994
+ }
7995
+ body[data-sidebar-font-size="xlarge"] .db-root,
7996
+ body[data-sidebar-font-size="xlarge"] .db-container {
7997
+ --db-font-sm: 13px;
7998
+ --db-font-base: 15px;
7999
+ --db-font-md: 16px;
8000
+ --db-font-mono: 15px;
8001
+ }
8002
+ .db-upper-area {
8003
+ display: flex;
8004
+ flex: 1;
8005
+ overflow: hidden;
8006
+ }
8007
+ .db-history-resizer {
8008
+ height: 5px;
8009
+ cursor: row-resize;
8010
+ background: var(--border);
8011
+ flex-shrink: 0;
8012
+ }
8013
+ .db-history-resizer:hover,
8014
+ .db-history-resizer.active {
8015
+ background: var(--accent);
8016
+ opacity: 0.5;
8017
+ }
8018
+ .db-history-resizer[hidden] { display: none; }
8019
+ .db-history-pane {
8020
+ height: 220px;
8021
+ min-height: 60px;
8022
+ flex-shrink: 0;
8023
+ overflow: hidden;
8024
+ border-top: 1px solid var(--border);
8025
+ background: var(--bg);
8026
+ /* flex container にしないと、子 (.db-history-pane-content) の flex:1 が
8027
+ * 効かず、子がコンテンツサイズに伸びて親の overflow:hidden が clip するだけ
8028
+ * の状態になる。結果、子内部の overflow-y:auto がスクロールバーを出さない。 */
8029
+ display: flex;
8030
+ flex-direction: column;
8031
+ }
8032
+ .db-history-pane[hidden] { display: none; }
8033
+ .db-tools-section {
8034
+ border-top: 1px solid var(--border);
8035
+ padding: 6px 8px;
8036
+ display: flex;
8037
+ flex-direction: column;
8038
+ gap: 4px;
8039
+ flex-shrink: 0;
8040
+ }
8041
+
8042
+ /* ---------- Icon toolbar (案 B 改: TablePlus / Beekeeper 風) ---------- */
8043
+ .db-icon-toolbar {
8044
+ display: flex;
8045
+ flex-direction: row;
8046
+ align-items: center;
8047
+ gap: 2px;
8048
+ padding: 4px 6px;
8049
+ border-bottom: 1px solid var(--border);
8050
+ background: var(--bg);
8051
+ flex-shrink: 0;
8052
+ min-height: 36px;
8053
+ }
8054
+ .db-icon-toolbar[hidden] {
8055
+ display: none !important;
8056
+ }
8057
+
8058
+ /* sidebar の設定トグル行。dbToolbar 直下に並ぶ。複数トグルを横に並べる
8059
+ 想定なので flex-wrap で折り返し。 */
8060
+ .db-prefs-bar {
8061
+ display: flex;
8062
+ flex-wrap: wrap;
8063
+ gap: 6px;
8064
+ padding: 6px 8px;
8065
+ border-bottom: 1px solid var(--border);
8066
+ background: var(--bg-soft);
8067
+ }
8068
+ .db-prefs-bar[hidden] {
8069
+ display: none;
8070
+ }
8071
+ /* ラベル付きピル形式の永続化トグル (Rails FK 推測など)。active 時は
8072
+ accent 色のチントで「ON」が一目で分かるようにする。 */
8073
+ .db-pref-toggle {
8074
+ display: inline-flex;
8075
+ align-items: center;
8076
+ gap: 6px;
8077
+ padding: 3px 8px;
8078
+ border: 1px solid var(--border);
8079
+ border-radius: 999px;
8080
+ background: var(--bg);
8081
+ color: var(--fg-muted);
8082
+ cursor: pointer;
8083
+ font-size: var(--db-font-sm);
8084
+ }
8085
+ .db-pref-toggle:hover {
8086
+ background: var(--bg-hover, var(--bg-soft));
8087
+ }
8088
+ .db-pref-toggle.active {
8089
+ border-color: color-mix(in srgb, var(--accent) 45%, var(--border));
8090
+ color: var(--accent);
8091
+ background: color-mix(in srgb, var(--accent) 12%, var(--bg));
8092
+ }
8093
+ .db-pref-toggle svg {
8094
+ flex: 0 0 auto;
8095
+ }
8096
+ .db-pref-toggle-label {
8097
+ white-space: nowrap;
8098
+ }
8099
+
8100
+ /* 推測 FK は実 FK と区別。関連パネルのリスト項目に淡いマーカーを乗せる。 */
8101
+ .db-related-list-inferred {
8102
+ background: color-mix(in srgb, var(--attn, var(--accent)) 6%, transparent);
8103
+ }
8104
+ .db-related-list-inferred-badge {
8105
+ display: inline-block;
8106
+ margin-left: 6px;
8107
+ padding: 0 5px;
8108
+ border-radius: 4px;
8109
+ background: color-mix(in srgb, var(--attn, var(--accent)) 18%, var(--bg));
8110
+ color: var(--attn, var(--accent));
8111
+ font-size: 9px;
8112
+ font-weight: 600;
8113
+ letter-spacing: 0.04em;
8114
+ text-transform: uppercase;
8115
+ vertical-align: middle;
8116
+ }
8117
+ .db-icon-btn {
8118
+ display: inline-flex;
8119
+ align-items: center;
8120
+ justify-content: center;
8121
+ width: 30px;
8122
+ height: 28px;
8123
+ padding: 0;
8124
+ border: none;
8125
+ background: transparent;
8126
+ color: var(--fg-muted);
8127
+ border-radius: 4px;
8128
+ cursor: pointer;
8129
+ font-size: var(--db-font-base);
8130
+ transition: background-color 0.12s, color 0.12s;
8131
+ }
8132
+ .db-icon-btn:hover {
8133
+ background: var(--bg-soft);
6640
8134
  color: var(--fg);
6641
8135
  }
6642
8136
  .db-icon-btn.active {
@@ -6743,10 +8237,9 @@ body[data-sidebar-font-size="xlarge"] .db-container {
6743
8237
  }
6744
8238
  .db-refresh-btn {
6745
8239
  flex: 0 0 auto;
6746
- width: auto;
8240
+ width: 30px;
6747
8241
  min-width: 30px;
6748
- padding: 0 7px;
6749
- gap: 4px;
8242
+ padding: 0;
6750
8243
  border: 1px solid var(--border);
6751
8244
  background: var(--bg);
6752
8245
  font-weight: 500;
@@ -6759,6 +8252,7 @@ body[data-sidebar-font-size="xlarge"] .db-container {
6759
8252
  animation: gdp-spin 0.7s linear infinite;
6760
8253
  }
6761
8254
  .db-refresh-label {
8255
+ display: none;
6762
8256
  line-height: 1;
6763
8257
  white-space: nowrap;
6764
8258
  }
@@ -7765,10 +9259,10 @@ html[data-theme="dark"] .db-schema-table tr.pk-row {
7765
9259
  color: var(--danger);
7766
9260
  }
7767
9261
  .db-grid-refresh {
7768
- width: auto;
9262
+ width: 30px;
7769
9263
  min-width: 30px;
7770
9264
  height: 24px;
7771
- padding: 0 8px;
9265
+ padding: 0;
7772
9266
  border: 1px solid var(--border);
7773
9267
  border-radius: 4px;
7774
9268
  background: var(--bg);
@@ -7777,7 +9271,6 @@ html[data-theme="dark"] .db-schema-table tr.pk-row {
7777
9271
  display: inline-flex;
7778
9272
  align-items: center;
7779
9273
  justify-content: center;
7780
- gap: 4px;
7781
9274
  font-size: var(--db-font-base);
7782
9275
  font-weight: 500;
7783
9276
  }
@@ -7801,6 +9294,7 @@ html[data-theme="dark"] .db-schema-table tr.pk-row {
7801
9294
  flex: 0 0 auto;
7802
9295
  }
7803
9296
  .db-grid-refresh-label {
9297
+ display: none;
7804
9298
  line-height: 1;
7805
9299
  white-space: nowrap;
7806
9300
  }
@@ -7812,16 +9306,6 @@ html[data-theme="dark"] .db-schema-table tr.pk-row {
7812
9306
  animation: gdp-spin 0.7s linear infinite;
7813
9307
  }
7814
9308
 
7815
- @media (max-width: 720px) {
7816
- .db-grid-refresh {
7817
- width: 30px;
7818
- padding: 0;
7819
- }
7820
- .db-grid-refresh-label {
7821
- display: none;
7822
- }
7823
- }
7824
-
7825
9309
  /* ---------- Data Grid: Column Filter Row ---------- */
7826
9310
  .db-grid-filter-row-wrap {
7827
9311
  flex-shrink: 0;