Changes for page products
Last modified by Alex Cotiugă on 2026/05/12 20:27
From 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,90 +3,71 @@ 3 3 #set ($discard = $xwiki.ssx.use('products.WebHome')) 4 4 {{html clean="false"}} 5 5 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> 6 +<div class="agnease-product-page"> 13 13 14 - <h1 id="hero-title">XWiki applications and extensions</h1> 15 - 16 - <p class="lead"> 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"> 17 17 Practical XWiki extensions built to improve security, workflows, administration and long-term platform usability. 18 18 </p> 19 - 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 24 </div> 25 25 </section> 26 26 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 - }]) 35 - 36 - <section id="products-list" class="services products-list" aria-labelledby="items-title"> 18 + <section class="product-index-section" aria-labelledby="products-title"> 37 37 <div class="container"> 38 - <h2 id="items-title">Available extensions</h2> 39 - 20 + <h2 id="products-title">Available extensions</h2> 40 40 <p class="section-intro"> 41 - The first Agnease product focuse son strengthening access to XWiki while keeping the standard XWiki login experience.22 + The first Agnease product is focused on strengthening access to XWiki while keeping the standard XWiki login experience. 42 42 </p> 43 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> 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> 50 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> 31 + <div class="product-card-body"> 32 + <p class="product-label">Security extension</p> 33 + <h3>XWiki Two-Factor Authentication</h3> 56 56 57 - <h4>$entry.title</h4> 58 - <p>$entry.content</p> 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> 59 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>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> 65 65 66 - <p class="card-link"> 67 - <a href="$xwiki.getURL($entry.url)">View extension</a> 68 - </p> 69 - </div> 70 - </article> 71 - #end 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> 72 72 </div> 73 73 </div> 74 74 </section> 75 75 76 - ## CTA 77 - <section class="cta-section" aria-labelledby="cta-title"> 58 + <section class="product-cta-section"> 78 78 <div class="container"> 79 - <div class="cta-panel"> 80 - <h2 id="cta-title">Need a custom XWiki application?</h2> 81 - 60 + <div class="product-cta-panel"> 61 + <h2>Need a custom XWiki application?</h2> 82 82 <p> 83 83 Agnease also builds custom XWiki applications, workflows, integrations and extensions adapted to specific business processes. 84 84 </p> 85 - 86 86 <a class="btn btn-primary" href="$xwiki.getURL('contact.WebHome')">Contact Agnease</a> 87 87 </div> 88 88 </div> 89 89 </section> 90 90 70 +</div> 71 + 91 91 {{/html}} 92 92 {{/velocity}}
- XWiki.StyleSheetExtension[0]
-
- code
-
... ... @@ -1,31 +1,225 @@ 1 1 /* ========== Agnease Products / Extensions ========== */ 2 +/* Self-contained variables because LESS variables are not shared between SSX pages. */ 2 2 3 -.products-list { 4 - .products-grid { 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); 13 + 14 +.agnease-product-page { 15 + color: @text; 16 + 17 + .container { 18 + max-width: 1040px; 19 + } 20 + 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 + } 29 + 30 + .page-eyebrow { 31 + color: @brand; 32 + font-size: 13px; 33 + font-weight: 800; 34 + text-transform: uppercase; 35 + letter-spacing: .06em; 36 + margin: 0 0 10px; 37 + } 38 + 39 + h1 { 40 + margin: 0; 41 + color: @text; 42 + font-size: 36px; 43 + line-height: 1.2; 44 + font-weight: 700; 45 + } 46 + 47 + .page-lead { 5 5 max-width: 760px; 6 - margin-left: auto; 7 - margin-right: auto; 49 + margin: 14px auto 0; 50 + color: @muted; 51 + font-size: 18px; 52 + line-height: 1.55; 53 + } 54 + 55 + .product-index-section { 56 + padding: 52px 0 56px; 57 + 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 + } 66 + } 67 + 68 + .section-intro { 69 + max-width: 760px; 70 + margin: 0 auto 26px; 71 + text-align: center; 72 + color: @muted; 73 + font-size: 16px; 74 + line-height: 1.55; 75 + } 76 + 77 + .product-card-grid { 78 + max-width: 840px; 79 + margin: 0 auto; 80 + display: grid; 8 8 grid-template-columns: 1fr; 82 + grid-gap: 18px; 9 9 } 10 10 11 - .product-item { 12 - align-items: flex-start; 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; 13 13 } 14 14 15 - .product-item-kicker { 16 - margin-bottom: 10px; 17 - padding: 6px 11px; 97 + .product-card-icon { 98 + width: 58px; 99 + height: 58px; 100 + border-radius: 50%; 101 + background: fade(@brand, 10%); 102 + border: 1px solid fade(@brand, 20%); 103 + color: @brand; 104 + display: flex; 105 + align-items: center; 106 + justify-content: center; 107 + font-size: 22px; 108 + } 109 + 110 + .product-label { 111 + display: inline-flex; 112 + 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%); 18 18 font-size: 12px; 119 + font-weight: 800; 120 + text-transform: uppercase; 121 + letter-spacing: .04em; 19 19 } 20 20 124 + .product-card h3 { 125 + margin: 0 0 10px; 126 + color: @text; 127 + font-size: 23px; 128 + line-height: 1.25; 129 + font-weight: 600; 130 + } 131 + 132 + .product-card p { 133 + color: @muted; 134 + line-height: 1.6; 135 + } 136 + 21 21 .product-highlights { 22 - margin: 1 2px 016px;138 + margin: 14px 0 20px; 23 23 padding-left: 18px; 24 24 color: @muted; 25 25 26 26 li { 27 - margin: 5px 0;143 + margin: 6px 0; 28 28 line-height: 1.45; 29 29 } 30 30 } 147 + 148 + .card-link { 149 + margin: 0; 150 + } 151 + 152 + .btn-secondary { 153 + color: @brand; 154 + background: #fff; 155 + border: 1px solid fade(@brand, 35%); 156 + 157 + &:hover, 158 + &:focus { 159 + color: @brand-strong; 160 + border-color: @brand; 161 + background: @brand-bg; 162 + text-decoration: none; 163 + } 164 + } 165 + 166 + .product-cta-section { 167 + padding: 0 0 56px; 168 + } 169 + 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; 180 + 181 + h2 { 182 + margin: 0 0 12px; 183 + color: @text; 184 + font-size: 26px; 185 + line-height: 1.25; 186 + } 187 + 188 + p { 189 + max-width: 680px; 190 + margin: 0 auto 18px; 191 + color: @muted; 192 + line-height: 1.55; 193 + } 194 + } 31 31 } 196 + 197 +@media (max-width: 767px) { 198 + .agnease-product-page { 199 + .product-index-hero { 200 + padding: 38px 0 34px; 201 + } 202 + 203 + h1 { 204 + font-size: 30px; 205 + } 206 + 207 + .page-lead { 208 + font-size: 16px; 209 + } 210 + 211 + .product-card { 212 + grid-template-columns: 1fr; 213 + padding: 22px; 214 + text-align: left; 215 + } 216 + 217 + .product-card-icon { 218 + margin-bottom: 2px; 219 + } 220 + 221 + .product-cta-panel { 222 + padding: 24px; 223 + } 224 + } 225 +}