larxius commited on
Commit
b3d1f02
·
verified ·
1 Parent(s): d7e891b

Update frontend/src/components/FeatureComparison.jsx

Browse files
frontend/src/components/FeatureComparison.jsx CHANGED
@@ -1,15 +1,15 @@
1
  import React from 'react';
2
 
3
  const CheckIcon = () => (
4
- <div className="flex items-center justify-center mx-auto">
5
- <svg className="w-4 h-4 text-emerald-500 stroke-[3]" fill="none" viewBox="0 0 24 24" stroke="currentColor">
6
  <path strokeLinecap="round" strokeLinejoin="round" d="M5 13l4 4L19 7" />
7
  </svg>
8
  </div>
9
  );
10
 
11
  const CrossIcon = () => (
12
- <div className="w-5 h-5 rounded-full bg-red-100 text-red-400 flex items-center justify-center mx-auto">
13
  <svg className="w-3 h-3 stroke-[2.5]" fill="none" viewBox="0 0 24 24" stroke="currentColor">
14
  <path strokeLinecap="round" strokeLinejoin="round" d="M6 18L18 6M6 6l12 12" />
15
  </svg>
@@ -17,8 +17,8 @@ const CrossIcon = () => (
17
  );
18
 
19
  const HalfIcon = () => (
20
- <div className="w-4 h-4 rounded-full bg-[#0B132B] text-white flex items-center justify-center mx-auto text-[9px] font-bold shadow-sm">
21
- ◐
22
  </div>
23
  );
24
 
@@ -132,45 +132,51 @@ export const FeatureComparison = () => {
132
  };
133
 
134
  return (
135
- <section id="comparison" className="py-4 md:py-6 bg-slate-50/50 relative border-t border-slate-200/60">
136
  <div className="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8">
137
 
138
- {/* Header Text */}
139
- <div className="text-center mb-3">
140
- <p className="text-slate-600 max-w-3xl mx-auto text-xs md:text-sm font-medium">
 
 
 
 
 
 
141
  See how LarShield compares against legacy vulnerability scanners on coverage, automation, and reporting.
142
  </p>
143
  </div>
144
 
145
  {/* Comparison Table Card */}
146
- <div className="bg-white border border-slate-200/80 rounded-2xl shadow-xl overflow-hidden">
147
  <div className="overflow-x-auto custom-scrollbar">
148
- <table className="w-full text-left border-collapse min-w-[640px]">
149
 
150
  {/* Header Row */}
151
  <thead>
152
  <tr className="bg-[#0B132B] text-white">
153
- <th className="py-2.5 px-5 font-bold text-xs sm:text-sm w-[34%]">
154
  Feature
155
  </th>
156
 
157
  {/* LarShield Column Header */}
158
- <th className="py-2.5 px-3 font-extrabold text-xs sm:text-sm text-center w-[19%] bg-[#0B132B] text-sky-400">
159
  LarShield
160
  </th>
161
 
162
  {/* Nessus Header */}
163
- <th className="py-2.5 px-3 font-bold text-xs sm:text-sm text-center w-[15%] text-slate-100">
164
  Nessus
165
  </th>
166
 
167
  {/* OpenVAS Header */}
168
- <th className="py-2.5 px-3 font-bold text-xs sm:text-sm text-center w-[16%] text-slate-100">
169
  OpenVAS
170
  </th>
171
 
172
  {/* Qualys Header */}
173
- <th className="py-2.5 px-3 font-bold text-xs sm:text-sm text-center w-[16%] text-slate-100">
174
  Qualys
175
  </th>
176
  </tr>
@@ -181,30 +187,30 @@ export const FeatureComparison = () => {
181
  {comparisonData.map((row, idx) => (
182
  <tr
183
  key={idx}
184
- className={`${idx % 2 === 0 ? 'bg-white' : 'bg-slate-50/60'} hover:bg-blue-50/20 transition-colors`}
185
  >
186
  {/* Feature Name */}
187
- <td className="py-2 px-5 font-bold text-slate-800">
188
  {row.feature}
189
  </td>
190
 
191
  {/* LarShield Cell (Highlighted Ice-Blue Column) */}
192
- <td className="py-2 px-3 text-center bg-[#E0F2FE]/60 border-x border-blue-100/50">
193
  {renderCell(row.larshield)}
194
  </td>
195
 
196
  {/* Nessus Cell */}
197
- <td className="py-2 px-3 text-center">
198
  {renderCell(row.nessus)}
199
  </td>
200
 
201
  {/* OpenVAS Cell */}
202
- <td className="py-2 px-3 text-center">
203
  {renderCell(row.openvas)}
204
  </td>
205
 
206
  {/* Qualys Cell */}
207
- <td className="py-2 px-3 text-center">
208
  {renderCell(row.qualys)}
209
  </td>
210
  </tr>
@@ -212,27 +218,27 @@ export const FeatureComparison = () => {
212
 
213
  {/* Pricing Row */}
214
  <tr className="bg-white font-bold border-t border-slate-200">
215
- <td className="py-2.5 px-5 text-slate-900 text-xs sm:text-sm font-bold">
216
  Pricing
217
  </td>
218
 
219
  {/* LarShield Pricing */}
220
- <td className="py-2.5 px-3 text-center bg-[#E0F2FE]/90 border-x border-blue-100 text-blue-700 text-xs sm:text-[13px] font-extrabold">
221
  Affordable &amp; Flexible
222
  </td>
223
 
224
  {/* Nessus Pricing */}
225
- <td className="py-2.5 px-3 text-center text-slate-800 font-bold text-xs sm:text-[13px]">
226
  Subscription
227
  </td>
228
 
229
  {/* OpenVAS Pricing */}
230
- <td className="py-2.5 px-3 text-center text-slate-800 font-bold text-xs sm:text-[13px]">
231
  Free (Open Source)
232
  </td>
233
 
234
  {/* Qualys Pricing */}
235
- <td className="py-2.5 px-3 text-center text-slate-800 font-bold text-xs sm:text-[13px]">
236
  Subscription
237
  </td>
238
  </tr>
@@ -251,3 +257,4 @@ export default FeatureComparison;
251
 
252
 
253
 
 
 
1
  import React from 'react';
2
 
3
  const CheckIcon = () => (
4
+ <div className="w-5 h-5 rounded-full bg-emerald-50 text-emerald-500 flex items-center justify-center mx-auto">
5
+ <svg className="w-3.5 h-3.5 stroke-[3]" fill="none" viewBox="0 0 24 24" stroke="currentColor">
6
  <path strokeLinecap="round" strokeLinejoin="round" d="M5 13l4 4L19 7" />
7
  </svg>
8
  </div>
9
  );
10
 
11
  const CrossIcon = () => (
12
+ <div className="w-5 h-5 rounded-full bg-red-100/80 text-red-400 flex items-center justify-center mx-auto">
13
  <svg className="w-3 h-3 stroke-[2.5]" fill="none" viewBox="0 0 24 24" stroke="currentColor">
14
  <path strokeLinecap="round" strokeLinejoin="round" d="M6 18L18 6M6 6l12 12" />
15
  </svg>
 
17
  );
18
 
19
  const HalfIcon = () => (
20
+ <div className="w-4 h-4 rounded-full bg-[#0B132B] flex items-center justify-center mx-auto shadow-sm">
21
+ <div className="w-1.5 h-1.5 rounded-full bg-white"></div>
22
  </div>
23
  );
24
 
 
132
  };
133
 
134
  return (
135
+ <section id="comparison" className="py-12 md:py-16 bg-gradient-to-b from-slate-50/50 to-white relative border-t border-slate-200/60">
136
  <div className="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8">
137
 
138
+ {/* Top Header Section matching reference screenshot */}
139
+ <div className="text-center mb-8 md:mb-10">
140
+ <span className="text-[#4F46E5] font-extrabold text-xs uppercase tracking-widest mb-2 block">
141
+ WHY LARSHIELD
142
+ </span>
143
+ <h2 className="text-3xl md:text-4xl font-extrabold text-slate-900 tracking-tight mb-3">
144
+ One Platform. Every Security Advantage.
145
+ </h2>
146
+ <p className="text-slate-500 max-w-xl mx-auto text-xs md:text-sm font-medium leading-relaxed">
147
  See how LarShield compares against legacy vulnerability scanners on coverage, automation, and reporting.
148
  </p>
149
  </div>
150
 
151
  {/* Comparison Table Card */}
152
+ <div className="bg-white border border-slate-200/80 rounded-2xl shadow-xl shadow-slate-200/50 overflow-hidden">
153
  <div className="overflow-x-auto custom-scrollbar">
154
+ <table className="w-full text-left border-collapse min-w-[680px]">
155
 
156
  {/* Header Row */}
157
  <thead>
158
  <tr className="bg-[#0B132B] text-white">
159
+ <th className="py-3.5 px-5 font-bold text-xs sm:text-sm w-[34%]">
160
  Feature
161
  </th>
162
 
163
  {/* LarShield Column Header */}
164
+ <th className="py-3.5 px-4 font-extrabold text-xs sm:text-sm text-center w-[19%] bg-[#0B132B] text-sky-400">
165
  LarShield
166
  </th>
167
 
168
  {/* Nessus Header */}
169
+ <th className="py-3.5 px-4 font-bold text-xs sm:text-sm text-center w-[15%] text-slate-100">
170
  Nessus
171
  </th>
172
 
173
  {/* OpenVAS Header */}
174
+ <th className="py-3.5 px-4 font-bold text-xs sm:text-sm text-center w-[16%] text-slate-100">
175
  OpenVAS
176
  </th>
177
 
178
  {/* Qualys Header */}
179
+ <th className="py-3.5 px-4 font-bold text-xs sm:text-sm text-center w-[16%] text-slate-100">
180
  Qualys
181
  </th>
182
  </tr>
 
187
  {comparisonData.map((row, idx) => (
188
  <tr
189
  key={idx}
190
+ className={`${idx % 2 === 0 ? 'bg-white' : 'bg-slate-50/50'} hover:bg-blue-50/20 transition-colors`}
191
  >
192
  {/* Feature Name */}
193
+ <td className="py-2.5 px-5 font-bold text-slate-800">
194
  {row.feature}
195
  </td>
196
 
197
  {/* LarShield Cell (Highlighted Ice-Blue Column) */}
198
+ <td className="py-2.5 px-4 text-center bg-[#E0F2FE]/60 border-x border-blue-100/50">
199
  {renderCell(row.larshield)}
200
  </td>
201
 
202
  {/* Nessus Cell */}
203
+ <td className="py-2.5 px-4 text-center">
204
  {renderCell(row.nessus)}
205
  </td>
206
 
207
  {/* OpenVAS Cell */}
208
+ <td className="py-2.5 px-4 text-center">
209
  {renderCell(row.openvas)}
210
  </td>
211
 
212
  {/* Qualys Cell */}
213
+ <td className="py-2.5 px-4 text-center">
214
  {renderCell(row.qualys)}
215
  </td>
216
  </tr>
 
218
 
219
  {/* Pricing Row */}
220
  <tr className="bg-white font-bold border-t border-slate-200">
221
+ <td className="py-3 px-5 text-slate-900 text-xs sm:text-sm font-bold">
222
  Pricing
223
  </td>
224
 
225
  {/* LarShield Pricing */}
226
+ <td className="py-3 px-4 text-center bg-[#E0F2FE]/90 border-x border-blue-100 text-blue-700 text-xs sm:text-[13px] font-extrabold">
227
  Affordable &amp; Flexible
228
  </td>
229
 
230
  {/* Nessus Pricing */}
231
+ <td className="py-3 px-4 text-center text-slate-800 font-bold text-xs sm:text-[13px]">
232
  Subscription
233
  </td>
234
 
235
  {/* OpenVAS Pricing */}
236
+ <td className="py-3 px-4 text-center text-slate-800 font-bold text-xs sm:text-[13px]">
237
  Free (Open Source)
238
  </td>
239
 
240
  {/* Qualys Pricing */}
241
+ <td className="py-3 px-4 text-center text-slate-800 font-bold text-xs sm:text-[13px]">
242
  Subscription
243
  </td>
244
  </tr>
 
257
 
258
 
259
 
260
+