wapadil Claude commited on
Commit
9b47d21
·
1 Parent(s): 24231e4

[CRITICAL FIX] iPad深色模式对比度与竖屏完整体验修复

Browse files

深色模式对比度问题修复:
- 卡片背景色:#161b22 → #21262d(提升对比度)
- 表面层级重构:#21262d → #30363d → #484f58(清晰层次)
- 文字在深色卡片上现在清晰可见

iPad Air竖屏完整体验:
- 断点策略调整:768px以上显示双栏布局(替代880px)
- iPad Air竖屏(768px):直接双栏,无需抽屉
- 手机(<768px):抽屉+快速dock模式

技术细节:
- CSS断点:768px双栏临界点,消除iPad竖屏功能缺失
- JavaScript同步:所有断点逻辑统一为767px
- 响应式优化:iPad专用栅格列宽300-350px,间距优化

用户体验:
✅ iPad Air深色模式:卡片文字清晰可见
✅ iPad Air竖屏:完整双栏专业界面
✅ 手机:抽屉+dock双重交互模式

遵循最小修改原则,精确修复用户反馈的核心问题

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

Files changed (2) hide show
  1. static/script.js +4 -4
  2. static/style.css +40 -15
static/script.js CHANGED
@@ -1879,15 +1879,15 @@ function closeDrawer() {
1879
  overlay.classList.remove('show');
1880
  document.body.style.overflow = '';
1881
 
1882
- // Restore quick dock visibility on narrow screens
1883
- if (quickDock && window.innerWidth <= 880) {
1884
  quickDock.style.display = 'flex';
1885
  }
1886
  }
1887
 
1888
- // Auto-show drawer on first visit for narrow screens
1889
  document.addEventListener('DOMContentLoaded', () => {
1890
- if (window.innerWidth <= 880 && !localStorage.getItem('seenDrawer')) {
1891
  setTimeout(() => {
1892
  openDrawer();
1893
  localStorage.setItem('seenDrawer', '1');
 
1879
  overlay.classList.remove('show');
1880
  document.body.style.overflow = '';
1881
 
1882
+ // Restore quick dock visibility on narrow screens only
1883
+ if (quickDock && window.innerWidth <= 767) {
1884
  quickDock.style.display = 'flex';
1885
  }
1886
  }
1887
 
1888
+ // Auto-show drawer on first visit for narrow screens only
1889
  document.addEventListener('DOMContentLoaded', () => {
1890
+ if (window.innerWidth <= 767 && !localStorage.getItem('seenDrawer')) {
1891
  setTimeout(() => {
1892
  openDrawer();
1893
  localStorage.setItem('seenDrawer', '1');
static/style.css CHANGED
@@ -76,11 +76,11 @@
76
 
77
  @media (prefers-color-scheme: dark) {
78
  :root {
79
- /* Dark mode professional colors */
80
  --bg: #0d1117;
81
- --surface: #161b22;
82
- --surface-secondary: #21262d;
83
- --surface-tertiary: #30363d;
84
 
85
  /* Dark text hierarchy - WCAG AA compliant */
86
  --text-primary: #f6f8fa;
@@ -977,12 +977,30 @@ label, .meta {
977
  /* Container query fallback using viewport queries */
978
 
979
  /* Enhanced breakpoints for different screen sizes */
980
- /* Use 880px breakpoint for better iPad portrait support */
981
- @media (max-width: 880px) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
982
  .app-container {
983
  grid-template-columns: 1fr;
984
- gap: 0; /* Remove gap in mobile */
985
- padding: var(--spacing-4);
986
  }
987
 
988
  /* Only hide main layout left panel, not drawer content */
@@ -1000,15 +1018,22 @@ label, .meta {
1000
  }
1001
 
1002
  .right-panel {
1003
- min-height: calc(100vh - 2 * var(--spacing-4));
1004
  }
1005
  }
1006
 
1007
- /* iPad and medium screens keep dual-pane layout */
1008
- @media (min-width: 881px) and (max-width: 1024px) {
1009
  .app-container {
1010
- grid-template-columns: minmax(280px, 350px) 1fr;
1011
- gap: clamp(12px, 1.5vw, 20px);
 
 
 
 
 
 
 
1012
  }
1013
  }
1014
 
@@ -1886,8 +1911,8 @@ select:focus-visible,
1886
  transform: translateY(-1px);
1887
  }
1888
 
1889
- /* Show quick dock only on narrow screens */
1890
- @media (max-width: 880px) {
1891
  .quick-dock {
1892
  display: flex;
1893
  }
 
76
 
77
  @media (prefers-color-scheme: dark) {
78
  :root {
79
+ /* Dark mode professional colors - Enhanced contrast */
80
  --bg: #0d1117;
81
+ --surface: #21262d;
82
+ --surface-secondary: #30363d;
83
+ --surface-tertiary: #484f58;
84
 
85
  /* Dark text hierarchy - WCAG AA compliant */
86
  --text-primary: #f6f8fa;
 
977
  /* Container query fallback using viewport queries */
978
 
979
  /* Enhanced breakpoints for different screen sizes */
980
+ /* iPad Air portrait (768px) and larger keep dual-pane for complete experience */
981
+ @media (min-width: 768px) {
982
+ .app-container {
983
+ grid-template-columns: minmax(280px, 380px) 1fr;
984
+ gap: clamp(12px, 1.5vw, 24px);
985
+ }
986
+
987
+ /* Ensure sidebar toggle is hidden on larger screens */
988
+ .sidebar-toggle {
989
+ display: none;
990
+ }
991
+
992
+ /* Hide quick dock on larger screens */
993
+ .quick-dock {
994
+ display: none !important;
995
+ }
996
+ }
997
+
998
+ /* Only narrow mobile screens (< 768px) use drawer mode */
999
+ @media (max-width: 767px) {
1000
  .app-container {
1001
  grid-template-columns: 1fr;
1002
+ gap: 0;
1003
+ padding: var(--spacing-3);
1004
  }
1005
 
1006
  /* Only hide main layout left panel, not drawer content */
 
1018
  }
1019
 
1020
  .right-panel {
1021
+ min-height: calc(100vh - 2 * var(--spacing-3));
1022
  }
1023
  }
1024
 
1025
+ /* Tablet optimizations for iPad Air portrait */
1026
+ @media (min-width: 768px) and (max-width: 1024px) {
1027
  .app-container {
1028
+ grid-template-columns: minmax(300px, 350px) 1fr;
1029
+ gap: clamp(16px, 2vw, 20px);
1030
+ padding: var(--spacing-4);
1031
+ }
1032
+
1033
+ /* Optimize history grid for tablet */
1034
+ .history-grid {
1035
+ grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
1036
+ gap: var(--spacing-3);
1037
  }
1038
  }
1039
 
 
1911
  transform: translateY(-1px);
1912
  }
1913
 
1914
+ /* Show quick dock only on very narrow screens */
1915
+ @media (max-width: 767px) {
1916
  .quick-dock {
1917
  display: flex;
1918
  }