@govtechsg/oobee 0.10.76 → 0.10.78-alpha1

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 (137) hide show
  1. package/.github/workflows/publish.yml +8 -1
  2. package/INTEGRATION.md +50 -3
  3. package/dist/cli.js +252 -0
  4. package/dist/combine.js +221 -0
  5. package/dist/constants/cliFunctions.js +306 -0
  6. package/dist/constants/common.js +1669 -0
  7. package/dist/constants/constants.js +913 -0
  8. package/dist/constants/errorMeta.json +319 -0
  9. package/dist/constants/itemTypeDescription.js +7 -0
  10. package/dist/constants/oobeeAi.js +121 -0
  11. package/dist/constants/questions.js +151 -0
  12. package/dist/constants/sampleData.js +176 -0
  13. package/dist/crawlers/commonCrawlerFunc.js +428 -0
  14. package/dist/crawlers/crawlDomain.js +613 -0
  15. package/dist/crawlers/crawlIntelligentSitemap.js +135 -0
  16. package/dist/crawlers/crawlLocalFile.js +151 -0
  17. package/dist/crawlers/crawlSitemap.js +303 -0
  18. package/dist/crawlers/custom/escapeCssSelector.js +10 -0
  19. package/dist/crawlers/custom/evaluateAltText.js +11 -0
  20. package/dist/crawlers/custom/extractAndGradeText.js +44 -0
  21. package/dist/crawlers/custom/extractText.js +27 -0
  22. package/dist/crawlers/custom/findElementByCssSelector.js +36 -0
  23. package/dist/crawlers/custom/flagUnlabelledClickableElements.js +963 -0
  24. package/dist/crawlers/custom/framesCheck.js +37 -0
  25. package/dist/crawlers/custom/getAxeConfiguration.js +111 -0
  26. package/dist/crawlers/custom/gradeReadability.js +23 -0
  27. package/dist/crawlers/custom/utils.js +1024 -0
  28. package/dist/crawlers/custom/xPathToCss.js +147 -0
  29. package/dist/crawlers/guards/urlGuard.js +71 -0
  30. package/dist/crawlers/pdfScanFunc.js +276 -0
  31. package/dist/crawlers/runCustom.js +89 -0
  32. package/dist/exclusions.txt +7 -0
  33. package/dist/generateHtmlReport.js +144 -0
  34. package/dist/index.js +62 -0
  35. package/dist/logs.js +84 -0
  36. package/dist/mergeAxeResults.js +1588 -0
  37. package/dist/npmIndex.js +640 -0
  38. package/dist/proxyService.js +360 -0
  39. package/dist/runGenerateJustHtmlReport.js +16 -0
  40. package/dist/screenshotFunc/htmlScreenshotFunc.js +355 -0
  41. package/dist/screenshotFunc/pdfScreenshotFunc.js +645 -0
  42. package/dist/services/s3Uploader.js +127 -0
  43. package/dist/static/ejs/partials/components/allIssues/AllIssues.ejs +9 -0
  44. package/dist/static/ejs/partials/components/allIssues/CategoryBadges.ejs +82 -0
  45. package/dist/static/ejs/partials/components/allIssues/FilterBar.ejs +33 -0
  46. package/dist/static/ejs/partials/components/allIssues/IssuesTable.ejs +41 -0
  47. package/dist/static/ejs/partials/components/header/SiteInfo.ejs +119 -0
  48. package/dist/static/ejs/partials/components/header/aboutScanModal/AboutScanModal.ejs +15 -0
  49. package/dist/static/ejs/partials/components/header/aboutScanModal/ScanConfiguration.ejs +44 -0
  50. package/dist/static/ejs/partials/components/header/aboutScanModal/ScanDetails.ejs +142 -0
  51. package/dist/static/ejs/partials/components/prioritiseIssues/IssueDetailCard.ejs +36 -0
  52. package/dist/static/ejs/partials/components/prioritiseIssues/PrioritiseIssues.ejs +47 -0
  53. package/dist/static/ejs/partials/components/ruleModal/ruleOffcanvas.ejs +196 -0
  54. package/dist/static/ejs/partials/components/scannedPagesSegmentedTabs.ejs +48 -0
  55. package/dist/static/ejs/partials/components/screenshotLightbox.ejs +13 -0
  56. package/dist/static/ejs/partials/components/shared/InfoAlert.ejs +3 -0
  57. package/dist/static/ejs/partials/components/summaryScanAbout.ejs +141 -0
  58. package/dist/static/ejs/partials/components/summaryScanResults.ejs +16 -0
  59. package/dist/static/ejs/partials/components/summaryTable.ejs +20 -0
  60. package/dist/static/ejs/partials/components/summaryWcagCompliance.ejs +94 -0
  61. package/dist/static/ejs/partials/components/topTen.ejs +6 -0
  62. package/dist/static/ejs/partials/components/wcagCompliance/FailedCriteria.ejs +47 -0
  63. package/dist/static/ejs/partials/components/wcagCompliance/WcagCompliance.ejs +16 -0
  64. package/dist/static/ejs/partials/components/wcagCompliance/WcagGaugeBar.ejs +16 -0
  65. package/dist/static/ejs/partials/components/wcagCoverageDetails.ejs +18 -0
  66. package/dist/static/ejs/partials/footer.ejs +24 -0
  67. package/dist/static/ejs/partials/header.ejs +14 -0
  68. package/dist/static/ejs/partials/main.ejs +29 -0
  69. package/dist/static/ejs/partials/scripts/allIssues/AllIssues.ejs +376 -0
  70. package/dist/static/ejs/partials/scripts/bootstrap.ejs +8 -0
  71. package/dist/static/ejs/partials/scripts/categorySummary.ejs +141 -0
  72. package/dist/static/ejs/partials/scripts/decodeUnzipParse.ejs +3 -0
  73. package/dist/static/ejs/partials/scripts/header/SiteInfo.ejs +44 -0
  74. package/dist/static/ejs/partials/scripts/header/aboutScanModal/AboutScanModal.ejs +51 -0
  75. package/dist/static/ejs/partials/scripts/header/aboutScanModal/ScanConfiguration.ejs +127 -0
  76. package/dist/static/ejs/partials/scripts/header/aboutScanModal/ScanDetails.ejs +60 -0
  77. package/dist/static/ejs/partials/scripts/highlightjs.ejs +335 -0
  78. package/dist/static/ejs/partials/scripts/popper.ejs +7 -0
  79. package/dist/static/ejs/partials/scripts/prioritiseIssues/IssueDetailCard.ejs +137 -0
  80. package/dist/static/ejs/partials/scripts/prioritiseIssues/PrioritiseIssues.ejs +214 -0
  81. package/dist/static/ejs/partials/scripts/prioritiseIssues/wcagSvgMap.ejs +861 -0
  82. package/dist/static/ejs/partials/scripts/ruleModal/constants.ejs +957 -0
  83. package/dist/static/ejs/partials/scripts/ruleModal/itemCardRenderer.ejs +353 -0
  84. package/dist/static/ejs/partials/scripts/ruleModal/pageAccordionBuilder.ejs +468 -0
  85. package/dist/static/ejs/partials/scripts/ruleModal/ruleOffcanvas.ejs +306 -0
  86. package/dist/static/ejs/partials/scripts/ruleModal/utilities.ejs +483 -0
  87. package/dist/static/ejs/partials/scripts/scannedPagesSegmentedTabs.ejs +35 -0
  88. package/dist/static/ejs/partials/scripts/screenshotLightbox.ejs +75 -0
  89. package/dist/static/ejs/partials/scripts/summaryScanResults.ejs +14 -0
  90. package/dist/static/ejs/partials/scripts/summaryTable.ejs +78 -0
  91. package/dist/static/ejs/partials/scripts/topTen.ejs +61 -0
  92. package/dist/static/ejs/partials/scripts/utils.ejs +453 -0
  93. package/dist/static/ejs/partials/scripts/wcagCompliance/FailedCriteria.ejs +103 -0
  94. package/dist/static/ejs/partials/scripts/wcagCompliance/WcagGaugeBar.ejs +47 -0
  95. package/dist/static/ejs/partials/scripts/wcagCompliance.ejs +15 -0
  96. package/dist/static/ejs/partials/scripts/wcagCoverageDetails.ejs +75 -0
  97. package/dist/static/ejs/partials/styles/allIssues/AllIssues.ejs +384 -0
  98. package/dist/static/ejs/partials/styles/bootstrap.ejs +12391 -0
  99. package/dist/static/ejs/partials/styles/header/SiteInfo.ejs +121 -0
  100. package/dist/static/ejs/partials/styles/header/aboutScanModal/AboutScanModal.ejs +82 -0
  101. package/dist/static/ejs/partials/styles/header/aboutScanModal/ScanConfiguration.ejs +50 -0
  102. package/dist/static/ejs/partials/styles/header/aboutScanModal/ScanDetails.ejs +149 -0
  103. package/dist/static/ejs/partials/styles/header.ejs +7 -0
  104. package/dist/static/ejs/partials/styles/highlightjs.ejs +54 -0
  105. package/dist/static/ejs/partials/styles/prioritiseIssues/IssueDetailCard.ejs +141 -0
  106. package/dist/static/ejs/partials/styles/prioritiseIssues/PrioritiseIssues.ejs +204 -0
  107. package/dist/static/ejs/partials/styles/ruleModal/ruleOffcanvas.ejs +456 -0
  108. package/dist/static/ejs/partials/styles/scannedPagesSegmentedTabs.ejs +46 -0
  109. package/dist/static/ejs/partials/styles/shared/InfoAlert.ejs +12 -0
  110. package/dist/static/ejs/partials/styles/styles.ejs +1607 -0
  111. package/dist/static/ejs/partials/styles/summaryBootstrap.ejs +12458 -0
  112. package/dist/static/ejs/partials/styles/topTenCard.ejs +44 -0
  113. package/dist/static/ejs/partials/styles/wcagCompliance/FailedCriteria.ejs +59 -0
  114. package/dist/static/ejs/partials/styles/wcagCompliance/WcagGaugeBar.ejs +62 -0
  115. package/dist/static/ejs/partials/styles/wcagCompliance.ejs +36 -0
  116. package/dist/static/ejs/partials/styles/wcagCoverageDetails.ejs +33 -0
  117. package/dist/static/ejs/partials/summaryHeader.ejs +70 -0
  118. package/dist/static/ejs/partials/summaryMain.ejs +49 -0
  119. package/dist/static/ejs/report.ejs +226 -0
  120. package/dist/static/ejs/summary.ejs +47 -0
  121. package/dist/types/types.js +1 -0
  122. package/dist/utils.js +1070 -0
  123. package/examples/oobee-cypress-integration-js/cypress/support/e2e.js +36 -6
  124. package/examples/oobee-cypress-integration-js/cypress.config.js +45 -1
  125. package/examples/oobee-cypress-integration-ts/cypress.config.ts +47 -1
  126. package/examples/oobee-cypress-integration-ts/src/cypress/support/e2e.ts +36 -6
  127. package/examples/oobee-playwright-integration-js/oobee-playwright-demo.js +2 -1
  128. package/examples/oobee-playwright-integration-ts/src/oobee-playwright-demo.ts +2 -1
  129. package/examples/oobee-scan-html-demo.js +51 -0
  130. package/examples/oobee-scan-page-demo.js +40 -0
  131. package/package.json +9 -3
  132. package/src/constants/common.ts +2 -2
  133. package/src/constants/constants.ts +3 -1
  134. package/src/crawlers/crawlDomain.ts +1 -0
  135. package/src/crawlers/runCustom.ts +0 -1
  136. package/src/mergeAxeResults.ts +43 -22
  137. package/src/npmIndex.ts +500 -131
@@ -0,0 +1,204 @@
1
+ <style>
2
+ #prioritiseIssuesCard {
3
+ margin-bottom: 1.5rem;
4
+ border-color: var(--soft-blue);
5
+ box-shadow: 0 2px 4px 0 rgb(77, 52, 191, 10%);
6
+ }
7
+
8
+ #prioritiseIssuesCard .card-body {
9
+ padding: 1.5rem;
10
+ background: var(--light-grayish-violet);
11
+ }
12
+
13
+ #prioritiseIssuesCard h2 {
14
+ color: var(--ocean-blue);
15
+ }
16
+
17
+ #prioritiseIssuesAccordion {
18
+ margin-top: 1rem;
19
+ }
20
+
21
+ .prioritise-issues-accordion {
22
+ max-height: 67vh;
23
+ overflow-y: auto;
24
+ }
25
+
26
+ #prioritiseIssuesAccordion .accordion-item {
27
+ border: none;
28
+ background: transparent;
29
+ margin-bottom: 0;
30
+ }
31
+
32
+ #prioritiseIssuesAccordion .accordion-item:last-child {
33
+ border-bottom: none;
34
+ }
35
+
36
+ #prioritiseIssuesAccordion .accordion-header {
37
+ margin: 0;
38
+ }
39
+
40
+ #prioritiseIssuesAccordion .accordion-button {
41
+ padding: 1rem 1rem 0.5rem;
42
+ border: none;
43
+ display: flex;
44
+ align-items: center;
45
+ width: 100%;
46
+ border-bottom: 1px solid var(--chinese-silver);
47
+ }
48
+
49
+ #prioritiseIssuesAccordion .accordion-button:hover {
50
+ background-color: transparent;
51
+ }
52
+
53
+ #prioritiseIssuesAccordion .accordion-button:focus {
54
+ box-shadow: none !important;
55
+ outline: none;
56
+ }
57
+
58
+ #prioritiseIssuesAccordion .accordion-button:not(.collapsed) {
59
+ background-color: transparent;
60
+ color: #000;
61
+ box-shadow: none !important;
62
+ }
63
+
64
+ #prioritiseIssuesAccordion .accordion-button::after {
65
+ display: none;
66
+ }
67
+
68
+ .accordion-icon-collapsed,
69
+ .accordion-icon-expanded {
70
+ margin-left: auto;
71
+ flex-shrink: 0;
72
+ }
73
+
74
+ .accordion-button.collapsed .accordion-icon-collapsed {
75
+ display: block;
76
+ }
77
+
78
+ .accordion-button.collapsed .accordion-icon-expanded {
79
+ display: none;
80
+ }
81
+
82
+ .accordion-button:not(.collapsed) .accordion-icon-collapsed {
83
+ display: none;
84
+ }
85
+
86
+ .accordion-button:not(.collapsed) .accordion-icon-expanded {
87
+ display: block;
88
+ }
89
+
90
+ .wcag-score-badge {
91
+ display: inline-block;
92
+ background-color: var(--light-grayish-red);
93
+ color: var(--light-carmine-pink);
94
+ border: 1px solid var(--light-carmine-pink);
95
+ padding: 2px 8px;
96
+ border-radius: 5px;
97
+ font-size: 1rem;
98
+ margin-left: 1rem;
99
+ white-space: nowrap;
100
+ line-height: 1.25;
101
+ }
102
+
103
+ #prioritiseIssuesAccordion .accordion-collapse {
104
+ border: none;
105
+ }
106
+
107
+ #prioritiseIssuesAccordion .accordion-body {
108
+ padding: 0;
109
+ border-radius: 8px;
110
+ margin-top: 0.75rem;
111
+ margin-bottom: 1rem;
112
+ }
113
+
114
+ .priority-issues-list {
115
+ list-style: none;
116
+ padding: 0;
117
+ margin: 0;
118
+ counter-reset: issue-counter;
119
+ }
120
+
121
+ .priority-issue-item {
122
+ padding: 0.75rem;
123
+ cursor: pointer;
124
+ position: relative;
125
+ padding-left: 1.5rem;
126
+ }
127
+
128
+ .priority-issue-item::before {
129
+ counter-increment: issue-counter;
130
+ content: counter(issue-counter) '.';
131
+ line-height: 1.5;
132
+ }
133
+
134
+ .priority-issue-item:hover:not(.active) {
135
+ border-radius: 5px;
136
+ border: 1px solid var(--ocean-blue);
137
+ }
138
+
139
+ .priority-issue-item.active {
140
+ background-color: rgba(77, 52, 191, 0.75);
141
+ border-radius: 5px;
142
+ color: white;
143
+ }
144
+
145
+ .priority-issue-title.active {
146
+ color: white;
147
+ }
148
+
149
+ .priority-issue-title {
150
+ font-size: 1rem;
151
+ font-weight: 400;
152
+ line-height: 1.5;
153
+ }
154
+
155
+ .priority-issue-badges {
156
+ display: flex;
157
+ gap: 0.5rem;
158
+ flex-wrap: wrap;
159
+ }
160
+
161
+ .disability-badge {
162
+ background-color: white;
163
+ padding: 2px 8px;
164
+ border-radius: 5px;
165
+ font-size: 0.75rem;
166
+ white-space: nowrap;
167
+ border: 1px solid var(--a11y-black-100);
168
+ line-height: 1.5;
169
+ font-weight: 700;
170
+ }
171
+
172
+ @media (max-width: 768px) {
173
+ #prioritiseIssuesCard .card-body {
174
+ padding: 1rem;
175
+ }
176
+
177
+ #prioritiseIssuesAccordion .accordion-button {
178
+ padding: 0.875rem 0;
179
+ font-size: 0.9rem;
180
+ }
181
+
182
+ .wcag-score-badge {
183
+ font-size: 0.7rem;
184
+ padding: 2px 6px;
185
+ }
186
+
187
+ .priority-issue-item {
188
+ padding: 0.875rem 1rem 0.875rem 2.5rem;
189
+ }
190
+
191
+ .priority-issue-item::before {
192
+ left: 1rem;
193
+ }
194
+
195
+ .priority-issue-title {
196
+ font-size: 0.9rem;
197
+ }
198
+
199
+ .disability-badge {
200
+ font-size: 0.7rem;
201
+ padding: 3px 10px;
202
+ }
203
+ }
204
+ </style>
@@ -0,0 +1,456 @@
1
+ <style>
2
+ #expandedRule .modal-dialog {
3
+ --bs-modal-width: min(1080px, calc(100vw - 2rem));
4
+ }
5
+
6
+ .modal-button-right {
7
+ display: none;
8
+ }
9
+
10
+ .rule-modal-body {
11
+ padding: 1.5rem;
12
+ display: flex;
13
+ flex-direction: row;
14
+ gap: 1.5rem;
15
+ max-height: 90vh;
16
+ overflow: hidden;
17
+ }
18
+
19
+ .left-side-modal {
20
+ overflow-y: auto;
21
+ }
22
+
23
+ .right-side-modal {
24
+ overflow-y: auto;
25
+ border-left: 1px solid var(--chinese-silver);
26
+ }
27
+
28
+ .counter {
29
+ font-weight: 600;
30
+ }
31
+
32
+ /* Image */
33
+ .rule-modal-image-container {
34
+ display: flex;
35
+ justify-content: center;
36
+ margin-top: 2rem;
37
+ }
38
+
39
+ .rule-modal-image {
40
+ max-width: 100%;
41
+ max-height: 100%;
42
+ object-fit: contain;
43
+ }
44
+
45
+ /* Conformance Badges */
46
+ .rule-modal-conformance {
47
+ display: flex;
48
+ flex-direction: row;
49
+ gap: 8px;
50
+ align-items: center;
51
+ flex-wrap: wrap;
52
+ }
53
+
54
+ .rule-modal-conformance-badges {
55
+ display: flex;
56
+ gap: 8px;
57
+ flex-wrap: wrap;
58
+ }
59
+
60
+ .rule-modal-conformance-badges > * {
61
+ display: inline-flex;
62
+ align-items: center;
63
+ justify-content: center;
64
+ border-radius: 5px;
65
+ border: 1px solid var(--a11y-black-100);
66
+ font-size: 12px;
67
+ padding: 0 4px;
68
+ width: fit-content;
69
+ height: 20px;
70
+ }
71
+
72
+ .conformance-badge {
73
+ display: inline-flex;
74
+ align-items: center;
75
+ justify-content: center;
76
+ border-radius: 5px;
77
+ border: 1px solid var(--a11y-black-100);
78
+ font-size: 12px;
79
+ padding: 0 4px;
80
+ width: fit-content;
81
+ height: 20px;
82
+ }
83
+
84
+ /* Description */
85
+ .rule-modal-description {
86
+ line-height: 1.5 !important;
87
+ margin: 0 !important;
88
+ }
89
+
90
+ /* Disability Section */
91
+ .rule-modal-disability {
92
+ margin-top: 0.5rem;
93
+ }
94
+
95
+ .rule-modal-learn-more {
96
+ display: inline-flex;
97
+ align-items: center;
98
+ gap: 6px;
99
+ font-size: 0.875rem;
100
+ color: var(--oobee-purple, #5735df);
101
+ text-decoration: none;
102
+ }
103
+
104
+ .rule-modal-learn-more:hover {
105
+ text-decoration: underline;
106
+ }
107
+
108
+ /* How to Fix Section */
109
+ .rule-modal-how-to-fix {
110
+ display: flex;
111
+ gap: 0.5rem;
112
+ flex-direction: column;
113
+ }
114
+
115
+ .rule-modal-section-title {
116
+ font-size: 1.125rem;
117
+ font-weight: 600;
118
+ }
119
+
120
+ .rule-modal-steps {
121
+ display: flex;
122
+ flex-direction: column;
123
+ gap: 1rem;
124
+ }
125
+
126
+ .rule-modal-step {
127
+ display: flex;
128
+ flex-direction: column;
129
+ padding: 0.5rem 1rem;
130
+ background: var(--sugar-milk);
131
+ border-radius: 5px;
132
+ border: 1px solid var(--muted-blue);
133
+ }
134
+
135
+ .step-header {
136
+ display: flex;
137
+ align-items: center;
138
+ gap: 0.75rem;
139
+ }
140
+
141
+ .step-title {
142
+ font-size: 1rem;
143
+ font-weight: 600;
144
+ color: var(--muted-blue);
145
+ line-height: 1.625;
146
+ }
147
+
148
+ .step-content {
149
+ flex: 1;
150
+ }
151
+
152
+ .step-text {
153
+ margin: 0;
154
+ font-size: 0.875rem;
155
+ line-height: 1.5;
156
+ color: var(--muted-blue);
157
+ }
158
+
159
+ .no-steps-message {
160
+ padding: 1.5rem;
161
+ text-align: center;
162
+ background: var(--very-light-gray, #f5f5f5);
163
+ border-radius: 8px;
164
+ border: 1px solid var(--chinese-silver, #ccc);
165
+ }
166
+
167
+ .no-steps-message p {
168
+ margin: 0;
169
+ color: var(--a11y-black-80, #666);
170
+ font-size: 0.875rem;
171
+ }
172
+
173
+ /* AI Feedback */
174
+ .rule-modal-ai-feedback {
175
+ background-color: var(--light-grayish-violet);
176
+ border: 1px solid var(--cosmic-cobalt);
177
+ border-radius: 5px;
178
+ padding: 8px 16px;
179
+ color: var(--cosmic-cobalt);
180
+ }
181
+
182
+ .rule-modal-ai-feedback svg {
183
+ flex-shrink: 0;
184
+ }
185
+
186
+ .rule-modal-ai-feedback span {
187
+ font-size: 1rem;
188
+ line-height: 1.5;
189
+ color: var(--ocean-blue);
190
+ }
191
+
192
+ /* Pages Affected Section */
193
+ .rule-modal-pages-section {
194
+ border-top: 1px solid var(--chinese-silver);
195
+ background: var(--very-light-gray);
196
+ }
197
+
198
+ /* Pages Accordion Styles */
199
+ #pagesAccordion .accordion-item {
200
+ border: none;
201
+ background: var(--very-light-gray);
202
+ }
203
+
204
+ #pagesAccordion .accordion-button {
205
+ padding-left: 1rem;
206
+ box-shadow: none;
207
+ position: relative;
208
+ display: flex;
209
+ gap: 1.5rem;
210
+ align-items: center;
211
+ width: 100%;
212
+ }
213
+
214
+ #pagesAccordion .accordion-button.accordion-title.accordion-button:not(.collapsed)::after {
215
+ content: '';
216
+ position: absolute;
217
+ bottom: 0;
218
+ left: 5%;
219
+ width: 90%;
220
+ height: 1px;
221
+ background-color: var(--chinese-silver);
222
+ transition: none;
223
+ }
224
+
225
+ #pagesAccordion .accordion-title {
226
+ padding: 1.5rem;
227
+ background: var(--very-light-gray);
228
+ }
229
+
230
+ #pagesAccordion .accordion-button:focus {
231
+ box-shadow: none;
232
+ border: none;
233
+ }
234
+
235
+ #pagesAccordion .accordion-button:not(.collapsed) {
236
+ background: transparent;
237
+ color: inherit;
238
+ }
239
+
240
+ #pagesAccordion .accordion-arrow {
241
+ flex-shrink: 0;
242
+ transition: transform 0.2s ease;
243
+ transform: rotate(0deg);
244
+ }
245
+
246
+ #pagesAccordion .accordion-button:not(.collapsed) .accordion-arrow {
247
+ transform: rotate(180deg);
248
+ }
249
+
250
+ #pagesAccordion .accordion-button::before {
251
+ display: none;
252
+ }
253
+
254
+ #pagesAccordion .collapsed.accordion-button::after {
255
+ display: none;
256
+ }
257
+
258
+ #pagesAccordion .accordion-body {
259
+ padding: 1.5rem;
260
+ padding-top: 0.75rem;
261
+ }
262
+
263
+ .accordion-link {
264
+ border-bottom: 1px solid var(--chinese-silver);
265
+ padding-bottom: 1rem;
266
+ }
267
+
268
+ #pagesAccordion h3 {
269
+ line-height: 1.5rem;
270
+ }
271
+
272
+ /* Group By Toggle */
273
+ .group-by-toggle {
274
+ display: flex;
275
+ align-items: center;
276
+ justify-content: flex-end;
277
+ }
278
+
279
+ .group-by-label {
280
+ font-size: 1rem;
281
+ font-weight: 400;
282
+ color: var(--a11y-black-80);
283
+ }
284
+
285
+ .group-by-options {
286
+ display: flex;
287
+ align-items: center;
288
+ }
289
+
290
+ .form-check-inline {
291
+ display: flex;
292
+ align-items: center;
293
+ gap: 0.5rem;
294
+ margin-right: 0;
295
+ padding-left: 0.5rem;
296
+ }
297
+
298
+ .form-check-input[type='radio'] {
299
+ width: 1rem;
300
+ height: 1rem;
301
+ margin: 0;
302
+ cursor: pointer;
303
+ border: 1px solid var(--chinese-silver);
304
+ background-color: var(--true-white);
305
+ }
306
+
307
+ .form-check-input[type='radio']:checked {
308
+ background-color: var(--cosmic-cobalt);
309
+ border-color: var(--cosmic-cobalt);
310
+ }
311
+
312
+ .form-check-input[type='radio']:focus {
313
+ outline: 2px solid var(--cosmic-cobalt);
314
+ outline-offset: 2px;
315
+ box-shadow: none;
316
+ }
317
+
318
+ .form-check-label {
319
+ font-size: 1rem;
320
+ color: var(--a11y-black);
321
+ cursor: pointer;
322
+ margin: 0;
323
+ }
324
+
325
+ .html-element-preview {
326
+ flex: 1;
327
+ }
328
+
329
+ #pagesAccordion .rule-occurrence-count {
330
+ font-size: 1rem;
331
+ font-weight: 700;
332
+ line-height: 1.5rem;
333
+ color: var(--light-carmine-pink);
334
+ }
335
+
336
+ #expandedRuleCategoryContent .rule-modal-item {
337
+ background: var(--true-white);
338
+ border-radius: 5px;
339
+ border: 1px solid var(--chinese-silver);
340
+ }
341
+
342
+ /* Item Pagination Controls */
343
+ .item-pagination-controls {
344
+ display: flex;
345
+ align-items: center;
346
+ justify-content: flex-end;
347
+ gap: 0.25rem;
348
+ padding-top: 1rem;
349
+ background: var(--true-white);
350
+ }
351
+
352
+ .pagination-arrow {
353
+ background: transparent;
354
+ border: 0;
355
+ border-radius: 5px;
356
+ width: 24px;
357
+ height: 24px;
358
+ display: flex;
359
+ align-items: center;
360
+ justify-content: center;
361
+ cursor: pointer;
362
+ transition: all 0.2s ease;
363
+ padding: 0;
364
+ }
365
+
366
+ .pagination-arrow:disabled {
367
+ opacity: 0.4;
368
+ cursor: not-allowed;
369
+ }
370
+
371
+ .pagination-page-info {
372
+ display: flex;
373
+ align-items: center;
374
+ gap: 0.5rem;
375
+ font-size: 0.875rem;
376
+ }
377
+
378
+ .pagination-page-input {
379
+ width: 48px;
380
+ height: 24px;
381
+ text-align: center;
382
+ border: 1px solid var(--chinese-silver);
383
+ border-radius: 5px;
384
+ font-size: 0.875rem;
385
+ padding: 3px 4px;
386
+ color: var(--ocean-blue);
387
+ }
388
+
389
+ .pagination-page-input:focus {
390
+ outline: none;
391
+ border-color: var(--cosmic-cobalt);
392
+ box-shadow: 0 0 0 2px rgba(87, 53, 223, 0.1);
393
+ }
394
+
395
+ /* Remove default number input arrows */
396
+ .pagination-page-input::-webkit-outer-spin-button,
397
+ .pagination-page-input::-webkit-inner-spin-button {
398
+ -webkit-appearance: none;
399
+ margin: 0;
400
+ }
401
+
402
+ .pagination-page-input[type='number'] {
403
+ -moz-appearance: textfield;
404
+ appearance: textfield;
405
+ }
406
+
407
+ /* Mobile Responsive */
408
+ @media (max-width: 768px) {
409
+ .rule-modal-dialog {
410
+ margin: 0.5rem;
411
+ max-width: calc(100% - 1rem);
412
+ }
413
+
414
+ .rule-modal-body {
415
+ padding: 1rem;
416
+ }
417
+
418
+ #expandedRule .modal-header {
419
+ padding: 1rem;
420
+ }
421
+
422
+ .item-pagination-controls {
423
+ padding: 0.75rem 1rem;
424
+ }
425
+
426
+ .right-side-modal {
427
+ width: 100% !important;
428
+ }
429
+
430
+ .left-side-modal {
431
+ width: 100% !important;
432
+ }
433
+
434
+ .modal-body {
435
+ flex-direction: column;
436
+ overflow: auto;
437
+ }
438
+
439
+ .modal-view {
440
+ flex-direction: column;
441
+ }
442
+
443
+ .modal-button {
444
+ display: none;
445
+ }
446
+
447
+ .html-element-preview {
448
+ max-width: 55%;
449
+ }
450
+
451
+ .modal-button-right {
452
+ display: flex;
453
+ }
454
+
455
+ }
456
+ </style>
@@ -0,0 +1,46 @@
1
+ <style>
2
+ .seg-pill {
3
+ display: inline-flex;
4
+ align-items: center;
5
+ margin: 0.05rem;
6
+ padding: 0.25rem 0.675rem;
7
+ border: 0;
8
+ background: transparent;
9
+ border-radius: 999px;
10
+ line-height: 1;
11
+ color: var(--body-text, --a11y-black-100);
12
+ cursor: pointer;
13
+ white-space: nowrap;
14
+ }
15
+ .seg-pill[aria-selected="false"]:hover,
16
+ .seg-pill[aria-selected="false"]:focus-visible {
17
+ text-decoration: underline;
18
+ }
19
+ .seg-pill[aria-selected="true"] {
20
+ background: var(--a11y-majorelle-blue, #5735DF);
21
+ }
22
+ .seg-pill[aria-selected="true"] * {
23
+ color: #fff;
24
+ }
25
+
26
+ .seg-panels > [role="tabpanel"][hidden] {
27
+ display: none;
28
+ }
29
+
30
+ .segmented-tabs {
31
+ display: inline-flex;
32
+ gap: 4px;
33
+ padding: 4px;
34
+ border: 1px solid var(--divider, --bright-gray);
35
+ border-radius: 999px;
36
+ background: var(--true-white);
37
+ margin: 1rem 0 1rem;
38
+ flex-wrap: wrap;
39
+ }
40
+
41
+ @media (max-width: 600px) {
42
+ .segmented-tabs {
43
+ flex-wrap: wrap;
44
+ }
45
+ }
46
+ </style>
@@ -0,0 +1,12 @@
1
+ <style>
2
+ .info-alert {
3
+ background-color: var(--light-grayish-red);
4
+ border: 1px solid var(--dark-orange);
5
+ border-radius: 5px;
6
+ padding: 8px 16px;
7
+ margin-bottom: 1rem;
8
+ color: var(--dark-orange);
9
+ font-size: 1.125rem;
10
+ line-height: 1.625rem;
11
+ }
12
+ </style>