akfatimeline 1.0.6 → 1.2.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 (128) hide show
  1. package/CHANGELOG.md +98 -35
  2. package/dist/Timeline.js +4309 -1677
  3. package/dist/components/Timeline/AutocompleteSelect.js +150 -0
  4. package/dist/components/Timeline/ContextMenu.js +149 -0
  5. package/dist/components/Timeline/DailyView.js +255 -0
  6. package/dist/components/Timeline/DatePickerComponent.js +13 -0
  7. package/{public/dist/dist → dist}/components/Timeline/DragAndDropHandler.js +34 -34
  8. package/dist/components/Timeline/EventBadge.js +26 -0
  9. package/dist/components/Timeline/EventDetailModal.js +138 -0
  10. package/dist/components/Timeline/EventIcon.js +47 -0
  11. package/dist/{dist/components → components}/Timeline/EventTooltip.js +206 -206
  12. package/dist/components/Timeline/FilterPanel.js +179 -0
  13. package/dist/{dist/components → components}/Timeline/Indicator.js +26 -26
  14. package/dist/components/Timeline/LoadingSpinner.js +48 -0
  15. package/dist/{dist/components → components}/Timeline/MasterHeader.js +104 -68
  16. package/{public/dist/dist → dist}/components/Timeline/Resources.js +53 -53
  17. package/dist/{dist/components → components}/Timeline/ResourcesHeader.js +14 -14
  18. package/dist/components/Timeline/Timeline.css +2491 -0
  19. package/dist/components/Timeline/Timeline.js +607 -0
  20. package/dist/{dist/components → components}/Timeline/TimelineCell.js +8 -8
  21. package/dist/components/Timeline/TimelineContent.js +838 -0
  22. package/{public/dist/dist → dist}/components/Timeline/TimelineEvents.js +114 -114
  23. package/dist/components/Timeline/TimelineHeader.js +54 -0
  24. package/{public/dist/dist → dist}/components/Timeline/TimelineMonthContainer.js +29 -29
  25. package/{public/dist/dist → dist}/components/Timeline/TimelineResources.js +16 -16
  26. package/{public/dist/dist → dist}/hooks/useDragAndDrop.js +80 -80
  27. package/dist/{dist/hooks → hooks}/useEventDragDrop.js +126 -126
  28. package/dist/hooks/useEventManagement.js +173 -0
  29. package/dist/hooks/useEventSelection.js +82 -0
  30. package/{public/dist/dist → dist}/hooks/useExtendEvent.js +28 -28
  31. package/dist/hooks/useKeyboardShortcuts.js +158 -0
  32. package/dist/hooks/useTouchGestures.js +90 -0
  33. package/dist/utils/conflictUtils.js +105 -0
  34. package/dist/{dist/utils → utils}/dateUtils.js +36 -36
  35. package/dist/{dist/utils → utils}/filterTimelineData.js +20 -20
  36. package/dist/utils/filterUtils.js +106 -0
  37. package/dist/utils/timeUtils.js +179 -0
  38. package/dist/{dist/utils → utils}/timelineUtils.js +39 -39
  39. package/dist/utils/viewModeUtils.js +54 -0
  40. package/package.json +89 -19
  41. package/src/App.js +300 -19
  42. package/src/components/Timeline/AutocompleteSelect.js +150 -0
  43. package/src/components/Timeline/ContextMenu.js +149 -0
  44. package/src/components/Timeline/DailyView.js +255 -0
  45. package/src/components/Timeline/DatePickerComponent.js +13 -17
  46. package/src/components/Timeline/DragAndDropHandler.js +34 -34
  47. package/src/components/Timeline/EventBadge.js +26 -0
  48. package/src/components/Timeline/EventDetailModal.js +138 -0
  49. package/src/components/Timeline/EventIcon.js +47 -0
  50. package/src/components/Timeline/EventTooltip.js +206 -206
  51. package/src/components/Timeline/FilterPanel.js +179 -0
  52. package/src/components/Timeline/Indicator.js +26 -26
  53. package/src/components/Timeline/LoadingSpinner.js +48 -0
  54. package/src/components/Timeline/MasterHeader.js +104 -68
  55. package/src/components/Timeline/Resources.js +53 -53
  56. package/src/components/Timeline/ResourcesHeader.js +14 -14
  57. package/src/components/Timeline/Timeline.css +2491 -616
  58. package/src/components/Timeline/Timeline.js +607 -309
  59. package/src/components/Timeline/TimelineCell.js +8 -8
  60. package/src/components/Timeline/TimelineContent.js +838 -446
  61. package/src/components/Timeline/TimelineEvents.js +114 -114
  62. package/src/components/Timeline/TimelineHeader.js +54 -43
  63. package/src/components/Timeline/TimelineMonthContainer.js +29 -29
  64. package/src/components/Timeline/TimelineResources.js +16 -16
  65. package/src/demo.css +4 -0
  66. package/src/hooks/useDragAndDrop.js +80 -80
  67. package/src/hooks/useEventDragDrop.js +126 -126
  68. package/src/hooks/useEventManagement.js +173 -0
  69. package/src/hooks/useEventSelection.js +82 -0
  70. package/src/hooks/useExtendEvent.js +28 -28
  71. package/src/hooks/useKeyboardShortcuts.js +158 -0
  72. package/src/hooks/useTouchGestures.js +90 -0
  73. package/src/index.js +1 -7
  74. package/src/library.js +26 -0
  75. package/src/utils/conflictUtils.js +105 -0
  76. package/src/utils/dateUtils.js +36 -36
  77. package/src/utils/filterTimelineData.js +20 -20
  78. package/src/utils/filterUtils.js +106 -0
  79. package/src/utils/timeUtils.js +179 -0
  80. package/src/utils/timelineUtils.js +39 -39
  81. package/src/utils/viewModeUtils.js +54 -0
  82. package/.babelrc +0 -6
  83. package/babel.config.json +0 -4
  84. package/dist/dist/components/Timeline/DatePickerComponent.js +0 -17
  85. package/dist/dist/components/Timeline/DragAndDropHandler.js +0 -35
  86. package/dist/dist/components/Timeline/Resources.js +0 -53
  87. package/dist/dist/components/Timeline/Timeline.css +0 -616
  88. package/dist/dist/components/Timeline/Timeline.js +0 -309
  89. package/dist/dist/components/Timeline/TimelineContent.js +0 -446
  90. package/dist/dist/components/Timeline/TimelineEvents.js +0 -114
  91. package/dist/dist/components/Timeline/TimelineHeader.js +0 -43
  92. package/dist/dist/components/Timeline/TimelineMonthContainer.js +0 -29
  93. package/dist/dist/components/Timeline/TimelineResources.js +0 -16
  94. package/dist/dist/hooks/useDragAndDrop.js +0 -80
  95. package/dist/dist/hooks/useExtendEvent.js +0 -28
  96. package/public/dist/Timeline.js +0 -3277
  97. package/public/dist/dist/components/Timeline/DatePickerComponent.js +0 -17
  98. package/public/dist/dist/components/Timeline/EventTooltip.js +0 -206
  99. package/public/dist/dist/components/Timeline/Indicator.js +0 -29
  100. package/public/dist/dist/components/Timeline/MasterHeader.js +0 -68
  101. package/public/dist/dist/components/Timeline/ResourcesHeader.js +0 -14
  102. package/public/dist/dist/components/Timeline/Timeline.css +0 -616
  103. package/public/dist/dist/components/Timeline/Timeline.js +0 -304
  104. package/public/dist/dist/components/Timeline/TimelineCell.js +0 -8
  105. package/public/dist/dist/components/Timeline/TimelineContent.js +0 -447
  106. package/public/dist/dist/components/Timeline/TimelineHeader.js +0 -43
  107. package/public/dist/dist/hooks/useEventDragDrop.js +0 -126
  108. package/public/dist/dist/utils/HorizontalVirtualScroll.js +0 -0
  109. package/public/dist/dist/utils/dateUtils.js +0 -36
  110. package/public/dist/dist/utils/filterTimelineData.js +0 -21
  111. package/public/dist/dist/utils/timelineUtils.js +0 -40
  112. package/public/favicon.ico +0 -0
  113. package/public/index kutuphane /304/261c/304/261n.html" +0 -43
  114. package/public/index tasarim icin.html +0 -20
  115. package/public/index.html +0 -43
  116. package/public/logo192.png +0 -0
  117. package/public/logo512.png +0 -0
  118. package/public/manifest.json +0 -25
  119. package/public/robots.txt +0 -3
  120. package/src/App.css +0 -38
  121. package/src/App.test.js +0 -8
  122. package/src/dist/Timeline.js +0 -277
  123. package/src/index.css +0 -13
  124. package/src/logo.svg +0 -1
  125. package/src/reportWebVitals.js +0 -13
  126. package/src/setupTests.js +0 -5
  127. package/webpack.config.js +0 -49
  128. /package/dist/{dist/utils → utils}/HorizontalVirtualScroll.js +0 -0
@@ -1,616 +1,2491 @@
1
- /* src/components/Timeline/Timeline.css */
2
- @import "flatpickr/dist/themes/material_green.css";
3
-
4
- /*
5
- Temel: "sales sayfası" temasıyla uyumlu renkler,
6
- light vs. dark tanımları
7
- */
8
-
9
- :root {
10
- /* Light Tema Varsayılan Renkler */
11
- --background-color: #f5f5f2; /* Açık tema arka plan */
12
- --text-color: #666; /* Açık tema yazı rengi */
13
- --border-color: #bbb; /* Daha yumuşak border */
14
-
15
- /* Header */
16
- --header-background-color: #f5f5f2; /* Üst header, tablo header */
17
- --header-text-color: #666;
18
-
19
- /* Resources */
20
- --resource-background-color: #f5f5f2;
21
- --resource-text-color: #666;
22
- --group-header-background-color: #dadada;
23
-
24
- /* Timeline */
25
- --timeline-header-background-color: #f5f5f2;
26
- --timeline-cell-border-color: #ccc;
27
- --timeline-event-background-color: #fff;
28
- --timeline-event-border-color: #666;
29
- --timeline-event-text-color: #666;
30
-
31
- /* Scrollbar */
32
- --scrollbar-thumb-background: #aaa;
33
- --scrollbar-thumb-hover-background: #888;
34
-
35
- --resource-width: 150px;
36
- --cell-height: 40px;
37
- --header-height: 60px;
38
- --time-slot-height: 20px;
39
- --container-height: 480px;
40
-
41
- --timeline-new-event-background-color: #ff5722;
42
- --timeline-new-event-text-color: #fff;
43
-
44
- --timeline-event-background-color: #ff7f50;
45
- --timeline-event-text-color: #fff;
46
- --timeline-event-border-color: #fff;
47
-
48
- --timeline-cell-selected-bg: rgba(25,118,210,0.2);
49
-
50
- user-select: none; /* Metin seçimini engelle */
51
- }
52
-
53
- /* Koyu Tema */
54
- .dark-mode {
55
- /* Koyu tema */
56
- --background-color: #16202a; /* Koyu tema arka plan */
57
- --text-color: #ddd; /* Koyu tema yazı rengi */
58
- --border-color: #444;
59
-
60
- --header-background-color: #16202a;
61
- --header-text-color: #bbb;
62
-
63
- --resource-background-color: #16202a;
64
- --resource-text-color: #bbb;
65
- --group-header-background-color: #0d141b;
66
-
67
- --timeline-header-background-color: #16202a;
68
- --timeline-cell-border-color: #444;
69
- --timeline-event-background-color: #2a2a2a;
70
- --timeline-event-border-color: #222;
71
- --timeline-event-text-color: #ddd;
72
-
73
- --scrollbar-thumb-background: #555;
74
- --scrollbar-thumb-hover-background: #888;
75
-
76
- --timeline-new-event-background-color: #a83e20;
77
- --timeline-new-event-text-color: #eee;
78
-
79
- --timeline-event-background-color: #a83e20;
80
- --timeline-event-text-color: #fff;
81
- --timeline-event-border-color: #222;
82
-
83
- --timeline-cell-selected-bg: rgba(76,175,80,0.2);
84
- }
85
-
86
- /* Genel Timeline Konteyner */
87
- .timeline-container {
88
- display: flex;
89
- flex-direction: column;
90
- width: 100%;
91
- height: 100%;
92
- border: 1px solid var(--border-color);
93
- border-radius: 8px;
94
- overflow: hidden;
95
- box-sizing: border-box;
96
- background-color: var(--background-color);
97
- color: var(--text-color);
98
- }
99
-
100
- /* Master Header */
101
- .timeline-master-header {
102
- width: 100%;
103
- background-color: var(--header-background-color);
104
- color: var(--header-text-color);
105
- border-bottom: 1px solid var(--border-color);
106
- z-index: 10;
107
- padding: 10px;
108
- box-sizing: border-box;
109
- }
110
-
111
- /* Timeline Body */
112
- .timeline-body {
113
- display: flex;
114
- flex: 1;
115
- }
116
-
117
- /* Sol Kısım: Resources */
118
- .timeline-resources-container {
119
- width: var(--resource-width);
120
- display: flex;
121
- flex-direction: column;
122
- border-right: 1px solid var(--border-color);
123
- position: sticky;
124
- left: 0;
125
- top: var(--header-height);
126
- z-index: 2;
127
- background-color: var(--resource-background-color);
128
- overflow-y: auto;
129
- }
130
-
131
- /* Resources Header */
132
- .resources-header {
133
- background-color: var(--header-background-color);
134
- color: var(--resource-text-color);
135
- text-align: center;
136
- width: var(--resource-width);
137
- font-weight: bold;
138
- display: flex;
139
- flex-direction: column;
140
- justify-content: center;
141
- align-items: center;
142
- height: calc(var(--header-height) * 2); /* Üst üste iki header yüksekliği */
143
- border-right: 1px solid var(--border-color);
144
- box-sizing: border-box;
145
- }
146
-
147
- /* Grup Başlığı Hücreleri */
148
- .group-header-row {
149
- display: flex;
150
- height: var(--cell-height);
151
- background-color: var(--group-header-background-color);
152
- color: var(--resource-text-color);
153
- font-weight: bold;
154
- }
155
-
156
- .group-header-cell {
157
- flex: 1;
158
- border: 1px solid var(--border-color);
159
- text-align: center;
160
- background-color: var(--group-header-background-color);
161
- color: var(--resource-text-color);
162
- height: var(--cell-height);
163
- display: flex;
164
- align-items: center;
165
- justify-content: center;
166
- }
167
-
168
- /* Resource Grupları */
169
- .resource-group {
170
- display: flex;
171
- flex-direction: column;
172
- }
173
-
174
- /* Resource Grup Header */
175
- .resource-group-header {
176
- background-color: var(--group-header-background-color);
177
- color: var(--resource-text-color);
178
- font-weight: bold;
179
- height: var(--cell-height);
180
- box-sizing: border-box;
181
- display: flex;
182
- align-items: center;
183
- justify-content: space-between;
184
- padding: 0 0px;
185
- cursor: pointer;
186
- border: 1px solid var(--border-color);
187
- }
188
-
189
- /* Resource Hücreleri */
190
- .resource-cell {
191
- padding: 0;
192
- text-align: left;
193
- background-color: var(--resource-background-color);
194
- color: var(--resource-text-color);
195
- height: var(--cell-height);
196
- display: flex;
197
- align-items: center;
198
- border: 0.3px solid var(--border-color);
199
- box-sizing: border-box;
200
- }
201
-
202
- /* Sağ Kısım: Timeline */
203
- .timeline-scrollable-container {
204
- flex: 1;
205
- overflow-x: auto;
206
- overflow-y: hidden;
207
- display: flex;
208
- flex-direction: column;
209
- position: relative;
210
- }
211
-
212
- /* Header ve Content Wrapper */
213
- .timeline-header-content-wrapper {
214
- display: flex;
215
- flex-direction: column;
216
- }
217
-
218
- /* Timeline Header */
219
- .timeline-header {
220
- display: flex;
221
- background-color: var(--timeline-header-background-color);
222
- color: var(--header-text-color);
223
- position: sticky;
224
- top: 0;
225
- z-index: 2;
226
- height: var(--header-height);
227
- overflow: hidden;
228
- box-sizing: border-box;
229
- }
230
-
231
- /* Timeline Content */
232
- .timeline-content {
233
- display: flex;
234
- flex-direction: column;
235
- }
236
-
237
- /* Grup Container */
238
- .group-container {
239
- display: flex;
240
- flex-direction: column;
241
- }
242
-
243
- /* Resource Satırları */
244
- .resource-row {
245
- display: flex;
246
- box-sizing: border-box;
247
- position: relative;
248
- height: var(--cell-height);
249
- border: 1px solid var(--border-color);
250
- margin-top: -1px;
251
- overflow: hidden;
252
- }
253
-
254
- /* Timeline Hücreleri */
255
- .timeline-cell {
256
- flex: 1;
257
- border: 1px solid var(--timeline-cell-border-color);
258
- height: 100%;
259
- box-sizing: border-box;
260
- }
261
-
262
- /* Hücre Seçili Durumu */
263
- .timeline-cell.selected {
264
- background-color: rgba(25, 118, 210, 0.2); /* satır içi/hover */
265
- }
266
-
267
- /* Event Stilleri */
268
- .event {
269
- position: absolute;
270
- background-color: var(--timeline-event-background-color);
271
- color: var(--timeline-event-text-color);
272
- font-size: 12px;
273
- padding: 2px 5px;
274
- border-radius: 4px;
275
- text-align: left;
276
- display: flex;
277
- flex-direction: column;
278
- justify-content: center;
279
- box-sizing: border-box;
280
- z-index: 10;
281
- overflow: hidden;
282
- text-overflow: ellipsis;
283
- white-space: nowrap;
284
- border: 1px solid var(--timeline-event-border-color);
285
- cursor: pointer;
286
- }
287
-
288
- /* Event Time Stili */
289
- .event-time {
290
- font-size: 10px;
291
- margin-top: 2px;
292
- }
293
-
294
- /* Scrollbar için */
295
- .timeline-scrollable-container::-webkit-scrollbar {
296
- height: 10px;
297
- }
298
-
299
- .timeline-scrollable-container::-webkit-scrollbar-thumb {
300
- background: var(--scrollbar-thumb-background);
301
- border-radius: 5px;
302
- }
303
-
304
- .timeline-scrollable-container::-webkit-scrollbar-thumb:hover {
305
- background: var(--scrollbar-thumb-hover-background);
306
- }
307
-
308
- .resources-header {
309
- background-color: var(--header-background-color);
310
- color: var(--resource-text-color);
311
- text-align: center;
312
- width: var(--resource-width);
313
- font-weight: bold;
314
- display: flex;
315
- flex-direction: column;
316
- justify-content: center;
317
- align-items: center;
318
- height: 80px;
319
- border-right: 1px solid var(--border-color);
320
- box-sizing: border-box;
321
- }
322
-
323
- /* TimelineHeader Container */
324
- .timeline-header-container {
325
- flex: 1;
326
- display: flex;
327
- flex-direction: column;
328
- }
329
-
330
- /* Ay + Yıl satırı */
331
- .timeline-header-month-row {
332
- display: flex;
333
- background-color: var(--header-background-color);
334
- color: var(--header-text-color);
335
- font-weight: bold;
336
- font-size: 16px;
337
- height: 40px;
338
- line-height: 40px;
339
- border-bottom: 1px solid var(--border-color);
340
- }
341
-
342
- /* Ay + Yıl hücreleri */
343
- .timeline-header-month-cell {
344
- text-align: center;
345
- display: flex;
346
- align-items: center;
347
- justify-content: center;
348
- /* border-right => dynamic, inline style if needed */
349
- box-sizing: border-box;
350
- }
351
-
352
- /* Günlük Hücreler (tarih satırı) */
353
- .timeline-header-day-row {
354
- display: flex;
355
- background-color: var(--timeline-header-background-color);
356
- color: var(--header-text-color);
357
- /* border-bottom: 1px solid var(--border-color); if needed */
358
- }
359
-
360
- /* Günlük hücre (her gün) */
361
- .timeline-header-day-cell {
362
- height: 40px;
363
- line-height: 40px;
364
- font-size: 14px;
365
- white-space: nowrap;
366
- overflow: hidden;
367
- text-overflow: ellipsis;
368
- text-align: center;
369
- box-sizing: border-box;
370
- }
371
-
372
-
373
- /* src/components/Timeline/Timeline.css */
374
- /* Ekleme: MasterHeader stili */
375
-
376
- /* Kapsayıcı */
377
- .master-header-container {
378
- display: flex;
379
- align-items: center;
380
- justify-content: space-between; /* Butonlar solda, select sağda */
381
- padding: 10px;
382
- background-color: var(--header-background-color);
383
- color: var(--header-text-color);
384
- }
385
-
386
- .master-header-buttons {
387
- display: flex; /* Yan yana dizilim */
388
- align-items: center; /* Dikey hizalama */
389
- }
390
-
391
- .master-header-btn {
392
- background-color: transparent;
393
- color: var(--header-text-color);
394
- border: 1px solid var(--border-color);
395
- border-radius: 4px;
396
- padding: 6px 12px;
397
- margin-right: 10px; /* Butonlar arasında mesafe */
398
- cursor: pointer;
399
- font-size: 14px;
400
- transition: background-color 0.2s ease, color 0.2s ease;
401
- }
402
-
403
- .master-header-btn:hover {
404
- background-color: rgba(25, 118, 210, 0.2); /* Açık tema hover */
405
- }
406
-
407
- .dark-mode .master-header-btn:hover {
408
- background-color: rgba(76, 175, 80, 0.2); /* Koyu tema hover */
409
- }
410
-
411
- .master-header-btn:focus {
412
- outline: none;
413
- }
414
-
415
-
416
-
417
- /* Tarih seçici (Date Picker) */
418
- .master-header-date-picker {
419
- background-color: transparent;
420
- color: var(--header-text-color);
421
- border: 1px solid var(--border-color);
422
- border-radius: 4px;
423
- padding: 5px 12px;
424
- margin-right: 10px; /* Butonlar arasında mesafe */
425
- cursor: pointer;
426
- font-size: 14px;
427
- transition: background-color 0.2s ease, color 0.2s ease;
428
- }
429
-
430
- .master-header-date-picker:hover {
431
- background-color: rgba(25, 118, 210, 0.2); /* Açık tema hover */
432
- }
433
-
434
- .dark-mode .master-header-date-picker:hover {
435
- background-color: rgba(76, 175, 80, 0.2); /* Koyu tema hover */
436
- }
437
-
438
- .master-header-date-picker:focus {
439
- outline: none;
440
- }
441
-
442
- /* Select */
443
- .master-header-select {
444
- margin-left: auto; /* Sağa yaslamak için */
445
- background-color: transparent;
446
- color: var(--header-text-color);
447
- border: 1px solid var(--border-color);
448
- border-radius: 4px;
449
- padding: 4px 8px;
450
- font-size: 14px;
451
- cursor: pointer;
452
- }
453
-
454
- .master-header-select:focus {
455
- outline: none;
456
- }
457
-
458
- /* Flatpickr Takvim Kutusu */
459
- .flatpickr-calendar {
460
- background-color: var(--background-color);
461
- color: var(--text-color);
462
- border: 1px solid var(--border-color);
463
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); /* Gölge efekti */
464
- }
465
-
466
-
467
- /* Flatpickr Günü */
468
- .flatpickr-day {
469
- background-color: var(--background-color); /* Arka plan rengi */
470
- color: var(--text-color); /* Yazı rengi */
471
- border-radius: 4px; /* Köşeleri yuvarlat */
472
- cursor: pointer;
473
- }
474
-
475
- .flatpickr-day:hover {
476
- background-color: rgba(25, 118, 210, 0.2); /* Hover efekti */
477
- }
478
-
479
- .dark-mode .flatpickr-day:hover {
480
- background-color: rgba(76, 175, 80, 0.2); /* Koyu tema hover efekti */
481
- }
482
-
483
- /* Seçili Gün */
484
- .flatpickr-day.selected {
485
- background-color: #4caf50; /* Seçili gün rengi */
486
- color: white; /* Seçili gün yazı rengi */
487
- }
488
-
489
- /* Flatpickr Ay ve Yıl */
490
- .flatpickr-months .flatpickr-month {
491
- background-color: var(--background-color);
492
- color: var(--text-color);
493
- }
494
-
495
- /* Flatpickr Ay İleri ve Geri Düğmeleri */
496
- .flatpickr-prev-month, .flatpickr-next-month {
497
- color: var(--text-color);
498
- cursor: pointer;
499
- }
500
-
501
- /* Koyu Tema Örnekleri */
502
- .dark-mode .flatpickr-calendar {
503
- background-color: #1f2937; /* Koyu tema arka plan */
504
- color: #ffffff; /* Koyu tema yazı rengi */
505
- }
506
-
507
- .dark-mode .flatpickr-day.selected {
508
- background-color: #4caf50;
509
- color: white;
510
- }
511
-
512
-
513
- /* Container */
514
- .timeline-content-container {
515
- position: relative;
516
- width: 100%;
517
- height: auto; /* or as needed */
518
- display: flex;
519
- flex-direction: column;
520
- }
521
-
522
- /* Group container */
523
- .timeline-group-container {
524
- margin-bottom: 0px;
525
- display: flex;
526
- flex-direction: column;
527
- }
528
-
529
- /* Group header row */
530
- .timeline-group-header-row {
531
- display: flex;
532
- margin-top: -0.08rem;
533
- }
534
-
535
- .timeline-group-header-cell {
536
- flex: 1;
537
- height: 2.58rem;
538
- background-color: var(--group-header-background-color);
539
- border: 1px solid var(--border-color);
540
-
541
- box-sizing: border-box;
542
- display: flex;
543
- align-items: center;
544
- justify-content: center;
545
- }
546
-
547
- /* Resource row */
548
- .timeline-resource-row {
549
- display: flex;
550
- position: relative;
551
- height: var(--cell-height, 40px);
552
- border: 1px solid var(--border-color);
553
- box-sizing: border-box;
554
- }
555
-
556
- /* Each day cell */
557
- .timeline-cell {
558
- flex: 1;
559
- height: 100%;
560
- position: relative;
561
- border-left: 1px solid var(--border-color);
562
- border-right: 1px solid var(--border-color);
563
- box-sizing: border-box;
564
- cursor: pointer;
565
- }
566
-
567
- /* "selected" day cell */
568
- .timeline-cell.selected {
569
- background-color: var(--timeline-cell-selected-bg, rgba(25,118,210,0.2));
570
- }
571
-
572
- /* Event */
573
- .timeline-event {
574
- position: absolute;
575
- background-color: var(--timeline-event-background-color, #0093ce);
576
- color: var(--timeline-event-text-color, #fff);
577
- font-size: 14px;
578
- padding: 5px;
579
- border-radius: 20px;
580
- box-sizing: border-box;
581
- z-index: 10;
582
- overflow: hidden;
583
- text-overflow: ellipsis;
584
- white-space: nowrap;
585
- border: 1px solid var(--timeline-event-border-color, #fff);
586
- top: 5px; /* or a variable offset if you want */
587
- /* "left" and "width" are inline from JS */
588
- }
589
-
590
- /* Extend handle */
591
- .timeline-event-extend-handle {
592
- position: absolute;
593
- right: 0;
594
- top: 0;
595
- width: 10px;
596
- height: 100%;
597
- background-color: rgba(0,0,0,0.2);
598
- cursor: col-resize;
599
- z-index: 20;
600
- }
601
-
602
- /* Temp event (while creating) */
603
- .timeline-temp-event {
604
- position: absolute;
605
- background-color: var(--timeline-new-event-background-color, #0093ce);
606
- color: var(--timeline-new-event-text-color, #fff);
607
- opacity: 0.7;
608
- border-radius: 20px;
609
- z-index: 9;
610
- display: flex;
611
- align-items: center;
612
- justify-content: center;
613
- font-size: 14px;
614
- /* "left"/"width" from JS: " ...calculatePosition(tempEvent, dates)" */
615
- top: 5px;
616
- }
1
+ /* AkfaTimeline - Glassmorphism Theme */
2
+
3
+ :root {
4
+ /* Light Theme - Glassmorphism */
5
+ --bg-primary: rgba(255, 255, 255, 0.7);
6
+ --bg-secondary: rgba(255, 255, 255, 0.5);
7
+ --bg-tertiary: rgba(255, 255, 255, 0.3);
8
+ --bg-hover: rgba(255, 255, 255, 0.8);
9
+
10
+ --text-primary: #1a1a1a;
11
+ --text-secondary: #4a4a4a;
12
+ --text-tertiary: #6a6a6a;
13
+
14
+ --border-color: rgba(0, 0, 0, 0.15);
15
+ --border-hover: rgba(0, 0, 0, 0.25);
16
+ --border-strong: rgba(0, 0, 0, 0.2);
17
+
18
+ --shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.1);
19
+ --shadow-md: 0 4px 16px rgba(0, 0, 0, 0.15);
20
+ --shadow-lg: 0 8px 32px rgba(0, 0, 0, 0.2);
21
+ --shadow-glow: 0 0 20px rgba(99, 102, 241, 0.3);
22
+
23
+ --accent-primary: rgba(99, 102, 241, 0.6);
24
+ --accent-hover: rgba(99, 102, 241, 0.8);
25
+ --accent-light: rgba(99, 102, 241, 0.2);
26
+
27
+ --event-bg: rgba(99, 102, 241, 0.85);
28
+ --event-text: #ffffff;
29
+ --event-border: rgba(99, 102, 241, 0.3);
30
+ --event-shadow: rgba(99, 102, 241, 0.4);
31
+
32
+ --new-event-bg: rgba(236, 72, 153, 0.85);
33
+ --new-event-text: #ffffff;
34
+
35
+ --selected-bg: rgba(99, 102, 241, 0.25);
36
+ --group-header-bg: rgb(176, 175, 175);
37
+
38
+ --resource-width: 180px;
39
+ --cell-height: 45px;
40
+ --header-height: 70px;
41
+ --header-total-height: 80px;
42
+ --header-month-height: 40px;
43
+ --header-day-height: 40px;
44
+ --container-height: 600px;
45
+
46
+ --blur-sm: blur(8px);
47
+ --blur-md: blur(12px);
48
+ --blur-lg: blur(16px);
49
+ }
50
+
51
+ /* Dark Theme - Glassmorphism */
52
+ .dark-mode {
53
+ --bg-primary: rgba(17, 24, 39, 0.7);
54
+ --bg-secondary: rgba(17, 24, 39, 0.5);
55
+ --bg-tertiary: rgba(17, 24, 39, 0.3);
56
+ --bg-hover: rgba(17, 24, 39, 0.85);
57
+
58
+ --text-primary: #f3f4f6;
59
+ --text-secondary: #d1d5db;
60
+ --text-tertiary: #9ca3af;
61
+
62
+ --border-color: rgba(255, 255, 255, 0.1);
63
+ --border-hover: rgba(255, 255, 255, 0.2);
64
+ --border-strong: rgba(255, 255, 255, 0.15);
65
+
66
+ --shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.3);
67
+ --shadow-md: 0 4px 16px rgba(0, 0, 0, 0.4);
68
+ --shadow-lg: 0 8px 32px rgba(0, 0, 0, 0.5);
69
+ --shadow-glow: 0 0 20px rgba(139, 92, 246, 0.4);
70
+
71
+ --accent-primary: rgba(139, 92, 246, 0.6);
72
+ --accent-hover: rgba(139, 92, 246, 0.8);
73
+ --accent-light: rgba(139, 92, 246, 0.25);
74
+
75
+ --event-bg: rgba(139, 92, 246, 0.75);
76
+ --event-text: #ffffff;
77
+ --event-border: rgba(255, 255, 255, 0.25);
78
+ --event-shadow: rgba(139, 92, 246, 0.5);
79
+
80
+ --new-event-bg: rgba(236, 72, 153, 0.75);
81
+ --new-event-text: #ffffff;
82
+
83
+ --selected-bg: rgba(139, 92, 246, 0.3);
84
+ --group-header-bg: rgba(16, 16, 26, 0.5);
85
+ }
86
+
87
+ /* Base Container */
88
+ .timeline-container {
89
+ display: flex;
90
+ flex-direction: column;
91
+ width: 100%;
92
+ height: 100%;
93
+ background: var(--bg-primary);
94
+ backdrop-filter: var(--blur-md);
95
+ -webkit-backdrop-filter: var(--blur-md);
96
+ border: 1px solid var(--border-color);
97
+ border-radius: 20px;
98
+ box-shadow: var(--shadow-lg);
99
+ overflow: hidden;
100
+ box-sizing: border-box;
101
+ color: var(--text-primary);
102
+ user-select: none;
103
+ }
104
+
105
+ /* Master Header */
106
+ .timeline-master-header {
107
+ width: 100%;
108
+ background: var(--bg-secondary);
109
+ backdrop-filter: var(--blur-sm);
110
+ -webkit-backdrop-filter: var(--blur-sm);
111
+ border-bottom: 1px solid var(--border-color);
112
+ padding: 15px 20px;
113
+ box-sizing: border-box;
114
+ z-index: 10;
115
+ box-shadow: var(--shadow-sm);
116
+ }
117
+
118
+ /* Timeline Body */
119
+ .timeline-body {
120
+ display: flex;
121
+ flex: 1;
122
+ overflow: hidden;
123
+ }
124
+
125
+ /* Resources Container */
126
+ .timeline-resources-container {
127
+ width: var(--resource-width);
128
+ display: flex;
129
+ flex-direction: column;
130
+ background: var(--bg-secondary);
131
+ backdrop-filter: var(--blur-sm);
132
+ -webkit-backdrop-filter: var(--blur-sm);
133
+ border-right: 1px solid var(--border-color);
134
+ position: sticky;
135
+ left: 0;
136
+ top: var(--header-total-height);
137
+ z-index: 5;
138
+ overflow-y: auto;
139
+ box-shadow: var(--shadow-md);
140
+ }
141
+
142
+ /* Resources Header */
143
+ .resources-header {
144
+ background: var(--bg-tertiary);
145
+ backdrop-filter: var(--blur-sm);
146
+ -webkit-backdrop-filter: var(--blur-sm);
147
+ color: var(--text-primary);
148
+ text-align: center;
149
+ width: var(--resource-width);
150
+ font-weight: 600;
151
+ font-size: 14px;
152
+ display: flex;
153
+ flex-direction: column;
154
+ justify-content: center;
155
+ align-items: center;
156
+ height: var(--header-total-height);
157
+ border-right: 1px solid var(--border-color);
158
+ border-bottom: 1px solid var(--border-color);
159
+ box-sizing: border-box;
160
+ text-transform: uppercase;
161
+ letter-spacing: 1px;
162
+ box-shadow: var(--shadow-sm);
163
+ padding: 12px;
164
+ }
165
+
166
+ /* Group Header Row */
167
+ .group-header-row {
168
+ display: flex;
169
+ height: var(--cell-height);
170
+ background: var(--group-header-bg);
171
+ backdrop-filter: var(--blur-sm);
172
+ -webkit-backdrop-filter: var(--blur-sm);
173
+ }
174
+
175
+ .group-header-cell {
176
+ flex: 1;
177
+ border-right: 1px solid var(--border-color);
178
+ text-align: center;
179
+ background: transparent;
180
+ color: var(--text-secondary);
181
+ height: var(--cell-height);
182
+ display: flex;
183
+ align-items: center;
184
+ justify-content: center;
185
+ font-weight: 500;
186
+ font-size: 12px;
187
+ box-sizing: border-box;
188
+ }
189
+
190
+ /* Resource Groups */
191
+ .resource-group {
192
+ display: flex;
193
+ flex-direction: column;
194
+ }
195
+
196
+ .resource-group-header {
197
+ background: var(--bg-tertiary);
198
+ backdrop-filter: var(--blur-sm);
199
+ -webkit-backdrop-filter: var(--blur-sm);
200
+ color: var(--text-primary);
201
+ font-weight: 600;
202
+ font-size: 13px;
203
+ height: var(--cell-height);
204
+ box-sizing: border-box;
205
+ display: flex;
206
+ align-items: center;
207
+ justify-content: space-between;
208
+ padding: 0 15px;
209
+ cursor: pointer;
210
+ border-bottom: 1px solid var(--border-color);
211
+ transition: all 0.3s ease;
212
+ }
213
+
214
+ .resource-group-header:hover {
215
+ background: var(--bg-hover);
216
+ backdrop-filter: var(--blur-md);
217
+ -webkit-backdrop-filter: var(--blur-md);
218
+ }
219
+
220
+ /* Resource Cells */
221
+ .resource-cell {
222
+ padding: 0 15px;
223
+ text-align: left;
224
+ background: var(--bg-secondary);
225
+ backdrop-filter: var(--blur-sm);
226
+ -webkit-backdrop-filter: var(--blur-sm);
227
+ color: var(--text-primary);
228
+ height: var(--cell-height);
229
+ display: flex;
230
+ align-items: center;
231
+ border-bottom: 1px solid var(--border-color);
232
+ box-sizing: border-box;
233
+ font-size: 13px;
234
+ transition: all 0.2s ease;
235
+ }
236
+
237
+ .resource-cell:hover {
238
+ background: var(--bg-hover);
239
+ backdrop-filter: var(--blur-md);
240
+ -webkit-backdrop-filter: var(--blur-md);
241
+ }
242
+
243
+ /* Timeline Scrollable Container */
244
+ .timeline-scrollable-container {
245
+ flex: 1;
246
+ overflow-x: auto;
247
+ overflow-y: hidden;
248
+ display: flex;
249
+ flex-direction: column;
250
+ position: relative;
251
+ background: var(--bg-primary);
252
+ backdrop-filter: var(--blur-sm);
253
+ -webkit-backdrop-filter: var(--blur-sm);
254
+ }
255
+
256
+ /* Header Content Wrapper */
257
+ .timeline-header-content-wrapper {
258
+ display: flex;
259
+ flex-direction: column;
260
+ }
261
+
262
+ /* Timeline Header */
263
+ .timeline-header {
264
+ display: flex;
265
+ background: var(--bg-secondary);
266
+ backdrop-filter: var(--blur-sm);
267
+ -webkit-backdrop-filter: var(--blur-sm);
268
+ color: var(--text-primary);
269
+ position: sticky;
270
+ top: 0;
271
+ z-index: 3;
272
+ height: var(--header-total-height);
273
+ overflow: hidden;
274
+ box-sizing: border-box;
275
+ border-bottom: 1px solid var(--border-color);
276
+ box-shadow: var(--shadow-sm);
277
+ }
278
+
279
+ /* Timeline Content */
280
+ .timeline-content {
281
+ display: flex;
282
+ flex-direction: column;
283
+ }
284
+
285
+ /* Group Container */
286
+ .group-container {
287
+ display: flex;
288
+ flex-direction: column;
289
+ }
290
+
291
+ /* Resource Rows */
292
+ .resource-row {
293
+ display: flex;
294
+ box-sizing: border-box;
295
+ position: relative;
296
+ height: var(--cell-height);
297
+ border-bottom: 1px solid var(--border-strong);
298
+ overflow: visible;
299
+ }
300
+
301
+ /* Timeline Cells */
302
+ .timeline-cell {
303
+ flex: 1;
304
+ border-right: 1px solid var(--border-color);
305
+ border-bottom: 1px solid var(--border-color);
306
+ height: 100%;
307
+ position: relative;
308
+ box-sizing: border-box;
309
+ cursor: pointer;
310
+ background: transparent;
311
+ transition: all 0.2s ease;
312
+ }
313
+
314
+ .timeline-cell:hover {
315
+ background: var(--accent-light);
316
+ backdrop-filter: var(--blur-sm);
317
+ -webkit-backdrop-filter: var(--blur-sm);
318
+ }
319
+
320
+ .timeline-cell.selected {
321
+ background: var(--selected-bg);
322
+ backdrop-filter: var(--blur-sm);
323
+ -webkit-backdrop-filter: var(--blur-sm);
324
+ box-shadow: inset 0 0 10px var(--accent-primary);
325
+ }
326
+
327
+ /* Timeline Event */
328
+ .timeline-event {
329
+ position: absolute;
330
+ background: var(--event-bg);
331
+ backdrop-filter: var(--blur-md);
332
+ -webkit-backdrop-filter: var(--blur-md);
333
+ color: var(--event-text);
334
+ font-size: 13px;
335
+ font-weight: 500;
336
+ padding: 6px 12px;
337
+ padding-left: 20px; /* Drag handle için alan */
338
+ border-radius: 12px;
339
+ box-sizing: border-box;
340
+ z-index: 10;
341
+ overflow: hidden;
342
+ text-overflow: ellipsis;
343
+ white-space: nowrap;
344
+ border: 1px solid var(--event-border);
345
+ top: 5px;
346
+ height: calc(var(--cell-height) - 10px);
347
+ max-height: calc(var(--cell-height) - 10px);
348
+ box-shadow: var(--shadow-md), 0 0 15px var(--event-shadow);
349
+ cursor: default;
350
+ transition: all 0.3s ease;
351
+ display: flex;
352
+ align-items: center;
353
+ gap: 4px;
354
+ flex-wrap: nowrap;
355
+ }
356
+
357
+ .timeline-event:hover {
358
+ transform: translateY(-2px);
359
+ box-shadow: var(--shadow-lg), 0 0 20px var(--event-shadow);
360
+ backdrop-filter: var(--blur-lg);
361
+ -webkit-backdrop-filter: var(--blur-lg);
362
+ }
363
+
364
+ .timeline-event-title {
365
+ flex: 1;
366
+ overflow: hidden;
367
+ text-overflow: ellipsis;
368
+ white-space: nowrap;
369
+ min-width: 0;
370
+ display: inline-block;
371
+ }
372
+
373
+ /* Saatlik Rezervasyon Stilleri - Ana Timeline'da Gruplanmış Görünüm */
374
+ .timeline-event-hourly {
375
+ background: linear-gradient(135deg, rgba(236, 72, 153, 0.75), rgba(219, 39, 119, 0.75)) !important;
376
+ border: 2px solid rgba(255, 255, 255, 0.6) !important;
377
+ border-left: 4px solid rgba(255, 255, 255, 0.9) !important;
378
+ box-shadow: 0 2px 8px rgba(236, 72, 153, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.25) !important;
379
+ opacity: 0.95;
380
+ position: absolute !important;
381
+ font-weight: 600;
382
+ padding: 6px 6px !important; /* Kompakt padding - drag handle yok */
383
+ padding-left: 24px !important; /* Saat ikonu için alan */
384
+ min-width: 0 !important; /* Sütun genişliğini bozmaması için */
385
+ max-width: calc(100% - 4px) !important; /* Border için alan bırak */
386
+ box-sizing: border-box !important;
387
+ overflow: hidden !important; /* Taşan içeriği gizle */
388
+ text-overflow: ellipsis !important;
389
+ white-space: nowrap !important;
390
+ word-wrap: break-word !important;
391
+ }
392
+
393
+ .timeline-event-hourly::before {
394
+ content: '⏰';
395
+ position: absolute;
396
+ left: 8px;
397
+ top: 50%;
398
+ transform: translateY(-50%);
399
+ font-size: 14px;
400
+ opacity: 0.95;
401
+ line-height: 1;
402
+ }
403
+
404
+ .timeline-event-hourly:hover {
405
+ transform: translateY(-1px);
406
+ box-shadow: 0 4px 12px rgba(236, 72, 153, 0.45), inset 0 1px 0 rgba(255, 255, 255, 0.25) !important;
407
+ opacity: 1;
408
+ }
409
+
410
+ .timeline-event-hourly .timeline-event-title {
411
+ padding-left: 0 !important; /* İkon zaten ::before ile eklendi */
412
+ font-weight: 600;
413
+ font-size: 12px;
414
+ line-height: 1.3;
415
+ overflow: hidden;
416
+ text-overflow: ellipsis;
417
+ white-space: nowrap;
418
+ }
419
+
420
+ .timeline-event-hourly-time {
421
+ font-size: 10px;
422
+ opacity: 0.85;
423
+ font-weight: 500;
424
+ margin-left: 6px;
425
+ }
426
+
427
+ /* Saatlik rezervasyonlarda drag ve extend handle'ları gizle */
428
+ .timeline-event-hourly .timeline-event-drag-handle,
429
+ .timeline-event-hourly .timeline-event-extend-handle {
430
+ display: none !important;
431
+ }
432
+
433
+ .dark-mode .timeline-event-hourly {
434
+ background: linear-gradient(135deg, rgba(236, 72, 153, 0.65), rgba(219, 39, 119, 0.65)) !important;
435
+ border: 2px solid rgba(255, 255, 255, 0.5) !important;
436
+ border-left: 4px solid rgba(255, 255, 255, 0.8) !important;
437
+ box-shadow: 0 2px 8px rgba(236, 72, 153, 0.45), inset 0 1px 0 rgba(255, 255, 255, 0.2) !important;
438
+ }
439
+
440
+ /* Event Drag Handle - Sol Taraf */
441
+ .timeline-event-drag-handle {
442
+ position: absolute;
443
+ left: 0;
444
+ top: 0;
445
+ width: 16px;
446
+ height: 100%;
447
+ background: rgba(255, 255, 255, 0.4);
448
+ backdrop-filter: var(--blur-sm);
449
+ -webkit-backdrop-filter: var(--blur-sm);
450
+ cursor: grab;
451
+ z-index: 25;
452
+ border-top-left-radius: 12px;
453
+ border-bottom-left-radius: 12px;
454
+ transition: all 0.2s ease;
455
+ display: flex;
456
+ align-items: center;
457
+ justify-content: center;
458
+ }
459
+
460
+ .timeline-event-drag-handle::before {
461
+ content: '⋮⋮';
462
+ color: rgba(255, 255, 255, 0.8);
463
+ font-size: 10px;
464
+ letter-spacing: -2px;
465
+ line-height: 1;
466
+ }
467
+
468
+ .timeline-event-drag-handle:hover {
469
+ background: rgba(255, 255, 255, 0.6);
470
+ width: 20px;
471
+ }
472
+
473
+ .timeline-event-drag-handle:active {
474
+ cursor: grabbing;
475
+ background: rgba(255, 255, 255, 0.7);
476
+ }
477
+
478
+ /* Event Extend Handle */
479
+ .timeline-event-extend-handle {
480
+ position: absolute;
481
+ right: 0;
482
+ top: 0;
483
+ width: 12px;
484
+ height: 100%;
485
+ background: rgba(255, 255, 255, 0.3);
486
+ backdrop-filter: var(--blur-sm);
487
+ -webkit-backdrop-filter: var(--blur-sm);
488
+ cursor: col-resize;
489
+ z-index: 20;
490
+ border-top-right-radius: 12px;
491
+ border-bottom-right-radius: 12px;
492
+ transition: all 0.2s ease;
493
+ }
494
+
495
+ .timeline-event-extend-handle:hover {
496
+ background: rgba(255, 255, 255, 0.5);
497
+ width: 16px;
498
+ }
499
+
500
+ /* Temp Event (Creating) */
501
+ .timeline-temp-event {
502
+ position: absolute;
503
+ background: var(--new-event-bg);
504
+ backdrop-filter: var(--blur-md);
505
+ -webkit-backdrop-filter: var(--blur-md);
506
+ color: var(--new-event-text);
507
+ opacity: 0.8;
508
+ border-radius: 12px;
509
+ z-index: 9;
510
+ display: flex;
511
+ align-items: center;
512
+ justify-content: center;
513
+ font-size: 13px;
514
+ font-weight: 500;
515
+ padding: 6px 12px;
516
+ top: 6px;
517
+ border: 1px solid rgba(255, 255, 255, 0.3);
518
+ box-shadow: var(--shadow-md);
519
+ animation: pulse 2s ease-in-out infinite;
520
+ }
521
+
522
+ @keyframes pulse {
523
+ 0%, 100% {
524
+ opacity: 0.8;
525
+ }
526
+ 50% {
527
+ opacity: 1;
528
+ }
529
+ }
530
+
531
+ /* Timeline Header Container */
532
+ .timeline-header-container {
533
+ flex: 1;
534
+ display: flex;
535
+ flex-direction: column;
536
+ }
537
+
538
+ /* Month Row */
539
+ .timeline-header-month-row {
540
+ display: flex;
541
+ background: var(--bg-tertiary);
542
+ backdrop-filter: var(--blur-sm);
543
+ -webkit-backdrop-filter: var(--blur-sm);
544
+ color: var(--text-primary);
545
+ font-weight: 600;
546
+ font-size: 17px;
547
+ height: var(--header-month-height);
548
+ line-height: var(--header-month-height);
549
+ border-bottom: 1px solid var(--border-color);
550
+ }
551
+
552
+ .timeline-header-month-cell {
553
+ text-align: center;
554
+ display: flex;
555
+ align-items: center;
556
+ justify-content: center;
557
+ box-sizing: border-box;
558
+ border-right: 1px solid var(--border-color);
559
+ }
560
+
561
+ /* Day Row */
562
+ .timeline-header-day-row {
563
+ display: flex;
564
+ background: var(--bg-secondary);
565
+ backdrop-filter: var(--blur-sm);
566
+ -webkit-backdrop-filter: var(--blur-sm);
567
+ color: var(--text-primary);
568
+ border-bottom: -1px solid var(--border-strong);
569
+ }
570
+
571
+ .timeline-header-day-cell {
572
+ height: var(--header-day-height);
573
+ line-height: var(--header-day-height);
574
+ font-size: 13px;
575
+ font-weight: 500;
576
+ white-space: nowrap;
577
+ overflow: hidden;
578
+ text-overflow: ellipsis;
579
+ text-align: center;
580
+ box-sizing: border-box;
581
+ border-right: 1px solid var(--border-color);
582
+ }
583
+
584
+ /* Timeline Content Container */
585
+ .timeline-content-container {
586
+ position: relative;
587
+ width: 100%;
588
+ height: auto;
589
+ display: flex;
590
+ flex-direction: column;
591
+ }
592
+
593
+ /* Timeline Group Container */
594
+ .timeline-group-container {
595
+ margin-bottom: 0;
596
+ display: flex;
597
+ flex-direction: column;
598
+ }
599
+
600
+ /* Group Header Row */
601
+ .timeline-group-header-row {
602
+ display: flex;
603
+ margin-top: 0;
604
+ }
605
+
606
+ .timeline-group-header-cell {
607
+ flex: 1;
608
+ height: var(--cell-height);
609
+ background: var(--group-header-bg);
610
+ backdrop-filter: var(--blur-sm);
611
+ -webkit-backdrop-filter: var(--blur-sm);
612
+ border-right: 1px solid var(--border-strong);
613
+ border-bottom: 1px solid var(--border-strong);
614
+ box-sizing: border-box;
615
+ display: flex;
616
+ align-items: center;
617
+ justify-content: center;
618
+ }
619
+
620
+ /* Resource Row */
621
+ .timeline-resource-row {
622
+ display: flex;
623
+ position: relative;
624
+ height: var(--cell-height);
625
+ border-bottom: 1px solid var(--border-strong);
626
+ box-sizing: border-box;
627
+ overflow: visible;
628
+ }
629
+
630
+ /* Scrollbar Styling */
631
+ .timeline-scrollable-container::-webkit-scrollbar,
632
+ .timeline-resources-container::-webkit-scrollbar {
633
+ width: 8px;
634
+ height: 8px;
635
+ }
636
+
637
+ .timeline-scrollable-container::-webkit-scrollbar-track,
638
+ .timeline-resources-container::-webkit-scrollbar-track {
639
+ background: var(--bg-tertiary);
640
+ backdrop-filter: var(--blur-sm);
641
+ -webkit-backdrop-filter: var(--blur-sm);
642
+ }
643
+
644
+ .timeline-scrollable-container::-webkit-scrollbar-thumb,
645
+ .timeline-resources-container::-webkit-scrollbar-thumb {
646
+ background: var(--accent-primary);
647
+ backdrop-filter: var(--blur-sm);
648
+ -webkit-backdrop-filter: var(--blur-sm);
649
+ border-radius: 10px;
650
+ border: 2px solid transparent;
651
+ background-clip: padding-box;
652
+ }
653
+
654
+ .timeline-scrollable-container::-webkit-scrollbar-thumb:hover,
655
+ .timeline-resources-container::-webkit-scrollbar-thumb:hover {
656
+ background: var(--accent-hover);
657
+ }
658
+
659
+ /* Master Header Styles */
660
+ .master-header-container {
661
+ display: flex;
662
+ align-items: center;
663
+ justify-content: space-between;
664
+ padding: 0;
665
+ background: transparent;
666
+ }
667
+
668
+ .master-header-buttons {
669
+ display: flex;
670
+ align-items: center;
671
+ gap: 8px;
672
+ }
673
+
674
+ .master-header-btn {
675
+ background: var(--bg-secondary);
676
+ backdrop-filter: var(--blur-sm);
677
+ -webkit-backdrop-filter: var(--blur-sm);
678
+ color: var(--text-primary);
679
+ border: 1px solid var(--border-color);
680
+ border-radius: 10px;
681
+ padding: 8px 16px;
682
+ cursor: pointer;
683
+ font-size: 13px;
684
+ font-weight: 500;
685
+ transition: all 0.3s ease;
686
+ box-shadow: var(--shadow-sm);
687
+ }
688
+
689
+ .master-header-btn:hover {
690
+ background: var(--bg-hover);
691
+ backdrop-filter: var(--blur-md);
692
+ -webkit-backdrop-filter: var(--blur-md);
693
+ border-color: var(--border-hover);
694
+ transform: translateY(-2px);
695
+ box-shadow: var(--shadow-md);
696
+ }
697
+
698
+ .master-header-btn:active {
699
+ transform: translateY(0);
700
+ }
701
+
702
+ .master-header-btn:focus {
703
+ outline: none;
704
+ box-shadow: var(--shadow-md), 0 0 0 3px var(--accent-light);
705
+ }
706
+
707
+ .master-header-date-picker {
708
+ background: var(--bg-secondary);
709
+ backdrop-filter: var(--blur-sm);
710
+ -webkit-backdrop-filter: var(--blur-sm);
711
+ color: var(--text-primary);
712
+ border: 1px solid var(--border-color);
713
+ border-radius: 10px;
714
+ padding: 8px 16px;
715
+ cursor: pointer;
716
+ font-size: 13px;
717
+ font-weight: 500;
718
+ transition: all 0.3s ease;
719
+ box-shadow: var(--shadow-sm);
720
+ }
721
+
722
+ .master-header-date-picker:hover {
723
+ background: var(--bg-hover);
724
+ backdrop-filter: var(--blur-md);
725
+ -webkit-backdrop-filter: var(--blur-md);
726
+ border-color: var(--border-hover);
727
+ transform: translateY(-2px);
728
+ box-shadow: var(--shadow-md);
729
+ }
730
+
731
+ .master-header-date-picker:focus {
732
+ outline: none;
733
+ box-shadow: var(--shadow-md), 0 0 0 3px var(--accent-light);
734
+ }
735
+
736
+ .master-header-select {
737
+ margin-left: auto;
738
+ background: var(--bg-secondary);
739
+ backdrop-filter: var(--blur-sm);
740
+ -webkit-backdrop-filter: var(--blur-sm);
741
+ color: var(--text-primary);
742
+ border: 1px solid var(--border-color);
743
+ border-radius: 10px;
744
+ padding: 8px 16px;
745
+ font-size: 13px;
746
+ font-weight: 500;
747
+ cursor: pointer;
748
+ transition: all 0.3s ease;
749
+ box-shadow: var(--shadow-sm);
750
+ }
751
+
752
+ .master-header-select:hover {
753
+ background: var(--bg-hover);
754
+ backdrop-filter: var(--blur-md);
755
+ -webkit-backdrop-filter: var(--blur-md);
756
+ border-color: var(--border-hover);
757
+ transform: translateY(-2px);
758
+ box-shadow: var(--shadow-md);
759
+ }
760
+
761
+ .master-header-select:focus {
762
+ outline: none;
763
+ box-shadow: var(--shadow-md), 0 0 0 3px var(--accent-light);
764
+ }
765
+
766
+ /* Zoom Controls */
767
+ .master-header-zoom-controls {
768
+ display: flex;
769
+ align-items: center;
770
+ gap: 8px;
771
+ margin-left: 12px;
772
+ }
773
+
774
+ .master-header-zoom-level {
775
+ min-width: 50px;
776
+ text-align: center;
777
+ font-size: 13px;
778
+ font-weight: 600;
779
+ color: var(--text-primary);
780
+ padding: 0 8px;
781
+ }
782
+
783
+ .master-header-zoom-controls .master-header-btn {
784
+ min-width: 36px;
785
+ padding: 8px 12px;
786
+ font-size: 18px;
787
+ font-weight: 700;
788
+ line-height: 1;
789
+ }
790
+
791
+ .master-header-zoom-controls .master-header-btn:disabled {
792
+ opacity: 0.4;
793
+ cursor: not-allowed;
794
+ transform: none;
795
+ }
796
+
797
+ .master-header-zoom-controls .master-header-btn:disabled:hover {
798
+ transform: none;
799
+ box-shadow: none;
800
+ }
801
+
802
+ /* ============================================
803
+ Context Menu Styles
804
+ ============================================ */
805
+ .context-menu {
806
+ position: fixed;
807
+ z-index: 10005;
808
+ pointer-events: auto;
809
+ }
810
+
811
+ .context-menu-content {
812
+ background: var(--bg-primary);
813
+ backdrop-filter: var(--blur-md);
814
+ -webkit-backdrop-filter: var(--blur-md);
815
+ border: 1px solid var(--border-color);
816
+ border-radius: 12px;
817
+ box-shadow: var(--shadow-lg);
818
+ padding: 6px;
819
+ min-width: 200px;
820
+ max-width: 300px;
821
+ overflow: hidden;
822
+ animation: contextMenuFadeIn 0.15s ease-out;
823
+ }
824
+
825
+ @keyframes contextMenuFadeIn {
826
+ from {
827
+ opacity: 0;
828
+ transform: scale(0.95) translateY(-5px);
829
+ }
830
+ to {
831
+ opacity: 1;
832
+ transform: scale(1) translateY(0);
833
+ }
834
+ }
835
+
836
+ .context-menu-item {
837
+ display: flex;
838
+ align-items: center;
839
+ gap: 10px;
840
+ padding: 10px 12px;
841
+ border-radius: 8px;
842
+ cursor: pointer;
843
+ font-size: 13px;
844
+ color: var(--text-primary);
845
+ transition: all 0.2s ease;
846
+ user-select: none;
847
+ position: relative;
848
+ }
849
+
850
+ .context-menu-item:hover:not(.context-menu-item-disabled) {
851
+ background: var(--bg-hover);
852
+ color: var(--text-primary);
853
+ }
854
+
855
+ .context-menu-item-disabled {
856
+ opacity: 0.5;
857
+ cursor: not-allowed;
858
+ pointer-events: none;
859
+ }
860
+
861
+ .context-menu-item-danger {
862
+ color: var(--danger-color, #dc3545);
863
+ }
864
+
865
+ .context-menu-item-danger:hover:not(.context-menu-item-disabled) {
866
+ background: rgba(220, 53, 69, 0.1);
867
+ color: var(--danger-color, #dc3545);
868
+ }
869
+
870
+ .context-menu-item-icon {
871
+ display: flex;
872
+ align-items: center;
873
+ justify-content: center;
874
+ width: 18px;
875
+ height: 18px;
876
+ font-size: 14px;
877
+ flex-shrink: 0;
878
+ }
879
+
880
+ .context-menu-item-label {
881
+ flex: 1;
882
+ font-weight: 500;
883
+ }
884
+
885
+ .context-menu-item-shortcut {
886
+ font-size: 11px;
887
+ color: var(--text-tertiary);
888
+ font-family: monospace;
889
+ padding: 2px 6px;
890
+ background: var(--bg-tertiary);
891
+ border-radius: 4px;
892
+ margin-left: auto;
893
+ }
894
+
895
+ .context-menu-separator {
896
+ height: 1px;
897
+ background: var(--border-color);
898
+ margin: 4px 0;
899
+ }
900
+
901
+ /* Dark mode adjustments */
902
+ .dark-mode .context-menu-item-shortcut {
903
+ background: var(--bg-secondary);
904
+ color: var(--text-secondary);
905
+ }
906
+
907
+ /* ============================================
908
+ Daily View Styles
909
+ ============================================ */
910
+ .daily-view-overlay {
911
+ position: fixed;
912
+ top: 0;
913
+ left: 0;
914
+ right: 0;
915
+ bottom: 0;
916
+ background: rgba(0, 0, 0, 0.8);
917
+ backdrop-filter: blur(10px);
918
+ -webkit-backdrop-filter: blur(10px);
919
+ z-index: 10006;
920
+ display: flex;
921
+ justify-content: center;
922
+ align-items: center;
923
+ animation: dailyViewFadeIn 0.4s ease-out;
924
+ overflow: hidden;
925
+ }
926
+
927
+ @keyframes dailyViewFadeIn {
928
+ from {
929
+ opacity: 0;
930
+ }
931
+ to {
932
+ opacity: 1;
933
+ }
934
+ }
935
+
936
+ .daily-view-container {
937
+ width: 95%;
938
+ max-width: 1400px;
939
+ height: 90vh;
940
+ background: var(--bg-primary);
941
+ backdrop-filter: var(--blur-lg);
942
+ -webkit-backdrop-filter: var(--blur-lg);
943
+ border: 1px solid var(--border-color);
944
+ border-radius: 20px;
945
+ box-shadow: var(--shadow-lg);
946
+ display: flex;
947
+ flex-direction: column;
948
+ overflow: hidden;
949
+ animation: dailyViewScaleIn 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
950
+ position: relative;
951
+ }
952
+
953
+ @keyframes dailyViewScaleIn {
954
+ from {
955
+ opacity: 0;
956
+ transform: scale(0.8) translateY(50px);
957
+ }
958
+ to {
959
+ opacity: 1;
960
+ transform: scale(1) translateY(0);
961
+ }
962
+ }
963
+
964
+ .daily-view-header {
965
+ display: flex;
966
+ justify-content: space-between;
967
+ align-items: center;
968
+ padding: 20px 30px;
969
+ border-bottom: 1px solid var(--border-color);
970
+ background: var(--bg-secondary);
971
+ backdrop-filter: var(--blur-sm);
972
+ -webkit-backdrop-filter: var(--blur-sm);
973
+ }
974
+
975
+ .daily-view-header-content {
976
+ flex: 1;
977
+ }
978
+
979
+ .daily-view-title {
980
+ font-size: 24px;
981
+ font-weight: 700;
982
+ color: var(--text-primary);
983
+ margin: 0 0 5px 0;
984
+ }
985
+
986
+ .daily-view-date {
987
+ font-size: 14px;
988
+ color: var(--text-secondary);
989
+ margin: 0;
990
+ text-transform: capitalize;
991
+ }
992
+
993
+ .daily-view-close {
994
+ background: var(--bg-tertiary);
995
+ border: 1px solid var(--border-color);
996
+ border-radius: 8px;
997
+ width: 36px;
998
+ height: 36px;
999
+ display: flex;
1000
+ align-items: center;
1001
+ justify-content: center;
1002
+ cursor: pointer;
1003
+ font-size: 20px;
1004
+ color: var(--text-primary);
1005
+ transition: all 0.2s ease;
1006
+ }
1007
+
1008
+ .daily-view-close:hover {
1009
+ background: var(--bg-hover);
1010
+ transform: rotate(90deg);
1011
+ }
1012
+
1013
+ .daily-view-body {
1014
+ display: flex;
1015
+ flex: 1;
1016
+ overflow: hidden;
1017
+ }
1018
+
1019
+ .daily-view-hours {
1020
+ width: 100px;
1021
+ background: var(--bg-secondary);
1022
+ backdrop-filter: var(--blur-sm);
1023
+ -webkit-backdrop-filter: var(--blur-sm);
1024
+ border-right: 1px solid var(--border-color);
1025
+ overflow-y: auto;
1026
+ flex-shrink: 0;
1027
+ }
1028
+
1029
+ .daily-view-hour-label {
1030
+ height: calc(100% / 24);
1031
+ display: flex;
1032
+ align-items: center;
1033
+ justify-content: center;
1034
+ font-size: 12px;
1035
+ color: var(--text-secondary);
1036
+ font-weight: 500;
1037
+ border-bottom: 1px solid var(--border-color);
1038
+ position: relative;
1039
+ }
1040
+
1041
+ .daily-view-hour-label:last-child {
1042
+ border-bottom: none;
1043
+ }
1044
+
1045
+ .daily-view-timeline {
1046
+ flex: 1;
1047
+ overflow-y: auto;
1048
+ position: relative;
1049
+ background: var(--bg-primary);
1050
+ cursor: crosshair;
1051
+ }
1052
+
1053
+ .daily-view-hour-cell {
1054
+ height: calc(100% / 24);
1055
+ border-bottom: 1px solid var(--border-color);
1056
+ position: relative;
1057
+ cursor: pointer;
1058
+ transition: background 0.2s ease;
1059
+ }
1060
+
1061
+ .daily-view-hour-cell:hover {
1062
+ background: var(--bg-hover);
1063
+ }
1064
+
1065
+ .daily-view-hour-cell:last-child {
1066
+ border-bottom: none;
1067
+ }
1068
+
1069
+ .daily-view-event {
1070
+ position: absolute;
1071
+ left: 5px;
1072
+ right: 5px;
1073
+ background: var(--event-bg);
1074
+ color: var(--event-text);
1075
+ border-radius: 8px;
1076
+ padding: 8px 12px;
1077
+ box-shadow: var(--shadow-md);
1078
+ cursor: pointer;
1079
+ transition: all 0.2s ease;
1080
+ border: 1px solid var(--event-border);
1081
+ z-index: 10;
1082
+ display: flex;
1083
+ flex-direction: column;
1084
+ gap: 4px;
1085
+ overflow: hidden;
1086
+ }
1087
+
1088
+ .daily-view-event:hover {
1089
+ transform: translateY(-2px);
1090
+ box-shadow: var(--shadow-lg);
1091
+ z-index: 15;
1092
+ }
1093
+
1094
+ .daily-view-event-title {
1095
+ font-weight: 600;
1096
+ font-size: 13px;
1097
+ white-space: nowrap;
1098
+ overflow: hidden;
1099
+ text-overflow: ellipsis;
1100
+ }
1101
+
1102
+ .daily-view-event-time {
1103
+ font-size: 11px;
1104
+ opacity: 0.9;
1105
+ white-space: nowrap;
1106
+ }
1107
+
1108
+ .daily-view-temp-event {
1109
+ position: absolute;
1110
+ left: 5px;
1111
+ right: 5px;
1112
+ background: var(--new-event-bg);
1113
+ color: var(--new-event-text);
1114
+ border-radius: 8px;
1115
+ padding: 8px 12px;
1116
+ box-shadow: var(--shadow-md);
1117
+ border: 2px dashed rgba(255, 255, 255, 0.5);
1118
+ z-index: 20;
1119
+ font-weight: 500;
1120
+ font-size: 13px;
1121
+ animation: dailyViewPulse 1.5s ease-in-out infinite;
1122
+ }
1123
+
1124
+ @keyframes dailyViewPulse {
1125
+ 0%, 100% {
1126
+ opacity: 0.8;
1127
+ }
1128
+ 50% {
1129
+ opacity: 1;
1130
+ }
1131
+ }
1132
+
1133
+ /* Responsive */
1134
+ @media (max-width: 768px) {
1135
+ .daily-view-container {
1136
+ width: 100%;
1137
+ height: 100vh;
1138
+ border-radius: 0;
1139
+ }
1140
+
1141
+ .daily-view-hours {
1142
+ width: 80px;
1143
+ }
1144
+
1145
+ .daily-view-title {
1146
+ font-size: 20px;
1147
+ }
1148
+ }
1149
+
1150
+ /* Flatpickr Calendar Glassmorphism */
1151
+ .flatpickr-calendar {
1152
+ background: var(--bg-primary) !important;
1153
+ backdrop-filter: var(--blur-lg) !important;
1154
+ -webkit-backdrop-filter: var(--blur-lg) !important;
1155
+ border: 1px solid var(--border-color) !important;
1156
+ box-shadow: var(--shadow-lg) !important;
1157
+ border-radius: 16px !important;
1158
+ overflow: hidden;
1159
+ }
1160
+
1161
+ .flatpickr-day {
1162
+ background: transparent !important;
1163
+ color: var(--text-primary) !important;
1164
+ border-radius: 8px !important;
1165
+ cursor: pointer;
1166
+ transition: all 0.2s ease;
1167
+ }
1168
+
1169
+ .flatpickr-day:hover {
1170
+ background: var(--accent-light) !important;
1171
+ backdrop-filter: var(--blur-sm) !important;
1172
+ -webkit-backdrop-filter: var(--blur-sm) !important;
1173
+ }
1174
+
1175
+ .flatpickr-day.selected {
1176
+ background: var(--accent-primary) !important;
1177
+ backdrop-filter: var(--blur-md) !important;
1178
+ -webkit-backdrop-filter: var(--blur-md) !important;
1179
+ color: white !important;
1180
+ box-shadow: var(--shadow-md);
1181
+ }
1182
+
1183
+ .flatpickr-months .flatpickr-month {
1184
+ background: transparent !important;
1185
+ color: var(--text-primary) !important;
1186
+ }
1187
+
1188
+ .flatpickr-prev-month,
1189
+ .flatpickr-next-month {
1190
+ color: var(--text-primary) !important;
1191
+ cursor: pointer;
1192
+ transition: all 0.2s ease;
1193
+ }
1194
+
1195
+ .flatpickr-prev-month:hover,
1196
+ .flatpickr-next-month:hover {
1197
+ background: var(--accent-light) !important;
1198
+ backdrop-filter: var(--blur-sm) !important;
1199
+ -webkit-backdrop-filter: var(--blur-sm) !important;
1200
+ border-radius: 8px;
1201
+ }
1202
+
1203
+ /* Event Time Style */
1204
+ .event-time {
1205
+ font-size: 11px;
1206
+ margin-top: 2px;
1207
+ opacity: 0.9;
1208
+ }
1209
+
1210
+ /* Legacy class support (for backward compatibility) */
1211
+ .event {
1212
+ position: absolute;
1213
+ background: var(--event-bg);
1214
+ backdrop-filter: var(--blur-md);
1215
+ -webkit-backdrop-filter: var(--blur-md);
1216
+ color: var(--event-text);
1217
+ font-size: 13px;
1218
+ font-weight: 500;
1219
+ padding: 6px 12px;
1220
+ border-radius: 12px;
1221
+ text-align: left;
1222
+ display: flex;
1223
+ flex-direction: column;
1224
+ justify-content: center;
1225
+ box-sizing: border-box;
1226
+ z-index: 10;
1227
+ overflow: hidden;
1228
+ text-overflow: ellipsis;
1229
+ white-space: nowrap;
1230
+ border: 1px solid var(--event-border);
1231
+ cursor: pointer;
1232
+ box-shadow: var(--shadow-md), var(--shadow-glow);
1233
+ transition: all 0.3s ease;
1234
+ }
1235
+
1236
+ .event:hover {
1237
+ transform: translateY(-2px);
1238
+ box-shadow: var(--shadow-lg), var(--shadow-glow);
1239
+ }
1240
+
1241
+ /* Time-based Mode Styles */
1242
+ .timeline-header-time-row {
1243
+ display: flex;
1244
+ background: var(--bg-tertiary);
1245
+ backdrop-filter: var(--blur-sm);
1246
+ -webkit-backdrop-filter: var(--blur-sm);
1247
+ border-bottom: 1px solid var(--border-strong);
1248
+ height: 60px;
1249
+ }
1250
+
1251
+ .timeline-header-time-cell {
1252
+ flex: 1;
1253
+ border-right: 1px solid var(--border-color);
1254
+ position: relative;
1255
+ height: 100%;
1256
+ }
1257
+
1258
+ .timeline-time-slots {
1259
+ display: flex;
1260
+ flex-direction: column;
1261
+ height: 100%;
1262
+ position: relative;
1263
+ }
1264
+
1265
+ .timeline-time-slot {
1266
+ border-bottom: 1px solid var(--border-color);
1267
+ position: relative;
1268
+ box-sizing: border-box;
1269
+ }
1270
+
1271
+ .timeline-time-label {
1272
+ position: absolute;
1273
+ left: 4px;
1274
+ top: 2px;
1275
+ font-size: 10px;
1276
+ font-weight: 500;
1277
+ color: var(--text-secondary);
1278
+ background: var(--bg-secondary);
1279
+ backdrop-filter: var(--blur-sm);
1280
+ -webkit-backdrop-filter: var(--blur-sm);
1281
+ padding: 2px 4px;
1282
+ border-radius: 3px;
1283
+ z-index: 1;
1284
+ }
1285
+
1286
+ /* Time-based Event Styles */
1287
+ .timeline-event-time-based {
1288
+ position: absolute;
1289
+ top: 0;
1290
+ left: 0;
1291
+ height: auto;
1292
+ min-height: 20px;
1293
+ }
1294
+
1295
+ .timeline-resource-row {
1296
+ position: relative;
1297
+ min-height: var(--cell-height);
1298
+ height: var(--cell-height);
1299
+ overflow: visible;
1300
+ }
1301
+
1302
+ .timeline-resource-row.time-mode {
1303
+ min-height: 400px; /* Time mode için daha yüksek */
1304
+ height: auto;
1305
+ }
1306
+
1307
+ /* Time mode için cell yüksekliği */
1308
+ .timeline-cell.time-mode {
1309
+ min-height: 400px;
1310
+ height: auto;
1311
+ position: relative;
1312
+ }
1313
+
1314
+ /* Event saat bilgisi */
1315
+ .timeline-event-time {
1316
+ display: block;
1317
+ font-size: 10px;
1318
+ opacity: 0.8;
1319
+ margin-top: 2px;
1320
+ font-weight: 500;
1321
+ }
1322
+
1323
+ .timeline-event-conflict-icon {
1324
+ display: inline-block;
1325
+ margin-left: 4px;
1326
+ font-size: 12px;
1327
+ animation: pulse-warning 2s ease-in-out infinite;
1328
+ }
1329
+
1330
+ @keyframes pulse-warning {
1331
+ 0%, 100% {
1332
+ opacity: 1;
1333
+ }
1334
+ 50% {
1335
+ opacity: 0.5;
1336
+ }
1337
+ }
1338
+
1339
+ /* Time-based event için daha iyi görünüm */
1340
+ .timeline-event-time-based .timeline-event-title {
1341
+ font-size: 11px;
1342
+ line-height: 1.2;
1343
+ white-space: nowrap;
1344
+ overflow: hidden;
1345
+ text-overflow: ellipsis;
1346
+ }
1347
+
1348
+ .timeline-event-time-based {
1349
+ min-height: 30px;
1350
+ padding: 4px 8px;
1351
+ }
1352
+
1353
+ /* Filter Panel Styles */
1354
+ .filter-panel {
1355
+ background: var(--bg-secondary);
1356
+ backdrop-filter: var(--blur-md);
1357
+ -webkit-backdrop-filter: var(--blur-md);
1358
+ border: 1px solid var(--border-color);
1359
+ border-radius: 12px;
1360
+ padding: 16px;
1361
+ margin-bottom: 16px;
1362
+ box-shadow: var(--shadow-md);
1363
+ }
1364
+
1365
+ .filter-panel-header {
1366
+ display: flex;
1367
+ justify-content: space-between;
1368
+ align-items: center;
1369
+ margin-bottom: 16px;
1370
+ padding-bottom: 12px;
1371
+ border-bottom: 1px solid var(--border-color);
1372
+ }
1373
+
1374
+ .filter-panel-header h3 {
1375
+ margin: 0;
1376
+ font-size: 16px;
1377
+ font-weight: 600;
1378
+ color: var(--text-primary);
1379
+ }
1380
+
1381
+ .filter-clear-btn {
1382
+ background: var(--bg-tertiary);
1383
+ border: 1px solid var(--border-color);
1384
+ color: var(--text-primary);
1385
+ padding: 6px 12px;
1386
+ border-radius: 6px;
1387
+ cursor: pointer;
1388
+ font-size: 12px;
1389
+ transition: all 0.2s ease;
1390
+ }
1391
+
1392
+ .filter-clear-btn:hover {
1393
+ background: var(--bg-primary);
1394
+ transform: translateY(-1px);
1395
+ }
1396
+
1397
+ .filter-section {
1398
+ margin-bottom: 16px;
1399
+ }
1400
+
1401
+ .filter-section label {
1402
+ display: block;
1403
+ margin-bottom: 8px;
1404
+ font-size: 13px;
1405
+ font-weight: 500;
1406
+ color: var(--text-secondary);
1407
+ }
1408
+
1409
+ .filter-search-input,
1410
+ .filter-date-input {
1411
+ width: 100%;
1412
+ padding: 8px 12px;
1413
+ background: var(--bg-tertiary);
1414
+ border: 1px solid var(--border-color);
1415
+ border-radius: 6px;
1416
+ color: var(--text-primary);
1417
+ font-size: 13px;
1418
+ transition: all 0.2s ease;
1419
+ }
1420
+
1421
+ .filter-search-input:focus,
1422
+ .filter-date-input:focus {
1423
+ outline: none;
1424
+ border-color: var(--border-hover);
1425
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);
1426
+ }
1427
+
1428
+ .filter-date-range {
1429
+ display: flex;
1430
+ align-items: center;
1431
+ gap: 8px;
1432
+ }
1433
+
1434
+ .filter-date-range span {
1435
+ color: var(--text-secondary);
1436
+ font-size: 12px;
1437
+ }
1438
+
1439
+ .filter-checkbox-group {
1440
+ display: flex;
1441
+ flex-direction: column;
1442
+ gap: 8px;
1443
+ max-height: 200px;
1444
+ overflow-y: auto;
1445
+ }
1446
+
1447
+ .filter-checkbox {
1448
+ display: flex;
1449
+ align-items: center;
1450
+ gap: 8px;
1451
+ cursor: pointer;
1452
+ font-size: 13px;
1453
+ color: var(--text-primary);
1454
+ padding: 4px 0;
1455
+ }
1456
+
1457
+ .filter-checkbox input[type="checkbox"] {
1458
+ cursor: pointer;
1459
+ width: 16px;
1460
+ height: 16px;
1461
+ accent-color: rgba(99, 102, 241, 0.8);
1462
+ }
1463
+
1464
+ .filter-checkbox span {
1465
+ user-select: none;
1466
+ }
1467
+
1468
+ /* View Mode Styles */
1469
+ .master-header-view-mode {
1470
+ display: flex;
1471
+ gap: 4px;
1472
+ margin-right: 12px;
1473
+ }
1474
+
1475
+ .master-header-view-mode .master-header-btn {
1476
+ padding: 6px 12px;
1477
+ font-size: 12px;
1478
+ min-width: 50px;
1479
+ }
1480
+
1481
+ .master-header-view-mode .master-header-btn.active {
1482
+ background: var(--bg-primary);
1483
+ border-color: var(--border-hover);
1484
+ box-shadow: var(--shadow-sm);
1485
+ font-weight: 600;
1486
+ }
1487
+
1488
+ /* ============================================
1489
+ MOBILE RESPONSIVE STYLES
1490
+ ============================================ */
1491
+
1492
+ @media (max-width: 768px) {
1493
+ /* Mobil için CSS değişkenleri */
1494
+ :root {
1495
+ --resource-width: 120px;
1496
+ --cell-height: 40px;
1497
+ --header-total-height: 70px;
1498
+ --header-month-height: 35px;
1499
+ --header-day-height: 35px;
1500
+ --container-height: 500px;
1501
+ }
1502
+
1503
+ /* Timeline Container */
1504
+ .timeline-container {
1505
+ font-size: 12px;
1506
+ }
1507
+
1508
+ /* Master Header */
1509
+ .master-header-container {
1510
+ flex-direction: column;
1511
+ gap: 8px;
1512
+ padding: 8px;
1513
+ }
1514
+
1515
+ .master-header-buttons {
1516
+ flex-wrap: wrap;
1517
+ gap: 6px;
1518
+ }
1519
+
1520
+ .master-header-btn {
1521
+ padding: 6px 10px;
1522
+ font-size: 11px;
1523
+ min-width: auto;
1524
+ }
1525
+
1526
+ .master-header-date-picker {
1527
+ width: 100%;
1528
+ padding: 8px;
1529
+ font-size: 14px;
1530
+ }
1531
+
1532
+ .master-header-select {
1533
+ width: 100%;
1534
+ padding: 8px;
1535
+ font-size: 14px;
1536
+ }
1537
+
1538
+ /* Resources Header */
1539
+ .resources-header {
1540
+ font-size: 12px;
1541
+ padding: 8px;
1542
+ }
1543
+
1544
+ .resource-group-header {
1545
+ font-size: 11px;
1546
+ padding: 8px 10px;
1547
+ height: var(--cell-height);
1548
+ }
1549
+
1550
+ .resource-cell {
1551
+ font-size: 11px;
1552
+ padding: 0 10px;
1553
+ height: var(--cell-height);
1554
+ }
1555
+
1556
+ /* Timeline Header */
1557
+ .timeline-header-month-cell {
1558
+ font-size: 11px;
1559
+ padding: 6px 4px;
1560
+ }
1561
+
1562
+ .timeline-header-day-cell {
1563
+ font-size: 10px;
1564
+ padding: 4px 2px;
1565
+ }
1566
+
1567
+ /* Timeline Events */
1568
+ .timeline-event {
1569
+ font-size: 10px;
1570
+ padding: 4px 6px;
1571
+ min-height: 32px;
1572
+ border-radius: 12px;
1573
+ }
1574
+
1575
+ .timeline-event-title {
1576
+ font-size: 10px;
1577
+ line-height: 1.2;
1578
+ }
1579
+
1580
+ .timeline-event-drag-handle {
1581
+ width: 12px;
1582
+ }
1583
+
1584
+ .timeline-event-drag-handle:hover {
1585
+ width: 14px;
1586
+ }
1587
+
1588
+ /* Timeline Cells */
1589
+ .timeline-cell {
1590
+ min-width: 40px;
1591
+ }
1592
+
1593
+ /* Scrollable Container */
1594
+ .timeline-scrollable-container {
1595
+ -webkit-overflow-scrolling: touch; /* iOS smooth scrolling */
1596
+ scroll-behavior: smooth;
1597
+ }
1598
+
1599
+ /* Group Header */
1600
+ .timeline-group-header-cell {
1601
+ font-size: 10px;
1602
+ }
1603
+
1604
+ /* Tooltip */
1605
+ .event-tooltip {
1606
+ font-size: 11px;
1607
+ padding: 8px;
1608
+ max-width: 200px;
1609
+ }
1610
+ }
1611
+
1612
+ @media (max-width: 480px) {
1613
+ /* Küçük mobil cihazlar için */
1614
+ :root {
1615
+ --resource-width: 100px;
1616
+ --cell-height: 35px;
1617
+ --header-total-height: 60px;
1618
+ --header-month-height: 30px;
1619
+ --header-day-height: 30px;
1620
+ --container-height: 400px;
1621
+ }
1622
+
1623
+ .master-header-btn {
1624
+ padding: 5px 8px;
1625
+ font-size: 10px;
1626
+ }
1627
+
1628
+ .timeline-header-month-cell {
1629
+ font-size: 10px;
1630
+ padding: 4px 2px;
1631
+ }
1632
+
1633
+ .timeline-header-day-cell {
1634
+ font-size: 9px;
1635
+ padding: 3px 1px;
1636
+ }
1637
+
1638
+ .timeline-event {
1639
+ font-size: 9px;
1640
+ padding: 3px 5px;
1641
+ min-height: 28px;
1642
+ }
1643
+
1644
+ .timeline-event-title {
1645
+ font-size: 9px;
1646
+ }
1647
+
1648
+ .resource-cell {
1649
+ font-size: 10px;
1650
+ padding: 0 8px;
1651
+ }
1652
+
1653
+ .timeline-cell {
1654
+ min-width: 35px;
1655
+ }
1656
+ }
1657
+
1658
+ /* Touch-friendly styles */
1659
+ @media (hover: none) and (pointer: coarse) {
1660
+ /* Touch cihazlar için */
1661
+ .timeline-event {
1662
+ min-height: 44px; /* Touch target minimum size */
1663
+ }
1664
+
1665
+ .master-header-btn {
1666
+ min-height: 44px;
1667
+ min-width: 44px;
1668
+ }
1669
+
1670
+ .timeline-cell {
1671
+ min-height: 44px;
1672
+ }
1673
+
1674
+ /* Hover efektlerini devre dışı bırak */
1675
+ .timeline-event:hover {
1676
+ transform: none;
1677
+ }
1678
+
1679
+ .resource-cell:hover {
1680
+ background: var(--bg-secondary);
1681
+ }
1682
+ }
1683
+
1684
+ /* Landscape orientation için */
1685
+ @media (max-width: 768px) and (orientation: landscape) {
1686
+ :root {
1687
+ --container-height: 300px;
1688
+ --cell-height: 35px;
1689
+ }
1690
+ }
1691
+
1692
+ /* Past Date Protection Styles */
1693
+ .timeline-cell-past {
1694
+ opacity: 0.4;
1695
+ cursor: not-allowed;
1696
+ pointer-events: none;
1697
+ position: relative;
1698
+ }
1699
+
1700
+ .timeline-cell-past::after {
1701
+ content: '';
1702
+ position: absolute;
1703
+ top: 0;
1704
+ left: 0;
1705
+ right: 0;
1706
+ bottom: 0;
1707
+ background: repeating-linear-gradient(
1708
+ 45deg,
1709
+ transparent,
1710
+ transparent 5px,
1711
+ rgba(0, 0, 0, 0.1) 5px,
1712
+ rgba(0, 0, 0, 0.1) 10px
1713
+ );
1714
+ pointer-events: none;
1715
+ }
1716
+
1717
+ /* Weekend Highlighting Styles - Subtle, matching group header intensity */
1718
+ /* Light mode: daha açık ve şeffaf */
1719
+ .timeline-header-day-weekend {
1720
+ background: rgba(200, 200, 200, 0.15) !important;
1721
+ }
1722
+
1723
+ .dark-mode .timeline-header-day-weekend {
1724
+ background: var(--group-header-bg, rgba(16, 16, 26, 0.5)) !important;
1725
+ }
1726
+
1727
+ .timeline-cell-weekend {
1728
+ background: rgba(200, 200, 200, 0.15) !important;
1729
+ }
1730
+
1731
+ .dark-mode .timeline-cell-weekend {
1732
+ background: var(--group-header-bg, rgba(16, 16, 26, 0.5)) !important;
1733
+ }
1734
+
1735
+ .timeline-group-header-cell.timeline-cell-weekend {
1736
+ background: rgba(200, 200, 200, 0.15) !important;
1737
+ }
1738
+
1739
+ .dark-mode .timeline-group-header-cell.timeline-cell-weekend {
1740
+ background: var(--group-header-bg, rgba(16, 16, 26, 0.5)) !important;
1741
+ }
1742
+
1743
+ /* Autocomplete Select Styles */
1744
+ .autocomplete-select-container {
1745
+ position: relative;
1746
+ width: 100%;
1747
+ max-width: 300px;
1748
+ }
1749
+
1750
+ .autocomplete-select-input {
1751
+ position: relative;
1752
+ display: flex;
1753
+ align-items: center;
1754
+ background: var(--bg-secondary);
1755
+ backdrop-filter: var(--blur-sm);
1756
+ -webkit-backdrop-filter: var(--blur-sm);
1757
+ border: 1px solid var(--border-color);
1758
+ border-radius: 8px;
1759
+ padding: 8px 12px;
1760
+ cursor: text;
1761
+ transition: all 0.2s ease;
1762
+ }
1763
+
1764
+ .autocomplete-select-input:hover {
1765
+ border-color: var(--border-hover);
1766
+ background: var(--bg-hover);
1767
+ }
1768
+
1769
+ .autocomplete-select-input.open {
1770
+ border-color: var(--accent-primary);
1771
+ box-shadow: 0 0 0 2px var(--accent-light);
1772
+ }
1773
+
1774
+ .autocomplete-select-input-field {
1775
+ flex: 1;
1776
+ border: none;
1777
+ outline: none;
1778
+ background: transparent;
1779
+ color: var(--text-primary);
1780
+ font-size: 14px;
1781
+ width: 100%;
1782
+ }
1783
+
1784
+ .autocomplete-select-input-field::placeholder {
1785
+ color: var(--text-tertiary);
1786
+ }
1787
+
1788
+ .autocomplete-select-arrow {
1789
+ margin-left: 8px;
1790
+ color: var(--text-secondary);
1791
+ font-size: 10px;
1792
+ pointer-events: none;
1793
+ transition: transform 0.2s ease;
1794
+ }
1795
+
1796
+ .autocomplete-select-input.open .autocomplete-select-arrow {
1797
+ transform: rotate(180deg);
1798
+ }
1799
+
1800
+ .autocomplete-select-dropdown {
1801
+ position: absolute;
1802
+ top: 100%;
1803
+ left: 0;
1804
+ right: 0;
1805
+ margin-top: 4px;
1806
+ background: var(--bg-primary);
1807
+ backdrop-filter: var(--blur-md);
1808
+ -webkit-backdrop-filter: var(--blur-md);
1809
+ border: 1px solid var(--border-color);
1810
+ border-radius: 8px;
1811
+ box-shadow: var(--shadow-lg);
1812
+ z-index: 10000 !important; /* Çok yüksek z-index - diğer elementlerin üstünde görünsün */
1813
+ max-height: 250px;
1814
+ overflow-y: auto;
1815
+ overflow-x: hidden;
1816
+ }
1817
+
1818
+ .autocomplete-select-option {
1819
+ padding: 10px 12px;
1820
+ cursor: pointer;
1821
+ color: var(--text-primary);
1822
+ transition: all 0.2s ease;
1823
+ border-bottom: 1px solid var(--border-color);
1824
+ }
1825
+
1826
+ .autocomplete-select-option:last-child {
1827
+ border-bottom: none;
1828
+ }
1829
+
1830
+ .autocomplete-select-option:hover {
1831
+ background: var(--bg-hover);
1832
+ backdrop-filter: var(--blur-sm);
1833
+ -webkit-backdrop-filter: var(--blur-sm);
1834
+ }
1835
+
1836
+ .autocomplete-select-option.selected {
1837
+ background: var(--accent-light);
1838
+ color: var(--accent-primary);
1839
+ font-weight: 600;
1840
+ }
1841
+
1842
+ .autocomplete-select-no-results {
1843
+ padding: 12px;
1844
+ text-align: center;
1845
+ color: var(--text-tertiary);
1846
+ font-size: 14px;
1847
+ }
1848
+
1849
+ /* Resources Header içinde autocomplete için özel stil */
1850
+ .resources-header-content .autocomplete-select-container {
1851
+ max-width: 100%;
1852
+ z-index: 10001 !important; /* Header içinde de yüksek z-index */
1853
+ }
1854
+
1855
+ .resources-header {
1856
+ position: relative;
1857
+ z-index: 10000; /* Header'ın kendisi de yüksek z-index'e sahip olsun */
1858
+ }
1859
+
1860
+ /* Cell Tooltip Styles */
1861
+ .cell-tooltip {
1862
+ position: fixed;
1863
+ z-index: 10002;
1864
+ pointer-events: none;
1865
+ }
1866
+
1867
+ .cell-tooltip-content {
1868
+ background: var(--bg-primary);
1869
+ backdrop-filter: var(--blur-md);
1870
+ -webkit-backdrop-filter: var(--blur-md);
1871
+ border: 1px solid var(--border-color);
1872
+ border-radius: 8px;
1873
+ padding: 8px 12px;
1874
+ color: var(--text-primary);
1875
+ font-size: 13px;
1876
+ box-shadow: var(--shadow-lg);
1877
+ white-space: nowrap;
1878
+ max-width: 300px;
1879
+ word-wrap: break-word;
1880
+ }
1881
+
1882
+ .cell-tooltip-arrow {
1883
+ position: absolute;
1884
+ top: -6px;
1885
+ left: 10px;
1886
+ width: 0;
1887
+ height: 0;
1888
+ border-left: 6px solid transparent;
1889
+ border-right: 6px solid transparent;
1890
+ border-bottom: 6px solid var(--bg-primary);
1891
+ filter: drop-shadow(0 -2px 4px rgba(0, 0, 0, 0.2));
1892
+ }
1893
+
1894
+ .dark-mode .cell-tooltip-arrow {
1895
+ border-bottom-color: var(--bg-primary);
1896
+ }
1897
+
1898
+ /* Event Management Styles */
1899
+ .timeline-event.selected {
1900
+ outline: 2px solid var(--accent-primary) !important;
1901
+ outline-offset: 2px;
1902
+ box-shadow: 0 0 0 4px var(--accent-light) !important;
1903
+ }
1904
+
1905
+ /* Modal Styles */
1906
+ .modal-overlay {
1907
+ position: fixed;
1908
+ top: 0;
1909
+ left: 0;
1910
+ right: 0;
1911
+ bottom: 0;
1912
+ background: rgba(0, 0, 0, 0.5);
1913
+ backdrop-filter: blur(4px);
1914
+ -webkit-backdrop-filter: blur(4px);
1915
+ display: flex;
1916
+ align-items: center;
1917
+ justify-content: center;
1918
+ z-index: 10003;
1919
+ }
1920
+
1921
+ .modal-content {
1922
+ background: var(--bg-primary);
1923
+ backdrop-filter: var(--blur-md);
1924
+ -webkit-backdrop-filter: var(--blur-md);
1925
+ border: 1px solid var(--border-color);
1926
+ border-radius: 16px;
1927
+ box-shadow: var(--shadow-lg);
1928
+ width: 90%;
1929
+ max-width: 500px;
1930
+ max-height: 90vh;
1931
+ overflow-y: auto;
1932
+ color: var(--text-primary);
1933
+ }
1934
+
1935
+ .modal-header {
1936
+ display: flex;
1937
+ justify-content: space-between;
1938
+ align-items: center;
1939
+ padding: 20px;
1940
+ border-bottom: 1px solid var(--border-color);
1941
+ }
1942
+
1943
+ .modal-header h2 {
1944
+ margin: 0;
1945
+ font-size: 20px;
1946
+ font-weight: 600;
1947
+ }
1948
+
1949
+ .modal-close-btn {
1950
+ background: none;
1951
+ border: none;
1952
+ font-size: 28px;
1953
+ color: var(--text-secondary);
1954
+ cursor: pointer;
1955
+ padding: 0;
1956
+ width: 32px;
1957
+ height: 32px;
1958
+ display: flex;
1959
+ align-items: center;
1960
+ justify-content: center;
1961
+ border-radius: 8px;
1962
+ transition: all 0.2s ease;
1963
+ }
1964
+
1965
+ .modal-close-btn:hover {
1966
+ background: var(--bg-hover);
1967
+ color: var(--text-primary);
1968
+ }
1969
+
1970
+ .modal-form {
1971
+ padding: 20px;
1972
+ }
1973
+
1974
+ .form-group {
1975
+ margin-bottom: 16px;
1976
+ }
1977
+
1978
+ .form-group label {
1979
+ display: block;
1980
+ margin-bottom: 8px;
1981
+ font-size: 14px;
1982
+ font-weight: 500;
1983
+ color: var(--text-primary);
1984
+ }
1985
+
1986
+ .form-group input,
1987
+ .form-group select {
1988
+ width: 100%;
1989
+ padding: 10px 12px;
1990
+ background: var(--bg-secondary);
1991
+ backdrop-filter: var(--blur-sm);
1992
+ -webkit-backdrop-filter: var(--blur-sm);
1993
+ border: 1px solid var(--border-color);
1994
+ border-radius: 8px;
1995
+ color: var(--text-primary);
1996
+ font-size: 14px;
1997
+ transition: all 0.2s ease;
1998
+ box-sizing: border-box;
1999
+ }
2000
+
2001
+ .form-group input:focus,
2002
+ .form-group select:focus {
2003
+ outline: none;
2004
+ border-color: var(--accent-primary);
2005
+ box-shadow: 0 0 0 2px var(--accent-light);
2006
+ }
2007
+
2008
+ .form-row {
2009
+ display: grid;
2010
+ grid-template-columns: 1fr 1fr;
2011
+ gap: 16px;
2012
+ }
2013
+
2014
+ .modal-actions {
2015
+ display: flex;
2016
+ justify-content: space-between;
2017
+ align-items: center;
2018
+ margin-top: 24px;
2019
+ padding-top: 20px;
2020
+ border-top: 1px solid var(--border-color);
2021
+ }
2022
+
2023
+ .btn-save,
2024
+ .btn-cancel,
2025
+ .btn-delete {
2026
+ padding: 10px 20px;
2027
+ border: none;
2028
+ border-radius: 8px;
2029
+ font-size: 14px;
2030
+ font-weight: 500;
2031
+ cursor: pointer;
2032
+ transition: all 0.2s ease;
2033
+ }
2034
+
2035
+ .btn-save {
2036
+ background: var(--accent-primary);
2037
+ color: white;
2038
+ margin-left: 8px;
2039
+ }
2040
+
2041
+ .btn-save:hover {
2042
+ background: var(--accent-hover);
2043
+ }
2044
+
2045
+ .btn-cancel {
2046
+ background: var(--bg-secondary);
2047
+ color: var(--text-primary);
2048
+ border: 1px solid var(--border-color);
2049
+ }
2050
+
2051
+ .btn-cancel:hover {
2052
+ background: var(--bg-hover);
2053
+ }
2054
+
2055
+ .btn-delete {
2056
+ background: rgba(220, 53, 69, 0.8);
2057
+ color: white;
2058
+ }
2059
+
2060
+ .btn-delete:hover {
2061
+ background: rgba(220, 53, 69, 1);
2062
+ }
2063
+
2064
+ /* ============================================
2065
+ Event Icons
2066
+ ============================================ */
2067
+ .event-icon {
2068
+ display: inline-flex !important;
2069
+ align-items: center;
2070
+ justify-content: center;
2071
+ font-size: 16px !important;
2072
+ line-height: 1;
2073
+ margin-right: 6px;
2074
+ flex-shrink: 0;
2075
+ animation: iconPulse 2s ease-in-out infinite;
2076
+ width: auto;
2077
+ height: auto;
2078
+ min-width: 18px;
2079
+ z-index: 15;
2080
+ position: relative;
2081
+ opacity: 1 !important;
2082
+ visibility: visible !important;
2083
+ pointer-events: none;
2084
+ }
2085
+
2086
+ .event-icon-balance-warning {
2087
+ color: #ffc107;
2088
+ filter: drop-shadow(0 0 2px rgba(255, 193, 7, 0.5));
2089
+ }
2090
+
2091
+ .event-icon-important-note {
2092
+ color: #17a2b8;
2093
+ filter: drop-shadow(0 0 2px rgba(23, 162, 184, 0.5));
2094
+ }
2095
+
2096
+ .event-icon-payment-pending {
2097
+ color: #ff9800;
2098
+ }
2099
+
2100
+ .event-icon-confirmed {
2101
+ color: #28a745;
2102
+ }
2103
+
2104
+ .event-icon-cancelled {
2105
+ color: #dc3545;
2106
+ }
2107
+
2108
+ .event-icon-pending {
2109
+ color: #6c757d;
2110
+ }
2111
+
2112
+ .event-icon-completed {
2113
+ color: #28a745;
2114
+ font-weight: bold;
2115
+ }
2116
+
2117
+ .event-icon-in-progress {
2118
+ color: #007bff;
2119
+ }
2120
+
2121
+ .event-icon-alert {
2122
+ color: #dc3545;
2123
+ animation: iconShake 0.5s ease-in-out infinite;
2124
+ }
2125
+
2126
+ .event-icon-info {
2127
+ color: #17a2b8;
2128
+ }
2129
+
2130
+ @keyframes iconPulse {
2131
+ 0%, 100% {
2132
+ opacity: 1;
2133
+ transform: scale(1);
2134
+ }
2135
+ 50% {
2136
+ opacity: 0.7;
2137
+ transform: scale(1.1);
2138
+ }
2139
+ }
2140
+
2141
+ @keyframes iconShake {
2142
+ 0%, 100% {
2143
+ transform: translateX(0);
2144
+ }
2145
+ 25% {
2146
+ transform: translateX(-2px);
2147
+ }
2148
+ 75% {
2149
+ transform: translateX(2px);
2150
+ }
2151
+ }
2152
+
2153
+ /* ============================================
2154
+ Event Badges
2155
+ ============================================ */
2156
+ .event-badge {
2157
+ position: absolute;
2158
+ display: inline-flex;
2159
+ align-items: center;
2160
+ justify-content: center;
2161
+ padding: 2px 6px;
2162
+ font-size: 9px;
2163
+ font-weight: 600;
2164
+ border-radius: 10px;
2165
+ white-space: nowrap;
2166
+ z-index: 30;
2167
+ animation: badgeFadeIn 0.3s ease-out;
2168
+ pointer-events: none;
2169
+ line-height: 1;
2170
+ max-width: 50px;
2171
+ overflow: hidden;
2172
+ text-overflow: ellipsis;
2173
+ top: -6px;
2174
+ }
2175
+
2176
+ .event-badge-top-right {
2177
+ top: -6px;
2178
+ right: -6px;
2179
+ }
2180
+
2181
+ .event-badge-top-left {
2182
+ top: -6px;
2183
+ left: -6px;
2184
+ }
2185
+
2186
+ .event-badge-bottom-right {
2187
+ bottom: -6px;
2188
+ right: -6px;
2189
+ }
2190
+
2191
+ .event-badge-bottom-left {
2192
+ bottom: -6px;
2193
+ left: -6px;
2194
+ }
2195
+
2196
+ .event-badge-default {
2197
+ background: var(--accent-primary);
2198
+ color: white;
2199
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
2200
+ }
2201
+
2202
+ .event-badge-important {
2203
+ background: linear-gradient(135deg, #ff6b6b, #ee5a6f);
2204
+ color: white;
2205
+ box-shadow: 0 2px 8px rgba(255, 107, 107, 0.4);
2206
+ animation: badgePulse 2s ease-in-out infinite;
2207
+ }
2208
+
2209
+ .event-badge-urgent {
2210
+ background: linear-gradient(135deg, #ffc107, #ff9800);
2211
+ color: #000;
2212
+ box-shadow: 0 2px 8px rgba(255, 193, 7, 0.4);
2213
+ animation: badgeShake 0.5s ease-in-out infinite;
2214
+ }
2215
+
2216
+ .event-badge-new {
2217
+ background: linear-gradient(135deg, #28a745, #20c997);
2218
+ color: white;
2219
+ box-shadow: 0 2px 8px rgba(40, 167, 69, 0.4);
2220
+ }
2221
+
2222
+ .event-badge-custom {
2223
+ background: var(--bg-secondary);
2224
+ color: var(--text-primary);
2225
+ border: 1px solid var(--border-color);
2226
+ }
2227
+
2228
+ @keyframes badgeFadeIn {
2229
+ from {
2230
+ opacity: 0;
2231
+ transform: scale(0.8);
2232
+ }
2233
+ to {
2234
+ opacity: 1;
2235
+ transform: scale(1);
2236
+ }
2237
+ }
2238
+
2239
+ @keyframes badgePulse {
2240
+ 0%, 100% {
2241
+ transform: scale(1);
2242
+ box-shadow: 0 2px 8px rgba(255, 107, 107, 0.4);
2243
+ }
2244
+ 50% {
2245
+ transform: scale(1.05);
2246
+ box-shadow: 0 4px 12px rgba(255, 107, 107, 0.6);
2247
+ }
2248
+ }
2249
+
2250
+ @keyframes badgeShake {
2251
+ 0%, 100% {
2252
+ transform: translateX(0) rotate(0deg);
2253
+ }
2254
+ 25% {
2255
+ transform: translateX(-2px) rotate(-2deg);
2256
+ }
2257
+ 75% {
2258
+ transform: translateX(2px) rotate(2deg);
2259
+ }
2260
+ }
2261
+
2262
+ /* ============================================
2263
+ Loading Spinner
2264
+ ============================================ */
2265
+ .loading-overlay {
2266
+ position: absolute;
2267
+ top: 0;
2268
+ left: 0;
2269
+ right: 0;
2270
+ bottom: 0;
2271
+ background: rgba(0, 0, 0, 0.3);
2272
+ backdrop-filter: blur(2px);
2273
+ -webkit-backdrop-filter: blur(2px);
2274
+ display: flex;
2275
+ align-items: center;
2276
+ justify-content: center;
2277
+ z-index: 10000;
2278
+ animation: overlayFadeIn 0.2s ease-out;
2279
+ }
2280
+
2281
+ .loading-spinner {
2282
+ display: inline-flex;
2283
+ align-items: center;
2284
+ justify-content: center;
2285
+ }
2286
+
2287
+ .loading-spinner-small {
2288
+ width: 20px;
2289
+ height: 20px;
2290
+ }
2291
+
2292
+ .loading-spinner-medium {
2293
+ width: 40px;
2294
+ height: 40px;
2295
+ }
2296
+
2297
+ .loading-spinner-large {
2298
+ width: 60px;
2299
+ height: 60px;
2300
+ }
2301
+
2302
+ /* Spinner Type: Circle */
2303
+ .spinner-circle {
2304
+ width: 100%;
2305
+ height: 100%;
2306
+ border: 3px solid var(--border-color);
2307
+ border-top-color: var(--accent-primary);
2308
+ border-radius: 50%;
2309
+ animation: spinnerRotate 1s linear infinite;
2310
+ }
2311
+
2312
+ /* Spinner Type: Dots */
2313
+ .dots-container {
2314
+ display: flex;
2315
+ gap: 4px;
2316
+ align-items: center;
2317
+ }
2318
+
2319
+ .dots-container span {
2320
+ width: 8px;
2321
+ height: 8px;
2322
+ border-radius: 50%;
2323
+ background: var(--accent-primary);
2324
+ animation: dotsBounce 1.4s ease-in-out infinite both;
2325
+ }
2326
+
2327
+ .dots-container span:nth-child(1) {
2328
+ animation-delay: -0.32s;
2329
+ }
2330
+
2331
+ .dots-container span:nth-child(2) {
2332
+ animation-delay: -0.16s;
2333
+ }
2334
+
2335
+ .dots-container span:nth-child(3) {
2336
+ animation-delay: 0s;
2337
+ }
2338
+
2339
+ /* Spinner Type: Pulse */
2340
+ .pulse-circle {
2341
+ width: 100%;
2342
+ height: 100%;
2343
+ border-radius: 50%;
2344
+ background: var(--accent-primary);
2345
+ animation: pulseScale 1.5s ease-in-out infinite;
2346
+ }
2347
+
2348
+ @keyframes spinnerRotate {
2349
+ to {
2350
+ transform: rotate(360deg);
2351
+ }
2352
+ }
2353
+
2354
+ @keyframes dotsBounce {
2355
+ 0%, 80%, 100% {
2356
+ transform: scale(0);
2357
+ opacity: 0.5;
2358
+ }
2359
+ 40% {
2360
+ transform: scale(1);
2361
+ opacity: 1;
2362
+ }
2363
+ }
2364
+
2365
+ @keyframes pulseScale {
2366
+ 0%, 100% {
2367
+ transform: scale(0.8);
2368
+ opacity: 0.5;
2369
+ }
2370
+ 50% {
2371
+ transform: scale(1);
2372
+ opacity: 1;
2373
+ }
2374
+ }
2375
+
2376
+ @keyframes overlayFadeIn {
2377
+ from {
2378
+ opacity: 0;
2379
+ }
2380
+ to {
2381
+ opacity: 1;
2382
+ }
2383
+ }
2384
+
2385
+ /* ============================================
2386
+ Event Animations
2387
+ ============================================ */
2388
+ .timeline-event {
2389
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
2390
+ }
2391
+
2392
+ .timeline-event:hover {
2393
+ transform: translateY(-2px);
2394
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
2395
+ }
2396
+
2397
+ .timeline-event.selected {
2398
+ animation: eventSelectPulse 0.3s ease-out;
2399
+ }
2400
+
2401
+ .timeline-event-enter {
2402
+ animation: eventFadeIn 0.4s ease-out;
2403
+ }
2404
+
2405
+ .timeline-event-exit {
2406
+ animation: eventFadeOut 0.3s ease-in;
2407
+ }
2408
+
2409
+ @keyframes eventFadeIn {
2410
+ from {
2411
+ opacity: 0;
2412
+ transform: scale(0.9) translateY(-10px);
2413
+ }
2414
+ to {
2415
+ opacity: 1;
2416
+ transform: scale(1) translateY(0);
2417
+ }
2418
+ }
2419
+
2420
+ @keyframes eventFadeOut {
2421
+ from {
2422
+ opacity: 1;
2423
+ transform: scale(1) translateY(0);
2424
+ }
2425
+ to {
2426
+ opacity: 0;
2427
+ transform: scale(0.9) translateY(-10px);
2428
+ }
2429
+ }
2430
+
2431
+ @keyframes eventSelectPulse {
2432
+ 0% {
2433
+ box-shadow: 0 0 0 0 var(--accent-primary);
2434
+ }
2435
+ 50% {
2436
+ box-shadow: 0 0 0 8px rgba(0, 123, 255, 0.1);
2437
+ }
2438
+ 100% {
2439
+ box-shadow: 0 0 0 0 var(--accent-primary);
2440
+ }
2441
+ }
2442
+
2443
+ /* Timeline Container Animations */
2444
+ .timeline-container {
2445
+ animation: containerFadeIn 0.5s ease-out;
2446
+ }
2447
+
2448
+ @keyframes containerFadeIn {
2449
+ from {
2450
+ opacity: 0;
2451
+ transform: translateY(10px);
2452
+ }
2453
+ to {
2454
+ opacity: 1;
2455
+ transform: translateY(0);
2456
+ }
2457
+ }
2458
+
2459
+ /* Cell Hover Animation */
2460
+ .timeline-cell {
2461
+ transition: background-color 0.2s ease, transform 0.2s ease;
2462
+ }
2463
+
2464
+ .timeline-cell:hover {
2465
+ transform: scale(1.02);
2466
+ }
2467
+
2468
+ /* Smooth Scroll Animation */
2469
+ .timeline-scrollable-container {
2470
+ scroll-behavior: smooth;
2471
+ }
2472
+
2473
+ /* Loading State for Timeline */
2474
+ .timeline-loading {
2475
+ position: relative;
2476
+ min-height: 200px;
2477
+ }
2478
+
2479
+ .timeline-loading::after {
2480
+ content: '';
2481
+ position: absolute;
2482
+ top: 50%;
2483
+ left: 50%;
2484
+ transform: translate(-50%, -50%);
2485
+ width: 40px;
2486
+ height: 40px;
2487
+ border: 3px solid var(--border-color);
2488
+ border-top-color: var(--accent-primary);
2489
+ border-radius: 50%;
2490
+ animation: spinnerRotate 1s linear infinite;
2491
+ }