Changes for page products
Last modified by Alex Cotiugă on 2026/05/12 20:27
From version 1.4
edited by Alex Cotiugă
on 2026/05/12 19:52
on 2026/05/12 19:52
Change comment:
There is no comment for this version
To version 1.12
edited by Alex Cotiugă
on 2026/05/12 20:03
on 2026/05/12 20:03
Change comment:
There is no comment for this version
Summary
-
Page properties (1 modified, 0 added, 0 removed)
-
Objects (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -3,53 +3,90 @@ 3 3 #set ($discard = $xwiki.ssx.use('products.WebHome')) 4 4 {{html clean="false"}} 5 5 6 -<section class="page-header-compact" aria-labelledby="page-title"> 7 - <div class="container"> 8 - <p class="page-eyebrow">Agnease products</p> 9 - <h1 id="page-title">XWiki Applications and Extensions</h1> 10 - <p class="page-lead"> 11 - Practical XWiki extensions built to improve security, workflows, administration and long-term platform usability. 12 - </p> 13 - </div> 14 -</section> 6 + ## PAGE HEADER 7 + <section class="hero hero-centered product-hero" aria-labelledby="hero-title"> 8 + <div class="container hero-inner"> 9 + <div class="hero-kicker"> 10 + <i class="fa fa-cube" aria-hidden="true"></i> 11 + Agnease products 12 + </div> 15 15 16 -<section aria-labelledby="products-title"> 17 - <div class="container"> 18 - <h2 id="products-title">Available extensions</h2> 14 + <h1 id="hero-title">XWiki applications and extensions</h1> 19 19 20 - <div class="product-card-grid"> 21 - <article class="product-card"> 22 - <div class="product-card-icon"> 23 - <i class="fa fa-lock" aria-hidden="true"></i> 24 - </div> 16 + <p class="lead"> 17 + Practical XWiki extensions built to improve security, workflows, administration and long-term platform usability. 18 + </p> 25 25 26 - <h3>XWiki Two-Factor Authentication</h3> 20 + <p class="hero-support"> 21 + Agnease products are designed for organizations that use XWiki as a production platform and need focused, 22 + maintainable extensions that fit naturally into the XWiki experience. 23 + </p> 24 + </div> 25 + </section> 27 27 28 - <p> 29 - Add a second verification step to the standard XWiki login flow using time-based one-time codes. 30 - The extension is designed for organizations that want stronger account protection without replacing 31 - the standard XWiki authentication experience. 32 - </p> 27 + ## PRODUCT CARDS 28 + #set ($productItems = [{ 29 + 'title': 'XWiki Two-Factor Authentication', 30 + 'icon': 'lock', 31 + 'url': 'products.xwiki-two-factor-authentication', 32 + 'label': 'Security extension', 33 + 'content': 'Add a second verification step to the standard XWiki login flow using time-based one-time codes, without replacing the standard XWiki authentication experience.' 34 + }]) 33 33 34 - <p class="card-link"> 35 - <a href="$xwiki.getURL('products.xwiki-two-factor-authentication')">View extension</a> 36 - </p> 37 - </article> 38 - </div> 39 - </div> 40 -</section> 36 + <section id="products-list" class="services products-list" aria-labelledby="items-title"> 37 + <div class="container"> 38 + <h2 id="items-title">Available extensions</h2> 41 41 42 -<section class="cta-section"> 43 - <div class="container"> 44 - <div class="cta-panel"> 45 - <h2>Need a custom XWiki application?</h2> 46 - <p> 47 - Agnease also builds custom XWiki applications, workflows, integrations and extensions adapted to specific business processes. 40 + <p class="section-intro"> 41 + The first Agnease product focuses on strengthening access to XWiki while keeping the standard XWiki login experience. 48 48 </p> 49 - <a class="btn btn-primary" href="$xwiki.getURL('contact.WebHome')">Contact Agnease</a> 43 + 44 + <div class="services-grid products-grid"> 45 + #foreach ($entry in $productItems) 46 + <article class="service product-item"> 47 + <div class="service-icon" aria-hidden="true"> 48 + <i class="fa fa-$entry.icon"></i> 49 + </div> 50 + 51 + <div class="service-body"> 52 + <div class="hero-kicker product-item-kicker"> 53 + <i class="fa fa-$entry.icon" aria-hidden="true"></i> 54 + $entry.label 55 + </div> 56 + 57 + <h4>$entry.title</h4> 58 + <p>$entry.content</p> 59 + 60 + <ul class="product-highlights"> 61 + <li>Works with the standard XWiki authentication flow</li> 62 + <li>Adds a TOTP verification step after username/password login</li> 63 + <li>Includes user setup and administration controls</li> 64 + </ul> 65 + 66 + <p class="card-link"> 67 + <a href="$xwiki.getURL($entry.url)">View extension</a> 68 + </p> 69 + </div> 70 + </article> 71 + #end 72 + </div> 50 50 </div> 51 - </div> 52 -</section> 74 + </section> 53 53 76 + ## CTA 77 + <section class="cta-section" aria-labelledby="cta-title"> 78 + <div class="container"> 79 + <div class="cta-panel"> 80 + <h2 id="cta-title">Need a custom XWiki application?</h2> 81 + 82 + <p> 83 + Agnease also builds custom XWiki applications, workflows, integrations and extensions adapted to specific business processes. 84 + </p> 85 + 86 + <a class="btn btn-primary" href="$xwiki.getURL('contact.WebHome')">Contact Agnease</a> 87 + </div> 88 + </div> 89 + </section> 90 + 54 54 {{/html}} 55 55 {{/velocity}}
- XWiki.StyleSheetExtension[0]
-
- code
-
... ... @@ -1,279 +1,31 @@ 1 1 /* ========== Agnease Products / Extensions ========== */ 2 2 3 -.public-nav { 4 - display: flex; 5 - align-items: center; 6 - gap: 24px; 7 - 8 - a { 9 - color: @brand; 10 - font-weight: 700; 11 - text-decoration: none; 12 - 13 - &:hover, 14 - &:focus { 15 - color: @brand-strong; 16 - text-decoration: underline; 17 - } 18 - } 19 -} 20 - 21 -.page-header-compact { 22 - background: 23 - radial-gradient(42rem 16rem at 50% -10%, #E7FFF8 0%, transparent 65%), 24 - radial-gradient(42rem 16rem at 50% 0%, #E8F6F3 0%, transparent 60%); 25 - text-align: center; 26 - 27 - .page-eyebrow { 28 - color: @brand; 29 - font-size: 13px; 30 - font-weight: 800; 31 - text-transform: uppercase; 32 - letter-spacing: .06em; 33 - margin-bottom: 8px; 34 - } 35 - 36 - h1 { 37 - margin-top: 0; 38 - color: @text; 39 - } 40 - 41 - .page-lead { 3 +.products-list { 4 + .products-grid { 42 42 max-width: 760px; 43 - margin: 0 auto; 44 - color: @muted; 45 - font-size: 18px; 46 - line-height: 1.55; 6 + margin-left: auto; 7 + margin-right: auto; 8 + grid-template-columns: 1fr; 47 47 } 48 -} 49 49 50 -.product-hero { 51 - background: 52 - radial-gradient(48rem 18rem at 50% -10%, #E7FFF8 0%, transparent 65%), 53 - radial-gradient(48rem 18rem at 50% 0%, #E8F6F3 0%, transparent 60%); 54 -} 55 - 56 -.product-kicker { 57 - display: inline-flex; 58 - align-items: center; 59 - gap: 8px; 60 - color: @brand; 61 - background: fade(@brand, 8%); 62 - border: 1px solid fade(@brand, 18%); 63 - border-radius: 999px; 64 - padding: 6px 12px; 65 - margin-bottom: 14px; 66 - font-size: 13px; 67 - font-weight: 800; 68 -} 69 - 70 -.product-layout { 71 - max-width: 1040px; 72 - margin: 0 auto; 73 - display: grid; 74 - grid-template-columns: 1.1fr .9fr; 75 - grid-gap: 28px; 76 - align-items: start; 77 -} 78 - 79 -.product-summary-card, 80 -.product-info-card, 81 -.product-gallery-panel { 82 - background: #fff; 83 - border: 1px solid @line; 84 - border-radius: @radius; 85 - box-shadow: @shadow-sm; 86 -} 87 - 88 -.product-summary-card { 89 - padding: 24px; 90 - 91 - h2 { 92 - text-align: left; 93 - margin-top: 0; 11 + .product-item { 12 + align-items: flex-start; 94 94 } 95 95 96 - p { 97 - color: @muted; 98 - line-height: 1.6; 15 + .product-item-kicker { 16 + margin-bottom: 10px; 17 + padding: 6px 11px; 18 + font-size: 12px; 99 99 } 100 -} 101 101 102 -.product-info-card { 103 - padding: 20px; 104 - 105 - h3 { 106 - margin-top: 0; 107 - color: @text; 108 - } 109 - 110 - ul { 111 - margin: 0; 112 - padding-left: 20px; 21 + .product-highlights { 22 + margin: 12px 0 16px; 23 + padding-left: 18px; 113 113 color: @muted; 114 - } 115 115 116 - li { 117 - margin: 8px 0; 118 - line-height: 1.45; 119 - } 120 -} 121 - 122 -.product-feature-grid { 123 - max-width: 1040px; 124 - margin: 22px auto 0; 125 - display: grid; 126 - grid-template-columns: repeat(3, minmax(0, 1fr)); 127 - grid-gap: 16px; 128 -} 129 - 130 -.product-feature { 131 - background: #fff; 132 - border: 1px solid @line; 133 - border-radius: @radius; 134 - box-shadow: @shadow-sm; 135 - padding: 18px; 136 - 137 - .feature-icon { 138 - width: 42px; 139 - height: 42px; 140 - border-radius: 50%; 141 - background: fade(@brand, 10%); 142 - color: @brand; 143 - display: flex; 144 - align-items: center; 145 - justify-content: center; 146 - margin-bottom: 12px; 147 - font-size: 17px; 148 - } 149 - 150 - h3 { 151 - margin: 0 0 8px; 152 - color: @text; 153 - font-size: 18px; 154 - } 155 - 156 - p { 157 - margin: 0; 158 - color: @muted; 159 - line-height: 1.5; 160 - } 161 -} 162 - 163 -.product-gallery-panel { 164 - max-width: 1040px; 165 - margin: 20px auto 0; 166 - padding: 22px; 167 - 168 - h2 { 169 - margin-top: 0; 170 - } 171 - 172 - .gallery-note { 173 - max-width: 700px; 174 - margin: 0 auto 18px; 175 - color: @muted; 176 - text-align: center; 177 - line-height: 1.55; 178 - } 179 -} 180 - 181 -.product-gallery-placeholder { 182 - border: 1px dashed fade(@brand, 40%); 183 - background: fade(@brand, 5%); 184 - border-radius: @radius; 185 - min-height: 260px; 186 - padding: 28px; 187 - text-align: center; 188 - color: @muted; 189 - display: flex; 190 - align-items: center; 191 - justify-content: center; 192 -} 193 - 194 -.product-card-grid { 195 - max-width: 1040px; 196 - margin: 22px auto 0; 197 - display: grid; 198 - grid-template-columns: repeat(2, minmax(0, 1fr)); 199 - grid-gap: 18px; 200 -} 201 - 202 -.product-card { 203 - background: #fff; 204 - border: 1px solid @line; 205 - border-radius: @radius; 206 - box-shadow: @shadow-sm; 207 - padding: 22px; 208 - display: flex; 209 - flex-direction: column; 210 - 211 - .product-card-icon { 212 - width: 46px; 213 - height: 46px; 214 - border-radius: 50%; 215 - background: fade(@brand, 10%); 216 - color: @brand; 217 - display: flex; 218 - align-items: center; 219 - justify-content: center; 220 - margin-bottom: 14px; 221 - font-size: 18px; 222 - } 223 - 224 - h3 { 225 - margin: 0 0 8px; 226 - color: @text; 227 - } 228 - 229 - p { 230 - color: @muted; 231 - line-height: 1.55; 232 - } 233 - 234 - .card-link { 235 - margin-top: auto; 236 - 237 - a { 238 - color: @brand; 239 - font-weight: 800; 26 + li { 27 + margin: 5px 0; 28 + line-height: 1.45; 240 240 } 241 241 } 242 242 } 243 - 244 -.cta-panel { 245 - max-width: 860px; 246 - margin: 0 auto; 247 - padding: 30px; 248 - border-radius: @radius; 249 - border: 1px solid fade(@brand, 20%); 250 - background: 251 - radial-gradient(34rem 12rem at 50% 0%, #E7FFF8 0%, #fff 70%); 252 - box-shadow: @shadow-sm; 253 - text-align: center; 254 - 255 - h2 { 256 - margin-top: 0; 257 - } 258 - 259 - p { 260 - color: @muted; 261 - line-height: 1.55; 262 - } 263 -} 264 - 265 -@media (max-width: 900px) { 266 - .product-layout, 267 - .product-feature-grid, 268 - .product-card-grid { 269 - grid-template-columns: 1fr; 270 - } 271 - 272 - .product-summary-card h2 { 273 - text-align: center; 274 - } 275 - 276 - .public-nav { 277 - gap: 14px; 278 - } 279 -}