claude-code-templates 1.16.1 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/README.md +7 -7
  2. package/bin/create-claude-config.js +17 -8
  3. package/package.json +2 -3
  4. package/src/analytics/core/AgentAnalyzer.js +17 -3
  5. package/src/analytics/core/ProcessDetector.js +23 -7
  6. package/src/analytics/core/StateCalculator.js +102 -33
  7. package/src/analytics/data/DataCache.js +7 -7
  8. package/src/analytics-web/chats_mobile.html +2590 -0
  9. package/src/analytics-web/components/App.js +10 -10
  10. package/src/analytics-web/components/SessionTimer.js +1 -1
  11. package/src/analytics-web/components/Sidebar.js +5 -14
  12. package/src/analytics-web/index.html +932 -78
  13. package/src/analytics.js +263 -5
  14. package/src/chats-mobile.js +682 -0
  15. package/src/claude-api-proxy.js +460 -0
  16. package/src/file-operations.js +239 -36
  17. package/src/health-check.js +310 -0
  18. package/src/index.js +1245 -36
  19. package/src/tracking-service.js +31 -34
  20. package/components/agents/api-security-audit.md +0 -92
  21. package/components/agents/database-optimization.md +0 -94
  22. package/components/agents/react-performance-optimization.md +0 -64
  23. package/components/commands/check-file.md +0 -53
  24. package/components/commands/generate-tests.md +0 -68
  25. package/components/mcps/deepgraph-nextjs.json +0 -12
  26. package/components/mcps/deepgraph-react.json +0 -12
  27. package/components/mcps/deepgraph-typescript.json +0 -12
  28. package/components/mcps/deepgraph-vue.json +0 -12
  29. package/components/mcps/filesystem-access.json +0 -12
  30. package/components/mcps/github-integration.json +0 -11
  31. package/components/mcps/memory-integration.json +0 -8
  32. package/components/mcps/mysql-integration.json +0 -11
  33. package/components/mcps/postgresql-integration.json +0 -11
  34. package/components/mcps/web-fetch.json +0 -8
  35. package/src/analytics-web/components/AgentsPage.js +0 -4761
  36. package/templates/common/.claude/commands/git-workflow.md +0 -239
  37. package/templates/common/.claude/commands/project-setup.md +0 -316
  38. package/templates/common/.mcp.json +0 -41
  39. package/templates/common/CLAUDE.md +0 -109
  40. package/templates/common/README.md +0 -96
  41. package/templates/go/.mcp.json +0 -78
  42. package/templates/go/README.md +0 -25
  43. package/templates/javascript-typescript/.claude/commands/api-endpoint.md +0 -51
  44. package/templates/javascript-typescript/.claude/commands/debug.md +0 -52
  45. package/templates/javascript-typescript/.claude/commands/lint.md +0 -48
  46. package/templates/javascript-typescript/.claude/commands/npm-scripts.md +0 -48
  47. package/templates/javascript-typescript/.claude/commands/refactor.md +0 -55
  48. package/templates/javascript-typescript/.claude/commands/test.md +0 -61
  49. package/templates/javascript-typescript/.claude/commands/typescript-migrate.md +0 -51
  50. package/templates/javascript-typescript/.claude/settings.json +0 -142
  51. package/templates/javascript-typescript/.mcp.json +0 -80
  52. package/templates/javascript-typescript/CLAUDE.md +0 -185
  53. package/templates/javascript-typescript/README.md +0 -259
  54. package/templates/javascript-typescript/examples/angular-app/.claude/commands/components.md +0 -63
  55. package/templates/javascript-typescript/examples/angular-app/.claude/commands/services.md +0 -62
  56. package/templates/javascript-typescript/examples/node-api/.claude/commands/api-endpoint.md +0 -46
  57. package/templates/javascript-typescript/examples/node-api/.claude/commands/database.md +0 -56
  58. package/templates/javascript-typescript/examples/node-api/.claude/commands/middleware.md +0 -61
  59. package/templates/javascript-typescript/examples/node-api/.claude/commands/route.md +0 -57
  60. package/templates/javascript-typescript/examples/node-api/CLAUDE.md +0 -102
  61. package/templates/javascript-typescript/examples/react-app/.claude/commands/component.md +0 -29
  62. package/templates/javascript-typescript/examples/react-app/.claude/commands/hooks.md +0 -44
  63. package/templates/javascript-typescript/examples/react-app/.claude/commands/state-management.md +0 -45
  64. package/templates/javascript-typescript/examples/react-app/CLAUDE.md +0 -81
  65. package/templates/javascript-typescript/examples/react-app/agents/react-performance-optimization.md +0 -530
  66. package/templates/javascript-typescript/examples/react-app/agents/react-state-management.md +0 -295
  67. package/templates/javascript-typescript/examples/vue-app/.claude/commands/components.md +0 -46
  68. package/templates/javascript-typescript/examples/vue-app/.claude/commands/composables.md +0 -51
  69. package/templates/python/.claude/commands/lint.md +0 -111
  70. package/templates/python/.claude/commands/test.md +0 -73
  71. package/templates/python/.claude/settings.json +0 -153
  72. package/templates/python/.mcp.json +0 -78
  73. package/templates/python/CLAUDE.md +0 -276
  74. package/templates/python/examples/django-app/.claude/commands/admin.md +0 -264
  75. package/templates/python/examples/django-app/.claude/commands/django-model.md +0 -124
  76. package/templates/python/examples/django-app/.claude/commands/views.md +0 -222
  77. package/templates/python/examples/django-app/CLAUDE.md +0 -313
  78. package/templates/python/examples/django-app/agents/django-api-security.md +0 -642
  79. package/templates/python/examples/django-app/agents/django-database-optimization.md +0 -752
  80. package/templates/python/examples/fastapi-app/.claude/commands/api-endpoints.md +0 -513
  81. package/templates/python/examples/fastapi-app/.claude/commands/auth.md +0 -775
  82. package/templates/python/examples/fastapi-app/.claude/commands/database.md +0 -657
  83. package/templates/python/examples/fastapi-app/.claude/commands/deployment.md +0 -160
  84. package/templates/python/examples/fastapi-app/.claude/commands/testing.md +0 -927
  85. package/templates/python/examples/fastapi-app/CLAUDE.md +0 -229
  86. package/templates/python/examples/flask-app/.claude/commands/app-factory.md +0 -384
  87. package/templates/python/examples/flask-app/.claude/commands/blueprint.md +0 -243
  88. package/templates/python/examples/flask-app/.claude/commands/database.md +0 -410
  89. package/templates/python/examples/flask-app/.claude/commands/deployment.md +0 -620
  90. package/templates/python/examples/flask-app/.claude/commands/flask-route.md +0 -217
  91. package/templates/python/examples/flask-app/.claude/commands/testing.md +0 -559
  92. package/templates/python/examples/flask-app/CLAUDE.md +0 -391
  93. package/templates/ruby/.claude/commands/model.md +0 -360
  94. package/templates/ruby/.claude/commands/test.md +0 -480
  95. package/templates/ruby/.claude/settings.json +0 -146
  96. package/templates/ruby/.mcp.json +0 -83
  97. package/templates/ruby/CLAUDE.md +0 -284
  98. package/templates/ruby/examples/rails-app/.claude/commands/authentication.md +0 -490
  99. package/templates/ruby/examples/rails-app/CLAUDE.md +0 -376
  100. package/templates/rust/.mcp.json +0 -78
  101. package/templates/rust/README.md +0 -26
@@ -1673,7 +1673,7 @@
1673
1673
  }
1674
1674
 
1675
1675
  .message-time {
1676
- color: #7d8590;
1676
+ color: white;
1677
1677
  font-size: 0.75rem;
1678
1678
  }
1679
1679
 
@@ -2597,6 +2597,145 @@
2597
2597
  font-size: 0.8rem;
2598
2598
  }
2599
2599
 
2600
+ /* Mobile-first Agents page layout */
2601
+ .agents-page {
2602
+ position: fixed;
2603
+ top: 0;
2604
+ left: 0;
2605
+ right: 0;
2606
+ bottom: 0;
2607
+ background: var(--bg-primary);
2608
+ z-index: 1000;
2609
+ display: flex;
2610
+ flex-direction: column;
2611
+ max-width: none;
2612
+ margin: 0;
2613
+ overflow: hidden;
2614
+ }
2615
+
2616
+ /* Hide main page sidebar and other elements on mobile Agents page */
2617
+ body:has(.agents-page) .sidebar:not(.mobile-chat-submenu),
2618
+ .agents-page .terminal-header,
2619
+ .agents-page .conversations-filters,
2620
+ .agents-page .agents-section,
2621
+ .agents-page .conversations-sidebar,
2622
+ .agents-page .conversations-loading,
2623
+ .agents-page .conversations-error {
2624
+ display: none !important;
2625
+ }
2626
+
2627
+ /* Show mobile menu button initially */
2628
+ .agents-page .mobile-menu-btn {
2629
+ display: flex !important;
2630
+ position: fixed;
2631
+ top: 10px;
2632
+ left: 10px;
2633
+ z-index: 1200;
2634
+ background: var(--bg-secondary);
2635
+ border: 1px solid var(--border-primary);
2636
+ }
2637
+
2638
+ /* Hide mobile menu button when viewing chat */
2639
+ body:has(.mobile-chat-header-bar[style*="flex"]) .mobile-menu-btn {
2640
+ display: none !important;
2641
+ }
2642
+
2643
+ /* Hide page header on mobile Agents page */
2644
+ .agents-page #agents-header-container {
2645
+ display: none !important;
2646
+ }
2647
+
2648
+ /* Mobile header for chat */
2649
+ .mobile-chat-header-bar {
2650
+ position: fixed;
2651
+ top: 0;
2652
+ left: 0;
2653
+ right: 0;
2654
+ height: 60px;
2655
+ background: var(--bg-secondary);
2656
+ border-bottom: 1px solid var(--border-primary);
2657
+ z-index: 1100;
2658
+ display: flex;
2659
+ align-items: center;
2660
+ padding: 0 16px;
2661
+ gap: 12px;
2662
+ }
2663
+
2664
+ .mobile-back-btn {
2665
+ background: none;
2666
+ border: none;
2667
+ color: var(--text-accent);
2668
+ font-size: 20px;
2669
+ cursor: pointer;
2670
+ padding: 8px;
2671
+ border-radius: 4px;
2672
+ display: flex;
2673
+ align-items: center;
2674
+ justify-content: center;
2675
+ min-width: 40px;
2676
+ height: 40px;
2677
+ }
2678
+
2679
+ .mobile-back-btn:hover {
2680
+ background: var(--bg-tertiary);
2681
+ }
2682
+
2683
+ .mobile-chat-title {
2684
+ flex: 1;
2685
+ font-size: 1rem;
2686
+ color: var(--text-primary);
2687
+ font-weight: 600;
2688
+ text-overflow: ellipsis;
2689
+ overflow: hidden;
2690
+ white-space: nowrap;
2691
+ }
2692
+
2693
+ .mobile-chat-subtitle {
2694
+ font-size: 0.8rem;
2695
+ color: var(--text-secondary);
2696
+ text-overflow: ellipsis;
2697
+ overflow: hidden;
2698
+ white-space: nowrap;
2699
+ }
2700
+
2701
+ /* Full-screen chat panel on mobile */
2702
+ .conversation-details {
2703
+ position: fixed;
2704
+ top: 60px;
2705
+ left: 0;
2706
+ right: 0;
2707
+ bottom: 0;
2708
+ background: var(--bg-primary);
2709
+ z-index: 1000;
2710
+ display: flex;
2711
+ flex-direction: column;
2712
+ overflow: hidden;
2713
+ margin: 0;
2714
+ padding: 0;
2715
+ }
2716
+
2717
+ .conversation-header {
2718
+ display: none !important;
2719
+ }
2720
+
2721
+ .messages-panel {
2722
+ flex: 1;
2723
+ padding: 16px;
2724
+ overflow-y: auto;
2725
+ background: var(--bg-primary);
2726
+ }
2727
+
2728
+ /* Ensure mobile menu button is visible */
2729
+ .mobile-menu-btn {
2730
+ display: flex !important;
2731
+ position: fixed;
2732
+ top: 10px;
2733
+ left: 10px;
2734
+ z-index: 1200;
2735
+ background: var(--bg-secondary);
2736
+ border: 1px solid var(--border-primary);
2737
+ }
2738
+
2600
2739
  .sessions-table th,
2601
2740
  .sessions-table td {
2602
2741
  padding: 6px 8px;
@@ -2655,6 +2794,70 @@
2655
2794
  overflow-y: auto;
2656
2795
  }
2657
2796
 
2797
+ /* Mobile menu button - hidden on desktop, shown on mobile */
2798
+ .mobile-menu-btn {
2799
+ display: none;
2800
+ }
2801
+
2802
+ @media (max-width: 768px) {
2803
+ .mobile-menu-btn {
2804
+ display: flex !important;
2805
+ }
2806
+
2807
+ .mobile-chat-submenu {
2808
+ /* This submenu is no longer used - navigation goes to separate page */
2809
+ display: none !important;
2810
+ }
2811
+
2812
+ .mobile-chat-submenu.active {
2813
+ display: none !important;
2814
+ }
2815
+
2816
+ .mobile-chat-header {
2817
+ padding: 16px 20px;
2818
+ border-bottom: 1px solid var(--border-primary);
2819
+ background: var(--bg-secondary);
2820
+ display: flex;
2821
+ align-items: center;
2822
+ gap: 12px;
2823
+ }
2824
+
2825
+ .mobile-chat-header h3 {
2826
+ margin: 0;
2827
+ font-size: 1.1rem;
2828
+ color: var(--text-primary);
2829
+ font-weight: 600;
2830
+ }
2831
+
2832
+ .mobile-chat-close {
2833
+ background: none;
2834
+ border: none;
2835
+ color: var(--text-secondary);
2836
+ font-size: 1.2rem;
2837
+ cursor: pointer;
2838
+ padding: 4px;
2839
+ margin-left: auto;
2840
+ transition: color 0.2s ease;
2841
+ }
2842
+
2843
+ .mobile-chat-close:hover {
2844
+ color: var(--text-primary);
2845
+ }
2846
+
2847
+ .mobile-chat-item {
2848
+ cursor: pointer;
2849
+ transition: background-color 0.2s ease;
2850
+ }
2851
+
2852
+ .mobile-chat-item:hover {
2853
+ background: rgba(33, 38, 45, 0.6);
2854
+ }
2855
+ }
2856
+
2857
+ .mobile-overlay {
2858
+ display: none;
2859
+ }
2860
+
2658
2861
  /* Minimalist Console Sidebar */
2659
2862
  .sidebar {
2660
2863
  width: 56px;
@@ -2938,12 +3141,134 @@
2938
3141
 
2939
3142
  /* Responsive adjustments */
2940
3143
  @media (max-width: 768px) {
3144
+ /* Disable hover functionality on mobile */
2941
3145
  .sidebar {
2942
- width: 50px;
3146
+ width: 56px;
3147
+ transform: translateX(-100%);
3148
+ transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
3149
+ z-index: 1001;
3150
+ }
3151
+
3152
+ /* Remove hover expansion on mobile */
3153
+ .sidebar:hover {
3154
+ width: 56px;
3155
+ background: var(--bg-primary);
3156
+ border-right: 1px solid var(--border-primary);
3157
+ box-shadow: 2px 0 8px rgba(0, 0, 0, 0.1);
3158
+ }
3159
+
3160
+ /* Mobile open state */
3161
+ .sidebar.mobile-open {
3162
+ width: 280px;
3163
+ transform: translateX(0);
3164
+ background: var(--bg-secondary);
3165
+ border-right: 1px solid var(--text-accent);
3166
+ box-shadow: 4px 0 16px rgba(213, 116, 85, 0.1);
3167
+ }
3168
+
3169
+ /* Force expanded state when mobile open */
3170
+ .sidebar.mobile-open .logo-text,
3171
+ .sidebar.mobile-open .nav-text,
3172
+ .sidebar.mobile-open .status-text {
3173
+ opacity: 1;
3174
+ transform: translateX(0);
3175
+ }
3176
+
3177
+ .sidebar.mobile-open .nav-link {
3178
+ display: flex;
3179
+ align-items: center;
3180
+ justify-content: flex-start;
3181
+ gap: 12px;
3182
+ padding: 8px 16px;
3183
+ width: auto;
3184
+ margin: 4px 8px;
3185
+ }
3186
+
3187
+ .sidebar.mobile-open .nav-icon {
3188
+ width: 24px;
3189
+ height: 24px;
3190
+ position: static;
3191
+ }
3192
+
3193
+ .sidebar.mobile-open .sidebar-header {
3194
+ justify-content: flex-start;
3195
+ padding: 16px 20px;
3196
+ }
3197
+
3198
+ .sidebar.mobile-open .sidebar-footer {
3199
+ padding: 16px 20px;
3200
+ justify-content: flex-start;
3201
+ }
3202
+
3203
+ .sidebar.mobile-open .connection-status {
3204
+ justify-content: flex-start;
3205
+ }
3206
+
3207
+ /* App main content */
3208
+ .app-main {
3209
+ margin-left: 0;
3210
+ }
3211
+
3212
+ /* Mobile overlay - covers everything but stays behind sidebar */
3213
+ .mobile-overlay {
3214
+ display: none;
3215
+ position: fixed;
3216
+ top: 0;
3217
+ left: 0;
3218
+ width: 100%;
3219
+ height: 100%;
3220
+ background: rgba(0, 0, 0, 0.5);
3221
+ z-index: 1000;
3222
+ transition: opacity 0.3s ease;
3223
+ }
3224
+
3225
+ .mobile-overlay.active {
3226
+ display: block;
3227
+ opacity: 1;
3228
+ }
3229
+
3230
+ /* Mobile menu button - transforms when open */
3231
+ .mobile-menu-btn {
3232
+ display: flex !important;
3233
+ position: fixed;
3234
+ top: 20px;
3235
+ left: 20px;
3236
+ z-index: 1002;
3237
+ background: var(--bg-secondary);
3238
+ border: 1px solid var(--border-primary);
3239
+ border-radius: 8px;
3240
+ width: 44px;
3241
+ height: 44px;
3242
+ align-items: center;
3243
+ justify-content: center;
3244
+ cursor: pointer;
3245
+ transition: all 0.3s ease;
3246
+ color: var(--text-primary);
3247
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
3248
+ }
3249
+
3250
+ /* When menu is open, move button and change appearance */
3251
+ .mobile-menu-btn.menu-open {
3252
+ left: 300px;
3253
+ background: var(--text-accent);
3254
+ color: white;
3255
+ border-color: var(--text-accent);
3256
+ transform: rotate(180deg);
2943
3257
  }
2944
3258
 
2945
- .sidebar.hover-expanded {
2946
- width: 200px;
3259
+ .mobile-menu-btn:hover {
3260
+ background: var(--bg-tertiary);
3261
+ color: var(--text-accent);
3262
+ }
3263
+
3264
+ .mobile-menu-btn.menu-open:hover {
3265
+ background: #c85a3a;
3266
+ color: white;
3267
+ }
3268
+
3269
+ .mobile-menu-btn .menu-icon {
3270
+ font-size: 20px;
3271
+ transition: all 0.3s ease;
2947
3272
  }
2948
3273
 
2949
3274
  .nav-link {
@@ -2956,6 +3281,39 @@
2956
3281
  .sidebar-footer {
2957
3282
  padding: 12px 0;
2958
3283
  }
3284
+
3285
+ .page-header {
3286
+ margin-left: 0;
3287
+ padding-left: 70px;
3288
+ }
3289
+
3290
+ .header-content {
3291
+ flex-direction: column;
3292
+ align-items: flex-start;
3293
+ gap: 16px;
3294
+ }
3295
+
3296
+ .header-right {
3297
+ align-self: stretch;
3298
+ justify-content: flex-end;
3299
+ }
3300
+
3301
+ .page-title {
3302
+ font-size: 1.25rem;
3303
+ }
3304
+
3305
+ .page-subtitle {
3306
+ font-size: 0.8rem;
3307
+ }
3308
+
3309
+ .last-update-header {
3310
+ font-size: 0.7rem;
3311
+ }
3312
+
3313
+ .github-link {
3314
+ font-size: 0.8rem;
3315
+ padding: 4px 8px;
3316
+ }
2959
3317
  }
2960
3318
 
2961
3319
  /* Page Styles */
@@ -3068,6 +3426,14 @@
3068
3426
  margin: 20px 0 30px 0;
3069
3427
  }
3070
3428
 
3429
+ @media (max-width: 640px) {
3430
+ .metrics-cards-container {
3431
+ grid-template-columns: 1fr;
3432
+ gap: 16px;
3433
+ margin: 16px 0 20px 0;
3434
+ }
3435
+ }
3436
+
3071
3437
  .metric-card {
3072
3438
  background: var(--bg-secondary);
3073
3439
  border: 1px solid var(--border-primary);
@@ -3268,11 +3634,86 @@
3268
3634
  color: var(--text-primary);
3269
3635
  }
3270
3636
 
3271
- .agents-list {
3637
+ .agent-story-item {
3272
3638
  display: flex;
3273
- flex-wrap: wrap;
3274
- gap: 8px;
3275
- margin-bottom: 12px;
3639
+ flex-direction: column;
3640
+ align-items: center;
3641
+ gap: 6px;
3642
+ min-width: 60px;
3643
+ cursor: pointer;
3644
+ transition: transform 0.2s ease;
3645
+ }
3646
+
3647
+ .agent-story-item:hover {
3648
+ transform: scale(1.05);
3649
+ }
3650
+
3651
+ .agent-story-avatar {
3652
+ width: 56px;
3653
+ height: 56px;
3654
+ border-radius: 50%;
3655
+ background: linear-gradient(135deg, var(--text-accent), #f97316);
3656
+ display: flex;
3657
+ align-items: center;
3658
+ justify-content: center;
3659
+ font-size: 1.4rem;
3660
+ font-weight: 600;
3661
+ color: white;
3662
+ position: relative;
3663
+ border: 2px solid transparent;
3664
+ transition: all 0.2s ease;
3665
+ }
3666
+
3667
+ .agent-story-avatar.active {
3668
+ border-color: var(--text-accent);
3669
+ box-shadow: 0 0 0 2px rgba(213, 116, 85, 0.2);
3670
+ }
3671
+
3672
+ .agent-story-name {
3673
+ font-size: 0.75rem;
3674
+ color: var(--text-secondary);
3675
+ text-align: center;
3676
+ max-width: 60px;
3677
+ overflow: hidden;
3678
+ text-overflow: ellipsis;
3679
+ white-space: nowrap;
3680
+ }
3681
+
3682
+ .agent-story-status {
3683
+ position: absolute;
3684
+ bottom: 2px;
3685
+ right: 2px;
3686
+ width: 12px;
3687
+ height: 12px;
3688
+ border-radius: 50%;
3689
+ border: 2px solid var(--bg-primary);
3690
+ background: var(--text-success);
3691
+ }
3692
+
3693
+ /* Mobile responsive */
3694
+ @media (max-width: 768px) {
3695
+ .agents-stories-container {
3696
+ padding: 0 16px;
3697
+ }
3698
+
3699
+ .agents-stories {
3700
+ gap: 10px;
3701
+ }
3702
+
3703
+ .agent-story-item {
3704
+ min-width: 50px;
3705
+ }
3706
+
3707
+ .agent-story-avatar {
3708
+ width: 48px;
3709
+ height: 48px;
3710
+ font-size: 1.2rem;
3711
+ }
3712
+
3713
+ .agent-story-name {
3714
+ font-size: 0.7rem;
3715
+ max-width: 50px;
3716
+ }
3276
3717
  }
3277
3718
 
3278
3719
  .agent-item {
@@ -3358,9 +3799,9 @@
3358
3799
  background: var(--bg-secondary);
3359
3800
  border: 1px solid var(--border-primary);
3360
3801
  border-radius: 8px;
3361
- width: 90%;
3362
- max-width: 600px;
3363
- max-height: 80vh;
3802
+ width: 95%;
3803
+ max-width: 900px;
3804
+ max-height: 85vh;
3364
3805
  overflow: hidden;
3365
3806
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
3366
3807
  }
@@ -3880,17 +4321,21 @@
3880
4321
  /* Two Column Layout */
3881
4322
  .conversations-layout {
3882
4323
  display: grid;
3883
- grid-template-columns: 350px 1fr;
3884
- gap: 20px;
3885
- height: calc(100vh - 400px);
4324
+ grid-template-columns: 380px 1fr;
4325
+ gap: 0;
4326
+ height: calc(100vh - 200px);
3886
4327
  min-height: 600px;
4328
+ border-radius: 12px;
4329
+ overflow: hidden;
4330
+ border: 1px solid var(--border-primary);
4331
+ background: var(--bg-primary);
3887
4332
  }
3888
4333
 
3889
- /* Left Sidebar */
4334
+ /* Left Sidebar - Chat List Style */
3890
4335
  .conversations-sidebar {
3891
4336
  background: var(--bg-secondary);
3892
- border: 1px solid var(--border-primary);
3893
- border-radius: 8px;
4337
+ border-right: 1px solid var(--border-primary);
4338
+ border-radius: 0;
3894
4339
  overflow: hidden;
3895
4340
  display: flex;
3896
4341
  flex-direction: column;
@@ -3900,16 +4345,16 @@
3900
4345
  display: flex;
3901
4346
  justify-content: space-between;
3902
4347
  align-items: center;
3903
- padding: 16px 20px;
4348
+ padding: 20px 24px;
3904
4349
  border-bottom: 1px solid var(--border-primary);
3905
- background: var(--bg-tertiary);
4350
+ background: var(--bg-secondary);
3906
4351
  }
3907
4352
 
3908
4353
  .sidebar-header h3 {
3909
4354
  margin: 0;
3910
- font-size: 1rem;
4355
+ font-size: 1.25rem;
3911
4356
  color: var(--text-primary);
3912
- font-weight: 600;
4357
+ font-weight: 700;
3913
4358
  }
3914
4359
 
3915
4360
  .conversation-count {
@@ -3924,7 +4369,7 @@
3924
4369
  .conversations-list {
3925
4370
  flex: 1;
3926
4371
  overflow-y: auto;
3927
- padding: 8px;
4372
+ padding: 0;
3928
4373
  }
3929
4374
 
3930
4375
  /* Load More Indicator */
@@ -3952,50 +4397,52 @@
3952
4397
  font-weight: 500;
3953
4398
  }
3954
4399
 
3955
- /* Sidebar Conversation Items */
4400
+ /* Sidebar Conversation Items - Chat Thread Style */
3956
4401
  .sidebar-conversation-item {
3957
- padding: 12px;
3958
- margin-bottom: 8px;
3959
- border-radius: 6px;
4402
+ padding: 16px 24px;
4403
+ margin-bottom: 0;
4404
+ border-radius: 0;
3960
4405
  cursor: pointer;
3961
4406
  transition: all 0.2s ease;
3962
- border: 1px solid transparent;
4407
+ border: none;
4408
+ border-bottom: 1px solid rgba(48, 54, 61, 0.3);
4409
+ position: relative;
3963
4410
  }
3964
4411
 
3965
4412
  .sidebar-conversation-item:hover {
3966
- background: var(--bg-tertiary);
3967
- border-color: var(--border-primary);
4413
+ background: rgba(33, 38, 45, 0.6);
3968
4414
  }
3969
4415
 
3970
4416
  .sidebar-conversation-item.selected {
3971
- background: var(--bg-tertiary);
3972
- border-color: var(--text-accent);
3973
- box-shadow: 0 0 0 1px rgba(213, 116, 85, 0.2);
4417
+ background: rgba(213, 116, 85, 0.1);
4418
+ border-left: 3px solid var(--text-accent);
4419
+ padding-left: 21px;
3974
4420
  }
3975
4421
 
3976
4422
  .sidebar-conversation-header {
3977
4423
  display: flex;
3978
4424
  justify-content: space-between;
3979
- align-items: flex-start;
3980
- margin-bottom: 8px;
4425
+ align-items: center;
4426
+ margin-bottom: 6px;
3981
4427
  }
3982
4428
 
3983
4429
  .sidebar-conversation-title {
3984
4430
  display: flex;
3985
4431
  align-items: center;
3986
- gap: 8px;
4432
+ gap: 12px;
3987
4433
  flex: 1;
3988
4434
  min-width: 0;
3989
4435
  }
3990
4436
 
3991
4437
  .sidebar-conversation-name {
3992
- font-size: 0.9rem;
4438
+ font-size: 1rem;
3993
4439
  font-weight: 600;
3994
4440
  color: var(--text-primary);
3995
4441
  margin: 0;
3996
4442
  overflow: hidden;
3997
4443
  text-overflow: ellipsis;
3998
4444
  white-space: nowrap;
4445
+ flex: 1;
3999
4446
  }
4000
4447
 
4001
4448
  .sidebar-conversation-badge {
@@ -4029,26 +4476,76 @@
4029
4476
  }
4030
4477
 
4031
4478
  .sidebar-conversation-preview {
4032
- margin-top: 6px;
4479
+ margin-top: 4px;
4480
+ display: flex;
4481
+ align-items: center;
4482
+ justify-content: space-between;
4483
+ gap: 8px;
4033
4484
  }
4034
4485
 
4035
4486
  .sidebar-preview-text {
4036
- font-size: 0.75rem;
4487
+ font-size: 0.85rem;
4037
4488
  color: var(--text-secondary);
4038
4489
  line-height: 1.3;
4039
4490
  margin: 0;
4040
4491
  overflow: hidden;
4041
- display: -webkit-box;
4042
- -webkit-line-clamp: 2;
4043
- line-clamp: 2;
4044
- -webkit-box-orient: vertical;
4492
+ text-overflow: ellipsis;
4493
+ white-space: nowrap;
4494
+ flex: 1;
4495
+ }
4496
+
4497
+ .sidebar-preview-time {
4498
+ font-size: 0.75rem;
4499
+ color: var(--text-secondary);
4500
+ white-space: nowrap;
4501
+ opacity: 0.8;
4502
+ }
4503
+
4504
+ .chat-avatar {
4505
+ width: 40px;
4506
+ height: 40px;
4507
+ border-radius: 20px;
4508
+ background: linear-gradient(135deg, var(--text-accent), #f97316);
4509
+ display: flex;
4510
+ align-items: center;
4511
+ justify-content: center;
4512
+ font-size: 1.1rem;
4513
+ font-weight: 600;
4514
+ color: white;
4515
+ flex-shrink: 0;
4516
+ }
4517
+
4518
+ .unread-indicator {
4519
+ width: 20px;
4520
+ height: 20px;
4521
+ background: var(--text-accent);
4522
+ border-radius: 10px;
4523
+ display: flex;
4524
+ align-items: center;
4525
+ justify-content: center;
4526
+ font-size: 0.75rem;
4527
+ font-weight: 600;
4528
+ color: white;
4529
+ margin-left: 8px;
4530
+ }
4531
+
4532
+ .sidebar-conversation-info {
4533
+ flex: 1;
4534
+ min-width: 0;
4535
+ }
4536
+
4537
+ .sidebar-conversation-time {
4538
+ display: flex;
4539
+ align-items: center;
4540
+ justify-content: space-between;
4541
+ margin-top: 2px;
4045
4542
  }
4046
4543
 
4047
- /* Right Panel */
4544
+ /* Right Panel - Chat Messages Style */
4048
4545
  .messages-panel {
4049
- background: var(--bg-secondary);
4050
- border: 1px solid var(--border-primary);
4051
- border-radius: 8px;
4546
+ background: var(--bg-primary);
4547
+ border: none;
4548
+ border-radius: 0;
4052
4549
  overflow: hidden;
4053
4550
  display: flex;
4054
4551
  flex-direction: column;
@@ -4058,23 +4555,19 @@
4058
4555
  display: flex;
4059
4556
  justify-content: space-between;
4060
4557
  align-items: center;
4061
- padding: 16px 20px;
4558
+ padding: 16px 24px;
4062
4559
  border-bottom: 1px solid var(--border-primary);
4063
- background: var(--bg-tertiary);
4560
+ background: var(--bg-secondary);
4561
+ min-height: 72px;
4064
4562
  }
4065
4563
 
4066
4564
  .selected-conversation-info h3 {
4067
4565
  margin: 0 0 4px 0;
4068
- font-size: 1.1rem;
4566
+ font-size: 1.2rem;
4069
4567
  color: var(--text-primary);
4070
- font-weight: 600;
4568
+ font-weight: 700;
4071
4569
  }
4072
4570
 
4073
- .selected-conversation-meta {
4074
- display: flex;
4075
- flex-wrap: wrap;
4076
- gap: 16px;
4077
- }
4078
4571
 
4079
4572
  .messages-actions {
4080
4573
  display: flex;
@@ -4086,6 +4579,77 @@
4086
4579
  overflow-y: auto;
4087
4580
  padding: 20px;
4088
4581
  }
4582
+
4583
+ /* Message Input Area */
4584
+ .message-input-area {
4585
+ border-top: 1px solid var(--border-primary);
4586
+ padding: 12px 20px;
4587
+ background: var(--bg-secondary);
4588
+ }
4589
+
4590
+ .input-container {
4591
+ display: flex;
4592
+ flex-direction: column;
4593
+ }
4594
+
4595
+ .input-row {
4596
+ display: flex;
4597
+ gap: 8px;
4598
+ align-items: flex-end;
4599
+ }
4600
+
4601
+ .message-input {
4602
+ flex: 1;
4603
+ min-height: 36px;
4604
+ max-height: 120px;
4605
+ padding: 8px 12px;
4606
+ border: 1px solid var(--border-primary);
4607
+ border-radius: 18px;
4608
+ background: var(--bg-primary);
4609
+ color: var(--text-primary);
4610
+ font-family: inherit;
4611
+ font-size: 0.9rem;
4612
+ line-height: 1.4;
4613
+ resize: none;
4614
+ transition: all 0.2s ease;
4615
+ }
4616
+
4617
+ .message-input:focus {
4618
+ outline: none;
4619
+ border-color: var(--text-accent);
4620
+ background: var(--bg-primary);
4621
+ }
4622
+
4623
+ .message-input::placeholder {
4624
+ color: var(--text-secondary);
4625
+ }
4626
+
4627
+ .send-btn {
4628
+ background: var(--text-accent);
4629
+ color: white;
4630
+ border: none;
4631
+ border-radius: 50%;
4632
+ width: 36px;
4633
+ height: 36px;
4634
+ font-size: 16px;
4635
+ cursor: pointer;
4636
+ display: flex;
4637
+ align-items: center;
4638
+ justify-content: center;
4639
+ transition: all 0.2s ease;
4640
+ flex-shrink: 0;
4641
+ }
4642
+
4643
+ .send-btn:hover:not(:disabled) {
4644
+ background: #c85a3a;
4645
+ transform: scale(1.05);
4646
+ }
4647
+
4648
+ .send-btn:disabled {
4649
+ background: var(--text-secondary);
4650
+ cursor: not-allowed;
4651
+ opacity: 0.6;
4652
+ }
4089
4653
 
4090
4654
  /* No Conversation Selected State */
4091
4655
  .no-conversation-selected {
@@ -4096,23 +4660,27 @@
4096
4660
  height: 100%;
4097
4661
  text-align: center;
4098
4662
  color: var(--text-secondary);
4663
+ padding: 40px 20px;
4099
4664
  }
4100
4665
 
4101
4666
  .no-selection-icon {
4102
- font-size: 3rem;
4103
- margin-bottom: 16px;
4104
- opacity: 0.5;
4667
+ font-size: 4rem;
4668
+ margin-bottom: 20px;
4669
+ opacity: 0.6;
4105
4670
  }
4106
4671
 
4107
4672
  .no-conversation-selected h4 {
4108
- margin: 0 0 8px 0;
4109
- font-size: 1.2rem;
4673
+ margin: 0 0 12px 0;
4674
+ font-size: 1.3rem;
4110
4675
  color: var(--text-primary);
4676
+ font-weight: 600;
4111
4677
  }
4112
4678
 
4113
4679
  .no-conversation-selected p {
4114
4680
  margin: 0;
4115
- font-size: 0.9rem;
4681
+ font-size: 1rem;
4682
+ opacity: 0.8;
4683
+ line-height: 1.5;
4116
4684
  }
4117
4685
 
4118
4686
  /* No Messages Found State */
@@ -4151,20 +4719,90 @@
4151
4719
  }
4152
4720
 
4153
4721
  .message {
4154
- background: var(--bg-primary);
4155
- border: 1px solid var(--border-primary);
4156
- border-radius: 8px;
4157
- overflow: hidden;
4722
+ margin-bottom: 12px;
4723
+ display: flex;
4724
+ width: 100%;
4725
+ }
4726
+
4727
+ .message-bubble {
4728
+ max-width: 60%;
4729
+ padding: 10px 14px;
4730
+ border-radius: 16px;
4731
+ position: relative;
4732
+ word-wrap: break-word;
4733
+ font-size: 0.9rem;
4734
+ line-height: 1.4;
4158
4735
  }
4159
4736
 
4160
4737
  .message-user {
4161
- margin-left: 60px;
4162
- border-left: 3px solid var(--text-info);
4738
+ justify-content: flex-end;
4739
+ margin-bottom: 8px;
4740
+ }
4741
+
4742
+ .message-user .message-bubble {
4743
+ background: #2fa95c;
4744
+ color: white;
4745
+ border-bottom-right-radius: 4px;
4746
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
4163
4747
  }
4164
4748
 
4165
4749
  .message-assistant {
4166
- margin-right: 60px;
4167
- border-left: 3px solid var(--text-accent);
4750
+ justify-content: flex-start;
4751
+ margin-bottom: 8px;
4752
+ }
4753
+
4754
+ .message-assistant .message-bubble {
4755
+ background: var(--bg-secondary);
4756
+ color: var(--text-primary);
4757
+ border: 1px solid var(--border-primary);
4758
+ border-bottom-left-radius: 4px;
4759
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
4760
+ }
4761
+
4762
+ .message-content {
4763
+ margin-bottom: 8px;
4764
+ line-height: 1.4;
4765
+ }
4766
+
4767
+ .message-meta {
4768
+ display: flex;
4769
+ align-items: center;
4770
+ gap: 8px;
4771
+ font-size: 0.75rem;
4772
+ opacity: 0.7;
4773
+ margin-top: 4px;
4774
+ }
4775
+
4776
+ .message-user .message-meta {
4777
+ justify-content: flex-end;
4778
+ color: rgba(255, 255, 255, 0.7);
4779
+ }
4780
+
4781
+ .message-assistant .message-meta {
4782
+ justify-content: flex-start;
4783
+ color: var(--text-secondary);
4784
+ }
4785
+
4786
+ .message-time {
4787
+ font-size: 0.7rem;
4788
+ }
4789
+
4790
+ .tool-indicator, .token-indicator {
4791
+ font-size: 0.6rem;
4792
+ padding: 1px 3px;
4793
+ background: rgba(0, 0, 0, 0.15);
4794
+ border-radius: 3px;
4795
+ opacity: 0.8;
4796
+ }
4797
+
4798
+ .message-user .tool-indicator,
4799
+ .message-user .token-indicator {
4800
+ background: rgba(255, 255, 255, 0.2);
4801
+ }
4802
+
4803
+ .messages-list {
4804
+ padding: 20px;
4805
+ max-width: 100%;
4168
4806
  }
4169
4807
 
4170
4808
  .message-header {
@@ -4293,23 +4931,46 @@
4293
4931
  /* Responsive Design */
4294
4932
  @media (max-width: 1024px) {
4295
4933
  .conversations-layout {
4296
- grid-template-columns: 300px 1fr;
4934
+ grid-template-columns: 320px 1fr;
4297
4935
  }
4298
4936
  }
4299
4937
 
4300
4938
  @media (max-width: 768px) {
4301
4939
  .conversations-layout {
4302
4940
  grid-template-columns: 1fr;
4303
- grid-template-rows: auto 1fr;
4941
+ grid-template-rows: 1fr;
4942
+ gap: 0;
4943
+ height: calc(100vh - 120px);
4304
4944
  }
4305
4945
 
4306
4946
  .conversations-sidebar {
4307
- max-height: 300px;
4947
+ display: none; /* Hide on mobile, will be in hamburger menu */
4308
4948
  }
4309
4949
 
4310
- .message-user, .message-assistant {
4311
- margin-left: 0;
4312
- margin-right: 0;
4950
+ .messages-panel {
4951
+ border: none;
4952
+ border-radius: 0;
4953
+ }
4954
+
4955
+ .chat-avatar {
4956
+ width: 36px;
4957
+ height: 36px;
4958
+ font-size: 1rem;
4959
+ }
4960
+
4961
+ .message-bubble {
4962
+ max-width: 80%;
4963
+ padding: 8px 12px;
4964
+ font-size: 0.85rem;
4965
+ }
4966
+
4967
+ .message-input-area {
4968
+ padding: 12px 16px;
4969
+ }
4970
+
4971
+ .messages-header {
4972
+ padding: 12px 20px;
4973
+ min-height: 60px;
4313
4974
  }
4314
4975
  }
4315
4976
 
@@ -5481,9 +6142,14 @@
5481
6142
  }
5482
6143
 
5483
6144
  /* Edit Tool Modal Specific Styles */
6145
+ .agent-modal.edit-tool-modal .agent-modal-content {
6146
+ background: #0d1117;
6147
+ border: 1px solid #21262d;
6148
+ }
6149
+
5484
6150
  .edit-changes-section {
5485
6151
  margin-bottom: 24px;
5486
- padding: 16px;
6152
+ padding: 20px;
5487
6153
  background: rgba(33, 38, 45, 0.5);
5488
6154
  border-radius: 8px;
5489
6155
  border: 1px solid var(--border-color);
@@ -6237,6 +6903,39 @@
6237
6903
  }
6238
6904
 
6239
6905
  /* TodoWrite Modal Styles */
6906
+ .agent-modal.todo-tool-modal {
6907
+ max-width: 1200px;
6908
+ width: 98%;
6909
+ }
6910
+
6911
+ .agent-modal.edit-tool-modal {
6912
+ max-width: 1200px;
6913
+ width: 98%;
6914
+ }
6915
+
6916
+ /* Responsive adjustments for todo and edit tool modals */
6917
+ @media (max-width: 768px) {
6918
+ .agent-modal.todo-tool-modal,
6919
+ .agent-modal.edit-tool-modal {
6920
+ width: 95%;
6921
+ max-width: none;
6922
+ max-height: 90vh;
6923
+ }
6924
+
6925
+ .agent-modal.todo-tool-modal .agent-modal-content,
6926
+ .agent-modal.edit-tool-modal .agent-modal-content {
6927
+ font-size: 0.9rem;
6928
+ }
6929
+ }
6930
+
6931
+ @media (max-width: 480px) {
6932
+ .agent-modal.todo-tool-modal,
6933
+ .agent-modal.edit-tool-modal {
6934
+ width: 98%;
6935
+ margin: 10px;
6936
+ }
6937
+ }
6938
+
6240
6939
  .agent-modal.todo-tool-modal .agent-modal-content {
6241
6940
  background: #0d1117;
6242
6941
  border: 1px solid #21262d;
@@ -6244,12 +6943,66 @@
6244
6943
 
6245
6944
  .todo-summary-section, .todo-status-section, .todo-priority-section, .todo-items-section {
6246
6945
  margin-bottom: 24px;
6247
- padding: 16px;
6946
+ padding: 20px;
6248
6947
  background: rgba(33, 38, 45, 0.5);
6249
6948
  border-radius: 8px;
6250
6949
  border: 1px solid var(--border-color);
6251
6950
  }
6252
6951
 
6952
+ /* JSON content styling in todo tool modal */
6953
+ .agent-modal.todo-tool-modal pre {
6954
+ background: #0a0e13;
6955
+ border: 1px solid #30363d;
6956
+ border-radius: 6px;
6957
+ padding: 16px;
6958
+ overflow-x: auto;
6959
+ white-space: pre-wrap;
6960
+ word-wrap: break-word;
6961
+ font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Fira Code', 'Fira Mono', 'Roboto Mono', monospace;
6962
+ font-size: 0.9rem;
6963
+ line-height: 1.4;
6964
+ max-height: 400px;
6965
+ overflow-y: auto;
6966
+ }
6967
+
6968
+ .agent-modal.todo-tool-modal code,
6969
+ .agent-modal.edit-tool-modal code {
6970
+ background: rgba(110, 118, 129, 0.1);
6971
+ padding: 2px 4px;
6972
+ border-radius: 3px;
6973
+ font-family: inherit;
6974
+ }
6975
+
6976
+ /* Code content styling in edit tool modal */
6977
+ .agent-modal.edit-tool-modal pre {
6978
+ background: #0a0e13;
6979
+ border: 1px solid #30363d;
6980
+ border-radius: 6px;
6981
+ padding: 16px;
6982
+ overflow-x: auto;
6983
+ white-space: pre-wrap;
6984
+ word-wrap: break-word;
6985
+ font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Fira Code', 'Fira Mono', 'Roboto Mono', monospace;
6986
+ font-size: 0.9rem;
6987
+ line-height: 1.4;
6988
+ max-height: 600px;
6989
+ overflow-y: auto;
6990
+ }
6991
+
6992
+ .edit-code-block {
6993
+ background: #0a0e13;
6994
+ border: 1px solid #30363d;
6995
+ border-radius: 6px;
6996
+ padding: 16px;
6997
+ margin: 12px 0;
6998
+ overflow-x: auto;
6999
+ font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Fira Code', 'Fira Mono', 'Roboto Mono', monospace;
7000
+ font-size: 0.9rem;
7001
+ line-height: 1.4;
7002
+ white-space: pre-wrap;
7003
+ word-wrap: break-word;
7004
+ }
7005
+
6253
7006
  .todo-summary-section h4, .todo-status-section h4, .todo-priority-section h4, .todo-items-section h4 {
6254
7007
  color: #d57455;
6255
7008
  font-size: 1.1rem;
@@ -7100,6 +7853,14 @@
7100
7853
  </style>
7101
7854
  </head>
7102
7855
  <body>
7856
+ <!-- Mobile Menu Button -->
7857
+ <button class="mobile-menu-btn" id="mobileMenuBtn">
7858
+ <span class="menu-icon" id="menuIcon">☰</span>
7859
+ </button>
7860
+
7861
+ <!-- Mobile Overlay -->
7862
+ <div class="mobile-overlay" id="mobileOverlay"></div>
7863
+
7103
7864
  <div id="app">
7104
7865
  <!-- App will be initialized here -->
7105
7866
  </div>
@@ -7118,6 +7879,94 @@
7118
7879
  </div>
7119
7880
 
7120
7881
  <script>
7882
+ // Mobile Menu Functionality
7883
+ function initMobileMenu() {
7884
+ console.log('🔧 Initializing mobile menu...');
7885
+
7886
+ const mobileMenuBtn = document.getElementById('mobileMenuBtn');
7887
+ const mobileOverlay = document.getElementById('mobileOverlay');
7888
+ const menuIcon = document.getElementById('menuIcon');
7889
+
7890
+ console.log('Mobile menu elements:', {
7891
+ btn: !!mobileMenuBtn,
7892
+ overlay: !!mobileOverlay
7893
+ });
7894
+
7895
+ let isMobileMenuOpen = false;
7896
+
7897
+ function toggleMobileMenu() {
7898
+ console.log('📱 Toggling mobile menu:', !isMobileMenuOpen);
7899
+
7900
+ // Wait for sidebar to be available
7901
+ const sidebar = document.querySelector('.sidebar');
7902
+ if (!sidebar) {
7903
+ console.warn('Sidebar not found yet, retrying...');
7904
+ setTimeout(toggleMobileMenu, 100);
7905
+ return;
7906
+ }
7907
+
7908
+ isMobileMenuOpen = !isMobileMenuOpen;
7909
+
7910
+ if (isMobileMenuOpen) {
7911
+ sidebar.classList.add('mobile-open');
7912
+ if (mobileOverlay) mobileOverlay.classList.add('active');
7913
+ if (mobileMenuBtn) mobileMenuBtn.classList.add('menu-open');
7914
+ if (menuIcon) menuIcon.textContent = '×';
7915
+ console.log('✅ Mobile menu opened');
7916
+ } else {
7917
+ sidebar.classList.remove('mobile-open');
7918
+ if (mobileOverlay) mobileOverlay.classList.remove('active');
7919
+ if (mobileMenuBtn) mobileMenuBtn.classList.remove('menu-open');
7920
+ if (menuIcon) menuIcon.textContent = '☰';
7921
+ console.log('❌ Mobile menu closed');
7922
+ }
7923
+ }
7924
+
7925
+ // Bind mobile menu button
7926
+ if (mobileMenuBtn) {
7927
+ console.log('🔗 Binding mobile menu button');
7928
+ mobileMenuBtn.addEventListener('click', (e) => {
7929
+ e.preventDefault();
7930
+ e.stopPropagation();
7931
+ toggleMobileMenu();
7932
+ });
7933
+ } else {
7934
+ console.warn('❌ Mobile menu button not found');
7935
+ }
7936
+
7937
+ // Bind overlay click
7938
+ if (mobileOverlay) {
7939
+ mobileOverlay.addEventListener('click', () => {
7940
+ if (isMobileMenuOpen) {
7941
+ toggleMobileMenu();
7942
+ }
7943
+ });
7944
+ }
7945
+
7946
+ // Close mobile menu when clicking on sidebar links
7947
+ document.addEventListener('click', (e) => {
7948
+ if (e.target.closest('.nav-link') && window.innerWidth <= 768 && isMobileMenuOpen) {
7949
+ setTimeout(() => toggleMobileMenu(), 100);
7950
+ }
7951
+ });
7952
+
7953
+ // Handle window resize
7954
+ window.addEventListener('resize', () => {
7955
+ if (window.innerWidth > 768 && isMobileMenuOpen) {
7956
+ const sidebar = document.querySelector('.sidebar');
7957
+ if (sidebar) {
7958
+ sidebar.classList.remove('mobile-open');
7959
+ if (mobileOverlay) mobileOverlay.classList.remove('active');
7960
+ if (mobileMenuBtn) mobileMenuBtn.classList.remove('menu-open');
7961
+ if (menuIcon) menuIcon.textContent = '☰';
7962
+ isMobileMenuOpen = false;
7963
+ }
7964
+ }
7965
+ });
7966
+
7967
+ console.log('✅ Mobile menu initialized');
7968
+ }
7969
+
7121
7970
  // Initialize the App.js based application (with Sidebar layout)
7122
7971
  document.addEventListener('DOMContentLoaded', async function() {
7123
7972
  const appContainer = document.getElementById('app');
@@ -7156,7 +8005,12 @@
7156
8005
  console.log('🔧 Initializing main App component with Sidebar...');
7157
8006
  const app = new App(appContainer, services);
7158
8007
 
7159
- // 7. Store app instance globally for debugging
8008
+ // 7. Initialize mobile menu functionality after a delay
8009
+ setTimeout(() => {
8010
+ initMobileMenu();
8011
+ }, 500);
8012
+
8013
+ // 8. Store app instance globally for debugging
7160
8014
  window.claudeAnalyticsApp = app;
7161
8015
 
7162
8016
  console.log('🎉 Claude Analytics App with Sidebar initialized successfully!');