@striae-org/striae 3.0.5 → 3.1.1
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.
- package/app/components/actions/case-export/core-export.ts +1 -1
- package/app/components/actions/case-export/download-handlers.ts +10 -12
- package/app/components/actions/case-export/metadata-helpers.ts +1 -1
- package/app/components/actions/case-import/confirmation-import.ts +24 -9
- package/app/components/actions/case-import/orchestrator.ts +3 -4
- package/app/components/actions/case-import/validation.ts +3 -3
- package/app/components/actions/case-import/zip-processing.ts +12 -48
- package/app/components/actions/case-manage.ts +0 -1
- package/app/components/actions/confirm-export.ts +2 -2
- package/app/components/audit/user-audit-viewer.tsx +53 -15
- package/app/components/audit/user-audit.module.css +11 -4
- package/app/components/canvas/box-annotations/box-annotations.tsx +36 -7
- package/app/components/canvas/canvas.tsx +35 -24
- package/app/components/canvas/confirmation/confirmation.module.css +5 -2
- package/app/components/canvas/confirmation/confirmation.tsx +25 -8
- package/app/components/icon/icons.svg +4 -71
- package/app/components/icon/manifest.json +3 -75
- package/app/components/public-signing-key-modal/public-signing-key-modal.module.css +171 -0
- package/app/components/public-signing-key-modal/public-signing-key-modal.tsx +223 -0
- package/app/components/sidebar/case-export/case-export.module.css +36 -5
- package/app/components/sidebar/case-export/case-export.tsx +115 -12
- package/app/components/sidebar/case-import/case-import.module.css +9 -5
- package/app/components/sidebar/case-import/case-import.tsx +30 -7
- package/app/components/sidebar/case-import/components/CasePreviewSection.tsx +2 -2
- package/app/components/sidebar/case-import/components/ConfirmationDialog.tsx +1 -1
- package/app/components/sidebar/case-import/components/ExistingCaseSection.tsx +1 -1
- package/app/components/sidebar/case-import/hooks/useFilePreview.ts +34 -9
- package/app/components/sidebar/cases/case-sidebar.tsx +13 -13
- package/app/components/sidebar/cases/cases-modal.tsx +12 -2
- package/app/components/sidebar/files/files-modal.tsx +28 -8
- package/app/components/sidebar/sidebar.module.css +2 -3
- package/app/components/sidebar/sidebar.tsx +1 -16
- package/app/components/sidebar/upload/image-upload-zone.tsx +4 -4
- package/app/components/toolbar/toolbar-color-selector.tsx +3 -3
- package/app/components/toolbar/toolbar.tsx +19 -9
- package/app/components/user/delete-account.module.css +4 -1
- package/app/components/user/delete-account.tsx +22 -3
- package/app/components/user/manage-profile.tsx +0 -2
- package/app/entry.server.tsx +2 -3
- package/app/hooks/useInactivityTimeout.ts +5 -1
- package/app/routes/_index.tsx +1 -16
- package/app/routes/auth/emailVerification.tsx +1 -1
- package/app/routes/auth/route.ts +3 -12
- package/app/routes/striae/striae.tsx +1 -1
- package/app/services/audit-export.service.ts +1 -1
- package/app/services/audit.service.ts +29 -9
- package/app/tailwind.css +16 -1
- package/app/types/audit.ts +3 -3
- package/app/types/case.ts +1 -1
- package/app/types/import.ts +0 -2
- package/app/utils/SHA256.ts +3 -3
- package/app/utils/batch-operations.ts +6 -6
- package/app/utils/data-operations.ts +14 -7
- package/app/utils/permissions.ts +0 -2
- package/functions/[[path]].ts +0 -1
- package/package.json +5 -3
- package/public/assets/striae.jpg +0 -0
- package/scripts/deploy-pages.sh +2 -2
- package/scripts/run-eslint.cjs +14 -6
- package/worker-configuration.d.ts +2 -2
- package/workers/audit-worker/src/audit-worker.example.ts +9 -7
- package/workers/audit-worker/worker-configuration.d.ts +2 -2
- package/workers/audit-worker/wrangler.jsonc.example +1 -1
- package/workers/data-worker/src/data-worker.example.ts +1 -1
- package/workers/data-worker/worker-configuration.d.ts +2 -2
- package/workers/data-worker/wrangler.jsonc.example +1 -1
- package/workers/image-worker/worker-configuration.d.ts +2 -2
- package/workers/image-worker/wrangler.jsonc.example +1 -1
- package/workers/keys-worker/worker-configuration.d.ts +2 -2
- package/workers/keys-worker/wrangler.jsonc.example +1 -1
- package/workers/pdf-worker/src/pdf-worker.example.ts +3 -3
- package/workers/pdf-worker/worker-configuration.d.ts +2 -2
- package/workers/pdf-worker/wrangler.jsonc.example +1 -1
- package/workers/user-worker/src/user-worker.example.ts +10 -10
- package/workers/user-worker/worker-configuration.d.ts +2 -2
- package/workers/user-worker/wrangler.jsonc.example +1 -1
- package/wrangler.toml.example +1 -1
- package/app/components/sidebar/hash/hash-utility.module.css +0 -366
- package/app/components/sidebar/hash/hash-utility.tsx +0 -982
- package/app/routes/mobile-prevented/mobilePrevented.module.css +0 -47
- package/app/routes/mobile-prevented/mobilePrevented.tsx +0 -28
- package/app/routes/mobile-prevented/route.ts +0 -14
- package/app/utils/device-detection.ts +0 -5
- package/app/utils/html-sanitizer.ts +0 -80
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { launch } from "@cloudflare/puppeteer";
|
|
2
2
|
import type { PDFGenerationData, PDFGenerationRequest, ReportModule } from './report-types';
|
|
3
3
|
|
|
4
4
|
interface Env {
|
|
@@ -72,13 +72,13 @@ export default {
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
if (request.method === 'POST') {
|
|
75
|
-
let browser: Awaited<ReturnType<typeof
|
|
75
|
+
let browser: Awaited<ReturnType<typeof launch>> | undefined;
|
|
76
76
|
|
|
77
77
|
try {
|
|
78
78
|
const payload = await request.json() as PDFGenerationData | PDFGenerationRequest;
|
|
79
79
|
const { reportFormat, data } = resolveReportRequest(payload);
|
|
80
80
|
|
|
81
|
-
browser = await
|
|
81
|
+
browser = await launch(env.BROWSER);
|
|
82
82
|
const page = await browser.newPage();
|
|
83
83
|
|
|
84
84
|
// Render report from module selected by report format name.
|
|
@@ -5440,7 +5440,7 @@ type AIGatewayHeaders = {
|
|
|
5440
5440
|
[key: string]: string | number | boolean | object;
|
|
5441
5441
|
};
|
|
5442
5442
|
type AIGatewayUniversalRequest = {
|
|
5443
|
-
provider: AIGatewayProviders | string;
|
|
5443
|
+
provider: AIGatewayProviders | string;
|
|
5444
5444
|
endpoint: string;
|
|
5445
5445
|
headers: Partial<AIGatewayHeaders>;
|
|
5446
5446
|
query: unknown;
|
|
@@ -5456,7 +5456,7 @@ declare abstract class AiGateway {
|
|
|
5456
5456
|
gateway?: UniversalGatewayOptions;
|
|
5457
5457
|
extraHeaders?: object;
|
|
5458
5458
|
}): Promise<Response>;
|
|
5459
|
-
getUrl(provider?: AIGatewayProviders | string): Promise<string>;
|
|
5459
|
+
getUrl(provider?: AIGatewayProviders | string): Promise<string>;
|
|
5460
5460
|
}
|
|
5461
5461
|
interface AutoRAGInternalError extends Error {
|
|
5462
5462
|
}
|
|
@@ -24,13 +24,13 @@ interface UserData {
|
|
|
24
24
|
interface CaseItem {
|
|
25
25
|
caseNumber: string;
|
|
26
26
|
caseName?: string;
|
|
27
|
-
[key: string]:
|
|
27
|
+
[key: string]: unknown;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
interface ReadOnlyCaseItem {
|
|
31
31
|
caseNumber: string;
|
|
32
32
|
caseName?: string;
|
|
33
|
-
[key: string]:
|
|
33
|
+
[key: string]: unknown;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
interface UserRequestData {
|
|
@@ -51,8 +51,8 @@ interface DeleteCasesRequest {
|
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
interface CaseData {
|
|
54
|
-
files?: Array<{ id: string; [key: string]:
|
|
55
|
-
[key: string]:
|
|
54
|
+
files?: Array<{ id: string; [key: string]: unknown }>;
|
|
55
|
+
[key: string]: unknown;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
interface AccountDeletionProgressEvent {
|
|
@@ -247,7 +247,7 @@ async function handleGetUser(env: Env, userUid: string): Promise<Response> {
|
|
|
247
247
|
status: 200,
|
|
248
248
|
headers: corsHeaders
|
|
249
249
|
});
|
|
250
|
-
} catch
|
|
250
|
+
} catch {
|
|
251
251
|
return new Response('Failed to get user data', {
|
|
252
252
|
status: 500,
|
|
253
253
|
headers: corsHeaders
|
|
@@ -304,7 +304,7 @@ async function handleAddUser(request: Request, env: Env, userUid: string): Promi
|
|
|
304
304
|
status: value !== null ? 200 : 201,
|
|
305
305
|
headers: corsHeaders
|
|
306
306
|
});
|
|
307
|
-
} catch
|
|
307
|
+
} catch {
|
|
308
308
|
return new Response('Failed to save user data', {
|
|
309
309
|
status: 500,
|
|
310
310
|
headers: corsHeaders
|
|
@@ -346,7 +346,7 @@ async function deleteSingleCase(env: Env, userUid: string, caseNumber: string):
|
|
|
346
346
|
method: 'DELETE',
|
|
347
347
|
headers: { 'X-Custom-Auth-Key': dataApiKey }
|
|
348
348
|
});
|
|
349
|
-
} catch
|
|
349
|
+
} catch {
|
|
350
350
|
// Continue with other files
|
|
351
351
|
}
|
|
352
352
|
}
|
|
@@ -358,7 +358,7 @@ async function deleteSingleCase(env: Env, userUid: string, caseNumber: string):
|
|
|
358
358
|
headers: { 'X-Custom-Auth-Key': dataApiKey }
|
|
359
359
|
});
|
|
360
360
|
|
|
361
|
-
} catch
|
|
361
|
+
} catch {
|
|
362
362
|
// Continue with user deletion even if case deletion fails
|
|
363
363
|
}
|
|
364
364
|
}
|
|
@@ -532,7 +532,7 @@ async function handleAddCases(request: Request, env: Env, userUid: string): Prom
|
|
|
532
532
|
status: 200,
|
|
533
533
|
headers: corsHeaders
|
|
534
534
|
});
|
|
535
|
-
} catch
|
|
535
|
+
} catch {
|
|
536
536
|
return new Response('Failed to add cases', {
|
|
537
537
|
status: 500,
|
|
538
538
|
headers: corsHeaders
|
|
@@ -567,7 +567,7 @@ async function handleDeleteCases(request: Request, env: Env, userUid: string): P
|
|
|
567
567
|
status: 200,
|
|
568
568
|
headers: corsHeaders
|
|
569
569
|
});
|
|
570
|
-
} catch
|
|
570
|
+
} catch {
|
|
571
571
|
return new Response('Failed to delete cases', {
|
|
572
572
|
status: 500,
|
|
573
573
|
headers: corsHeaders
|
|
@@ -5440,7 +5440,7 @@ type AIGatewayHeaders = {
|
|
|
5440
5440
|
[key: string]: string | number | boolean | object;
|
|
5441
5441
|
};
|
|
5442
5442
|
type AIGatewayUniversalRequest = {
|
|
5443
|
-
provider: AIGatewayProviders | string;
|
|
5443
|
+
provider: AIGatewayProviders | string;
|
|
5444
5444
|
endpoint: string;
|
|
5445
5445
|
headers: Partial<AIGatewayHeaders>;
|
|
5446
5446
|
query: unknown;
|
|
@@ -5456,7 +5456,7 @@ declare abstract class AiGateway {
|
|
|
5456
5456
|
gateway?: UniversalGatewayOptions;
|
|
5457
5457
|
extraHeaders?: object;
|
|
5458
5458
|
}): Promise<Response>;
|
|
5459
|
-
getUrl(provider?: AIGatewayProviders | string): Promise<string>;
|
|
5459
|
+
getUrl(provider?: AIGatewayProviders | string): Promise<string>;
|
|
5460
5460
|
}
|
|
5461
5461
|
interface AutoRAGInternalError extends Error {
|
|
5462
5462
|
}
|
package/wrangler.toml.example
CHANGED
|
@@ -1,366 +0,0 @@
|
|
|
1
|
-
/* Modal Overlay */
|
|
2
|
-
.overlay {
|
|
3
|
-
position: fixed;
|
|
4
|
-
inset: 0;
|
|
5
|
-
background-color: color-mix(in lab, var(--background) 50%, transparent);
|
|
6
|
-
display: flex;
|
|
7
|
-
justify-content: center;
|
|
8
|
-
align-items: center;
|
|
9
|
-
z-index: var(--zIndex5);
|
|
10
|
-
transition: background-color var(--durationM) var(--bezierFastoutSlowin);
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
/* Modal Container */
|
|
15
|
-
.modal {
|
|
16
|
-
background: var(--backgroundLight);
|
|
17
|
-
border-radius: var(--spaceXS);
|
|
18
|
-
width: 90%;
|
|
19
|
-
max-width: 600px;
|
|
20
|
-
max-height: 90vh;
|
|
21
|
-
box-shadow: 0 var(--spaceXS) var(--spaceL) color-mix(in lab, var(--black) 10%, transparent);
|
|
22
|
-
transition: background-color var(--durationM) var(--bezierFastoutSlowin);
|
|
23
|
-
display: flex;
|
|
24
|
-
flex-direction: column;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
/* Header */
|
|
29
|
-
.header {
|
|
30
|
-
display: flex;
|
|
31
|
-
font-size: var(--fontSizeBodyL);
|
|
32
|
-
justify-content: space-between;
|
|
33
|
-
align-items: center;
|
|
34
|
-
padding: var(--spaceL);
|
|
35
|
-
border-bottom: 1px solid color-mix(in lab, var(--text) 10%, transparent);
|
|
36
|
-
color: var(--textTitle);
|
|
37
|
-
flex-shrink: 0;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
.title {
|
|
41
|
-
margin: 0;
|
|
42
|
-
font-size: var(--fontSizeBodyL);
|
|
43
|
-
font-weight: 600;
|
|
44
|
-
color: var(--textTitle);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
.closeButton {
|
|
48
|
-
background: none;
|
|
49
|
-
border: none;
|
|
50
|
-
font-size: var(--fontSizeH5);
|
|
51
|
-
cursor: pointer;
|
|
52
|
-
padding: var(--spaceS);
|
|
53
|
-
color: var(--textLight);
|
|
54
|
-
transition: color var(--durationS) var(--bezierFastoutSlowin);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
.closeButton:hover:not(:disabled) {
|
|
58
|
-
color: var(--text);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
.closeButton:disabled {
|
|
62
|
-
opacity: 0.5;
|
|
63
|
-
cursor: not-allowed;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/* Content */
|
|
67
|
-
.content {
|
|
68
|
-
padding: var(--spaceL);
|
|
69
|
-
overflow-y: auto;
|
|
70
|
-
flex: 1;
|
|
71
|
-
min-height: 0;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
.description {
|
|
75
|
-
color: var(--textBody);
|
|
76
|
-
line-height: 1.5;
|
|
77
|
-
margin: 0 0 var(--spaceL) 0;
|
|
78
|
-
font-size: var(--fontSizeBodyM);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/* Upload Area */
|
|
82
|
-
.uploadWrapper {
|
|
83
|
-
position: relative;
|
|
84
|
-
margin-bottom: var(--spaceL);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
.uploadArea {
|
|
88
|
-
border: 2px dashed color-mix(in lab, var(--primary) 30%, transparent);
|
|
89
|
-
border-radius: var(--spaceXS);
|
|
90
|
-
background: color-mix(in lab, var(--primary) 5%, transparent);
|
|
91
|
-
padding: var(--spaceXL);
|
|
92
|
-
text-align: center;
|
|
93
|
-
cursor: pointer;
|
|
94
|
-
transition: all var(--durationS) var(--bezierFastoutSlowin);
|
|
95
|
-
min-height: 120px;
|
|
96
|
-
display: flex;
|
|
97
|
-
align-items: center;
|
|
98
|
-
justify-content: center;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
.uploadArea:hover {
|
|
102
|
-
border-color: var(--primary);
|
|
103
|
-
background: color-mix(in lab, var(--primary) 10%, transparent);
|
|
104
|
-
transform: translateY(-1px);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
.uploadArea:focus-visible {
|
|
108
|
-
outline: none;
|
|
109
|
-
border-color: var(--primary);
|
|
110
|
-
box-shadow: 0 0 0 2px color-mix(in lab, var(--primary) 20%, transparent);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
.uploadArea.dragOver {
|
|
114
|
-
border-color: var(--accent);
|
|
115
|
-
background: color-mix(in lab, var(--accent) 15%, transparent);
|
|
116
|
-
border-style: solid;
|
|
117
|
-
transform: scale(1.02);
|
|
118
|
-
box-shadow: 0 0 0 2px color-mix(in lab, var(--accent) 30%, transparent);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
.uploadArea[aria-disabled="true"] {
|
|
122
|
-
opacity: 0.5;
|
|
123
|
-
cursor: not-allowed;
|
|
124
|
-
border-color: color-mix(in lab, var(--text) 15%, transparent);
|
|
125
|
-
background: color-mix(in lab, var(--background) 95%, transparent);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
.uploadArea[aria-disabled="true"]:hover {
|
|
129
|
-
border-color: color-mix(in lab, var(--text) 15%, transparent);
|
|
130
|
-
background: color-mix(in lab, var(--background) 95%, transparent);
|
|
131
|
-
transform: none;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
.uploadContent {
|
|
135
|
-
display: flex;
|
|
136
|
-
flex-direction: column;
|
|
137
|
-
align-items: center;
|
|
138
|
-
gap: var(--spaceS);
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
.uploadIcon {
|
|
142
|
-
font-size: var(--fontSizeBodyL);
|
|
143
|
-
opacity: 0.7;
|
|
144
|
-
transition: all var(--durationS) var(--bezierFastoutSlowin);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
.dragOver .uploadIcon {
|
|
148
|
-
opacity: 1;
|
|
149
|
-
transform: scale(1.1);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
.uploadText {
|
|
153
|
-
font-size: var(--fontSizeBodyS);
|
|
154
|
-
font-weight: var(--fontWeightMedium);
|
|
155
|
-
color: var(--textBody);
|
|
156
|
-
transition: all var(--durationS) var(--bezierFastoutSlowin);
|
|
157
|
-
flex: 1;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
.dragOver .uploadText {
|
|
161
|
-
color: var(--accent);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
.uploadText strong {
|
|
165
|
-
color: var(--primary);
|
|
166
|
-
font-weight: var(--fontWeightSemibold);
|
|
167
|
-
transition: all var(--durationS) var(--bezierFastoutSlowin);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
.dragOver .uploadText strong {
|
|
171
|
-
color: var(--accent);
|
|
172
|
-
font-weight: var(--fontWeightBold);
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
.uploadSubtext {
|
|
176
|
-
font-size: var(--fontSizeBodyXS);
|
|
177
|
-
color: var(--textLight);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
.hiddenInput {
|
|
181
|
-
position: absolute;
|
|
182
|
-
opacity: 0;
|
|
183
|
-
width: 0;
|
|
184
|
-
height: 0;
|
|
185
|
-
pointer-events: none;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
/* Verification Status */
|
|
189
|
-
.verifyingSection {
|
|
190
|
-
margin: var(--spaceM) 0;
|
|
191
|
-
padding: var(--spaceM);
|
|
192
|
-
background: var(--backgroundLight);
|
|
193
|
-
border-radius: var(--spaceXS);
|
|
194
|
-
border: 1px solid color-mix(in lab, var(--text) 10%, transparent);
|
|
195
|
-
display: flex;
|
|
196
|
-
align-items: center;
|
|
197
|
-
justify-content: center;
|
|
198
|
-
gap: var(--spaceM);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
.spinner {
|
|
202
|
-
width: 24px;
|
|
203
|
-
height: 24px;
|
|
204
|
-
border: 3px solid var(--divider);
|
|
205
|
-
border-top: 3px solid var(--primary);
|
|
206
|
-
border-radius: 50%;
|
|
207
|
-
animation: spin 1s linear infinite;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
@keyframes spin {
|
|
211
|
-
0% { transform: rotate(0deg); }
|
|
212
|
-
100% { transform: rotate(360deg); }
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
.verifyingText {
|
|
216
|
-
color: var(--textTitle);
|
|
217
|
-
font-size: var(--fontSizeBodyS);
|
|
218
|
-
font-weight: var(--fontWeightMedium);
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
/* Results Section */
|
|
222
|
-
.resultSection {
|
|
223
|
-
margin-top: var(--spaceM);
|
|
224
|
-
padding: var(--spaceM);
|
|
225
|
-
border-radius: var(--spaceXS);
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
.resultSection.success {
|
|
229
|
-
background: color-mix(in lab, var(--success) 10%, transparent);
|
|
230
|
-
border: 1px solid color-mix(in lab, var(--success) 20%, transparent);
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
.resultSection.failure {
|
|
234
|
-
background: color-mix(in lab, var(--error) 10%, transparent);
|
|
235
|
-
border: 1px solid color-mix(in lab, var(--error) 20%, transparent);
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
.resultHeader {
|
|
239
|
-
display: flex;
|
|
240
|
-
align-items: center;
|
|
241
|
-
gap: var(--spaceS);
|
|
242
|
-
margin-bottom: var(--spaceM);
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
.resultIcon {
|
|
246
|
-
font-size: var(--fontSizeBodyL);
|
|
247
|
-
line-height: 1;
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
.resultIcon.successIcon {
|
|
251
|
-
color: var(--success);
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
.resultIcon.failureIcon {
|
|
255
|
-
color: var(--error);
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
.resultTitle {
|
|
259
|
-
font-size: var(--fontSizeBodyL);
|
|
260
|
-
font-weight: var(--fontWeightSemibold);
|
|
261
|
-
margin: 0;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
.resultSection.success .resultTitle {
|
|
265
|
-
color: var(--success);
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
.resultSection.failure .resultTitle {
|
|
269
|
-
color: var(--error);
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
/* Result Details */
|
|
273
|
-
.resultDetails {
|
|
274
|
-
display: flex;
|
|
275
|
-
flex-direction: column;
|
|
276
|
-
gap: var(--spaceXS);
|
|
277
|
-
margin-bottom: var(--spaceM);
|
|
278
|
-
background: color-mix(in lab, var(--background) 50%, transparent);
|
|
279
|
-
padding: var(--spaceS);
|
|
280
|
-
border-radius: var(--spaceXS);
|
|
281
|
-
border: 1px solid color-mix(in lab, var(--text) 5%, transparent);
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
.resultRow {
|
|
285
|
-
display: flex;
|
|
286
|
-
flex-direction: column;
|
|
287
|
-
align-items: flex-start;
|
|
288
|
-
gap: var(--spaceXS);
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
.resultLabel {
|
|
292
|
-
font-weight: var(--fontWeightMedium);
|
|
293
|
-
color: var(--textBody);
|
|
294
|
-
font-size: var(--fontSizeBodyXS);
|
|
295
|
-
flex-shrink: 0;
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
.resultValue {
|
|
299
|
-
color: var(--text);
|
|
300
|
-
font-family: var(--fontFamilyMono);
|
|
301
|
-
font-size: var(--fontSizeBodyXS);
|
|
302
|
-
word-break: break-word;
|
|
303
|
-
word-wrap: break-word;
|
|
304
|
-
overflow-wrap: break-word;
|
|
305
|
-
white-space: normal;
|
|
306
|
-
text-align: left;
|
|
307
|
-
width: 100%;
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
/* Special handling for error messages - use normal text wrapping */
|
|
311
|
-
.resultValue.errorMessage {
|
|
312
|
-
font-family: var(--fontFamilyBody);
|
|
313
|
-
word-break: normal;
|
|
314
|
-
word-wrap: break-word;
|
|
315
|
-
overflow-wrap: break-word;
|
|
316
|
-
hyphens: auto;
|
|
317
|
-
text-align: left;
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
.resultMessage {
|
|
321
|
-
font-size: var(--fontSizeBodyS);
|
|
322
|
-
font-weight: var(--fontWeightMedium);
|
|
323
|
-
line-height: 1.6;
|
|
324
|
-
padding: var(--spaceS);
|
|
325
|
-
border-radius: var(--spaceXS);
|
|
326
|
-
margin-top: var(--spaceXS);
|
|
327
|
-
word-wrap: break-word;
|
|
328
|
-
overflow-wrap: break-word;
|
|
329
|
-
hyphens: auto;
|
|
330
|
-
white-space: pre-wrap;
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
.resultSection.success .resultMessage {
|
|
334
|
-
background: color-mix(in lab, var(--success) 8%, transparent);
|
|
335
|
-
color: var(--success);
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
.resultSection.failure .resultMessage {
|
|
339
|
-
background: color-mix(in lab, var(--error) 8%, transparent);
|
|
340
|
-
color: var(--error);
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
/* Responsive Design */
|
|
344
|
-
@media (max-width: 768px) {
|
|
345
|
-
.modal {
|
|
346
|
-
width: 95%;
|
|
347
|
-
max-height: 90vh;
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
.content {
|
|
351
|
-
padding: var(--spaceM);
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
.uploadArea {
|
|
355
|
-
padding: var(--spaceL);
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
.resultRow {
|
|
359
|
-
flex-direction: column;
|
|
360
|
-
gap: var(--spaceXS);
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
.resultValue {
|
|
364
|
-
text-align: left;
|
|
365
|
-
}
|
|
366
|
-
}
|