Changes for page Public Web Site

Last modified by Agnease on 2026/07/03 16:14

From version 20.6
edited by Agnease
on 2026/05/30 16:18
Change comment: There is no comment for this version
To version 28.32
edited by Agnease
on 2026/07/03 13:58
Change comment: There is no comment for this version

Summary

Details

Page properties
Default language
... ... @@ -1,1 +1,0 @@
1 -en
Hidden
... ... @@ -1,1 +1,1 @@
1 -false
1 +true
Content
... ... @@ -2,7 +2,45 @@
2 2  #macro (displayPublicContent)
3 3   #set ($discard = $xwiki.ssx.use('PublicWebSite.WebHome'))
4 4   {{html clean="false"}}
5 + <section class="hero hero-saas" id="top">
6 + <div class="container">
7 + <div class="hero-layout">
8 + <div class="hero-copy">
9 + <h1>Professional XWiki consulting <span>and engineering</span></h1>
5 5  
11 + <p class="lead">
12 + Agnease helps organizations upgrade, maintain, secure and extend production XWiki platforms with practical engineering support, custom development, integrations and long-term care.
13 + </p>
14 +
15 + <ul class="benefits">
16 + <li>XWiki LTS upgrades</li>
17 + <li>Maintenance and support</li>
18 + <li>Custom XWiki development</li>
19 + <li>Migrations and integrations</li>
20 + </ul>
21 +
22 + <div class="hero-actions" id="hero-cta">
23 + <a class="btn btn-primary" href="https://calendly.com/alex-agnease/30min?back=1&month=2026-06">
24 + Book a free discussion
25 + </a>
26 + <a class="btn btn-secondary" href="$xwiki.getURL('services.WebHome')">View XWiki services</a>
27 + </div>
28 + </div>
29 +
30 + <div class="hero-image-wrapper">
31 + <img
32 + class="hero-image"
33 + src="$xwiki.getDocument('PublicWebSite.WebHome').getAttachmentURL('agnease-xwiki-hero.png')"
34 + alt="Illustration of a professional XWiki platform dashboard with upgrade, security and maintenance elements"
35 + width="1200"
36 + height="900"
37 + loading="eager"
38 + />
39 + </div>
40 + </div>
41 + </div>
42 + </section>
43 +#*
6 6   <section class="hero hero-centered" aria-labelledby="hero-title">
7 7   <div class="container hero-inner">
8 8   <h1 id="hero-title">Professional XWiki consulting and engineering</h1>
... ... @@ -26,7 +26,7 @@
26 26   </div>
27 27   </div>
28 28   </section>
29 -
67 +*#
30 30   <section class="trust-strip" aria-label="Agnease experience">
31 31   <div class="container">
32 32   <ul>
... ... @@ -111,9 +111,9 @@
111 111   </div>
112 112   </section>
113 113  
114 - <section class="industry-trust-section" aria-labelledby="industry-trust-title">
152 + <section class="contrast-band" aria-labelledby="industry-trust-title">
115 115   <div class="container">
116 - <div class="industry-trust-panel">
154 + <div class="contrast-panel">
117 117   <h2 id="industry-trust-title">Trusted XWiki expertise for business-critical platforms</h2>
118 118  
119 119   <p class="section-intro">
... ... @@ -121,7 +121,7 @@
121 121   government institutions, transportation, software development, compliance programs and regulated environments.
122 122   </p>
123 123  
124 - <div class="industry-tags" aria-label="Industries and environments supported">
162 + <div class="contrast-tags" aria-label="Industries and environments supported">
125 125   <span>Healthcare</span>
126 126   <span>Financial services</span>
127 127   <span>Scientific research</span>
... ... @@ -132,7 +132,7 @@
132 132   <span>Regulated environments</span>
133 133   </div>
134 134  
135 - <p class="industry-support">
173 + <p class="contrast-support">
136 136   Organizations rely on these platforms to manage documentation, workflows, compliance processes,
137 137   research knowledge and critical business information. From upgrades and authentication integrations
138 138   to workflow systems and long-term maintenance, Agnease helps keep XWiki secure, stable and ready for the future.
... ... @@ -148,10 +148,11 @@
148 148   <h2 id="why-title">Why work with an XWiki specialist</h2>
149 149   <p>
150 150   XWiki projects often involve more than pages. Production platforms may include custom code,
151 - extensions, authentication, permissions, workflows, integrations and business-critical content.
189 + extensions, authentication, permissions, workflows, integrations, compliance documentation
190 + and business-critical knowledge.
152 152   </p>
153 153   <p>
154 - Agnease brings 11+ years of hands-on XWiki experience to help reduce risk, deliver practical improvements
193 + Agnease brings 11+ years of hands-on XWiki experience to help reduce risk, support long-term reliability
155 155   and leave the platform easier to maintain after the work is complete.
156 156   </p>
157 157   </div>
agnease-xwiki-hero.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.Admin
Size
... ... @@ -1,0 +1,1 @@
1 +981.8 KB
Content
XWiki.StyleSheetExtension[0]
code
... ... @@ -1,5 +1,5 @@
1 1  /* ========== Agnease Public Website ========== */
2 -
2 +/*
3 3  @brand: #00937D;
4 4  @brand-strong: #007B6A;
5 5  @brand-soft: #E7FFF8;
... ... @@ -11,6 +11,19 @@
11 11  @shadow-sm: 0 6px 20px rgba(0, 0, 0, .06);
12 12  @shadow: 0 12px 36px rgba(0, 0, 0, .08);
13 13  @maxw: 1140px;
14 +*/
15 +@brand: #00937D;
16 +@brand-strong: #007B6A;
17 +@brand-soft: #E7FFF8;
18 +@brand-bg: #F7F9FC;
19 +@text: #07182D;
20 +@text-soft: #10243D;
21 +@muted: #64748B;
22 +@line: #E6EBF2;
23 +@radius: 18px;
24 +@shadow-sm: 0 18px 45px rgba(15, 23, 42, .06);
25 +@shadow: 0 30px 80px rgba(15, 23, 42, .12);
26 +@maxw: 1140px;
14 14  
15 15  @section-padding: 30px 0;
16 16  @section-padding-mobile: 28px 0;
... ... @@ -137,7 +137,7 @@
137 137  
138 138  /* ========== Buttons ========== */
139 139  
140 -.btn-primary {
153 +/*.btn-primary {
141 141   background: @brand;
142 142   border-color: @brand;
143 143   color: #fff;
... ... @@ -149,18 +149,12 @@
149 149   color: #fff;
150 150   }
151 151  }
152 -
165 +*/
153 153  .btn-secondary {
154 - color: @brand;
167 + color: @text;
155 155   background: #fff;
156 - border: 1px solid fade(@brand, 35%);
169 + border: 1px solid fade(@text, 35%);
157 157  
158 - &:hover,
159 - &:focus {
160 - color: @brand-strong;
161 - border-color: @brand;
162 - background: @brand-bg;
163 - }
164 164  }
165 165  
166 166  /* ========== Hero ========== */
... ... @@ -172,9 +172,6 @@
172 172  
173 173   &.hero-centered {
174 174   text-align: center;
175 - background:
176 - radial-gradient(50rem 18rem at 50% -10%, @brand-soft 0%, transparent 60%),
177 - radial-gradient(50rem 18rem at 50% 0%, #E8F6F3 0%, transparent 60%);
178 178   display: flex;
179 179   align-items: center;
180 180   justify-content: center;
... ... @@ -243,34 +243,112 @@
243 243   margin-top: 22px;
244 244  }
245 245  
246 -/* ========== Trust Strip ========== */
250 +/* ========== Contrast Band ========== */
247 247  
248 -.trust-strip {
249 - padding: 18px 0;
250 - border-top: 1px solid @line;
251 - background: #fff;
252 +.contrast-band {
253 + position: relative;
254 + overflow: hidden;
255 + padding: 54px 0;
256 + border-top: 0;
257 + background:
258 + radial-gradient(circle at 18% 18%, fade(@brand, 22%) 0%, transparent 28%),
259 + radial-gradient(circle at 86% 12%, fade(@brand, 16%) 0%, transparent 30%),
260 + linear-gradient(135deg, @text 0%, @text-soft 100%);
261 + color: #fff;
252 252  
253 - ul {
254 - max-width: 960px;
255 - margin: 0 auto;
256 - padding: 0;
257 - list-style: none;
258 - display: flex;
259 - justify-content: center;
260 - gap: 22px;
261 - flex-wrap: wrap;
262 - color: @muted;
263 - font-size: 13px;
264 - }
263 + /*
264 + * Full-bleed background without changing layout width.
265 + * This extends the dark surface beyond a fixed-width parent
266 + * without using 100vw or negative margins.
267 + */
268 + box-shadow: 0 0 0 100vmax @text;
269 + clip-path: inset(0 -100vmax);
270 +}
265 265  
266 - li {
267 - display: flex;
268 - align-items: center;
269 - gap: 7px;
272 +.contrast-band::before {
273 + content: "";
274 + position: absolute;
275 + inset: 0;
276 + background:
277 + linear-gradient(90deg, fade(#fff, 4%) 1px, transparent 1px),
278 + linear-gradient(180deg, fade(#fff, 4%) 1px, transparent 1px);
279 + background-size: 52px 52px;
280 + opacity: .38;
281 + pointer-events: none;
282 +}
283 +
284 +.contrast-band .container {
285 + position: relative;
286 + z-index: 1;
287 +}
288 +
289 +.contrast-panel {
290 + max-width: 1040px;
291 + margin: 0 auto;
292 + text-align: center;
293 +}
294 +
295 +.contrast-band h2 {
296 + max-width: 860px;
297 + margin: 0 auto 12px;
298 + color: #fff;
299 +}
300 +
301 +.contrast-band .section-intro {
302 + max-width: 840px;
303 + margin: 0 auto 26px;
304 + color: #D9E3EE;
305 +}
306 +
307 +.contrast-tags {
308 + max-width: 940px;
309 + margin: 0 auto;
310 + display: flex;
311 + flex-wrap: wrap;
312 + justify-content: center;
313 + gap: 10px;
314 +}
315 +
316 +.contrast-tags span {
317 + display: inline-flex;
318 + align-items: center;
319 + padding: 8px 13px;
320 + border: 1px solid fade(#fff, 18%);
321 + border-radius: 999px;
322 + background: fade(#fff, 8%);
323 + color: #F8FAFC;
324 + font-size: 13px;
325 + font-weight: 700;
326 + line-height: 1.2;
327 +}
328 +
329 +.contrast-tags span::before {
330 + content: "";
331 + width: 7px;
332 + height: 7px;
333 + margin-right: 8px;
334 + border-radius: 50%;
335 + background: @brand;
336 + box-shadow: 0 0 0 4px fade(@brand, 18%);
337 +}
338 +
339 +.contrast-support {
340 + max-width: 860px;
341 + margin: 30px auto 0;
342 + color: #D9E3EE;
343 + text-align: center;
344 + font-size: 15px;
345 + line-height: 1.7;
346 +}
347 +
348 +@media (max-width: 640px) {
349 + .contrast-band {
350 + padding: 40px 0;
270 270   }
271 271  
272 - i {
273 - color: @brand;
353 + .contrast-tags span {
354 + font-size: 12px;
355 + padding: 8px 11px;
274 274   }
275 275  }
276 276  
... ... @@ -321,7 +321,6 @@
321 321  .pathway-card,
322 322  .service-card,
323 323  .resource-card {
324 - background: #fff;
325 325   border: 1px solid @line;
326 326   border-radius: @radius;
327 327   box-shadow: @shadow-sm;
... ... @@ -431,79 +431,6 @@
431 431   }
432 432  }
433 433  
434 -.industry-trust-section {
435 - background:
436 - radial-gradient(42rem 16rem at 50% 0%, @brand-bg 0%, transparent 70%);
437 -
438 - .industry-trust-panel {
439 - max-width: 1040px;
440 - margin: 0 auto;
441 - padding: 30px 28px;
442 - border: 1px solid fade(@brand, 16%);
443 - border-radius: @radius;
444 - background:
445 - radial-gradient(34rem 12rem at 50% 0%, fade(@brand-soft, 75%) 0%, #fff 72%);
446 - box-shadow: @shadow-sm;
447 - text-align: center;
448 - }
449 -
450 - h2 {
451 - margin-bottom: 12px;
452 - }
453 -
454 - .section-intro {
455 - margin-bottom: 20px;
456 - }
457 -
458 - .industry-tags {
459 - max-width: 880px;
460 - margin: 0 auto;
461 - display: flex;
462 - flex-wrap: wrap;
463 - justify-content: center;
464 - gap: 10px;
465 - }
466 -
467 - .industry-tags span {
468 - display: inline-flex;
469 - align-items: center;
470 - padding: 7px 12px;
471 - border: 1px solid fade(@brand, 20%);
472 - border-radius: 999px;
473 - background: #fff;
474 - color: @text;
475 - font-size: 13px;
476 - font-weight: 600;
477 - line-height: 1.2;
478 - box-shadow: 0 3px 10px rgba(0, 0, 0, .04);
479 - }
480 -
481 - .industry-support {
482 - max-width: 820px;
483 - margin: 22px auto 0;
484 - color: @muted;
485 - font-size: 16px;
486 - line-height: 1.6;
487 - }
488 -}
489 -
490 -@media (max-width: 640px) {
491 - .industry-trust-section {
492 - .industry-trust-panel {
493 - padding: 24px 18px;
494 - }
495 -
496 - .industry-tags {
497 - gap: 8px;
498 - }
499 -
500 - .industry-tags span {
501 - font-size: 12px;
502 - padding: 6px 10px;
503 - }
504 - }
505 -}
506 -
507 507  /* ========== Services ========== */
508 508  
509 509  .services {
... ... @@ -516,7 +516,6 @@
516 516   align-items: flex-start;
517 517   gap: 16px;
518 518   padding: 22px;
519 - background: #fff;
520 520   border: 1px solid @line;
521 521   border-radius: @radius;
522 522   box-shadow: @shadow-sm;
... ... @@ -604,7 +604,6 @@
604 604   position: relative;
605 605   padding: 16px 16px 16px 58px;
606 606   margin-bottom: 12px;
607 - background: #fff;
608 608   border: 1px solid @line;
609 609   border-radius: @radius;
610 610   box-shadow: @shadow-sm;
... ... @@ -736,8 +736,8 @@
736 736  
737 737  /* ========== CTA ========== */
738 738  
739 -.cta-section {
740 - padding: @section-padding;
745 +#mainContentArea .cta-section {
746 + padding: 44px 0 56px;
741 741  
742 742   .contact-inline {
743 743   margin: 0;
... ... @@ -749,27 +749,70 @@
749 749   }
750 750  }
751 751  
752 -.cta-panel {
753 - max-width: 860px;
758 +#mainContentArea .cta-panel {
759 + position: relative;
760 + overflow: hidden;
761 + max-width: 1040px;
754 754   margin: 0 auto;
755 - padding: 32px;
756 - border-radius: @radius;
757 - border: 1px solid fade(@brand, 20%);
763 + padding: 48px 40px;
764 + border: 0;
765 + border-radius: 26px;
758 758   background:
759 - radial-gradient(34rem 12rem at 50% 0%, @brand-soft 0%, #fff 70%);
760 - box-shadow: @shadow-sm;
767 + radial-gradient(circle at 88% 10%, fade(@brand, 24%) 0%, transparent 30%),
768 + linear-gradient(135deg, @text 0%, @text-soft 100%);
769 + color: #fff;
770 + box-shadow: @shadow;
761 761   text-align: center;
772 +}
762 762  
763 - h2 {
764 - margin-top: 0;
765 - }
774 +#mainContentArea .cta-panel::before {
775 + content: "";
776 + position: absolute;
777 + inset: 0;
778 + background:
779 + linear-gradient(90deg, fade(#fff, 4%) 1px, transparent 1px),
780 + linear-gradient(180deg, fade(#fff, 4%) 1px, transparent 1px);
781 + background-size: 48px 48px;
782 + opacity: .4;
783 + pointer-events: none;
784 +}
766 766  
767 - p {
768 - color: @muted;
769 - line-height: 1.55;
770 - }
786 +#mainContentArea .cta-panel h2,
787 +#mainContentArea .cta-panel p,
788 +#mainContentArea .cta-panel .btn {
789 + position: relative;
790 + z-index: 1;
771 771  }
772 772  
793 +#mainContentArea .cta-panel h2 {
794 + max-width: 760px;
795 + margin: 0 auto 16px;
796 + color: #fff;
797 +}
798 +
799 +#mainContentArea .cta-panel p {
800 + max-width: 760px;
801 + margin: 0 auto 28px;
802 + color: #DBE4EF;
803 + font-size: 16px;
804 + line-height: 1.6;
805 +}
806 +
807 +#mainContentArea .cta-panel .btn-primary {
808 + border-color: #fff;
809 + background: #fff;
810 + color: @text;
811 + box-shadow: 0 18px 42px rgba(0, 0, 0, .18);
812 +}
813 +
814 +#mainContentArea .cta-panel .btn-primary:hover,
815 +#mainContentArea .cta-panel .btn-primary:focus {
816 + border-color: #fff;
817 + background: #fff;
818 + color: @brand-strong;
819 + text-decoration: none;
820 +}
821 +
773 773  .resource-inline-cta {
774 774   display: flex;
775 775   align-items: center;
... ... @@ -901,9 +901,14 @@
901 901   gap: 14px;
902 902   }
903 903  
904 - .cta-panel {
905 - padding: 24px 20px;
953 + #mainContentArea .cta-panel {
954 + padding: 30px 22px;
955 + border-radius: 20px;
906 906   }
957 +
958 + #mainContentArea .cta-panel .btn-primary {
959 + width: 100%;
960 + }
907 907  }
908 908  
909 909  /* ========== Resource / Article Pages ========== */
... ... @@ -915,9 +915,6 @@
915 915  .resource-header {
916 916   padding: @section-padding;
917 917   border-top: none;
918 - background:
919 - radial-gradient(50rem 18rem at 50% -10%, @brand-soft 0%, transparent 60%),
920 - radial-gradient(50rem 18rem at 50% 0%, #E8F6F3 0%, transparent 60%);
921 921  
922 922   h1 {
923 923   margin: 0 auto 14px;
... ... @@ -995,6 +995,45 @@
995 995   }
996 996  }
997 997  
1049 +.resource-note.related-resources {
1050 + p {
1051 + margin-bottom: 10px;
1052 + }
1053 +
1054 + ul {
1055 + margin: 0;
1056 + padding-left: 20px;
1057 + }
1058 +
1059 + li {
1060 + margin: 6px 0;
1061 + color: @muted;
1062 + }
1063 +}
1064 +
1065 +.resource-faq-item {
1066 + display: flow-root;
1067 + border-bottom: 1px solid @line;
1068 + padding: 12px 0;
1069 +
1070 + summary {
1071 + cursor: pointer;
1072 + font-weight: 700;
1073 + color: @text;
1074 + line-height: 1.4;
1075 + }
1076 +
1077 + summary:hover,
1078 + summary:focus {
1079 + color: @brand-strong;
1080 + }
1081 +
1082 + p {
1083 + margin: 10px 0 4px;
1084 + color: @muted;
1085 + }
1086 +}
1087 +
998 998  .resource-checklist {
999 999   margin: 18px 0 24px;
1000 1000   padding: 0;
... ... @@ -1026,7 +1026,6 @@
1026 1026   border: 1px solid @line;
1027 1027   border-radius: @radius;
1028 1028   padding: 18px;
1029 - background: #fff;
1030 1030   box-shadow: @shadow-sm;
1031 1031  
1032 1032   h4 {
... ... @@ -1116,30 +1116,39 @@
1116 1116  }
1117 1117  
1118 1118  .product-card-grid {
1119 - max-width: 840px;
1120 - margin: 22px auto 0;
1208 + max-width: 980px;
1209 + margin: 26px auto 0;
1121 1121   display: grid;
1122 1122   grid-template-columns: 1fr;
1123 - grid-gap: 18px;
1212 + grid-gap: 22px;
1124 1124  }
1125 1125  
1126 1126  .product-card {
1127 - background: #fff;
1216 + position: relative;
1128 1128   border: 1px solid @line;
1129 1129   border-radius: @radius;
1130 1130   box-shadow: @shadow-sm;
1131 - padding: 28px;
1220 + padding: 32px;
1132 1132   display: grid;
1133 - grid-template-columns: 68px 1fr;
1134 - grid-gap: 22px;
1222 + grid-template-columns: 70px 1fr;
1223 + grid-gap: 24px;
1135 1135   align-items: start;
1225 + overflow: hidden;
1136 1136  
1227 + &:before {
1228 + content: "";
1229 + position: absolute;
1230 + inset: 0 auto 0 0;
1231 + width: 5px;
1232 + background: linear-gradient(180deg, @brand 0%, @brand-strong 100%);
1233 + }
1234 +
1137 1137   .product-card-icon {
1138 1138   width: 58px;
1139 1139   height: 58px;
1140 1140   border-radius: 50%;
1141 1141   background: fade(@brand, 10%);
1142 - border: 1px solid fade(@brand, 20%);
1240 + border: 1px solid fade(@brand, 22%);
1143 1143   color: @brand;
1144 1144   display: flex;
1145 1145   align-items: center;
... ... @@ -1148,11 +1148,15 @@
1148 1148   flex-shrink: 0;
1149 1149   }
1150 1150  
1249 + .product-card-body {
1250 + min-width: 0;
1251 + }
1252 +
1151 1151   h3 {
1152 1152   margin: 0 0 10px;
1153 1153   color: @text;
1154 - font-size: 23px;
1155 - line-height: 1.25;
1256 + font-size: 25px;
1257 + line-height: 1.22;
1156 1156   font-weight: 800;
1157 1157   }
1158 1158  
... ... @@ -1161,25 +1161,36 @@
1161 1161   line-height: 1.6;
1162 1162   }
1163 1163  
1164 - .card-link {
1165 - margin: 0;
1166 -
1167 - a {
1168 - font-weight: 700;
1169 - }
1266 + .product-card-description {
1267 + max-width: 760px;
1268 + margin: 0 0 14px;
1269 + font-size: 16px;
1170 1170   }
1171 1171  }
1172 1172  
1173 1173  .product-card-kicker {
1274 + display: inline-flex;
1275 + align-items: center;
1276 + gap: 7px;
1277 + width: fit-content;
1174 1174   margin-bottom: 10px;
1175 1175   padding: 5px 10px;
1280 + border: 1px solid fade(@brand, 24%);
1281 + border-radius: 999px;
1282 + background: fade(@brand, 8%);
1283 + color: @brand-strong;
1176 1176   font-size: 12px;
1285 + font-weight: 800;
1177 1177   text-transform: uppercase;
1178 1178   letter-spacing: .04em;
1288 +
1289 + i {
1290 + color: @brand;
1291 + }
1179 1179  }
1180 1180  
1181 1181  .product-highlights {
1182 - margin: 14px 0 20px;
1295 + margin: 14px 0 22px;
1183 1183   padding-left: 18px;
1184 1184   color: @muted;
1185 1185  
... ... @@ -1189,12 +1189,58 @@
1189 1189   }
1190 1190  }
1191 1191  
1305 +.product-card-actions {
1306 + display: flex;
1307 + align-items: center;
1308 + gap: 16px;
1309 + flex-wrap: wrap;
1310 +
1311 + .btn {
1312 + font-weight: 700;
1313 + }
1314 +}
1315 +
1316 +.product-card-contact {
1317 + color: @brand;
1318 + font-weight: 700;
1319 + text-decoration: underline;
1320 +
1321 + &:hover,
1322 + &:focus {
1323 + color: @brand-strong;
1324 + }
1325 +}
1326 +
1327 +@media (max-width: 640px) {
1328 + .product-card {
1329 + grid-template-columns: 1fr;
1330 + padding: 26px 22px;
1331 + text-align: left;
1332 +
1333 + &:before {
1334 + width: 4px;
1335 + }
1336 +
1337 + .product-card-icon {
1338 + margin-bottom: 2px;
1339 + }
1340 +
1341 + h3 {
1342 + font-size: 22px;
1343 + }
1344 + }
1345 +
1346 + .product-card-actions {
1347 + gap: 12px;
1348 + }
1349 +}
1350 +
1192 1192  /* ========== Individual Product Pages ========== */
1193 1193  
1194 1194  .product-layout {
1195 1195   display: grid;
1196 - grid-template-columns: 1.1fr .9fr;
1197 - grid-gap: 36px;
1355 + grid-template-columns: minmax(0, 1.12fr) minmax(280px, .88fr);
1356 + grid-gap: 32px;
1198 1198   max-width: 1040px;
1199 1199   margin: 0 auto;
1200 1200   align-items: start;
... ... @@ -1202,8 +1202,8 @@
1202 1202  
1203 1203  .product-summary-card,
1204 1204  .product-info-card,
1364 +.product-feature,
1205 1205  .product-gallery-panel {
1206 - background: #fff;
1207 1207   border: 1px solid @line;
1208 1208   border-radius: @radius;
1209 1209   box-shadow: @shadow-sm;
... ... @@ -1210,16 +1210,18 @@
1210 1210  }
1211 1211  
1212 1212  .product-summary-card {
1213 - padding: 26px;
1372 + padding: 28px;
1214 1214  
1215 1215   h2 {
1216 1216   text-align: left;
1217 1217   margin-top: 0;
1377 + margin-bottom: 14px;
1378 + line-height: 1.25;
1218 1218   }
1219 1219  
1220 1220   p {
1221 1221   color: @muted;
1222 - line-height: 1.6;
1383 + line-height: 1.62;
1223 1223   }
1224 1224  
1225 1225   p:last-child {
... ... @@ -1228,13 +1228,19 @@
1228 1228  }
1229 1229  
1230 1230  .product-info-card {
1231 - padding: 22px;
1392 + padding: 24px;
1232 1232  
1233 1233   h3 {
1234 1234   margin-top: 0;
1235 1235   margin-bottom: 12px;
1397 + line-height: 1.3;
1236 1236   }
1237 1237  
1400 + p {
1401 + color: @muted;
1402 + line-height: 1.55;
1403 + }
1404 +
1238 1238   ul {
1239 1239   margin: 0;
1240 1240   padding-left: 20px;
... ... @@ -1243,25 +1243,30 @@
1243 1243  
1244 1244   li {
1245 1245   margin: 8px 0;
1246 - line-height: 1.45;
1413 + line-height: 1.3;
1247 1247   }
1248 1248  }
1249 1249  
1417 +.product-card-note {
1418 + margin: 0 0 14px;
1419 + color: @muted;
1420 + line-height: 1.55;
1421 +}
1422 +
1250 1250  .product-feature-grid {
1251 1251   display: grid;
1252 1252   grid-template-columns: repeat(3, minmax(0, 1fr));
1253 - grid-gap: 18px;
1426 + grid-gap: 20px;
1254 1254   max-width: 1040px;
1255 - margin: 22px auto 0;
1428 + margin: 24px auto 0;
1256 1256  }
1257 1257  
1258 1258  .product-feature {
1259 - background: #fff;
1260 - border: 1px solid @line;
1261 - border-radius: @radius;
1262 - box-shadow: @shadow-sm;
1263 - padding: 22px;
1432 + padding: 24px;
1433 + min-width: 0;
1434 + min-height: 100%;
1264 1264  
1436 + .card-heading,
1265 1265   .feature-heading {
1266 1266   display: flex;
1267 1267   align-items: center;
... ... @@ -1292,10 +1292,56 @@
1292 1292   p {
1293 1293   margin: 0;
1294 1294   color: @muted;
1295 - line-height: 1.5;
1467 + line-height: 1.52;
1296 1296   }
1297 1297  }
1298 1298  
1471 +.product-gallery-caption {
1472 + max-width: 820px;
1473 + margin: 12px auto 0;
1474 + color: @muted;
1475 + font-size: 14px;
1476 + line-height: 1.5;
1477 + text-align: center;
1478 +}
1479 +
1480 +/* Keep the default XWiki gallery style.
1481 + Only add spacing before it and center it. */
1482 +.gallery.xGallery {
1483 + margin: 25px auto;
1484 + width: 920px;
1485 + height: 518px;
1486 +}
1487 +
1488 +.product-section-muted {
1489 + background:
1490 + radial-gradient(42rem 16rem at 50% 0%, @brand-bg 0%, transparent 65%);
1491 +}
1492 +
1493 +/* Compact process list when used inside a product card. */
1494 +.product-summary-card .process-list {
1495 + margin-top: 16px;
1496 +
1497 + li {
1498 + padding: 13px 14px 13px 50px;
1499 + margin-bottom: 10px;
1500 + box-shadow: none;
1501 + }
1502 +
1503 + li:before {
1504 + left: 14px;
1505 + top: 14px;
1506 + width: 24px;
1507 + height: 24px;
1508 + font-size: 12px;
1509 + }
1510 +
1511 + strong {
1512 + margin-bottom: 2px;
1513 + }
1514 +}
1515 +
1516 +/* Kept for older product pages that still use a screenshot placeholder/panel. */
1299 1299  .product-gallery-panel {
1300 1300   max-width: 1040px;
1301 1301   margin: 20px auto 0;
... ... @@ -1328,11 +1328,6 @@
1328 1328   justify-content: center;
1329 1329  }
1330 1330  
1331 -.product-section-muted {
1332 - background:
1333 - radial-gradient(42rem 16rem at 50% 0%, @brand-bg 0%, transparent 65%);
1334 -}
1335 -
1336 1336  @media (max-width: 980px) {
1337 1337   .product-layout,
1338 1338   .product-feature-grid {
... ... @@ -1361,12 +1361,37 @@
1361 1361   .product-gallery-panel {
1362 1362   padding: 20px;
1363 1363   }
1577 +
1578 + .product-feature {
1579 + .card-heading,
1580 + .feature-heading {
1581 + gap: 12px;
1582 + }
1583 +
1584 + .feature-icon {
1585 + width: 42px;
1586 + height: 42px;
1587 + font-size: 16px;
1588 + }
1589 + }
1590 +
1591 + .gallery.xGallery {
1592 + margin-top: 22px !important;
1593 + }
1594 +
1595 + .product-gallery-caption {
1596 + margin-top: 10px;
1597 + padding: 0 14px;
1598 + }
1599 +
1600 + .product-summary-card .process-list li {
1601 + padding-left: 46px;
1602 + }
1364 1364  }
1365 1365  
1366 1366  /* ========== Resources Index ========== */
1367 1367  
1368 1368  .resources-index-page {
1369 - background: #fff;
1370 1370  
1371 1371   .services-grid {
1372 1372   grid-template-columns: repeat(2, minmax(0, 1fr));
... ... @@ -1402,3 +1402,284 @@
1402 1402   color: @muted;
1403 1403   }
1404 1404  }
1643 +
1644 +/* ========== Global Theme Background ========== */
1645 +
1646 +html,
1647 +body {
1648 + min-height: 100%;
1649 +}
1650 +
1651 +body {
1652 + color: @text;
1653 + background:
1654 + radial-gradient(circle at 12% 8%, rgba(0, 147, 125, 0.08) 0, transparent 26%),
1655 + radial-gradient(circle at 90% 28%, rgba(7, 24, 45, 0.05) 0, transparent 30%),
1656 + linear-gradient(180deg, #fff 0, @brand-bg 42%, #fff 100%) !important;
1657 + background-attachment: fixed;
1658 +}
1659 +
1660 +#mainContentArea {
1661 + padding: 0;
1662 + overflow-x: hidden;
1663 +}
1664 +
1665 +/* ========== Main Page Hero / SaaS Layout ========== */
1666 +
1667 +#mainContentArea .hero.hero-saas {
1668 + min-height: auto;
1669 + padding: 60px 0 34px;
1670 + display: flex;
1671 + align-items: center;
1672 + overflow: hidden;
1673 + background: transparent;
1674 +}
1675 +
1676 +#mainContentArea .hero-layout {
1677 + max-width: 1120px;
1678 + margin: 0 auto;
1679 + display: grid;
1680 + grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr);
1681 + gap: 56px;
1682 + align-items: center;
1683 +}
1684 +
1685 +#mainContentArea .hero-copy {
1686 + min-width: 0;
1687 + text-align: left;
1688 +}
1689 +
1690 +#mainContentArea .hero.hero-saas h1 {
1691 + max-width: 640px;
1692 + margin: 0 0 26px;
1693 + font-size: 60px;
1694 + font-weight: 800;
1695 + line-height: 1;
1696 + letter-spacing: -3px;
1697 +}
1698 +
1699 +#mainContentArea .hero.hero-saas h1 span {
1700 + color: @brand;
1701 +}
1702 +
1703 +#mainContentArea .hero.hero-saas .lead {
1704 + max-width: 590px;
1705 + margin: 0 0 28px;
1706 + color: #334155;
1707 + text-align: left;
1708 + font-size: 18px;
1709 + line-height: 1.6;
1710 +}
1711 +
1712 +#mainContentArea .hero.hero-saas .benefits {
1713 + max-width: 620px;
1714 + margin: 0 0 30px;
1715 + padding: 0;
1716 + display: grid;
1717 + grid-template-columns: repeat(2, minmax(0, 1fr));
1718 + gap: 10px 24px;
1719 + list-style: none;
1720 + color: #475569;
1721 + font-size: 15px;
1722 + text-align: left;
1723 +}
1724 +
1725 +#mainContentArea .hero.hero-saas .benefits li {
1726 + display: grid;
1727 + grid-template-columns: 18px minmax(0, 1fr);
1728 + column-gap: 8px;
1729 + align-items: start;
1730 + margin: 0;
1731 + line-height: 1.45;
1732 +}
1733 +
1734 +#mainContentArea .hero.hero-saas .benefits li::before {
1735 + content: "✓";
1736 + display: block;
1737 + width: 18px;
1738 + color: @brand;
1739 + font-weight: 900;
1740 + line-height: 1.45;
1741 + text-align: left;
1742 + margin: 0;
1743 +}
1744 +
1745 +#mainContentArea .hero.hero-saas .hero-actions,
1746 +#mainContentArea .hero.hero-saas #hero-cta {
1747 + display: flex;
1748 + flex-wrap: wrap;
1749 + justify-content: flex-start;
1750 + gap: 12px;
1751 + margin-top: 0;
1752 +}
1753 +
1754 +#mainContentArea .hero-image-wrapper {
1755 + min-width: 0;
1756 + display: flex;
1757 + justify-content: center;
1758 + align-items: center;
1759 +}
1760 +
1761 +#mainContentArea .hero-image {
1762 + display: block;
1763 + width: 100%;
1764 + max-width: 620px;
1765 + height: auto;
1766 + border: 0;
1767 +}
1768 +
1769 +/* ========== Main Page Hero Responsive ========== */
1770 +
1771 +@media (max-width: 1100px) {
1772 + #mainContentArea .hero-layout {
1773 + max-width: 760px;
1774 + grid-template-columns: 1fr;
1775 + gap: 34px;
1776 + }
1777 +
1778 + #mainContentArea .hero-copy {
1779 + order: 1;
1780 + text-align: center;
1781 + }
1782 +
1783 + #mainContentArea .hero-image-wrapper {
1784 + order: 2;
1785 + }
1786 +
1787 + #mainContentArea .hero.hero-saas h1 {
1788 + margin-left: auto;
1789 + margin-right: auto;
1790 + text-align: center;
1791 + }
1792 +
1793 + #mainContentArea .hero.hero-saas .lead {
1794 + margin-left: auto;
1795 + margin-right: auto;
1796 + text-align: center;
1797 + }
1798 +
1799 + #mainContentArea .hero.hero-saas .benefits {
1800 + margin-left: auto;
1801 + margin-right: auto;
1802 + }
1803 +
1804 + #mainContentArea .hero.hero-saas .hero-actions,
1805 + #mainContentArea .hero.hero-saas #hero-cta {
1806 + justify-content: center;
1807 + }
1808 +
1809 + #mainContentArea .hero-image {
1810 + max-width: 620px;
1811 + }
1812 +}
1813 +
1814 +@media (max-width: 640px) {
1815 + #mainContentArea .hero.hero-saas {
1816 + padding: 42px 0 28px;
1817 + }
1818 +
1819 + #mainContentArea .hero-layout {
1820 + gap: 28px;
1821 + }
1822 +
1823 + #mainContentArea .hero.hero-saas h1 {
1824 + font-size: 42px;
1825 + letter-spacing: -1.5px;
1826 + }
1827 +
1828 + #mainContentArea .hero.hero-saas .lead {
1829 + font-size: 17px;
1830 + }
1831 +
1832 + #mainContentArea .hero.hero-saas .benefits {
1833 + grid-template-columns: 1fr;
1834 + }
1835 +
1836 + #mainContentArea .hero-image {
1837 + max-width: 100%;
1838 + }
1839 +}
1840 +
1841 +/* ========== Accessibility / Contrast Improvements ========== */
1842 +
1843 +/* Keep the article area readable while preserving the page background around it. */
1844 +/*#mainContentArea .resource-layout {
1845 + padding: 28px;
1846 + border: 1px solid fade(@line, 85%);
1847 + border-radius: @radius;
1848 + background: rgba(255, 255, 255, .88);
1849 + box-shadow: @shadow-sm;
1850 +}*/
1851 +
1852 +/* Ensure all reusable cards have a real surface, not transparent over the gradient. */
1853 +#mainContentArea .widget,
1854 +#mainContentArea .pathway-card,
1855 +#mainContentArea .service-card,
1856 +#mainContentArea .resource-card,
1857 +#mainContentArea .services .service,
1858 +#mainContentArea .product-card,
1859 +#mainContentArea .product-feature,
1860 +#mainContentArea .product-summary-card,
1861 +#mainContentArea .product-info-card {
1862 + background: #fff;
1863 +}
1864 +
1865 +/* Make notes more readable and visually stronger. */
1866 +#mainContentArea .resource-note {
1867 + border: 1px solid fade(@brand, 18%);
1868 + border-left: 4px solid @brand;
1869 + background: #fff;
1870 + box-shadow: 0 10px 28px rgba(15, 23, 42, .045);
1871 +}
1872 +
1873 +/* Keep the sidebar clearly separated from the background. */
1874 +#mainContentArea .resource-sidebar {
1875 + background: #fff;
1876 +}
1877 +
1878 +/* Make CTA panels stand out more clearly. */
1879 +#mainContentArea .resource-cta,
1880 +#mainContentArea .resource-inline-cta {
1881 + background: #fff;
1882 +}
1883 +
1884 +/* Improve table readability on long resource pages. */
1885 +#mainContentArea .resource-content table {
1886 + background: #fff;
1887 +}
1888 +
1889 +#mainContentArea .resource-content table th {
1890 + color: @text;
1891 + background: #F8FAFC;
1892 +}
1893 +
1894 +#mainContentArea .resource-content table td {
1895 + color: @text-soft;
1896 +}
1897 +
1898 +/* Slightly improve paragraph/list contrast in long articles. */
1899 +#mainContentArea .resource-content p,
1900 +#mainContentArea .resource-content li {
1901 + color: @text-soft;
1902 +}
1903 +
1904 +#mainContentArea .resource-content .resource-note p,
1905 +#mainContentArea .resource-content .resource-checklist li,
1906 +#mainContentArea .resource-content .process-list li {
1907 + color: @muted;
1908 +}
1909 +
1910 +@media (max-width: 900px) {
1911 + #mainContentArea .resource-layout {
1912 + padding: 22px;
1913 + }
1914 +}
1915 +
1916 +@media (max-width: 640px) {
1917 + #mainContentArea .resource-layout {
1918 + padding: 18px;
1919 + border-radius: 14px;
1920 + }
1921 +}
1922 +
1923 +