Docfile commited on
Commit
d7f78d9
·
verified ·
1 Parent(s): 7b84ca6

Update api/static/css/style.css

Browse files
Files changed (1) hide show
  1. api/static/css/style.css +591 -481
api/static/css/style.css CHANGED
@@ -1,59 +1,92 @@
1
- /* Base Styles & Theme Variables */
 
 
2
  :root {
3
  /* Light theme */
4
  --background-color: #f8f9fa;
5
  --text-color: #212529;
6
- --primary-color: #3498db;
7
- --secondary-color: #2ecc71;
8
- --accent-color: #e74c3c;
9
- --muted-color: #95a5a6;
 
 
 
10
  --border-color: #dee2e6;
11
  --card-bg: #ffffff;
12
  --header-bg: #ffffff;
13
  --footer-bg: #f1f1f1;
14
- --shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
15
- --hover-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
16
- --block-bg: #f8f9fa;
17
- --block-border: 1px solid #dee2e6;
18
  --input-bg: #ffffff;
 
 
 
19
  --btn-primary-bg: var(--primary-color);
20
  --btn-primary-text: #ffffff;
21
- --btn-secondary-bg: #6c757d;
22
  --btn-secondary-text: #ffffff;
23
- --modal-bg: #ffffff;
24
- --sidebar-bg: #ffffff; /* Added for consistency */
25
- --sidebar-border: #dee2e6; /* Added */
26
- --sidebar-hover-bg: rgba(52, 152, 219, 0.1); /* Added */
 
 
 
 
 
 
27
  }
28
 
29
  [data-theme="dark"] {
30
  /* Dark theme */
31
  --background-color: #121212;
32
  --text-color: #e0e0e0;
33
- --primary-color: #3498db;
34
- --secondary-color: #2ecc71;
35
- --accent-color: #e74c3c;
 
 
 
36
  --muted-color: #95a5a6;
37
  --border-color: #333333;
38
  --card-bg: #1e1e1e;
39
  --header-bg: #1a1a1a;
40
  --footer-bg: #1a1a1a;
41
- --shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
42
- --hover-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
43
- --block-bg: #1e1e1e;
44
- --block-border: 1px solid #333333;
45
  --input-bg: #2c2c2c;
 
 
 
46
  --btn-primary-bg: var(--primary-color);
47
  --btn-primary-text: #ffffff;
48
- --btn-secondary-bg: #555555;
49
  --btn-secondary-text: #ffffff;
50
- --modal-bg: #1e1e1e;
51
- --sidebar-bg: #1e1e1e; /* Added for dark theme */
52
- --sidebar-border: #333333; /* Added */
53
- --sidebar-hover-bg: rgba(52, 152, 219, 0.2); /* Slightly different hover for dark */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  }
55
 
56
- /* General Styles */
57
  body {
58
  background-color: var(--background-color);
59
  color: var(--text-color);
@@ -74,156 +107,176 @@ a {
74
  }
75
 
76
  a:hover {
77
- color: #2980b9;
78
  text-decoration: underline;
79
  }
80
 
81
- /* Header Styles */
 
 
 
 
 
 
 
 
 
82
  .main-header {
83
  background-color: var(--header-bg);
84
- padding: 1rem 0;
85
  box-shadow: var(--shadow);
86
  position: sticky;
87
  top: 0;
88
- z-index: 1030; /* Ensure header is above general content but below modals/sidebars if needed */
89
  transition: background-color 0.3s ease, box-shadow 0.3s ease;
 
90
  }
91
-
92
- /* MODIFIED: Header Container Layout */
93
  .header-container {
94
  display: flex;
95
  align-items: center;
96
- /* Removed justify-content: space-between; to accommodate burger */
 
 
97
  }
98
-
99
- /* NEW: Burger Menu Button */
100
  .burger-menu-button {
101
  background: none;
102
  border: none;
103
- font-size: 1.8rem; /* Match site title size */
104
  color: var(--text-color);
105
  cursor: pointer;
106
  padding: 0.5rem;
107
- margin-right: 1rem; /* Space between burger and title */
108
  line-height: 1;
109
  transition: color 0.3s ease;
110
  }
111
-
112
  .burger-menu-button:hover {
113
  color: var(--primary-color);
114
  }
115
-
116
- /* MODIFIED: Site Title Layout */
117
  .site-title {
118
- flex-grow: 1; /* Allow title to take available space */
119
- text-align: center; /* Center title between burger and actions */
120
- font-size: 1.8rem;
121
- font-weight: bold;
122
- margin: 0; /* Remove default margins */
123
  }
124
-
125
  .site-title a {
126
- color: var(--text-color);
127
  text-decoration: none;
128
  }
129
-
130
- /* Header Actions (Theme toggle, Admin) - Ensure they stay aligned */
131
  .header-actions {
132
  display: flex;
133
  align-items: center;
134
- margin-left: 1rem; /* Space between title and actions */
135
  }
136
-
137
-
138
- /* Theme Toggle */
139
  .theme-toggle {
140
  background: none;
141
  border: none;
142
  cursor: pointer;
143
  color: var(--text-color);
144
- font-size: 1.5rem;
145
  padding: 0.5rem;
146
  transition: color 0.3s ease, transform 0.3s ease;
147
  }
148
-
149
  .theme-toggle:hover {
150
  color: var(--primary-color);
151
  transform: rotate(15deg);
152
  }
153
 
154
- /* Main Content */
155
  .main-content {
156
- flex: 1;
157
- padding: 2rem 0; /* Maintain padding for content area */
158
- /* Removed container adjustments, rely on bootstrap's container inside */
 
 
 
 
159
  }
160
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
161
 
162
- /* --- NEW: Sidebar Styles --- */
163
 
164
- /* Sidebar Overlay */
165
  .sidebar-overlay {
166
  position: fixed;
167
  top: 0;
168
  left: 0;
169
  width: 100%;
170
  height: 100%;
171
- background-color: rgba(0, 0, 0, 0.5); /* Semi-transparent black */
172
- z-index: 1040; /* Below sidebars, above content */
173
  opacity: 0;
174
  visibility: hidden;
175
  transition: opacity 0.3s ease-in-out, visibility 0.3s ease-in-out;
176
  }
177
-
178
  .sidebar-overlay.active {
179
  opacity: 1;
180
  visibility: visible;
181
  }
182
-
183
- /* Sidebar Base Styles */
184
  .sidebar {
185
  position: fixed;
186
  top: 0;
187
- left: 0; /* Both sidebars originate from the left */
188
- width: 300px; /* Default width, adjust as needed */
189
  height: 100%;
190
- background-color: var(--sidebar-bg); /* Use theme variable */
191
  box-shadow: var(--shadow);
192
- z-index: 1050; /* Above overlay */
193
  display: flex;
194
  flex-direction: column;
195
- transform: translateX(-100%); /* Initially hidden off-screen to the left */
196
  transition: transform 0.3s ease-in-out;
197
- border-right: 1px solid var(--sidebar-border); /* Use theme variable */
198
  }
199
-
200
  .sidebar.active {
201
- transform: translateX(0); /* Slide in from the left */
202
  }
203
-
204
- /* Sidebar Header */
205
  .sidebar-header {
206
  display: flex;
207
  justify-content: space-between;
208
  align-items: center;
209
  padding: 1rem 1.5rem;
210
- border-bottom: 1px solid var(--sidebar-border); /* Use theme variable */
211
- background-color: var(--header-bg); /* Optional: Match header background */
212
- flex-shrink: 0; /* Prevent header from shrinking */
213
  }
214
-
215
  .sidebar-header h4 {
216
  margin: 0;
217
  font-size: 1.2rem;
218
  font-weight: 600;
219
- flex-grow: 1; /* Allow title to take space */
220
- margin-left: 10px; /* Space after back button if present */
221
- overflow: hidden; /* Prevent long titles from breaking layout */
222
  white-space: nowrap;
223
  text-overflow: ellipsis;
224
  }
225
-
226
- /* Sidebar Back and Close Buttons */
227
  .sidebar-back-button,
228
  .close-sidebar-btn {
229
  background: none;
@@ -239,524 +292,581 @@ a:hover {
239
  .close-sidebar-btn:hover {
240
  color: var(--text-color);
241
  }
242
-
243
- /* Sidebar List (Matières & Sous-catégories) */
244
  .sidebar-list {
245
  list-style: none;
246
  padding: 0;
247
  margin: 0;
248
- flex-grow: 1; /* Take remaining vertical space */
249
- overflow-y: auto; /* Enable vertical scrolling for long lists */
250
- overflow-x: hidden; /* Prevent horizontal scrollbars */
251
  }
252
-
253
  .sidebar-list li {
254
  padding: 0.8rem 1.5rem;
255
  cursor: pointer;
256
- border-bottom: 1px solid var(--sidebar-border); /* Use theme variable */
257
  transition: background-color 0.2s ease;
258
  display: flex;
259
- justify-content: space-between; /* Push icon to the right */
260
  align-items: center;
261
- white-space: nowrap; /* Prevent text wrapping */
262
  }
263
-
264
  .sidebar-list li:last-child {
265
- border-bottom: none; /* Remove border from last item */
266
  }
267
-
268
  .sidebar-list li:hover {
269
- background-color: var(--sidebar-hover-bg); /* Use theme variable */
270
  }
271
-
272
  .sidebar-list li i.fa-chevron-right,
273
- .sidebar-list li i.fa-arrow-left { /* Style for icons inside list items */
274
  color: var(--muted-color);
275
  font-size: 0.9em;
276
- margin-left: 0.5rem; /* Space between text and icon */
277
  }
278
-
279
- /* Optional: Style for active/selected item in sidebar */
280
- .sidebar-list li.active {
281
  background-color: var(--primary-color);
282
  color: white;
 
283
  }
284
- .sidebar-list li.active i { /* Make icon white too */
285
  color: white;
286
  }
287
 
288
-
289
- /* --- End of Sidebar Styles --- */
290
-
291
-
292
- /* NEW: Initial Instructions Area */
293
- .initial-instructions {
294
- background-color: var(--card-bg);
295
- padding: 2rem;
296
- border-radius: 8px;
297
- box-shadow: var(--shadow);
298
- border: 1px solid var(--border-color);
299
- margin-top: 2rem; /* Adjust as needed */
300
- text-align: center; /* Center content */
301
- }
302
-
303
- /* --- Original Styles (with minor adjustments if needed) --- */
304
-
305
- /* Flash Messages Container */
306
  .flash-container {
307
- position: relative; /* Keep in normal flow */
308
- z-index: 100; /* Below header but above main content */
 
309
  }
310
 
311
- /* Subject Selection Cards (Original - No longer used on index, but might be elsewhere) */
312
- .subject-card {
313
- background-color: var(--card-bg);
314
- border-radius: 8px;
315
- padding: 1.5rem;
316
  margin-bottom: 1.5rem;
317
- box-shadow: var(--shadow);
318
- transition: box-shadow 0.3s ease, transform 0.3s ease;
319
- cursor: pointer;
320
- }
321
-
322
- .subject-card:hover {
323
- box-shadow: var(--hover-shadow);
324
- transform: translateY(-5px);
325
  }
326
-
327
- .subject-card h3 {
328
- margin-top: 0;
329
- margin-bottom: 1rem;
330
- font-size: 1.5rem;
331
  color: var(--text-color);
332
  }
333
-
334
- /* Subject Color-Coding */
335
- .subject-indicator {
 
 
 
 
 
 
336
  width: 100%;
337
- height: 8px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
338
  border-radius: 4px;
339
- margin-bottom: 1rem;
 
 
340
  }
341
-
342
- /* Content Blocks Styling (Used in Content Display Section) */
343
- .content-block {
344
- background-color: var(--block-bg);
345
- border-radius: 8px;
346
- padding: 1.5rem;
347
- margin-bottom: 2rem;
348
- box-shadow: var(--shadow);
349
- border: var(--block-border);
350
- transition: box-shadow 0.3s ease;
351
- overflow: hidden; /* Prevent content spill */
352
- /* border-left: 4px solid transparent; -> Now handled dynamically by JS or remove if not needed */
353
  }
354
-
355
- .content-block:hover {
356
- box-shadow: var(--hover-shadow);
357
  }
358
-
359
- .content-block-title {
360
- font-size: 1.4rem;
361
- font-weight: bold;
362
- margin-top: 0;
363
- margin-bottom: 1rem;
364
- color: var(--text-color);
365
- padding-bottom: 0.5rem;
366
- border-bottom: 2px solid var(--primary-color); /* Default color, JS might override */
367
  }
368
-
369
- .content-block-content {
370
- line-height: 1.7;
371
  }
372
-
373
- /* Image positioning styles */
374
- .block-with-image {
375
- display: flex;
376
- flex-wrap: wrap;
377
- gap: 1.5rem;
378
- align-items: flex-start;
379
  }
380
 
381
- .block-with-image.image-left { flex-direction: row; }
382
- .block-with-image.image-right { flex-direction: row-reverse; }
383
- .block-with-image.image-top { flex-direction: column; }
384
 
385
- .block-image-container {
386
- flex: 0 0 auto;
387
- max-width: 30%; /* Default max width for side images */
388
- margin-bottom: 1rem; /* Spacing below image if wrapped */
 
 
 
 
 
 
 
 
 
 
 
 
 
389
  }
390
-
391
- .block-with-image.image-top .block-image-container {
392
- max-width: 100%; /* Full width for top images */
393
- margin-bottom: 1.5rem;
 
 
 
 
 
 
 
 
394
  }
395
 
396
- .block-image {
397
- width: 100%;
398
- height: auto;
399
- border-radius: 6px;
400
- box-shadow: var(--shadow);
401
- display: block; /* Prevent extra space below image */
 
 
 
 
 
 
 
 
 
 
 
402
  }
403
 
404
- .block-content-container {
405
- flex: 1; /* Take remaining space */
406
- min-width: 60%; /* Ensure text has enough space on wider screens */
 
 
 
 
 
 
407
  }
408
 
409
- /* Category Selection UI (Original - No longer used on index) */
410
- .selection-container {
 
 
 
 
 
 
 
 
 
411
  background-color: var(--card-bg);
 
412
  border-radius: 8px;
 
 
 
 
 
 
 
 
 
 
 
413
  padding: 1.5rem;
414
- margin-bottom: 2rem;
415
  box-shadow: var(--shadow);
 
 
 
416
  }
417
-
418
- .selection-title {
419
- font-size: 1.2rem;
420
- font-weight: 600;
421
  margin-bottom: 1rem;
422
- padding-bottom: 0.5rem;
423
- border-bottom: 1px solid var(--border-color);
424
  }
425
-
426
- .selection-list {
427
  list-style: none;
428
  padding: 0;
429
  margin: 0;
430
  }
431
-
432
- .selection-item {
433
- padding: 0.5rem 0.8rem;
434
  margin-bottom: 0.5rem;
 
 
 
 
 
 
435
  border-radius: 4px;
436
- cursor: pointer;
437
- transition: background-color 0.3s ease;
438
  }
439
-
440
- .selection-item:hover {
441
- background-color: rgba(52, 152, 219, 0.1);
 
 
 
442
  }
443
-
444
- .selection-item.active {
 
 
 
 
 
 
 
445
  background-color: var(--primary-color);
446
  color: white;
 
447
  }
448
-
449
- /* Content Viewer (Container for title and blocks) */
450
- .content-viewer {
 
451
  background-color: var(--card-bg);
 
452
  border-radius: 8px;
453
- padding: 2rem;
 
454
  box-shadow: var(--shadow);
455
- margin-bottom: 2rem;
 
 
 
456
  }
457
-
458
- .content-title {
 
 
 
 
 
 
 
 
 
459
  font-size: 2rem;
460
- margin-top: 0;
461
- margin-bottom: 1.5rem;
462
- padding-bottom: 0.5rem;
463
- border-bottom: 2px solid var(--primary-color); /* Default color, JS might override */
464
  }
465
 
466
- /* Buttons */
467
- .btn {
468
- display: inline-block;
469
- font-weight: 500;
470
- text-align: center;
471
- white-space: nowrap;
472
- vertical-align: middle;
473
- user-select: none;
474
- border: 1px solid transparent;
475
- padding: 0.5rem 1rem;
476
- font-size: 1rem;
477
- line-height: 1.5;
478
- border-radius: 0.25rem;
479
- transition: all 0.15s ease-in-out;
480
- cursor: pointer;
481
  }
482
-
483
- .btn-primary {
484
- background-color: var(--btn-primary-bg);
485
- color: var(--btn-primary-text);
486
- border-color: var(--btn-primary-bg); /* Added for consistency */
 
 
 
487
  }
488
-
489
- .btn-primary:hover {
490
- background-color: #2980b9; /* Darken primary */
491
- border-color: #2980b9;
492
- color: white;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
493
  }
494
 
495
- .btn-secondary {
496
- background-color: var(--btn-secondary-bg);
497
- color: var(--btn-secondary-text);
498
- border-color: var(--btn-secondary-bg); /* Added for consistency */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
499
  }
500
 
501
- .btn-secondary:hover {
502
- background-color: #5a6268; /* Darken secondary */
503
- border-color: #5a6268;
504
- color: white;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
505
  }
506
 
507
- /* Form Elements */
508
- input, select, textarea {
509
- background-color: var(--input-bg);
 
510
  color: var(--text-color);
511
  border: 1px solid var(--border-color);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
512
  border-radius: 4px;
513
- padding: 0.75rem 1rem;
514
- width: 100%;
515
- transition: border-color 0.3s ease, box-shadow 0.3s ease;
516
  }
517
-
518
- input:focus, select:focus, textarea:focus {
519
  border-color: var(--primary-color);
520
- outline: none;
521
- box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.25);
522
  }
523
-
524
- label {
525
  display: block;
526
- margin-bottom: 0.5rem;
527
- font-weight: 500;
528
- }
529
-
530
- .form-group {
531
- margin-bottom: 1.5rem;
532
- }
533
-
534
- /* Footer */
535
- .main-footer {
536
- background-color: var(--footer-bg);
537
- padding: 2rem 0;
538
- box-shadow: 0 -2px 5px rgba(0, 0, 0, 0.05);
539
- margin-top: auto; /* Push footer to bottom */
540
- flex-shrink: 0; /* Prevent footer from shrinking */
541
  }
542
 
543
- .footer-content {
544
- display: flex;
545
- justify-content: space-between;
546
- flex-wrap: wrap;
547
- gap: 1rem; /* Add gap for wrapping */
 
 
548
  }
549
-
550
- .footer-links {
551
- list-style: none;
552
- padding: 0;
553
- margin: 0; /* Reset margin */
554
- display: flex;
555
- flex-wrap: wrap; /* Allow links to wrap */
556
- gap: 1.5rem;
557
  }
558
 
559
- .feedback-form {
560
- margin-top: 1rem;
561
- max-width: 400px; /* Limit width of feedback form */
562
- }
 
 
 
 
563
 
564
- .feedback-title {
565
- font-size: 1.2rem;
566
- margin-bottom: 0.75rem;
567
- }
568
 
569
- /* Admin specific styles (Keep if used on other pages) */
570
- .admin-container { /* ... Keep original ... */ }
571
- .admin-title { /* ... Keep original ... */ }
572
- .admin-sidebar { /* ... Keep original ... */ }
573
- .admin-nav { /* ... Keep original ... */ }
574
- .admin-nav-item { /* ... Keep original ... */ }
575
- .admin-nav-link { /* ... Keep original ... */ }
576
- .admin-nav-link i { /* ... Keep original ... */ }
577
- .admin-card { /* ... Keep original ... */ }
578
- .admin-card-title { /* ... Keep original ... */ }
579
- .admin-stat { /* ... Keep original ... */ }
580
-
581
- /* Editor styles (Keep if used on other pages) */
582
- .editor-container { /* ... Keep original ... */ }
583
- .block-editor { /* ... Keep original ... */ }
584
- .block-editor-header { /* ... Keep original ... */ }
585
- .block-editor-title { /* ... Keep original ... */ }
586
- .block-editor-actions { /* ... Keep original ... */ }
587
- .block-handle { /* ... Keep original ... */ }
588
- .image-preview { /* ... Keep original ... */ }
589
- .image-gallery { /* ... Keep original ... */ }
590
- .gallery-item { /* ... Keep original ... */ }
591
- .gallery-image { /* ... Keep original ... */ }
592
- .gallery-image-select { /* ... Keep original ... */ }
593
-
594
- /* Login screen (Keep if used) */
595
- .login-container { /* ... Keep original ... */ }
596
- .login-logo { /* ... Keep original ... */ }
597
- .login-title { /* ... Keep original ... */ }
598
-
599
- /* Responsive design adjustments */
600
  @media (max-width: 992px) {
601
- /* No change needed here if using Bootstrap's container correctly */
602
- }
603
-
604
- @media (max-width: 768px) {
605
- /* Content Block Images: Stack vertically */
606
- .block-with-image {
607
- flex-direction: column !important; /* Force column layout */
608
  }
609
- .block-image-container {
610
- max-width: 100%; /* Image takes full width */
611
- margin-bottom: 1.5rem; /* Space below image */
612
- }
613
- .block-content-container {
614
- min-width: 100%; /* Text takes full width */
615
  }
 
616
 
617
- /* Sidebar width adjustment */
618
  .sidebar {
619
- width: 85%; /* Make sidebar wider on mobile */
620
- max-width: 320px; /* Optional: Set a max width */
621
  }
622
-
623
- /* Optional: Adjust header layout on smaller screens */
624
  .site-title {
625
- font-size: 1.5rem; /* Slightly smaller title */
626
- text-align: left; /* Align title next to burger */
627
- margin-left: 0.5rem; /* Adjust spacing */
628
  }
629
-
630
  .header-actions {
631
  margin-left: auto; /* Push actions to the right */
632
  }
 
 
 
 
 
 
 
 
 
633
  }
634
 
635
-
636
  @media (max-width: 576px) {
637
- .subject-card { /* Style for cards if used elsewhere */
638
- padding: 1rem;
 
 
 
639
  }
640
-
641
- .content-viewer {
642
- padding: 1.5rem; /* Less padding inside content area */
643
  }
644
-
645
- .admin-container {
 
 
646
  padding: 1.5rem;
647
  }
648
-
649
- .content-title {
650
- font-size: 1.6rem; /* Smaller main title */
651
  }
652
-
653
  .footer-content {
654
- flex-direction: column; /* Stack footer sections */
655
  align-items: center;
656
  text-align: center;
657
  }
658
- .footer-links {
659
- justify-content: center; /* Center footer links */
660
- margin-top: 0.5rem;
661
- }
662
  .feedback-form {
663
- width: 100%; /* Full width feedback form */
664
  margin-top: 1.5rem;
665
  }
 
 
 
666
  }
667
 
668
- /* Animation keyframes (Keep original) */
669
- @keyframes fadeIn {
670
- from { opacity: 0; }
671
- to { opacity: 1; }
672
- }
673
-
674
- .fade-in {
675
- animation: fadeIn 0.5s ease-in forwards; /* Added forwards to keep state */
676
- }
677
-
678
- @keyframes slideInUp {
679
- from {
680
- transform: translateY(50px);
681
- opacity: 0;
682
- }
683
- to {
684
- transform: translateY(0);
685
- opacity: 1;
686
- }
687
- }
688
-
689
- .slide-in-up {
690
- animation: slideInUp 0.5s ease-out forwards; /* Added forwards */
691
- }
692
-
693
- /* Utility classes (Keep original) */
694
- .text-center { text-align: center; }
695
- .mb-1 { margin-bottom: 0.5rem !important; }
696
- .mb-2 { margin-bottom: 1rem !important; }
697
- .mb-3 { margin-bottom: 1.5rem !important; }
698
- .mb-4 { margin-bottom: 2rem !important; }
699
- .mt-1 { margin-top: 0.5rem !important; }
700
- .mt-2 { margin-top: 1rem !important; }
701
- .mt-3 { margin-top: 1.5rem !important; }
702
- .mt-4 { margin-top: 2rem !important; }
703
- .ms-2 { margin-left: 0.5rem !important; } /* Bootstrap utility */
704
- .float-end { float: right !important; } /* Bootstrap utility */
705
- .d-none { display: none !important; } /* Bootstrap utility */
706
-
707
-
708
- /* Alert Styles (Keep original) */
709
- .alert {
710
- padding: 1rem;
711
- margin-bottom: 1rem;
712
- border-radius: 4px;
713
- border: 1px solid transparent; /* Base border */
714
- }
715
-
716
- .alert-dismissible .btn-close {
717
- padding: 1.25rem 1rem; /* Adjust close button padding */
718
- }
719
-
720
- .alert-success {
721
- color: #0f5132;
722
- background-color: #d1e7dd;
723
- border-color: #badbcc;
724
- }
725
- [data-theme="dark"] .alert-success {
726
- color: #75b798;
727
- background-color: #192c23;
728
- border-color: #254134;
729
- }
730
-
731
- .alert-danger {
732
- color: #842029;
733
- background-color: #f8d7da;
734
- border-color: #f5c2c7;
735
- }
736
- [data-theme="dark"] .alert-danger {
737
- color: #ea868f;
738
- background-color: #341a1d;
739
- border-color: #50272c;
740
- }
741
-
742
- .alert-warning {
743
- color: #664d03;
744
- background-color: #fff3cd;
745
- border-color: #ffecb5;
746
- }
747
- [data-theme="dark"] .alert-warning {
748
- color: #ffda6a;
749
- background-color: #33270a;
750
- border-color: #4d3b0f;
751
- }
752
 
753
- .alert-info {
754
- color: #055160;
755
- background-color: #cff4fc;
756
- border-color: #b6effb;
757
- }
758
- [data-theme="dark"] .alert-info {
759
- color: #6edff6;
760
- background-color: #0f2d36;
761
- border-color: #164350;
762
- }
 
1
+ /* static/css/style.css */
2
+
3
+ /* --- Base Styles & Theme Variables --- */
4
  :root {
5
  /* Light theme */
6
  --background-color: #f8f9fa;
7
  --text-color: #212529;
8
+ --primary-color: #3498db; /* Blue */
9
+ --secondary-color: #6c757d; /* Gray */
10
+ --success-color: #2ecc71; /* Green */
11
+ --danger-color: #e74c3c; /* Red */
12
+ --warning-color: #f39c12; /* Yellow/Orange */
13
+ --info-color: #3498db; /* Blue (can be different) */
14
+ --muted-color: #6c757d; /* Gray */
15
  --border-color: #dee2e6;
16
  --card-bg: #ffffff;
17
  --header-bg: #ffffff;
18
  --footer-bg: #f1f1f1;
19
+ --sidebar-bg: #ffffff;
20
+ --sidebar-border: #dee2e6;
21
+ --sidebar-hover-bg: rgba(52, 152, 219, 0.1);
22
+ --modal-bg: #ffffff;
23
  --input-bg: #ffffff;
24
+ --input-disabled-bg: #e9ecef;
25
+ --block-bg: #fdfdff; /* Slightly off-white for blocks */
26
+ --block-border: #e9ecef;
27
  --btn-primary-bg: var(--primary-color);
28
  --btn-primary-text: #ffffff;
29
+ --btn-secondary-bg: var(--secondary-color);
30
  --btn-secondary-text: #ffffff;
31
+ --shadow: 0 2px 5px rgba(0, 0, 0, 0.08);
32
+ --hover-shadow: 0 5px 15px rgba(0, 0, 0, 0.12);
33
+ --ql-toolbar-bg: var(--card-bg);
34
+ --ql-editor-bg: var(--input-bg);
35
+ --ql-border-color: var(--border-color);
36
+ --ql-stroke-color: var(--text-color);
37
+ --ql-fill-color: var(--text-color);
38
+ --ql-picker-color: var(--text-color);
39
+ --code-bg: #e9ecef;
40
+ --code-text: #212529;
41
  }
42
 
43
  [data-theme="dark"] {
44
  /* Dark theme */
45
  --background-color: #121212;
46
  --text-color: #e0e0e0;
47
+ --primary-color: #3498db; /* Keep primary blue */
48
+ --secondary-color: #555555;
49
+ --success-color: #2ecc71;
50
+ --danger-color: #e74c3c;
51
+ --warning-color: #f39c12;
52
+ --info-color: #3498db;
53
  --muted-color: #95a5a6;
54
  --border-color: #333333;
55
  --card-bg: #1e1e1e;
56
  --header-bg: #1a1a1a;
57
  --footer-bg: #1a1a1a;
58
+ --sidebar-bg: #1e1e1e;
59
+ --sidebar-border: #333333;
60
+ --sidebar-hover-bg: rgba(52, 152, 219, 0.15);
61
+ --modal-bg: #2c2c2c; /* Slightly lighter than card for modals */
62
  --input-bg: #2c2c2c;
63
+ --input-disabled-bg: #3a3a3a;
64
+ --block-bg: #1a1a1a; /* Darker for blocks */
65
+ --block-border: #333333;
66
  --btn-primary-bg: var(--primary-color);
67
  --btn-primary-text: #ffffff;
68
+ --btn-secondary-bg: var(--secondary-color);
69
  --btn-secondary-text: #ffffff;
70
+ --shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
71
+ --hover-shadow: 0 5px 20px rgba(0, 0, 0, 0.35);
72
+ --ql-toolbar-bg: var(--card-bg);
73
+ --ql-editor-bg: var(--input-bg);
74
+ --ql-border-color: var(--border-color);
75
+ --ql-stroke-color: var(--text-color);
76
+ --ql-fill-color: var(--text-color);
77
+ --ql-picker-color: var(--text-color);
78
+ --code-bg: #2c2c2c;
79
+ --code-text: #e0e0e0;
80
+ }
81
+
82
+ /* --- General Styles --- */
83
+ html {
84
+ box-sizing: border-box;
85
+ }
86
+ *, *:before, *:after {
87
+ box-sizing: inherit;
88
  }
89
 
 
90
  body {
91
  background-color: var(--background-color);
92
  color: var(--text-color);
 
107
  }
108
 
109
  a:hover {
110
+ color: #2980b9; /* Slightly darker blue */
111
  text-decoration: underline;
112
  }
113
 
114
+ h1, h2, h3, h4, h5, h6 {
115
+ color: var(--text-color);
116
+ margin-top: 0;
117
+ margin-bottom: 0.75rem;
118
+ font-weight: 500;
119
+ }
120
+
121
+ /* --- Layout Components --- */
122
+
123
+ /* Header */
124
  .main-header {
125
  background-color: var(--header-bg);
126
+ padding: 0.8rem 0;
127
  box-shadow: var(--shadow);
128
  position: sticky;
129
  top: 0;
130
+ z-index: 1030;
131
  transition: background-color 0.3s ease, box-shadow 0.3s ease;
132
+ border-bottom: 1px solid var(--border-color);
133
  }
 
 
134
  .header-container {
135
  display: flex;
136
  align-items: center;
137
+ max-width: 1200px; /* Limit width on large screens */
138
+ margin: 0 auto;
139
+ padding: 0 15px;
140
  }
 
 
141
  .burger-menu-button {
142
  background: none;
143
  border: none;
144
+ font-size: 1.6rem;
145
  color: var(--text-color);
146
  cursor: pointer;
147
  padding: 0.5rem;
148
+ margin-right: 1rem;
149
  line-height: 1;
150
  transition: color 0.3s ease;
151
  }
 
152
  .burger-menu-button:hover {
153
  color: var(--primary-color);
154
  }
 
 
155
  .site-title {
156
+ flex-grow: 1;
157
+ text-align: center;
158
+ font-size: 1.7rem;
159
+ font-weight: 700;
160
+ margin: 0;
161
  }
 
162
  .site-title a {
163
+ color: inherit; /* Inherit text color from parent */
164
  text-decoration: none;
165
  }
 
 
166
  .header-actions {
167
  display: flex;
168
  align-items: center;
169
+ margin-left: 1rem;
170
  }
 
 
 
171
  .theme-toggle {
172
  background: none;
173
  border: none;
174
  cursor: pointer;
175
  color: var(--text-color);
176
+ font-size: 1.4rem;
177
  padding: 0.5rem;
178
  transition: color 0.3s ease, transform 0.3s ease;
179
  }
 
180
  .theme-toggle:hover {
181
  color: var(--primary-color);
182
  transform: rotate(15deg);
183
  }
184
 
185
+ /* Main Content Area */
186
  .main-content {
187
+ flex: 1; /* Take up remaining vertical space */
188
+ padding: 2rem 0;
189
+ }
190
+ .container { /* Use Bootstrap's container within main-content */
191
+ max-width: 1200px;
192
+ margin: 0 auto;
193
+ padding: 0 15px;
194
  }
195
 
196
+ /* Footer */
197
+ .main-footer {
198
+ background-color: var(--footer-bg);
199
+ padding: 1.5rem 0;
200
+ box-shadow: 0 -2px 5px rgba(0, 0, 0, 0.05);
201
+ margin-top: auto; /* Push footer to bottom */
202
+ flex-shrink: 0;
203
+ border-top: 1px solid var(--border-color);
204
+ }
205
+ .footer-content {
206
+ max-width: 1200px;
207
+ margin: 0 auto;
208
+ padding: 0 15px;
209
+ display: flex;
210
+ justify-content: space-between;
211
+ align-items: center;
212
+ flex-wrap: wrap;
213
+ gap: 1rem;
214
+ }
215
+ .feedback-form {
216
+ max-width: 400px;
217
+ flex-grow: 1; /* Allow it to take space if needed */
218
+ }
219
+ .feedback-title {
220
+ font-size: 1.1rem;
221
+ font-weight: 600;
222
+ margin-bottom: 0.5rem;
223
+ }
224
 
 
225
 
226
+ /* --- Sidebars --- */
227
  .sidebar-overlay {
228
  position: fixed;
229
  top: 0;
230
  left: 0;
231
  width: 100%;
232
  height: 100%;
233
+ background-color: rgba(0, 0, 0, 0.6);
234
+ z-index: 1040;
235
  opacity: 0;
236
  visibility: hidden;
237
  transition: opacity 0.3s ease-in-out, visibility 0.3s ease-in-out;
238
  }
 
239
  .sidebar-overlay.active {
240
  opacity: 1;
241
  visibility: visible;
242
  }
 
 
243
  .sidebar {
244
  position: fixed;
245
  top: 0;
246
+ left: 0;
247
+ width: 300px;
248
  height: 100%;
249
+ background-color: var(--sidebar-bg);
250
  box-shadow: var(--shadow);
251
+ z-index: 1050;
252
  display: flex;
253
  flex-direction: column;
254
+ transform: translateX(-100%);
255
  transition: transform 0.3s ease-in-out;
256
+ border-right: 1px solid var(--sidebar-border);
257
  }
 
258
  .sidebar.active {
259
+ transform: translateX(0);
260
  }
 
 
261
  .sidebar-header {
262
  display: flex;
263
  justify-content: space-between;
264
  align-items: center;
265
  padding: 1rem 1.5rem;
266
+ border-bottom: 1px solid var(--sidebar-border);
267
+ background-color: var(--header-bg);
268
+ flex-shrink: 0;
269
  }
 
270
  .sidebar-header h4 {
271
  margin: 0;
272
  font-size: 1.2rem;
273
  font-weight: 600;
274
+ flex-grow: 1;
275
+ margin-left: 10px;
276
+ overflow: hidden;
277
  white-space: nowrap;
278
  text-overflow: ellipsis;
279
  }
 
 
280
  .sidebar-back-button,
281
  .close-sidebar-btn {
282
  background: none;
 
292
  .close-sidebar-btn:hover {
293
  color: var(--text-color);
294
  }
 
 
295
  .sidebar-list {
296
  list-style: none;
297
  padding: 0;
298
  margin: 0;
299
+ flex-grow: 1;
300
+ overflow-y: auto;
301
+ overflow-x: hidden;
302
  }
 
303
  .sidebar-list li {
304
  padding: 0.8rem 1.5rem;
305
  cursor: pointer;
306
+ border-bottom: 1px solid var(--sidebar-border);
307
  transition: background-color 0.2s ease;
308
  display: flex;
309
+ justify-content: space-between;
310
  align-items: center;
311
+ white-space: nowrap;
312
  }
 
313
  .sidebar-list li:last-child {
314
+ border-bottom: none;
315
  }
 
316
  .sidebar-list li:hover {
317
+ background-color: var(--sidebar-hover-bg);
318
  }
 
319
  .sidebar-list li i.fa-chevron-right,
320
+ .sidebar-list li i.fa-arrow-left {
321
  color: var(--muted-color);
322
  font-size: 0.9em;
323
+ margin-left: 0.5rem;
324
  }
325
+ .sidebar-list li.active { /* Style for selected item */
 
 
326
  background-color: var(--primary-color);
327
  color: white;
328
+ border-bottom-color: var(--primary-color); /* Match background */
329
  }
330
+ .sidebar-list li.active i {
331
  color: white;
332
  }
333
 
334
+ /* --- Flash Messages --- */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
335
  .flash-container {
336
+ position: relative; /* Keep in flow */
337
+ z-index: 1000; /* Below header/sidebar */
338
+ margin-bottom: 1.5rem; /* Space below messages */
339
  }
340
 
341
+ /* --- Form Elements --- */
342
+ .form-group {
 
 
 
343
  margin-bottom: 1.5rem;
 
 
 
 
 
 
 
 
344
  }
345
+ label {
346
+ display: block;
347
+ margin-bottom: 0.5rem;
348
+ font-weight: 500;
 
349
  color: var(--text-color);
350
  }
351
+ input[type="text"],
352
+ input[type="email"],
353
+ input[type="password"],
354
+ input[type="number"],
355
+ input[type="file"],
356
+ input[type="color"],
357
+ select,
358
+ textarea {
359
+ display: block;
360
  width: 100%;
361
+ padding: 0.65rem 0.9rem;
362
+ font-size: 1rem;
363
+ font-weight: 400;
364
+ line-height: 1.5;
365
+ color: var(--text-color);
366
+ background-color: var(--input-bg);
367
+ background-clip: padding-box;
368
+ border: 1px solid var(--border-color);
369
+ appearance: none; /* For select */
370
+ border-radius: 0.25rem;
371
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
372
+ }
373
+ input[type="file"] {
374
+ padding: 0.5rem 0.9rem; /* Slightly less padding for file input */
375
+ }
376
+ input[type="color"] {
377
+ padding: 0.2rem 0.4rem; /* Smaller padding for color input */
378
+ height: calc(1.5em + 1.3rem + 2px); /* Match height of other inputs */
379
+ vertical-align: middle;
380
+ width: auto; /* Allow color picker to size itself */
381
+ display: inline-block; /* Align with preview */
382
+ }
383
+ .color-preview { /* Style generated preview span */
384
+ display: inline-block;
385
+ width: 24px;
386
+ height: 24px;
387
  border-radius: 4px;
388
+ margin-left: 10px;
389
+ vertical-align: middle;
390
+ border: 1px solid var(--border-color);
391
  }
392
+ input:focus, select:focus, textarea:focus {
393
+ border-color: var(--primary-color);
394
+ outline: 0;
395
+ box-shadow: 0 0 0 0.2rem rgba(var(--primary-color-rgb, 52, 152, 219), 0.25); /* Define --primary-color-rgb if needed or hardcode */
 
 
 
 
 
 
 
 
396
  }
397
+ textarea {
398
+ min-height: 120px;
399
+ resize: vertical;
400
  }
401
+ select {
402
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
403
+ background-repeat: no-repeat;
404
+ background-position: right 0.75rem center;
405
+ background-size: 16px 12px;
 
 
 
 
406
  }
407
+ [data-theme="dark"] select {
408
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
 
409
  }
410
+ input:disabled, select:disabled, textarea:disabled {
411
+ background-color: var(--input-disabled-bg);
412
+ opacity: 0.7;
413
+ cursor: not-allowed;
 
 
 
414
  }
415
 
 
 
 
416
 
417
+ /* --- Buttons --- */
418
+ .btn {
419
+ display: inline-block;
420
+ font-weight: 500;
421
+ line-height: 1.5;
422
+ color: #212529; /* Default text color, overridden by specifics */
423
+ text-align: center;
424
+ text-decoration: none;
425
+ vertical-align: middle;
426
+ cursor: pointer;
427
+ user-select: none;
428
+ background-color: transparent;
429
+ border: 1px solid transparent;
430
+ padding: 0.65rem 1.2rem;
431
+ font-size: 1rem;
432
+ border-radius: 0.25rem;
433
+ transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
434
  }
435
+ .btn i, .btn svg { /* Icon spacing */
436
+ margin-right: 0.5rem;
437
+ }
438
+ .btn-sm {
439
+ padding: 0.25rem 0.5rem;
440
+ font-size: 0.875rem;
441
+ border-radius: 0.2rem;
442
+ }
443
+ .btn-lg {
444
+ padding: 0.8rem 1.5rem;
445
+ font-size: 1.25rem;
446
+ border-radius: 0.3rem;
447
  }
448
 
449
+ .btn-primary {
450
+ color: var(--btn-primary-text);
451
+ background-color: var(--btn-primary-bg);
452
+ border-color: var(--btn-primary-bg);
453
+ }
454
+ .btn-primary:hover {
455
+ color: var(--btn-primary-text);
456
+ background-color: #2980b9; /* Darker primary */
457
+ border-color: #2573a7;
458
+ }
459
+ .btn-primary:focus {
460
+ box-shadow: 0 0 0 0.2rem rgba(var(--primary-color-rgb, 52, 152, 219), 0.5);
461
+ }
462
+ .btn-primary:disabled {
463
+ background-color: var(--btn-primary-bg);
464
+ border-color: var(--btn-primary-bg);
465
+ opacity: 0.65;
466
  }
467
 
468
+ .btn-secondary {
469
+ color: var(--btn-secondary-text);
470
+ background-color: var(--btn-secondary-bg);
471
+ border-color: var(--btn-secondary-bg);
472
+ }
473
+ .btn-secondary:hover {
474
+ color: var(--btn-secondary-text);
475
+ background-color: #5a6268; /* Darker secondary */
476
+ border-color: #545b62;
477
  }
478
 
479
+ .btn-success { color: #fff; background-color: var(--success-color); border-color: var(--success-color); }
480
+ .btn-success:hover { background-color: #25a25a; border-color: #239955; }
481
+ .btn-danger { color: #fff; background-color: var(--danger-color); border-color: var(--danger-color); }
482
+ .btn-danger:hover { background-color: #c82333; border-color: #bd2130; }
483
+ .btn-warning { color: #212529; background-color: var(--warning-color); border-color: var(--warning-color); }
484
+ .btn-warning:hover { color: #212529; background-color: #e0a800; border-color: #d39e00; }
485
+ .btn-info { color: #fff; background-color: var(--info-color); border-color: var(--info-color); }
486
+ .btn-info:hover { background-color: #2980b9; border-color: #2573a7; }
487
+
488
+ /* --- Admin Section Specific Styles --- */
489
+ .admin-container {
490
  background-color: var(--card-bg);
491
+ padding: 2rem;
492
  border-radius: 8px;
493
+ box-shadow: var(--shadow);
494
+ border: 1px solid var(--border-color);
495
+ }
496
+ .admin-title {
497
+ font-size: 1.8rem;
498
+ margin-bottom: 1.5rem;
499
+ padding-bottom: 0.75rem;
500
+ border-bottom: 1px solid var(--border-color);
501
+ }
502
+ .admin-sidebar {
503
+ background-color: var(--card-bg);
504
  padding: 1.5rem;
505
+ border-radius: 8px;
506
  box-shadow: var(--shadow);
507
+ border: 1px solid var(--border-color);
508
+ position: sticky; /* Keep sidebar visible */
509
+ top: 80px; /* Adjust based on header height */
510
  }
511
+ .admin-sidebar h3 {
 
 
 
512
  margin-bottom: 1rem;
513
+ font-size: 1.4rem;
 
514
  }
515
+ .admin-nav {
 
516
  list-style: none;
517
  padding: 0;
518
  margin: 0;
519
  }
520
+ .admin-nav-item {
 
 
521
  margin-bottom: 0.5rem;
522
+ }
523
+ .admin-nav-link {
524
+ display: block;
525
+ padding: 0.75rem 1rem;
526
+ color: var(--text-color);
527
+ text-decoration: none;
528
  border-radius: 4px;
529
+ transition: background-color 0.2s ease, color 0.2s ease;
 
530
  }
531
+ .admin-nav-link i {
532
+ margin-right: 0.8rem;
533
+ width: 20px; /* Align icons */
534
+ text-align: center;
535
+ color: var(--muted-color);
536
+ transition: color 0.2s ease;
537
  }
538
+ .admin-nav-link:hover {
539
+ background-color: var(--sidebar-hover-bg);
540
+ color: var(--primary-color);
541
+ text-decoration: none;
542
+ }
543
+ .admin-nav-link:hover i {
544
+ color: var(--primary-color);
545
+ }
546
+ .admin-nav-link.active {
547
  background-color: var(--primary-color);
548
  color: white;
549
+ font-weight: 500;
550
  }
551
+ .admin-nav-link.active i {
552
+ color: white;
553
+ }
554
+ .admin-card { /* Dashboard cards */
555
  background-color: var(--card-bg);
556
+ border: 1px solid var(--border-color);
557
  border-radius: 8px;
558
+ padding: 1.5rem;
559
+ margin-bottom: 1.5rem;
560
  box-shadow: var(--shadow);
561
+ transition: transform 0.3s ease, box-shadow 0.3s ease;
562
+ text-decoration: none;
563
+ color: inherit;
564
+ display: block;
565
  }
566
+ .admin-card:hover {
567
+ transform: translateY(-5px);
568
+ box-shadow: var(--hover-shadow);
569
+ text-decoration: none;
570
+ color: inherit;
571
+ }
572
+ .admin-card-title {
573
+ font-size: 1.3rem;
574
+ margin-bottom: 1rem;
575
+ }
576
+ .admin-stat {
577
  font-size: 2rem;
578
+ font-weight: bold;
579
+ color: var(--primary-color);
 
 
580
  }
581
 
582
+ /* --- Block Editor Styles (`edit_texte.html`) --- */
583
+ #blocks-container {
584
+ margin-top: 1.5rem;
 
 
 
 
 
 
 
 
 
 
 
 
585
  }
586
+ .block-editor {
587
+ background-color: var(--block-bg);
588
+ padding: 20px;
589
+ border: 1px solid var(--block-border);
590
+ border-radius: 8px;
591
+ box-shadow: var(--shadow);
592
+ position: relative; /* For potential absolute elements inside */
593
+ transition: all 0.3s ease; /* For ghost effect */
594
  }
595
+ .block-editor-header {
596
+ display: flex;
597
+ justify-content: space-between;
598
+ align-items: center;
599
+ margin-bottom: 15px;
600
+ padding-bottom: 10px;
601
+ border-bottom: 1px solid var(--border-color);
602
+ }
603
+ .block-handle {
604
+ cursor: move;
605
+ color: var(--muted-color);
606
+ padding-right: 15px; /* More space next to handle */
607
+ font-size: 1.2rem;
608
+ line-height: 1;
609
+ }
610
+ .block-handle:hover {
611
+ color: var(--primary-color);
612
+ }
613
+ .block-editor-title {
614
+ margin: 0;
615
+ font-size: 1.2rem;
616
+ font-weight: 600;
617
+ flex-grow: 1;
618
+ }
619
+ .block-editor-actions .btn {
620
+ padding: 0.3rem 0.6rem; /* Smaller padding for action buttons */
621
+ }
622
+ .delete-block-btn i {
623
+ pointer-events: none; /* Ensure clicking icon triggers button */
624
+ margin-right: 0; /* No extra margin for icon-only buttons */
625
+ }
626
+ .block-ghost { /* Style for SortableJS ghost */
627
+ opacity: 0.5;
628
+ background: var(--sidebar-hover-bg);
629
+ border: 2px dashed var(--primary-color);
630
  }
631
 
632
+ /* Quill Editor Integration */
633
+ .block-content-editor {
634
+ /* The container div Quill uses */
635
+ border-radius: 4px; /* Match form controls */
636
+ }
637
+ .ql-toolbar.ql-snow {
638
+ border: 1px solid var(--ql-border-color);
639
+ border-bottom: 0;
640
+ border-radius: 4px 4px 0 0;
641
+ background-color: var(--ql-toolbar-bg);
642
+ padding: 8px;
643
+ }
644
+ .ql-container.ql-snow {
645
+ border: 1px solid var(--ql-border-color);
646
+ border-radius: 0 0 4px 4px;
647
+ background-color: var(--ql-editor-bg);
648
+ color: var(--text-color);
649
+ min-height: 150px; /* Ensure minimum editor height */
650
+ font-size: 1rem; /* Match base font size */
651
+ line-height: 1.6; /* Match base line height */
652
+ }
653
+ /* Quill Theme Colors */
654
+ .ql-snow .ql-stroke { stroke: var(--ql-stroke-color); }
655
+ .ql-snow .ql-fill { fill: var(--ql-fill-color); }
656
+ .ql-snow .ql-picker-label, .ql-snow .ql-picker-options .ql-picker-item { color: var(--ql-picker-color); }
657
+ /* Quill Code Block */
658
+ .ql-snow .ql-syntax {
659
+ background-color: var(--code-bg);
660
+ color: var(--code-text);
661
+ padding: 0.5em 1em;
662
+ border-radius: 3px;
663
+ white-space: pre-wrap;
664
+ font-family: monospace;
665
+ }
666
+ /* Quill Focus Outline */
667
+ .ql-container.ql-snow:focus-within {
668
+ border-color: var(--primary-color);
669
+ box-shadow: 0 0 0 0.2rem rgba(var(--primary-color-rgb, 52, 152, 219), 0.25);
670
  }
671
 
672
+ /* Block Image Styles */
673
+ .block-image-container {
674
+ margin-bottom: 10px;
675
+ margin-top: 10px;
676
+ }
677
+ .image-preview {
678
+ max-height: 150px;
679
+ max-width: 100%; /* Prevent overflow */
680
+ object-fit: contain;
681
+ border-radius: 4px;
682
+ border: 1px solid var(--border-color);
683
+ background-color: var(--background-color);
684
+ display: block; /* Remove extra space below */
685
+ }
686
+ #upload-image-preview { /* Preview in upload form */
687
+ max-height: 100px;
688
+ margin-bottom: 10px;
689
+ display: block;
690
+ border: 1px solid var(--border-color);
691
+ border-radius: 4px;
692
+ background-color: var(--background-color);
693
+ }
694
+ .image-position-controls {
695
+ transition: opacity 0.3s ease;
696
+ }
697
+ .image-position-controls.d-none {
698
+ opacity: 0;
699
+ height: 0;
700
+ overflow: hidden;
701
+ margin-top: 0 !important;
702
+ padding-top: 0 !important;
703
+ padding-bottom: 0 !important;
704
+ border: none !important;
705
  }
706
 
707
+
708
+ /* --- Image Gallery Modal --- */
709
+ .modal-content {
710
+ background-color: var(--modal-bg);
711
  color: var(--text-color);
712
  border: 1px solid var(--border-color);
713
+ }
714
+ .modal-header {
715
+ border-bottom: 1px solid var(--border-color);
716
+ }
717
+ .modal-footer {
718
+ border-top: 1px solid var(--border-color);
719
+ }
720
+ .btn-close { /* Style Bootstrap's close button */
721
+ filter: var(--text-color) == '#e0e0e0' ? invert(1) grayscale(100%) brightness(200%) : none;
722
+ }
723
+ .gallery-item {
724
+ text-align: center;
725
+ margin-bottom: 1rem;
726
+ }
727
+ .gallery-image {
728
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
729
+ cursor: pointer;
730
+ border: 2px solid transparent; /* Border shown on hover */
731
+ padding: 3px;
732
  border-radius: 4px;
733
+ max-width: 100%;
734
+ height: auto;
735
+ background-color: var(--background-color); /* Background behind transparent images */
736
  }
737
+ .gallery-image:hover {
738
+ transform: scale(1.05);
739
  border-color: var(--primary-color);
740
+ box-shadow: var(--hover-shadow);
 
741
  }
742
+ .gallery-item small {
 
743
  display: block;
744
+ margin-top: 0.5rem;
745
+ font-size: 0.8rem;
746
+ color: var(--muted-color);
747
+ word-wrap: break-word;
748
+ line-height: 1.3;
 
 
 
 
 
 
 
 
 
 
749
  }
750
 
751
+ /* --- Alerts --- */
752
+ .alert {
753
+ padding: 1rem;
754
+ margin-bottom: 1rem;
755
+ border-radius: 4px;
756
+ border: 1px solid transparent;
757
+ position: relative;
758
  }
759
+ .alert-dismissible .btn-close {
760
+ position: absolute;
761
+ top: 0;
762
+ right: 0;
763
+ z-index: 2;
764
+ padding: 1.25rem 1rem;
 
 
765
  }
766
 
767
+ .alert-success { color: #0f5132; background-color: #d1e7dd; border-color: #badbcc; }
768
+ [data-theme="dark"] .alert-success { color: #75b798; background-color: #192c23; border-color: #254134; }
769
+ .alert-danger { color: #842029; background-color: #f8d7da; border-color: #f5c2c7; }
770
+ [data-theme="dark"] .alert-danger { color: #ea868f; background-color: #341a1d; border-color: #50272c; }
771
+ .alert-warning { color: #664d03; background-color: #fff3cd; border-color: #ffecb5; }
772
+ [data-theme="dark"] .alert-warning { color: #ffda6a; background-color: #33270a; border-color: #4d3b0f; }
773
+ .alert-info { color: #055160; background-color: #cff4fc; border-color: #b6effb; }
774
+ [data-theme="dark"] .alert-info { color: #6edff6; background-color: #0f2d36; border-color: #164350; }
775
 
 
 
 
 
776
 
777
+ /* --- Utility Classes --- */
778
+ .text-center { text-align: center !important; }
779
+ .mb-1 { margin-bottom: 0.5rem !important; }
780
+ .mb-2 { margin-bottom: 1rem !important; }
781
+ .mb-3 { margin-bottom: 1.5rem !important; }
782
+ .mb-4 { margin-bottom: 2rem !important; }
783
+ .mt-1 { margin-top: 0.5rem !important; }
784
+ .mt-2 { margin-top: 1rem !important; }
785
+ .mt-3 { margin-top: 1.5rem !important; }
786
+ .mt-4 { margin-top: 2rem !important; }
787
+ .ml-2 { margin-left: 0.5rem !important; } /* Used on remove image button */
788
+ .float-end { float: right !important; }
789
+ .d-none { display: none !important; }
790
+ .d-block { display: block !important; }
791
+ .d-flex { display: flex !important; }
792
+ .align-items-center { align-items: center !important; }
793
+ .justify-content-between { justify-content: space-between !important; }
794
+ .img-fluid { max-width: 100%; height: auto; }
795
+ .text-muted { color: var(--muted-color) !important; }
796
+
797
+ /* --- Responsiveness --- */
 
 
 
 
 
 
 
 
 
 
798
  @media (max-width: 992px) {
799
+ .admin-sidebar {
800
+ position: static; /* Unstick sidebar */
801
+ margin-bottom: 2rem;
 
 
 
 
802
  }
803
+ .row > .col-md-3, .row > .col-md-9 { /* Reset Bootstrap columns */
804
+ width: 100%;
805
+ flex: 0 0 auto;
 
 
 
806
  }
807
+ }
808
 
809
+ @media (max-width: 768px) {
810
  .sidebar {
811
+ width: 85%;
812
+ max-width: 320px;
813
  }
 
 
814
  .site-title {
815
+ font-size: 1.5rem;
816
+ text-align: left;
817
+ margin-left: 0.5rem;
818
  }
 
819
  .header-actions {
820
  margin-left: auto; /* Push actions to the right */
821
  }
822
+ .admin-title {
823
+ font-size: 1.6rem;
824
+ }
825
+ .btn-lg { /* Make large buttons slightly smaller */
826
+ padding: 0.7rem 1.3rem;
827
+ font-size: 1.1rem;
828
+ }
829
+ /* Adjust modal size for smaller screens if XL is too big */
830
+ .modal-xl { max-width: 95%; }
831
  }
832
 
 
833
  @media (max-width: 576px) {
834
+ .header-container, .container, .footer-content {
835
+ padding: 0 10px; /* Less padding on very small screens */
836
+ }
837
+ .site-title {
838
+ font-size: 1.3rem;
839
  }
840
+ .burger-menu-button {
841
+ font-size: 1.4rem;
842
+ margin-right: 0.5rem;
843
  }
844
+ .theme-toggle {
845
+ font-size: 1.2rem;
846
+ }
847
+ .admin-container, .admin-sidebar {
848
  padding: 1.5rem;
849
  }
850
+ .block-editor {
851
+ padding: 15px;
 
852
  }
 
853
  .footer-content {
854
+ flex-direction: column;
855
  align-items: center;
856
  text-align: center;
857
  }
 
 
 
 
858
  .feedback-form {
859
+ width: 100%;
860
  margin-top: 1.5rem;
861
  }
862
+ /* Further reduce modal width */
863
+ .modal-xl { max-width: 100%; margin: 0.5rem; }
864
+ .modal-dialog { margin: 0.5rem; }
865
  }
866
 
867
+ /* --- Animations (Optional) --- */
868
+ @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
869
+ .fade-in { animation: fadeIn 0.5s ease-in forwards; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
870
 
871
+ @keyframes slideInUp { from { transform: translateY(30px); opacity: 0; } to { transform: translateY(0); opacity: 1; } }
872
+ .slide-in-up { animation: slideInUp 0.5s ease-out forwards; }