This is an automated email from the ASF dual-hosted git repository.

delei pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/fesod.git


The following commit(s) were added to refs/heads/main by this push:
     new e6b6d1a3 style: redesign homepage hero as a spreadsheet grid (#983)
e6b6d1a3 is described below

commit e6b6d1a3e3114d6193b68eb67a4c07f3787beaab
Author: Nikita Kuprins <[email protected]>
AuthorDate: Sat Aug 15 14:46:50 2026 +0300

    style: redesign homepage hero as a spreadsheet grid (#983)
    
    * style: redesign homepage hero with brand-colored spreadsheet grid
    
    * style: fade out clipped hero grid labels
    
    * style: keep the hero grid behind the hero content
    
    * style: extend hero column labels for wide screens
    
    ---------
    
    Co-authored-by: DeleiGuo <[email protected]>
---
 website/src/css/custom.css         |  2 +-
 website/src/pages/index.js         | 25 ++++++++++++++++
 website/src/pages/index.module.css | 61 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 87 insertions(+), 1 deletion(-)

diff --git a/website/src/css/custom.css b/website/src/css/custom.css
index 1285023a..4167f5e3 100644
--- a/website/src/css/custom.css
+++ b/website/src/css/custom.css
@@ -52,7 +52,7 @@
 }
 
 .hero {
-    background: radial-gradient(circle, #00b95f 20%, #69CD37 50%, #14824b 
100%);
+    background: linear-gradient(135deg, rgba(0, 0, 0, 0.45) 0%, rgba(0, 0, 0, 
0) 100%) #14824b;
 }
 
 .header-github-link::before {
diff --git a/website/src/pages/index.js b/website/src/pages/index.js
index cf1104f8..be9f5545 100644
--- a/website/src/pages/index.js
+++ b/website/src/pages/index.js
@@ -27,10 +27,35 @@ import Translate from '@docusaurus/Translate';
 import Heading from '@theme/Heading';
 import styles from './index.module.css';
 
+const COLUMN_COUNT = 120;
+const ROW_COUNT = 18;
+
+function columnLetter(index) {
+    let n = index + 1;
+    let label = '';
+    while (n > 0) {
+        const remainder = (n - 1) % 26;
+        label = String.fromCharCode(65 + remainder) + label;
+        n = Math.floor((n - 1) / 26);
+    }
+    return label;
+}
+
 function HomepageHeader() {
     const {siteConfig} = useDocusaurusContext();
     return (
         <header className={clsx('hero hero--primary', styles.heroBanner)}>
+            <div className={styles.gridOverlay} aria-hidden="true" />
+            <div className={styles.colLabels} aria-hidden="true">
+                {Array.from({length: COLUMN_COUNT}, (_, i) => (
+                    <span key={i}>{columnLetter(i)}</span>
+                ))}
+            </div>
+            <div className={styles.rowLabels} aria-hidden="true">
+                {Array.from({length: ROW_COUNT}, (_, i) => (
+                    <span key={i}>{i + 1}</span>
+                ))}
+            </div>
             <div className="container">
                 <Heading as="h1" className="hero__title">
                     {siteConfig.title}
diff --git a/website/src/pages/index.module.css 
b/website/src/pages/index.module.css
index dead0f1c..5863ec4b 100644
--- a/website/src/pages/index.module.css
+++ b/website/src/pages/index.module.css
@@ -23,14 +23,18 @@
  */
 
 .heroBanner {
+    --grid-size: 48px;
+    --grid-fade: 10px;
     padding: 6rem 0;
     text-align: center;
     position: relative;
     overflow: hidden;
+    isolation: isolate;
 }
 
 @media screen and (max-width: 996px) {
     .heroBanner {
+        --grid-size: 32px;
         padding: 2rem;
     }
 }
@@ -58,3 +62,60 @@
     width: 20px;
     height: 20px;
 }
+
+.gridOverlay {
+    position: absolute;
+    inset: 0;
+    z-index: -1;
+    pointer-events: none;
+    background-image:
+        linear-gradient(rgba(255, 255, 255, 0.05) 1px, transparent 1px),
+        linear-gradient(90deg, rgba(255, 255, 255, 0.05) 1px, transparent 1px);
+    background-size: var(--grid-size) var(--grid-size);
+}
+
+.colLabels,
+.rowLabels {
+    position: absolute;
+    z-index: -1;
+    pointer-events: none;
+    display: flex;
+    font-size: 0.8rem;
+    color: rgba(255, 255, 255, 0.22);
+}
+
+.colLabels {
+    top: 0;
+    left: 0;
+    right: 0;
+    height: var(--grid-size);
+    padding-left: var(--grid-size);
+    mask-image: linear-gradient(to left, transparent, #000 var(--grid-fade));
+}
+
+.rowLabels {
+    top: 0;
+    left: 0;
+    flex-direction: column;
+    width: var(--grid-size);
+    height: 100%;
+    padding-top: var(--grid-size);
+    mask-image: linear-gradient(to top, transparent, #000 var(--grid-fade));
+}
+
+.colLabels span,
+.rowLabels span {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    flex-shrink: 0;
+    width: var(--grid-size);
+    height: var(--grid-size);
+}
+
+@media screen and (max-width: 996px) {
+    .colLabels,
+    .rowLabels {
+        font-size: 0.6rem;
+    }
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to