Changes for page products
Last modified by Alex Cotiugă on 2026/05/12 20:27
From version 1.7
edited by Alex Cotiugă
on 2026/05/12 19:58
on 2026/05/12 19:58
Change comment:
There is no comment for this version
To version 1.9
edited by Alex Cotiugă
on 2026/05/12 19:59
on 2026/05/12 19:59
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,71 @@ 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 +<div class="agnease-product-page"> 15 15 16 -<section aria-labelledby="products-title"> 17 - <div class="container"> 18 - <h2 id="products-title">Available extensions</h2> 8 + <section class="product-index-hero" aria-labelledby="page-title"> 9 + <div class="container"> 10 + <p class="page-eyebrow">Agnease products</p> 11 + <h1 id="page-title">XWiki Applications and Extensions</h1> 12 + <p class="page-lead"> 13 + Practical XWiki extensions built to improve security, workflows, administration and long-term platform usability. 14 + </p> 15 + </div> 16 + </section> 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> 18 + <section class="product-index-section" aria-labelledby="products-title"> 19 + <div class="container"> 20 + <h2 id="products-title">Available extensions</h2> 21 + <p class="section-intro"> 22 + The first Agnease product is focused on strengthening access to XWiki while keeping the standard XWiki login experience. 23 + </p> 25 25 26 - <h3>XWiki Two-Factor Authentication</h3> 25 + <div class="product-card-grid"> 26 + <article class="product-card"> 27 + <div class="product-card-icon"> 28 + <i class="fa fa-lock" aria-hidden="true"></i> 29 + </div> 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> 31 + <div class="product-card-body"> 32 + <p class="product-label">Security extension</p> 33 + <h3>XWiki Two-Factor Authentication</h3> 33 33 34 - <p class="card-link"> 35 - <a href="$xwiki.getURL('products.xwiki-two-factor-authentication')">View extension</a> 36 - </p> 37 - </article> 35 + <p> 36 + Add a second verification step to the standard XWiki login flow using time-based one-time codes. 37 + The extension is designed for organizations that want stronger account protection without replacing 38 + the standard XWiki authentication experience. 39 + </p> 40 + 41 + <ul class="product-highlights"> 42 + <li>Works with the standard XWiki authentication flow</li> 43 + <li>Adds a TOTP verification step after username/password login</li> 44 + <li>Includes user setup and administration controls</li> 45 + </ul> 46 + 47 + <p class="card-link"> 48 + <a class="btn btn-secondary" href="$xwiki.getURL('products.xwiki-two-factor-authentication')"> 49 + View extension 50 + </a> 51 + </p> 52 + </div> 53 + </article> 54 + </div> 38 38 </div> 39 - </div> 40 -</section> 56 + </section> 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. 48 - </p> 49 - <a class="btn btn-primary" href="$xwiki.getURL('contact.WebHome')">Contact Agnease</a> 58 + <section class="product-cta-section"> 59 + <div class="container"> 60 + <div class="product-cta-panel"> 61 + <h2>Need a custom XWiki application?</h2> 62 + <p> 63 + Agnease also builds custom XWiki applications, workflows, integrations and extensions adapted to specific business processes. 64 + </p> 65 + <a class="btn btn-primary" href="$xwiki.getURL('contact.WebHome')">Contact Agnease</a> 66 + </div> 50 50 </div> 51 - </div> 52 -</section> 68 + </section> 53 53 70 +</div> 71 + 54 54 {{/html}} 55 55 {{/velocity}}
- XWiki.StyleSheetExtension[0]
-
- code
-
... ... @@ -1,28 +1,31 @@ 1 1 /* ========== Agnease Products / Extensions ========== */ 2 +/* Self-contained variables because LESS variables are not shared between SSX pages. */ 2 2 3 -.public-nav { 4 - display: flex; 5 - align-items: center; 6 - gap: 24px; 4 +@brand: #00937D; 5 +@brand-strong: #007B6A; 6 +@text: #2D3A34; 7 +@muted: #5B6B64; 8 +@line: #E4ECE9; 9 +@brand-bg: #F4FCFA; 10 +@brand-soft: #E7FFF8; 11 +@radius: 14px; 12 +@shadow-sm: 0 10px 28px rgba(0, 0, 0, .06); 7 7 8 - a { 9 - color: @brand; 10 - font-weight: 700; 11 - text-decoration: none; 14 +.agnease-product-page { 15 + color: @text; 12 12 13 - &:hover, 14 - &:focus { 15 - color: @brand-strong; 16 - text-decoration: underline; 17 - } 17 + .container { 18 + max-width: 1040px; 18 18 } 19 -} 20 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; 21 + .product-index-hero { 22 + padding: 56px 0 48px; 23 + text-align: center; 24 + background: 25 + radial-gradient(42rem 16rem at 50% -10%, @brand-soft 0%, transparent 65%), 26 + radial-gradient(42rem 16rem at 50% 0%, #E8F6F3 0%, transparent 60%); 27 + border-bottom: 1px solid @line; 28 + } 26 26 27 27 .page-eyebrow { 28 28 color: @brand; ... ... @@ -30,250 +30,193 @@ 30 30 font-weight: 800; 31 31 text-transform: uppercase; 32 32 letter-spacing: .06em; 33 - margin -bottom:8px;36 + margin: 0 0 10px; 34 34 } 35 35 36 36 h1 { 37 - margin -top: 0;40 + margin: 0; 38 38 color: @text; 42 + font-size: 36px; 43 + line-height: 1.2; 44 + font-weight: 700; 39 39 } 40 40 41 41 .page-lead { 42 42 max-width: 760px; 43 - margin: 0auto;49 + margin: 14px auto 0; 44 44 color: @muted; 45 45 font-size: 18px; 46 46 line-height: 1.55; 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 + .product-index-section { 56 + padding: 52px 0 56px; 55 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; 58 + h2 { 59 + text-align: center; 60 + margin: 0 0 10px; 61 + color: @text; 62 + font-size: 28px; 63 + line-height: 1.25; 64 + font-weight: 600; 65 + } 94 94 } 95 95 96 - p { 68 + .section-intro { 69 + max-width: 760px; 70 + margin: 0 auto 26px; 71 + text-align: center; 97 97 color: @muted; 98 - line-height: 1.6; 73 + font-size: 16px; 74 + line-height: 1.55; 99 99 } 100 -} 101 101 102 -.product- info-card {103 - padding:20px;104 - 105 - h3{106 - margin-top:0;107 - color:@text;77 + .product-card-grid { 78 + max-width: 840px; 79 + margin: 0 auto; 80 + display: grid; 81 + grid-template-columns: 1fr; 82 + grid-gap: 18px; 108 108 } 109 109 110 - ul { 111 - margin: 0; 112 - padding-left: 20px; 113 - color: @muted; 85 + .product-card { 86 + background: #fff; 87 + border: 1px solid @line; 88 + border-radius: @radius; 89 + box-shadow: @shadow-sm; 90 + padding: 28px; 91 + display: grid; 92 + grid-template-columns: 68px 1fr; 93 + grid-gap: 22px; 94 + align-items: start; 114 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; 97 + .product-card-icon { 98 + width: 58px; 99 + height: 58px; 140 140 border-radius: 50%; 141 141 background: fade(@brand, 10%); 102 + border: 1px solid fade(@brand, 20%); 142 142 color: @brand; 143 143 display: flex; 144 144 align-items: center; 145 145 justify-content: center; 146 - margin-bottom: 12px; 147 - font-size: 17px; 107 + font-size: 22px; 148 148 } 149 149 150 - h3 { 110 + .product-label { 111 + display: inline-flex; 151 151 margin: 0 0 8px; 113 + padding: 5px 10px; 114 + border-radius: 999px; 115 + color: @brand; 116 + background: fade(@brand, 8%); 117 + border: 1px solid fade(@brand, 18%); 118 + font-size: 12px; 119 + font-weight: 800; 120 + text-transform: uppercase; 121 + letter-spacing: .04em; 122 + } 123 + 124 + .product-card h3 { 125 + margin: 0 0 10px; 152 152 color: @text; 153 - font-size: 18px; 127 + font-size: 23px; 128 + line-height: 1.25; 129 + font-weight: 600; 154 154 } 155 155 156 - p { 157 - margin: 0; 132 + .product-card p { 158 158 color: @muted; 159 - line-height: 1. 5;134 + line-height: 1.6; 160 160 } 161 -} 162 162 163 -.product-g allery-panel{164 - ma x-width: 1040px;165 - margin:20pxauto 0;166 - padding:22px;137 + .product-highlights { 138 + margin: 14px 0 20px; 139 + padding-left: 18px; 140 + color: @muted; 167 167 168 - h2 { 169 - margin-top: 0; 142 + li { 143 + margin: 6px 0; 144 + line-height: 1.45; 145 + } 170 170 } 171 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; 148 + .card-link { 149 + margin: 0; 178 178 } 179 -} 180 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%); 152 + .btn-secondary { 216 216 color: @brand; 217 - display: flex; 218 - align-items: center; 219 - justify-content: center; 220 - margin-bottom: 14px; 221 - font-size: 18px; 222 - } 154 + background: #fff; 155 + border: 1px solid fade(@brand, 35%); 223 223 224 - h3 { 225 - margin: 0 0 8px; 226 - color: @text; 157 + &:hover, 158 + &:focus { 159 + color: @brand-strong; 160 + border-color: @brand; 161 + background: @brand-bg; 162 + text-decoration: none; 163 + } 227 227 } 228 228 229 - p { 230 - color: @muted; 231 - line-height: 1.55; 166 + .product-cta-section { 167 + padding: 0 0 56px; 232 232 } 233 233 234 - .card-link { 235 - margin-top: auto; 170 + .product-cta-panel { 171 + max-width: 860px; 172 + margin: 0 auto; 173 + padding: 32px; 174 + border-radius: @radius; 175 + border: 1px solid fade(@brand, 20%); 176 + background: 177 + radial-gradient(34rem 12rem at 50% 0%, @brand-soft 0%, #fff 70%); 178 + box-shadow: @shadow-sm; 179 + text-align: center; 236 236 237 - a { 238 - color: @brand; 239 - font-weight: 800; 181 + h2 { 182 + margin: 0 0 12px; 183 + color: @text; 184 + font-size: 26px; 185 + line-height: 1.25; 240 240 } 187 + 188 + p { 189 + max-width: 680px; 190 + margin: 0 auto 18px; 191 + color: @muted; 192 + line-height: 1.55; 193 + } 241 241 } 242 242 } 243 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; 197 +@media (max-width: 767px) { 198 + .agnease-product-page { 199 + .product-index-hero { 200 + padding: 38px 0 34px; 201 + } 254 254 255 - h 2{256 - margin-top: 0;257 - } 203 + h1 { 204 + font-size: 30px; 205 + } 258 258 259 - p { 260 - color: @muted; 261 - line-height: 1.55; 262 - } 263 -} 207 + .page-lead { 208 + font-size: 16px; 209 + } 264 264 265 -@media (max-width: 900px) { 266 - .product-layout, 267 - .product-feature-grid, 268 - .product-card-grid { 269 - grid-template-columns: 1fr; 270 - } 211 + .product-card { 212 + grid-template-columns: 1fr; 213 + padding: 22px; 214 + text-align: left; 215 + } 271 271 272 - .product- summary-cardh2{273 - text-align:center;274 - } 217 + .product-card-icon { 218 + margin-bottom: 2px; 219 + } 275 275 276 - .public-nav { 277 - gap: 14px; 221 + .product-cta-panel { 222 + padding: 24px; 223 + } 278 278 } 279 279 }