owasp-td-jekyll 2.0.2 → 2.1.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.
data/assets/css/style.css CHANGED
@@ -19,6 +19,13 @@
19
19
  --td-navbar-link-hover-color: var(--td-white);
20
20
  --td-navbar-toggler-border: rgba(255, 255, 255, 0.1);
21
21
  --td-theme-toggle-hover-bg: rgba(255, 255, 255, 0.12);
22
+ --td-mobile-menu-bg: rgba(255, 255, 255, 0.98);
23
+ --td-mobile-menu-border: rgba(51, 51, 51, 0.12);
24
+ --td-mobile-menu-hover-bg: rgba(233, 84, 32, 0.08);
25
+ --td-mobile-menu-section-bg: rgba(51, 51, 51, 0.04);
26
+ --td-mobile-menu-text-color: var(--td-text-color);
27
+ --td-mobile-menu-muted-color: rgba(51, 51, 51, 0.62);
28
+ --td-mobile-menu-active-bg: rgba(233, 84, 32, 0.14);
22
29
  --bs-primary: var(--td-orange);
23
30
  --bs-primary-rgb: 233, 84, 32;
24
31
  --bs-secondary: var(--td-gray);
@@ -65,6 +72,13 @@
65
72
  --td-navbar-link-hover-color: #ffffff;
66
73
  --td-navbar-toggler-border: rgba(245, 241, 234, 0.2);
67
74
  --td-theme-toggle-hover-bg: rgba(216, 114, 72, 0.2);
75
+ --td-mobile-menu-bg: #222931;
76
+ --td-mobile-menu-border: rgba(245, 241, 234, 0.08);
77
+ --td-mobile-menu-hover-bg: rgba(245, 241, 234, 0.06);
78
+ --td-mobile-menu-section-bg: rgba(0, 0, 0, 0.14);
79
+ --td-mobile-menu-text-color: var(--td-white);
80
+ --td-mobile-menu-muted-color: rgba(245, 241, 234, 0.68);
81
+ --td-mobile-menu-active-bg: rgba(216, 114, 72, 0.2);
68
82
  --bs-primary: var(--td-orange);
69
83
  --bs-primary-rgb: 216, 114, 72;
70
84
  --bs-secondary: var(--td-gray);
@@ -192,25 +206,257 @@ a:hover {
192
206
  line-height: 1;
193
207
  }
194
208
 
195
- #navbarToggler a {
209
+ .td-mobile-theme-toggle {
196
210
  color: var(--td-white);
197
- padding: 18px;
211
+ padding: 0.375rem 0.5rem;
212
+ margin-left: 0.5rem;
198
213
  }
199
214
 
200
- @media (min-width: 992px) {
201
- #navbarToggler a:hover {
202
- background-color: var(--td-dark-orange);
203
- text-decoration: none;
204
- }
215
+ .td-mobile-theme-toggle:hover,
216
+ .td-mobile-theme-toggle:focus,
217
+ .td-mobile-theme-toggle:focus-visible {
218
+ color: var(--td-white);
219
+ }
220
+
221
+ .td-mobile-menu {
222
+ width: 100%;
223
+ margin-top: 0.65rem;
224
+ padding: 0.7rem;
225
+ background-color: rgba(var(--bs-body-bg-rgb), 0.94);
226
+ border: 1px solid rgba(var(--bs-body-color-rgb), 0.08);
227
+ border-radius: 0.5rem;
228
+ box-shadow: 0 0.9rem 2.2rem rgba(0, 0, 0, 0.18);
229
+ }
230
+
231
+ .td-mobile-menu-panel {
232
+ background-color: var(--td-mobile-menu-bg);
233
+ border: 1px solid var(--td-mobile-menu-border);
234
+ border-radius: 0.35rem;
235
+ overflow: hidden;
236
+ }
237
+
238
+ .td-mobile-menu-link,
239
+ .td-mobile-menu-group-label {
240
+ display: flex;
241
+ align-items: center;
242
+ gap: 0.85rem;
243
+ width: 100%;
244
+ padding: 0.9rem 1rem;
245
+ color: var(--td-mobile-menu-text-color);
246
+ text-align: left;
247
+ text-decoration: none;
248
+ border-bottom: 1px solid var(--td-mobile-menu-border);
249
+ }
250
+
251
+ .td-mobile-menu-button {
252
+ background: transparent;
253
+ border-top: 0;
254
+ border-left: 0;
255
+ border-right: 0;
256
+ }
257
+
258
+ .td-mobile-menu-link:hover,
259
+ .td-mobile-menu-link:focus-visible,
260
+ .td-mobile-menu-button:hover,
261
+ .td-mobile-menu-button:focus-visible {
262
+ color: var(--td-mobile-menu-text-color);
263
+ background-color: var(--td-mobile-menu-hover-bg);
264
+ text-decoration: none;
265
+ }
266
+
267
+ .td-mobile-menu-link.active {
268
+ background-color: var(--td-mobile-menu-active-bg);
269
+ }
270
+
271
+ .td-mobile-menu-group-label.active {
272
+ background-color: var(--td-mobile-menu-active-bg);
273
+ color: var(--td-mobile-menu-text-color);
274
+ }
275
+
276
+ .td-mobile-menu-icon {
277
+ width: 1.15rem;
278
+ flex-shrink: 0;
279
+ text-align: center;
280
+ color: inherit;
281
+ }
282
+
283
+ .td-mobile-menu-text {
284
+ flex: 1 1 auto;
285
+ min-width: 0;
286
+ }
287
+
288
+ .td-mobile-menu-caret {
289
+ flex-shrink: 0;
290
+ color: var(--td-mobile-menu-muted-color);
291
+ transition: transform 0.2s ease;
292
+ }
293
+
294
+ .td-mobile-menu-meta {
295
+ flex-shrink: 0;
296
+ color: var(--td-mobile-menu-muted-color);
297
+ }
298
+
299
+ .td-mobile-menu-toggle[aria-expanded="true"] .td-mobile-menu-caret {
300
+ transform: rotate(180deg);
301
+ }
302
+
303
+ .td-mobile-menu-section {
304
+ background-color: var(--td-mobile-menu-section-bg);
305
+ }
306
+
307
+ .td-mobile-menu-group-label {
308
+ font-size: 0.74rem;
309
+ font-weight: 700;
310
+ letter-spacing: 0.06em;
311
+ text-transform: uppercase;
312
+ color: var(--td-mobile-menu-muted-color);
313
+ }
314
+
315
+ .td-mobile-menu-sublink {
316
+ padding-left: 1.75rem;
317
+ }
318
+
319
+ .td-mobile-menu-childlink {
320
+ padding-left: 3rem;
321
+ font-size: 0.92rem;
322
+ color: var(--td-mobile-menu-text-color);
323
+ }
324
+
325
+ .td-mobile-menu-section > :last-child,
326
+ .td-mobile-menu-panel > :last-child {
327
+ border-bottom: 0;
328
+ }
329
+
330
+ .td-search-modal .modal-content {
331
+ background-color: var(--td-surface-bg);
332
+ color: var(--bs-body-color);
333
+ border: 1px solid var(--bs-border-color);
334
+ }
335
+
336
+ .td-search-modal .modal-header {
337
+ border-bottom-color: var(--bs-border-color);
338
+ }
339
+
340
+ .td-search-modal .modal-body {
341
+ padding: 1rem;
342
+ }
343
+
344
+ .td-search-input-wrap {
345
+ position: relative;
346
+ }
347
+
348
+ .td-search-input-icon {
349
+ position: absolute;
350
+ top: 50%;
351
+ left: 0.85rem;
352
+ transform: translateY(-50%);
353
+ color: var(--bs-secondary-color, #6c757d);
354
+ pointer-events: none;
355
+ }
356
+
357
+ .td-search-input {
358
+ padding-left: 2.4rem;
359
+ color: var(--bs-body-color);
360
+ background-color: var(--bs-body-bg);
361
+ border: 1px solid var(--bs-border-color);
362
+ }
363
+
364
+ .td-search-input::placeholder {
365
+ color: var(--bs-secondary-color, #6c757d);
366
+ }
367
+
368
+ .td-search-input:focus {
369
+ color: var(--bs-body-color);
370
+ background-color: var(--bs-body-bg);
371
+ border-color: rgba(var(--bs-primary-rgb), 0.5);
372
+ box-shadow: 0 0 0 0.2rem rgba(var(--bs-primary-rgb), 0.18);
373
+ }
374
+
375
+ .td-search-results {
376
+ margin-top: 1rem;
377
+ max-height: min(28rem, calc(100vh - 16rem));
378
+ overflow-y: auto;
379
+ background-color: var(--td-surface-bg);
380
+ border: 1px solid var(--bs-border-color);
381
+ border-radius: 0.35rem;
382
+ box-shadow: 0 0.75rem 2rem rgba(0, 0, 0, 0.18);
383
+ }
384
+
385
+ .td-search-results[hidden] {
386
+ display: none;
387
+ }
388
+
389
+ .td-search-result {
390
+ display: block;
391
+ padding: 1rem 1.1rem;
392
+ color: inherit;
393
+ border-bottom: 1px solid var(--bs-border-color);
394
+ text-decoration: none;
395
+ }
396
+
397
+ .td-search-result:last-child,
398
+ .td-search-status:last-child {
399
+ border-bottom: 0;
400
+ }
401
+
402
+ .td-search-result:hover,
403
+ .td-search-result:focus {
404
+ background-color: var(--td-surface-alt-bg);
405
+ text-decoration: none;
406
+ }
407
+
408
+ .td-search-result.is-active {
409
+ background-color: var(--td-surface-alt-bg);
410
+ outline: 0;
411
+ box-shadow: inset 0 0 0 2px rgba(var(--bs-primary-rgb), 0.2);
412
+ }
413
+
414
+ .td-search-result-title {
415
+ display: block;
416
+ color: var(--bs-emphasis-color);
417
+ font-weight: 600;
418
+ }
419
+
420
+ .td-search-result-path {
421
+ display: block;
422
+ margin-bottom: 0.3rem;
423
+ color: var(--bs-secondary-color, #6c757d);
424
+ font-size: 0.82rem;
425
+ letter-spacing: 0.02em;
426
+ text-transform: uppercase;
427
+ }
428
+
429
+ .td-search-result-meta,
430
+ .td-search-result-snippet,
431
+ .td-search-status {
432
+ display: block;
433
+ font-size: 0.9rem;
434
+ }
435
+
436
+ .td-search-result-snippet {
437
+ margin-top: 0.25rem;
438
+ color: var(--bs-body-color);
439
+ line-height: 1.5;
440
+ max-height: 4.5em;
441
+ overflow: hidden;
442
+ display: -webkit-box;
443
+ -webkit-line-clamp: 3;
444
+ -webkit-box-orient: vertical;
445
+ }
446
+
447
+ .td-search-status {
448
+ padding: 0.85rem 1rem;
449
+ color: var(--bs-secondary-color, #6c757d);
205
450
  }
206
451
 
207
452
  #body-row {
453
+ flex: 1 1 auto;
208
454
  margin-left: 0;
209
455
  margin-right: 0;
210
456
  }
211
457
 
212
458
  #sidebar-container {
213
- min-height: 100vh;
459
+ min-height: 100%;
214
460
  background-color: var(--td-black);
215
461
  padding: 0;
216
462
  }
@@ -226,7 +472,8 @@ a:hover {
226
472
 
227
473
  /* Menu item */
228
474
  #sidebar-container .list-group a {
229
- height: 50px;
475
+ min-height: 50px;
476
+ height: auto;
230
477
  color: var(--td-white);
231
478
  }
232
479
 
@@ -235,6 +482,12 @@ a:hover {
235
482
  border-color: rgba(51, 51, 51, 0.125);
236
483
  }
237
484
 
485
+ .sidebar-nav-item {
486
+ list-style: none;
487
+ margin: 0;
488
+ padding: 0;
489
+ }
490
+
238
491
  #sidebar-container .list-group-item.bg-dark {
239
492
  border-width: 0 1px 1px;
240
493
  border-style: solid;
@@ -249,9 +502,15 @@ a:hover {
249
502
  text-decoration: none;
250
503
  }
251
504
 
505
+ #sidebar-container button.list-group-item {
506
+ text-align: left;
507
+ border-radius: 0;
508
+ }
509
+
252
510
  /* Submenu item */
253
511
  #sidebar-container .list-group .sidebar-submenu a {
254
- height: 45px;
512
+ min-height: 45px;
513
+ height: auto;
255
514
  padding-left: 30px;
256
515
  }
257
516
 
@@ -259,6 +518,23 @@ a:hover {
259
518
  font-size: 0.9rem;
260
519
  }
261
520
 
521
+ #sidebar-container .sidebar-link-label {
522
+ flex: 1 1 auto;
523
+ min-width: 0;
524
+ white-space: normal;
525
+ overflow-wrap: anywhere;
526
+ line-height: 1.35;
527
+ }
528
+
529
+ #sidebar-container .sidebar-submenu .sidebar-link-label {
530
+ display: block;
531
+ }
532
+
533
+ #sidebar-container .submenu-icon {
534
+ flex-shrink: 0;
535
+ align-self: center;
536
+ }
537
+
262
538
  /* Separators */
263
539
  .sidebar-separator-title {
264
540
  background-color: var(--td-black);
@@ -305,6 +581,9 @@ a:hover {
305
581
  }
306
582
 
307
583
  body {
584
+ min-height: 100vh;
585
+ display: flex;
586
+ flex-direction: column;
308
587
  font-family: "Ubuntu", Tahoma, "Helvetica Neue", Helvetica, Arial, sans-serif;
309
588
  font-size: 0.9rem;
310
589
  font-weight: 400;
@@ -523,6 +802,16 @@ table > tbody > tr:nth-of-type(odd) > * {
523
802
  --bs-dropdown-header-color: var(--bs-secondary-color);
524
803
  }
525
804
 
805
+ :root[data-theme="dark"] .td-search-modal .modal-content {
806
+ background-color: #1b2229;
807
+ }
808
+
809
+ :root[data-theme="dark"] .td-search-input:focus {
810
+ background-color: var(--bs-body-bg);
811
+ border-color: rgba(255, 157, 116, 0.45);
812
+ box-shadow: 0 0 0 0.2rem rgba(255, 157, 116, 0.18);
813
+ }
814
+
526
815
  .text-left {
527
816
  text-align: left !important;
528
817
  }
@@ -563,3 +852,44 @@ table > tbody > tr:nth-of-type(odd) > * {
563
852
  max-width: 1140px;
564
853
  }
565
854
  }
855
+
856
+ @media (max-width: 767.98px) {
857
+ .navbar {
858
+ position: relative;
859
+ }
860
+
861
+ .navbar-toggler.d-md-none {
862
+ margin-right: 0.75rem;
863
+ flex-shrink: 0;
864
+ }
865
+
866
+ .navbar .navbar-brand {
867
+ flex: 1 1 auto;
868
+ min-width: 0;
869
+ margin-right: 0;
870
+ white-space: nowrap;
871
+ overflow: hidden;
872
+ text-overflow: ellipsis;
873
+ }
874
+
875
+ .navbar-collapse {
876
+ position: absolute;
877
+ top: 100%;
878
+ left: 0;
879
+ right: 0;
880
+ z-index: 1020;
881
+ padding: 0 0.9rem 0.9rem;
882
+ }
883
+
884
+ #body-row {
885
+ margin-top: 0.625rem;
886
+ }
887
+
888
+ .td-mobile-theme-toggle .theme-toggle-text {
889
+ display: none;
890
+ }
891
+
892
+ .td-search-modal .modal-dialog {
893
+ margin: 0.75rem;
894
+ }
895
+ }
@@ -0,0 +1,49 @@
1
+ document.addEventListener('DOMContentLoaded', () => {
2
+ const mobileMediaQuery = window.matchMedia('(max-width: 767.98px)');
3
+ const navbar = document.querySelector('.navbar');
4
+ const navbarCollapse = document.getElementById('navbarNavDropdown');
5
+
6
+ if (!navbar || !navbarCollapse || !window.bootstrap || !window.bootstrap.Collapse) {
7
+ return;
8
+ }
9
+
10
+ const collapseInstance = window.bootstrap.Collapse.getOrCreateInstance(navbarCollapse, { toggle: false });
11
+
12
+ function hideMobileNav() {
13
+ if (mobileMediaQuery.matches && navbarCollapse.classList.contains('show')) {
14
+ collapseInstance.hide();
15
+ }
16
+ }
17
+
18
+ document.addEventListener('click', (event) => {
19
+ if (!mobileMediaQuery.matches || !navbarCollapse.classList.contains('show')) {
20
+ return;
21
+ }
22
+
23
+ if (!navbar.contains(event.target)) {
24
+ hideMobileNav();
25
+ }
26
+ });
27
+
28
+ navbarCollapse.querySelectorAll('.td-mobile-menu-link').forEach((element) => {
29
+ element.addEventListener('click', () => {
30
+ if (element.classList.contains('td-mobile-menu-toggle')) {
31
+ return;
32
+ }
33
+
34
+ hideMobileNav();
35
+ });
36
+ });
37
+
38
+ function handleViewportChange(event) {
39
+ if (!event.matches) {
40
+ collapseInstance.hide();
41
+ }
42
+ }
43
+
44
+ if (typeof mobileMediaQuery.addEventListener === 'function') {
45
+ mobileMediaQuery.addEventListener('change', handleViewportChange);
46
+ } else if (typeof mobileMediaQuery.addListener === 'function') {
47
+ mobileMediaQuery.addListener(handleViewportChange);
48
+ }
49
+ });