Changes for page Public Web Site

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

From version 25.37
edited by Agnease
on 2026/06/30 11:41
Change comment: There is no comment for this version
To version 28.27
edited by Agnease
on 2026/07/03 13:20
Change comment: There is no comment for this version

Summary

Details

Page properties
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.
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
... ... @@ -150,7 +150,7 @@
150 150  
151 151  /* ========== Buttons ========== */
152 152  
153 -.btn-primary {
153 +/*.btn-primary {
154 154   background: @brand;
155 155   border-color: @brand;
156 156   color: #fff;
... ... @@ -162,18 +162,12 @@
162 162   color: #fff;
163 163   }
164 164  }
165 -
165 +*/
166 166  .btn-secondary {
167 - color: @brand;
167 + color: @text;
168 168   background: #fff;
169 - border: 1px solid fade(@brand, 35%);
169 + border: 1px solid fade(@text, 35%);
170 170  
171 - &:hover,
172 - &:focus {
173 - color: @brand-strong;
174 - border-color: @brand;
175 - background: @brand-bg;
176 - }
177 177  }
178 178  
179 179  /* ========== Hero ========== */
... ... @@ -253,33 +253,122 @@
253 253   margin-top: 22px;
254 254  }
255 255  
256 -/* ========== Trust Strip ========== */
250 +/* ========== Contrast Band ========== */
257 257  
258 -.trust-strip {
259 - padding: 18px 0;
260 - border-top: 1px solid @line;
252 +.contrast-band {
253 + position: relative;
254 + overflow: visible;
255 + isolation: isolate;
256 + padding: 54px 0;
257 + border-top: 0;
258 + color: #fff;
259 + background: transparent;
260 +}
261 261  
262 - ul {
263 - max-width: 960px;
264 - margin: 0 auto;
265 - padding: 0;
266 - list-style: none;
267 - display: flex;
268 - justify-content: center;
269 - gap: 22px;
270 - flex-wrap: wrap;
271 - color: @muted;
272 - font-size: 13px;
273 - }
262 +.contrast-band::before {
263 + content: "";
264 + position: absolute;
265 + top: 0;
266 + bottom: 0;
267 + left: 50%;
268 + width: calc(100vw - 1px);
269 + transform: translateX(-50%);
270 + z-index: -2;
271 + background:
272 + radial-gradient(circle at 18% 18%, fade(@brand, 22%) 0%, transparent 28%),
273 + radial-gradient(circle at 86% 12%, fade(@brand, 16%) 0%, transparent 30%),
274 + linear-gradient(135deg, @text 0%, @text-soft 100%);
275 +}
274 274  
275 - li {
276 - display: flex;
277 - align-items: center;
278 - gap: 7px;
277 +.contrast-band::after {
278 + content: "";
279 + position: absolute;
280 + top: 0;
281 + bottom: 0;
282 + left: 50%;
283 + width: calc(100vw - 1px);
284 + transform: translateX(-50%);
285 + z-index: -1;
286 + background:
287 + linear-gradient(90deg, fade(#fff, 4%) 1px, transparent 1px),
288 + linear-gradient(180deg, fade(#fff, 4%) 1px, transparent 1px);
289 + background-size: 52px 52px;
290 + opacity: .38;
291 + pointer-events: none;
292 +}
293 +
294 +.contrast-band .container {
295 + position: relative;
296 + z-index: 1;
297 +}
298 +
299 +.contrast-panel {
300 + max-width: 1040px;
301 + margin: 0 auto;
302 + text-align: center;
303 +}
304 +
305 +.contrast-band h2 {
306 + max-width: 860px;
307 + margin: 0 auto 12px;
308 + color: #fff;
309 +}
310 +
311 +.contrast-band .section-intro {
312 + max-width: 840px;
313 + margin: 0 auto 26px;
314 + color: #D9E3EE;
315 +}
316 +
317 +.contrast-tags {
318 + max-width: 940px;
319 + margin: 0 auto;
320 + display: flex;
321 + flex-wrap: wrap;
322 + justify-content: center;
323 + gap: 10px;
324 +}
325 +
326 +.contrast-tags span {
327 + display: inline-flex;
328 + align-items: center;
329 + padding: 8px 13px;
330 + border: 1px solid fade(#fff, 18%);
331 + border-radius: 999px;
332 + background: fade(#fff, 8%);
333 + color: #F8FAFC;
334 + font-size: 13px;
335 + font-weight: 700;
336 + line-height: 1.2;
337 +}
338 +
339 +.contrast-tags span::before {
340 + content: "";
341 + width: 7px;
342 + height: 7px;
343 + margin-right: 8px;
344 + border-radius: 50%;
345 + background: @brand;
346 + box-shadow: 0 0 0 4px fade(@brand, 18%);
347 +}
348 +
349 +.contrast-support {
350 + max-width: 860px;
351 + margin: 30px auto 0;
352 + color: #D9E3EE;
353 + text-align: center;
354 + font-size: 15px;
355 + line-height: 1.7;
356 +}
357 +
358 +@media (max-width: 640px) {
359 + .contrast-band {
360 + padding: 40px 0;
279 279   }
280 280  
281 - i {
282 - color: @brand;
363 + .contrast-tags span {
364 + font-size: 12px;
365 + padding: 8px 11px;
283 283   }
284 284  }
285 285  
... ... @@ -439,80 +439,6 @@
439 439   }
440 440  }
441 441  
442 -.industry-trust-section {
443 - background:
444 - radial-gradient(42rem 16rem at 50% 0%, @brand-bg 0%, transparent 70%);
445 -
446 - .industry-trust-panel {
447 - max-width: 1040px;
448 - margin: 0 auto;
449 - padding: 30px 28px;
450 - border: 1px solid fade(@brand, 16%);
451 - border-radius: @radius;
452 - background:
453 - radial-gradient(34rem 12rem at 50% 0%, fade(@brand-soft, 75%) 0%, #fff 72%);
454 - box-shadow: @shadow-sm;
455 - text-align: center;
456 - }
457 -
458 - h2 {
459 - margin-bottom: 12px;
460 - }
461 -
462 - .section-intro {
463 - margin-bottom: 20px;
464 - max-width: 820px;
465 - }
466 -
467 - .industry-tags {
468 - max-width: 880px;
469 - margin: 0 auto;
470 - display: flex;
471 - flex-wrap: wrap;
472 - justify-content: center;
473 - gap: 10px;
474 - }
475 -
476 - .industry-tags span {
477 - display: inline-flex;
478 - align-items: center;
479 - padding: 7px 12px;
480 - border: 1px solid fade(@brand, 20%);
481 - border-radius: 999px;
482 - background: #fff;
483 - color: @text;
484 - font-size: 13px;
485 - font-weight: 600;
486 - line-height: 1.2;
487 - box-shadow: 0 3px 10px rgba(0, 0, 0, .04);
488 - }
489 -
490 - .industry-support {
491 - max-width: 820px;
492 - margin: 22px auto 0;
493 - color: @muted;
494 - font-size: 16px;
495 - line-height: 1.6;
496 - }
497 -}
498 -
499 -@media (max-width: 640px) {
500 - .industry-trust-section {
501 - .industry-trust-panel {
502 - padding: 24px 18px;
503 - }
504 -
505 - .industry-tags {
506 - gap: 8px;
507 - }
508 -
509 - .industry-tags span {
510 - font-size: 12px;
511 - padding: 6px 10px;
512 - }
513 - }
514 -}
515 -
516 516  /* ========== Services ========== */
517 517  
518 518  .services {
... ... @@ -743,8 +743,8 @@
743 743  
744 744  /* ========== CTA ========== */
745 745  
746 -.cta-section {
747 - padding: @section-padding;
755 +#mainContentArea .cta-section {
756 + padding: 44px 0 56px;
748 748  
749 749   .contact-inline {
750 750   margin: 0;
... ... @@ -756,25 +756,70 @@
756 756   }
757 757  }
758 758  
759 -.cta-panel {
760 - max-width: 860px;
768 +#mainContentArea .cta-panel {
769 + position: relative;
770 + overflow: hidden;
771 + max-width: 1040px;
761 761   margin: 0 auto;
762 - padding: 32px;
763 - border-radius: @radius;
764 - border: 1px solid fade(@brand, 20%);
765 - box-shadow: @shadow-sm;
773 + padding: 48px 40px;
774 + border: 0;
775 + border-radius: 26px;
776 + background:
777 + radial-gradient(circle at 88% 10%, fade(@brand, 24%) 0%, transparent 30%),
778 + linear-gradient(135deg, @text 0%, @text-soft 100%);
779 + color: #fff;
780 + box-shadow: @shadow;
766 766   text-align: center;
782 +}
767 767  
768 - h2 {
769 - margin-top: 0;
770 - }
784 +#mainContentArea .cta-panel::before {
785 + content: "";
786 + position: absolute;
787 + inset: 0;
788 + background:
789 + linear-gradient(90deg, fade(#fff, 4%) 1px, transparent 1px),
790 + linear-gradient(180deg, fade(#fff, 4%) 1px, transparent 1px);
791 + background-size: 48px 48px;
792 + opacity: .4;
793 + pointer-events: none;
794 +}
771 771  
772 - p {
773 - color: @muted;
774 - line-height: 1.55;
775 - }
796 +#mainContentArea .cta-panel h2,
797 +#mainContentArea .cta-panel p,
798 +#mainContentArea .cta-panel .btn {
799 + position: relative;
800 + z-index: 1;
776 776  }
777 777  
803 +#mainContentArea .cta-panel h2 {
804 + max-width: 760px;
805 + margin: 0 auto 16px;
806 + color: #fff;
807 +}
808 +
809 +#mainContentArea .cta-panel p {
810 + max-width: 760px;
811 + margin: 0 auto 28px;
812 + color: #DBE4EF;
813 + font-size: 16px;
814 + line-height: 1.6;
815 +}
816 +
817 +#mainContentArea .cta-panel .btn-primary {
818 + border-color: #fff;
819 + background: #fff;
820 + color: @text;
821 + box-shadow: 0 18px 42px rgba(0, 0, 0, .18);
822 +}
823 +
824 +#mainContentArea .cta-panel .btn-primary:hover,
825 +#mainContentArea .cta-panel .btn-primary:focus {
826 + border-color: #fff;
827 + background: #fff;
828 + color: @brand-strong;
829 + text-decoration: none;
830 +}
831 +
778 778  .resource-inline-cta {
779 779   display: flex;
780 780   align-items: center;
... ... @@ -906,9 +906,14 @@
906 906   gap: 14px;
907 907   }
908 908  
909 - .cta-panel {
910 - padding: 24px 20px;
963 + #mainContentArea .cta-panel {
964 + padding: 30px 22px;
965 + border-radius: 20px;
911 911   }
967 +
968 + #mainContentArea .cta-panel .btn-primary {
969 + width: 100%;
970 + }
912 912  }
913 913  
914 914  /* ========== Resource / Article Pages ========== */
... ... @@ -1608,35 +1608,276 @@
1608 1608   background-attachment: fixed;
1609 1609  }
1610 1610  
1611 -/* Let the body background show through the XWiki wrappers.
1612 -#mainContentArea,
1613 -.resource-page,
1614 -.resources-index-page {
1615 - background: transparent !important;
1616 - background-image: none !important;
1670 +#mainContentArea {
1671 + padding: 0;
1672 + overflow-x: hidden;
1617 1617  }
1618 -*/
1619 -/* Remove local decorative backgrounds that compete with the global gradient.
1620 -.hero,
1621 -.hero.hero-centered,
1622 -.trust-strip,
1623 -.industry-trust-section,
1624 -.split-section,
1625 -.resource-strip,
1626 -.homepage-resource-strip,
1627 -.resource-header,
1628 -.product-section-muted,
1629 -.resources-index-page {
1630 - background: transparent !important;
1631 - background-image: none !important;
1674 +
1675 +/* ========== Main Page Hero / SaaS Layout ========== */
1676 +
1677 +#mainContentArea .hero.hero-saas {
1678 + min-height: auto;
1679 + padding: 60px 0 34px;
1680 + display: flex;
1681 + align-items: center;
1682 + overflow: hidden;
1683 + background: transparent;
1632 1632  }
1633 - */
1634 -/* Keep large panels readable, but remove their inner gradients.
1635 -.industry-trust-section .industry-trust-panel,
1636 -.cta-panel,
1637 -.resource-inline-cta,
1638 -.resource-note,
1639 -.resource-cta {
1640 - background: #fff !important;
1641 - background-image: none !important;
1642 -} */
1685 +
1686 +#mainContentArea .hero-layout {
1687 + max-width: 1120px;
1688 + margin: 0 auto;
1689 + display: grid;
1690 + grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr);
1691 + gap: 56px;
1692 + align-items: center;
1693 +}
1694 +
1695 +#mainContentArea .hero-copy {
1696 + min-width: 0;
1697 + text-align: left;
1698 +}
1699 +
1700 +#mainContentArea .hero.hero-saas h1 {
1701 + max-width: 640px;
1702 + margin: 0 0 26px;
1703 + font-size: 60px;
1704 + font-weight: 800;
1705 + line-height: 1;
1706 + letter-spacing: -3px;
1707 +}
1708 +
1709 +#mainContentArea .hero.hero-saas h1 span {
1710 + color: @brand;
1711 +}
1712 +
1713 +#mainContentArea .hero.hero-saas .lead {
1714 + max-width: 590px;
1715 + margin: 0 0 28px;
1716 + color: #334155;
1717 + text-align: left;
1718 + font-size: 18px;
1719 + line-height: 1.6;
1720 +}
1721 +
1722 +#mainContentArea .hero.hero-saas .benefits {
1723 + max-width: 620px;
1724 + margin: 0 0 30px;
1725 + padding: 0;
1726 + display: grid;
1727 + grid-template-columns: repeat(2, minmax(0, 1fr));
1728 + gap: 10px 24px;
1729 + list-style: none;
1730 + color: #475569;
1731 + font-size: 15px;
1732 + text-align: left;
1733 +}
1734 +
1735 +#mainContentArea .hero.hero-saas .benefits li {
1736 + display: grid;
1737 + grid-template-columns: 18px minmax(0, 1fr);
1738 + column-gap: 8px;
1739 + align-items: start;
1740 + margin: 0;
1741 + line-height: 1.45;
1742 +}
1743 +
1744 +#mainContentArea .hero.hero-saas .benefits li::before {
1745 + content: "✓";
1746 + display: block;
1747 + width: 18px;
1748 + color: @brand;
1749 + font-weight: 900;
1750 + line-height: 1.45;
1751 + text-align: left;
1752 + margin: 0;
1753 +}
1754 +
1755 +#mainContentArea .hero.hero-saas .hero-actions,
1756 +#mainContentArea .hero.hero-saas #hero-cta {
1757 + display: flex;
1758 + flex-wrap: wrap;
1759 + justify-content: flex-start;
1760 + gap: 12px;
1761 + margin-top: 0;
1762 +}
1763 +
1764 +#mainContentArea .hero-image-wrapper {
1765 + min-width: 0;
1766 + display: flex;
1767 + justify-content: center;
1768 + align-items: center;
1769 +}
1770 +
1771 +#mainContentArea .hero-image {
1772 + display: block;
1773 + width: 100%;
1774 + max-width: 620px;
1775 + height: auto;
1776 + border: 0;
1777 +}
1778 +
1779 +/* ========== Main Page Hero Responsive ========== */
1780 +
1781 +@media (max-width: 1100px) {
1782 + #mainContentArea .hero-layout {
1783 + max-width: 760px;
1784 + grid-template-columns: 1fr;
1785 + gap: 34px;
1786 + }
1787 +
1788 + #mainContentArea .hero-copy {
1789 + order: 1;
1790 + text-align: center;
1791 + }
1792 +
1793 + #mainContentArea .hero-image-wrapper {
1794 + order: 2;
1795 + }
1796 +
1797 + #mainContentArea .hero.hero-saas h1 {
1798 + margin-left: auto;
1799 + margin-right: auto;
1800 + text-align: center;
1801 + }
1802 +
1803 + #mainContentArea .hero.hero-saas .lead {
1804 + margin-left: auto;
1805 + margin-right: auto;
1806 + text-align: center;
1807 + }
1808 +
1809 + #mainContentArea .hero.hero-saas .benefits {
1810 + margin-left: auto;
1811 + margin-right: auto;
1812 + }
1813 +
1814 + #mainContentArea .hero.hero-saas .hero-actions,
1815 + #mainContentArea .hero.hero-saas #hero-cta {
1816 + justify-content: center;
1817 + }
1818 +
1819 + #mainContentArea .hero-image {
1820 + max-width: 620px;
1821 + }
1822 +}
1823 +
1824 +@media (max-width: 640px) {
1825 + #mainContentArea .hero.hero-saas {
1826 + padding: 42px 0 28px;
1827 + }
1828 +
1829 + #mainContentArea .hero-layout {
1830 + gap: 28px;
1831 + }
1832 +
1833 + #mainContentArea .hero.hero-saas h1 {
1834 + font-size: 42px;
1835 + letter-spacing: -1.5px;
1836 + }
1837 +
1838 + #mainContentArea .hero.hero-saas .lead {
1839 + font-size: 17px;
1840 + }
1841 +
1842 + #mainContentArea .hero.hero-saas .benefits {
1843 + grid-template-columns: 1fr;
1844 + }
1845 +
1846 + #mainContentArea .hero-image {
1847 + max-width: 100%;
1848 + }
1849 +}
1850 +
1851 +/* ========== Accessibility / Contrast Improvements ========== */
1852 +
1853 +/* Make the global background softer and less distracting. */
1854 +body {
1855 + background:
1856 + radial-gradient(circle at 12% 8%, rgba(0, 147, 125, 0.035) 0, transparent 26%),
1857 + radial-gradient(circle at 90% 28%, rgba(7, 24, 45, 0.025) 0, transparent 30%),
1858 + linear-gradient(180deg, #fff 0, @brand-bg 42%, #fff 100%) !important;
1859 + background-attachment: scroll;
1860 +}
1861 +
1862 +/* Keep the article area readable while preserving the page background around it. */
1863 +#mainContentArea .resource-layout {
1864 + padding: 28px;
1865 + border: 1px solid fade(@line, 85%);
1866 + border-radius: @radius;
1867 + background: rgba(255, 255, 255, .88);
1868 + box-shadow: @shadow-sm;
1869 +}
1870 +
1871 +/* Ensure all reusable cards have a real surface, not transparent over the gradient. */
1872 +#mainContentArea .widget,
1873 +#mainContentArea .pathway-card,
1874 +#mainContentArea .service-card,
1875 +#mainContentArea .resource-card,
1876 +#mainContentArea .services .service,
1877 +#mainContentArea .product-card,
1878 +#mainContentArea .product-feature,
1879 +#mainContentArea .product-summary-card,
1880 +#mainContentArea .product-info-card {
1881 + background: #fff;
1882 +}
1883 +
1884 +/* Make notes more readable and visually stronger. */
1885 +#mainContentArea .resource-note {
1886 + border: 1px solid fade(@brand, 18%);
1887 + border-left: 4px solid @brand;
1888 + background: #fff;
1889 + box-shadow: 0 10px 28px rgba(15, 23, 42, .045);
1890 +}
1891 +
1892 +/* Keep the sidebar clearly separated from the background. */
1893 +#mainContentArea .resource-sidebar {
1894 + background: #fff;
1895 +}
1896 +
1897 +/* Make CTA panels stand out more clearly. */
1898 +#mainContentArea .resource-cta,
1899 +#mainContentArea .resource-inline-cta {
1900 + background: #fff;
1901 +}
1902 +
1903 +/* Improve table readability on long resource pages. */
1904 +#mainContentArea .resource-content table {
1905 + background: #fff;
1906 +}
1907 +
1908 +#mainContentArea .resource-content table th {
1909 + color: @text;
1910 + background: #F8FAFC;
1911 +}
1912 +
1913 +#mainContentArea .resource-content table td {
1914 + color: @text-soft;
1915 +}
1916 +
1917 +/* Slightly improve paragraph/list contrast in long articles. */
1918 +#mainContentArea .resource-content p,
1919 +#mainContentArea .resource-content li {
1920 + color: @text-soft;
1921 +}
1922 +
1923 +#mainContentArea .resource-content .resource-note p,
1924 +#mainContentArea .resource-content .resource-checklist li,
1925 +#mainContentArea .resource-content .process-list li {
1926 + color: @muted;
1927 +}
1928 +
1929 +@media (max-width: 900px) {
1930 + #mainContentArea .resource-layout {
1931 + padding: 22px;
1932 + }
1933 +}
1934 +
1935 +@media (max-width: 640px) {
1936 + #mainContentArea .resource-layout {
1937 + padding: 18px;
1938 + border-radius: 14px;
1939 + }
1940 +}
1941 +
1942 +