Compare commits
5 Commits
1656b95a33
...
d2bb939dc8
Author | SHA1 | Date | |
---|---|---|---|
|
d2bb939dc8 | ||
|
063b5edbaa | ||
|
65713e5350 | ||
|
f530b84499 | ||
|
8b32f51c6e |
@@ -3,13 +3,9 @@ import { defineConfig } from 'astro/config';
|
||||
|
||||
import tailwindcss from '@tailwindcss/vite';
|
||||
|
||||
import react from '@astrojs/react';
|
||||
|
||||
// https://astro.build/config
|
||||
export default defineConfig({
|
||||
vite: {
|
||||
plugins: [tailwindcss()]
|
||||
},
|
||||
|
||||
integrations: [react()]
|
||||
}
|
||||
});
|
557
package-lock.json
generated
557
package-lock.json
generated
@@ -8,15 +8,9 @@
|
||||
"name": "omoluabi",
|
||||
"version": "0.0.1",
|
||||
"dependencies": {
|
||||
"@astrojs/react": "^4.3.0",
|
||||
"@tailwindcss/vite": "^4.1.10",
|
||||
"@types/react": "^19.1.8",
|
||||
"@types/react-dom": "^19.1.6",
|
||||
"astro": "^5.9.4",
|
||||
"daisyui": "^5.0.43",
|
||||
"keen-slider": "^6.8.6",
|
||||
"react": "^19.1.0",
|
||||
"react-dom": "^19.1.0",
|
||||
"tailwindcss": "^4.1.10"
|
||||
}
|
||||
},
|
||||
@@ -86,26 +80,6 @@
|
||||
"node": "18.20.8 || ^20.3.0 || >=22.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@astrojs/react": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/react/-/react-4.3.0.tgz",
|
||||
"integrity": "sha512-N02aj52Iezn69qHyx5+XvPqgsPMEnel9mI5JMbGiRMTzzLMuNaxRVoQTaq2024Dpr7BLsxCjqMkNvelqMDhaHA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vitejs/plugin-react": "^4.4.1",
|
||||
"ultrahtml": "^1.6.0",
|
||||
"vite": "^6.3.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": "18.20.8 || ^20.3.0 || >=22.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@types/react": "^17.0.50 || ^18.0.21 || ^19.0.0",
|
||||
"@types/react-dom": "^17.0.17 || ^18.0.6 || ^19.0.0",
|
||||
"react": "^17.0.2 || ^18.0.0 || ^19.0.0",
|
||||
"react-dom": "^17.0.2 || ^18.0.0 || ^19.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@astrojs/telemetry": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz",
|
||||
@@ -124,163 +98,6 @@
|
||||
"node": "18.20.8 || ^20.3.0 || >=22.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/code-frame": {
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
|
||||
"integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/helper-validator-identifier": "^7.27.1",
|
||||
"js-tokens": "^4.0.0",
|
||||
"picocolors": "^1.1.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/compat-data": {
|
||||
"version": "7.27.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz",
|
||||
"integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/core": {
|
||||
"version": "7.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz",
|
||||
"integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@ampproject/remapping": "^2.2.0",
|
||||
"@babel/code-frame": "^7.27.1",
|
||||
"@babel/generator": "^7.27.3",
|
||||
"@babel/helper-compilation-targets": "^7.27.2",
|
||||
"@babel/helper-module-transforms": "^7.27.3",
|
||||
"@babel/helpers": "^7.27.4",
|
||||
"@babel/parser": "^7.27.4",
|
||||
"@babel/template": "^7.27.2",
|
||||
"@babel/traverse": "^7.27.4",
|
||||
"@babel/types": "^7.27.3",
|
||||
"convert-source-map": "^2.0.0",
|
||||
"debug": "^4.1.0",
|
||||
"gensync": "^1.0.0-beta.2",
|
||||
"json5": "^2.2.3",
|
||||
"semver": "^6.3.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/babel"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/core/node_modules/semver": {
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/generator": {
|
||||
"version": "7.27.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz",
|
||||
"integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/parser": "^7.27.5",
|
||||
"@babel/types": "^7.27.3",
|
||||
"@jridgewell/gen-mapping": "^0.3.5",
|
||||
"@jridgewell/trace-mapping": "^0.3.25",
|
||||
"jsesc": "^3.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-compilation-targets": {
|
||||
"version": "7.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
|
||||
"integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/compat-data": "^7.27.2",
|
||||
"@babel/helper-validator-option": "^7.27.1",
|
||||
"browserslist": "^4.24.0",
|
||||
"lru-cache": "^5.1.1",
|
||||
"semver": "^6.3.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": {
|
||||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
|
||||
"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"yallist": "^3.0.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-compilation-targets/node_modules/semver": {
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-compilation-targets/node_modules/yallist": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
|
||||
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/@babel/helper-module-imports": {
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
|
||||
"integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/traverse": "^7.27.1",
|
||||
"@babel/types": "^7.27.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-module-transforms": {
|
||||
"version": "7.27.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz",
|
||||
"integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/helper-module-imports": "^7.27.1",
|
||||
"@babel/helper-validator-identifier": "^7.27.1",
|
||||
"@babel/traverse": "^7.27.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@babel/core": "^7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-plugin-utils": {
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz",
|
||||
"integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-string-parser": {
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
|
||||
@@ -299,28 +116,6 @@
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-validator-option": {
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
|
||||
"integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helpers": {
|
||||
"version": "7.27.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz",
|
||||
"integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/template": "^7.27.2",
|
||||
"@babel/types": "^7.27.6"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/parser": {
|
||||
"version": "7.27.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz",
|
||||
@@ -336,68 +131,6 @@
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-react-jsx-self": {
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz",
|
||||
"integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/helper-plugin-utils": "^7.27.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@babel/core": "^7.0.0-0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-react-jsx-source": {
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz",
|
||||
"integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/helper-plugin-utils": "^7.27.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@babel/core": "^7.0.0-0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/template": {
|
||||
"version": "7.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
|
||||
"integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.27.1",
|
||||
"@babel/parser": "^7.27.2",
|
||||
"@babel/types": "^7.27.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/traverse": {
|
||||
"version": "7.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz",
|
||||
"integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.27.1",
|
||||
"@babel/generator": "^7.27.3",
|
||||
"@babel/parser": "^7.27.4",
|
||||
"@babel/template": "^7.27.2",
|
||||
"@babel/types": "^7.27.3",
|
||||
"debug": "^4.3.1",
|
||||
"globals": "^11.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/types": {
|
||||
"version": "7.27.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz",
|
||||
@@ -1259,12 +992,6 @@
|
||||
"integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@rolldown/pluginutils": {
|
||||
"version": "1.0.0-beta.11",
|
||||
"resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.11.tgz",
|
||||
"integrity": "sha512-L/gAA/hyCSuzTF1ftlzUSI/IKr2POHsv1Dd78GfqkR83KMNuswWD61JxGV2L7nRwBBBSDr6R1gCkdTmoN7W4ag==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@rollup/pluginutils": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.2.0.tgz",
|
||||
@@ -1891,47 +1618,6 @@
|
||||
"vite": "^5.2.0 || ^6"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/babel__core": {
|
||||
"version": "7.20.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
|
||||
"integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/parser": "^7.20.7",
|
||||
"@babel/types": "^7.20.7",
|
||||
"@types/babel__generator": "*",
|
||||
"@types/babel__template": "*",
|
||||
"@types/babel__traverse": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/babel__generator": {
|
||||
"version": "7.27.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
|
||||
"integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/babel__template": {
|
||||
"version": "7.4.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
|
||||
"integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/parser": "^7.1.0",
|
||||
"@babel/types": "^7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/babel__traverse": {
|
||||
"version": "7.20.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz",
|
||||
"integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.20.7"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/debug": {
|
||||
"version": "4.1.12",
|
||||
"resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
|
||||
@@ -1998,24 +1684,6 @@
|
||||
"undici-types": "~7.8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/react": {
|
||||
"version": "19.1.8",
|
||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz",
|
||||
"integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"csstype": "^3.0.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/react-dom": {
|
||||
"version": "19.1.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.6.tgz",
|
||||
"integrity": "sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==",
|
||||
"license": "MIT",
|
||||
"peerDependencies": {
|
||||
"@types/react": "^19.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/unist": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
|
||||
@@ -2028,26 +1696,6 @@
|
||||
"integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/@vitejs/plugin-react": {
|
||||
"version": "4.5.2",
|
||||
"resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.5.2.tgz",
|
||||
"integrity": "sha512-QNVT3/Lxx99nMQWJWF7K4N6apUEuT0KlZA3mx/mVaoGj3smm/8rc8ezz15J1pcbcjDK0V15rpHetVfya08r76Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.27.4",
|
||||
"@babel/plugin-transform-react-jsx-self": "^7.27.1",
|
||||
"@babel/plugin-transform-react-jsx-source": "^7.27.1",
|
||||
"@rolldown/pluginutils": "1.0.0-beta.11",
|
||||
"@types/babel__core": "^7.20.5",
|
||||
"react-refresh": "^0.17.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^14.18.0 || >=16.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0"
|
||||
}
|
||||
},
|
||||
"node_modules/acorn": {
|
||||
"version": "8.15.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
|
||||
@@ -2364,38 +2012,6 @@
|
||||
"base64-js": "^1.1.2"
|
||||
}
|
||||
},
|
||||
"node_modules/browserslist": {
|
||||
"version": "4.25.0",
|
||||
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz",
|
||||
"integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/browserslist"
|
||||
},
|
||||
{
|
||||
"type": "tidelift",
|
||||
"url": "https://tidelift.com/funding/github/npm/browserslist"
|
||||
},
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/ai"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"caniuse-lite": "^1.0.30001718",
|
||||
"electron-to-chromium": "^1.5.160",
|
||||
"node-releases": "^2.0.19",
|
||||
"update-browserslist-db": "^1.1.3"
|
||||
},
|
||||
"bin": {
|
||||
"browserslist": "cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
|
||||
}
|
||||
},
|
||||
"node_modules/camelcase": {
|
||||
"version": "8.0.0",
|
||||
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz",
|
||||
@@ -2408,26 +2024,6 @@
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/caniuse-lite": {
|
||||
"version": "1.0.30001723",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001723.tgz",
|
||||
"integrity": "sha512-1R/elMjtehrFejxwmexeXAtae5UO9iSyFn6G/I806CYC/BLyyBk1EPhrKBkWhy6wM6Xnm47dSJQec+tLJ39WHw==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/browserslist"
|
||||
},
|
||||
{
|
||||
"type": "tidelift",
|
||||
"url": "https://tidelift.com/funding/github/npm/caniuse-lite"
|
||||
},
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/ai"
|
||||
}
|
||||
],
|
||||
"license": "CC-BY-4.0"
|
||||
},
|
||||
"node_modules/ccount": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
|
||||
@@ -2610,12 +2206,6 @@
|
||||
"integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==",
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/convert-source-map": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
|
||||
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/cookie": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz",
|
||||
@@ -2674,12 +2264,6 @@
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/csstype": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
|
||||
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/daisyui": {
|
||||
"version": "5.0.43",
|
||||
"resolved": "https://registry.npmjs.org/daisyui/-/daisyui-5.0.43.tgz",
|
||||
@@ -2810,12 +2394,6 @@
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/electron-to-chromium": {
|
||||
"version": "1.5.170",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.170.tgz",
|
||||
"integrity": "sha512-GP+M7aeluQo9uAyiTCxgIj/j+PrWhMlY7LFVj8prlsPljd0Fdg9AprlfUi+OCSFWy9Y5/2D/Jrj9HS8Z4rpKWA==",
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/emoji-regex": {
|
||||
"version": "10.4.0",
|
||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz",
|
||||
@@ -2893,15 +2471,6 @@
|
||||
"@esbuild/win32-x64": "0.25.5"
|
||||
}
|
||||
},
|
||||
"node_modules/escalade": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
|
||||
"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/escape-string-regexp": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
|
||||
@@ -3005,15 +2574,6 @@
|
||||
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/gensync": {
|
||||
"version": "1.0.0-beta.2",
|
||||
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
|
||||
"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/get-east-asian-width": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz",
|
||||
@@ -3032,15 +2592,6 @@
|
||||
"integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==",
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/globals": {
|
||||
"version": "11.12.0",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
|
||||
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/graceful-fs": {
|
||||
"version": "4.2.11",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
|
||||
@@ -3377,12 +2928,6 @@
|
||||
"jiti": "lib/jiti-cli.mjs"
|
||||
}
|
||||
},
|
||||
"node_modules/js-tokens": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
||||
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/js-yaml": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
|
||||
@@ -3395,36 +2940,6 @@
|
||||
"js-yaml": "bin/js-yaml.js"
|
||||
}
|
||||
},
|
||||
"node_modules/jsesc": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
|
||||
"integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"jsesc": "bin/jsesc"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/json5": {
|
||||
"version": "2.2.3",
|
||||
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
|
||||
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"json5": "lib/cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/keen-slider": {
|
||||
"version": "6.8.6",
|
||||
"resolved": "https://registry.npmjs.org/keen-slider/-/keen-slider-6.8.6.tgz",
|
||||
"integrity": "sha512-dcEQ7GDBpCjUQA8XZeWh3oBBLLmyn8aoeIQFGL/NTVkoEOsmlnXqA4QykUm/SncolAZYGsEk/PfUhLZ7mwMM2w==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/kleur": {
|
||||
"version": "4.1.5",
|
||||
"resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
|
||||
@@ -4625,12 +4140,6 @@
|
||||
"integrity": "sha512-0uGYQ1WQL1M5kKvGRXWQ3uZCHtLTO8hln3oBjIusM75WoesZ909uQJs/Hb946i2SS+Gsrhkaa6iAO17jRIv6DQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/node-releases": {
|
||||
"version": "2.0.19",
|
||||
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
|
||||
"integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/normalize-path": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
|
||||
@@ -4852,36 +4361,6 @@
|
||||
"integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/react": {
|
||||
"version": "19.1.0",
|
||||
"resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz",
|
||||
"integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/react-dom": {
|
||||
"version": "19.1.0",
|
||||
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz",
|
||||
"integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"scheduler": "^0.26.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": "^19.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/react-refresh": {
|
||||
"version": "0.17.0",
|
||||
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz",
|
||||
"integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/readdirp": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
|
||||
@@ -5173,12 +4652,6 @@
|
||||
"integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/scheduler": {
|
||||
"version": "0.26.0",
|
||||
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz",
|
||||
"integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/semver": {
|
||||
"version": "7.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
|
||||
@@ -5766,36 +5239,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/update-browserslist-db": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
|
||||
"integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/browserslist"
|
||||
},
|
||||
{
|
||||
"type": "tidelift",
|
||||
"url": "https://tidelift.com/funding/github/npm/browserslist"
|
||||
},
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/ai"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"escalade": "^3.2.0",
|
||||
"picocolors": "^1.1.1"
|
||||
},
|
||||
"bin": {
|
||||
"update-browserslist-db": "cli.js"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"browserslist": ">= 4.21.0"
|
||||
}
|
||||
},
|
||||
"node_modules/vfile": {
|
||||
"version": "6.0.3",
|
||||
"resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
|
||||
|
@@ -9,15 +9,9 @@
|
||||
"astro": "astro"
|
||||
},
|
||||
"dependencies": {
|
||||
"@astrojs/react": "^4.3.0",
|
||||
"@tailwindcss/vite": "^4.1.10",
|
||||
"@types/react": "^19.1.8",
|
||||
"@types/react-dom": "^19.1.6",
|
||||
"astro": "^5.9.4",
|
||||
"daisyui": "^5.0.43",
|
||||
"keen-slider": "^6.8.6",
|
||||
"react": "^19.1.0",
|
||||
"react-dom": "^19.1.0",
|
||||
"tailwindcss": "^4.1.10"
|
||||
}
|
||||
}
|
||||
|
57
src/components/AboutSection.astro
Normal file
57
src/components/AboutSection.astro
Normal file
@@ -0,0 +1,57 @@
|
||||
---
|
||||
import '../styles/main.css';
|
||||
// About section for homepage
|
||||
---
|
||||
<section class="section about-section">
|
||||
<div class="container">
|
||||
<div class="about-grid">
|
||||
<div class="about-image">
|
||||
<div class="about-image-frame"></div>
|
||||
<div class="about-image-container">
|
||||
<img src="/images/whoAreWe.webp" alt="About Omoluabi Association" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="about-content">
|
||||
<h2 style="font-family: 'Poppins', sans-serif; font-size: 2.5rem; font-weight: 700; color: #16a34a; margin: 0;">
|
||||
<div class="about-line"></div>
|
||||
About Us
|
||||
</h2>
|
||||
<h3 style="font-size: 1.5rem; font-weight: 700; margin-bottom: 1rem; color: #16a34a; display: flex; align-items: center; gap: 0.5rem;">
|
||||
<span style="font-size: 2rem;">🌟</span>
|
||||
WHO ARE WE?
|
||||
</h3>
|
||||
<div style="color: #374151; line-height: 1.6; margin-bottom: 2rem;">
|
||||
<p style="font-size: 1.125rem; margin-bottom: 1rem;">
|
||||
The <strong style="color: #16a34a;">Omoluabi Association</strong> in the Royal Kingdom of The Netherlands (OAN) is a pan-Yoruba Association with well-bred, selective, like-minded individuals of enviable character as our members.
|
||||
</p>
|
||||
<p style="margin-bottom: 1rem;">
|
||||
Our association extends beyond Yorubas or Nigerians only – we welcome culturally motivated Netherlanders who share our values and vision for community building.
|
||||
</p>
|
||||
<p>
|
||||
Our association is a non profit, non religious, non partisan, non ethnic and socio cultural organization that focuses on showcasing the Yoruba cultural heritages, norms, values and traditions to the western world, most especially in Holland.
|
||||
</p>
|
||||
</div>
|
||||
<div class="about-stats">
|
||||
<div class="stat-card">
|
||||
<div class="stat-number" style="color: #16a34a;">2018</div>
|
||||
<div class="stat-label">Established</div>
|
||||
</div>
|
||||
<div class="stat-card">
|
||||
<div class="stat-number" style="color: #f59e0b;">500+</div>
|
||||
<div class="stat-label">Members</div>
|
||||
</div>
|
||||
<div class="stat-card">
|
||||
<div class="stat-number" style="color: #dc2626;">50+</div>
|
||||
<div class="stat-label">Events</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="badges">
|
||||
<span class="badge badge-green">Non-Profit</span>
|
||||
<span class="badge badge-gold">Cultural Heritage</span>
|
||||
<span class="badge badge-red">Community Focus</span>
|
||||
<span class="badge badge-blue">Inclusive</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
61
src/components/ContactForm.astro
Normal file
61
src/components/ContactForm.astro
Normal file
@@ -0,0 +1,61 @@
|
||||
---
|
||||
// Contact Form Component - Static version
|
||||
---
|
||||
|
||||
<form class="max-w-xl mx-auto bg-base-100 p-8 rounded-xl shadow-lg" id="contactForm" autocomplete="off">
|
||||
<div class="mb-4">
|
||||
<label for="name" class="block font-bold mb-1">Name</label>
|
||||
<input type="text" id="name" name="name" class="input input-bordered w-full" required autocomplete="off" />
|
||||
</div>
|
||||
<div class="mb-4">
|
||||
<label for="email" class="block font-bold mb-1">Email</label>
|
||||
<input type="email" id="email" name="email" class="input input-bordered w-full" required autocomplete="off" />
|
||||
</div>
|
||||
<div class="mb-4">
|
||||
<label for="subject" class="block font-bold mb-1">Subject</label>
|
||||
<input type="text" id="subject" name="subject" class="input input-bordered w-full" required autocomplete="off" />
|
||||
</div>
|
||||
<div class="mb-4">
|
||||
<label for="message" class="block font-bold mb-1">Message</label>
|
||||
<textarea id="message" name="message" class="textarea textarea-bordered w-full" rows="5" required></textarea>
|
||||
</div>
|
||||
<!-- Honeypot field for spam protection -->
|
||||
<div style="display: none;">
|
||||
<label for="honey">Do not fill this out</label>
|
||||
<input type="text" id="honey" name="honey" tabindex="-1" autocomplete="off" />
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary w-full">Send Message</button>
|
||||
<div id="status" class="mt-4 text-center text-sm text-success" style="display: none;"></div>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const form = document.getElementById('contactForm') as HTMLFormElement;
|
||||
const statusDiv = document.getElementById('status') as HTMLDivElement;
|
||||
|
||||
if (!form || !statusDiv) return;
|
||||
|
||||
form.addEventListener('submit', async function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
// Honeypot check
|
||||
const honeyField = form.querySelector('#honey') as HTMLInputElement;
|
||||
if (honeyField && honeyField.value !== "") {
|
||||
showStatus("Spam detected.");
|
||||
return;
|
||||
}
|
||||
|
||||
showStatus("Sending...");
|
||||
|
||||
// Placeholder: would POST to /api/contact
|
||||
setTimeout(() => {
|
||||
showStatus("Message sent (placeholder, not yet implemented).");
|
||||
}, 1000);
|
||||
});
|
||||
|
||||
function showStatus(message: string) {
|
||||
statusDiv.textContent = message;
|
||||
statusDiv.style.display = 'block';
|
||||
}
|
||||
});
|
||||
</script>
|
@@ -1,46 +0,0 @@
|
||||
import { useState } from "react";
|
||||
|
||||
export default function ContactForm() {
|
||||
const [status, setStatus] = useState("");
|
||||
|
||||
const handleSubmit = async (e) => {
|
||||
e.preventDefault();
|
||||
const form = e.target;
|
||||
// Honeypot check
|
||||
if (form.honey.value !== "") {
|
||||
setStatus("Spam detected.");
|
||||
return;
|
||||
}
|
||||
setStatus("Sending...");
|
||||
// Placeholder: would POST to /api/contact
|
||||
setTimeout(() => setStatus("Message sent (placeholder, not yet implemented)."), 1000);
|
||||
};
|
||||
|
||||
return (
|
||||
<form className="max-w-xl mx-auto bg-base-100 p-8 rounded-xl shadow-lg" onSubmit={handleSubmit} autoComplete="off">
|
||||
<div className="mb-4">
|
||||
<label htmlFor="name" className="block font-bold mb-1">Name</label>
|
||||
<input type="text" id="name" name="name" className="input input-bordered w-full" required autoComplete="off" />
|
||||
</div>
|
||||
<div className="mb-4">
|
||||
<label htmlFor="email" className="block font-bold mb-1">Email</label>
|
||||
<input type="email" id="email" name="email" className="input input-bordered w-full" required autoComplete="off" />
|
||||
</div>
|
||||
<div className="mb-4">
|
||||
<label htmlFor="subject" className="block font-bold mb-1">Subject</label>
|
||||
<input type="text" id="subject" name="subject" className="input input-bordered w-full" required autoComplete="off" />
|
||||
</div>
|
||||
<div className="mb-4">
|
||||
<label htmlFor="message" className="block font-bold mb-1">Message</label>
|
||||
<textarea id="message" name="message" className="textarea textarea-bordered w-full" rows={5} required></textarea>
|
||||
</div>
|
||||
{/* Honeypot field for spam protection */}
|
||||
<div style={{ display: "none" }}>
|
||||
<label htmlFor="honey">Do not fill this out</label>
|
||||
<input type="text" id="honey" name="honey" tabIndex="-1" autoComplete="off" />
|
||||
</div>
|
||||
<button type="submit" className="btn btn-primary w-full">Send Message</button>
|
||||
{status && <div className="mt-4 text-center text-sm text-success">{status}</div>}
|
||||
</form>
|
||||
);
|
||||
}
|
109
src/components/EventsSection.astro
Normal file
109
src/components/EventsSection.astro
Normal file
@@ -0,0 +1,109 @@
|
||||
---
|
||||
import '../styles/main.css';
|
||||
// Events section for homepage
|
||||
---
|
||||
<section class="section" style="background: white;">
|
||||
<div class="container">
|
||||
<div style="text-align: center; margin-bottom: 3rem;">
|
||||
<h2 class="section-title">
|
||||
Upcoming <span style="color: #16a34a;">Events</span>
|
||||
</h2>
|
||||
<p class="section-subtitle">
|
||||
Join us in celebrating our rich cultural heritage and building stronger community bonds
|
||||
</p>
|
||||
<div class="section-divider"></div>
|
||||
</div>
|
||||
<div style="display: grid; grid-template-columns: 1fr; gap: 2rem;">
|
||||
<!-- Featured Event (Large) -->
|
||||
<div style="display: grid; grid-template-columns: 1fr; gap: 2rem;">
|
||||
<article style="
|
||||
background: white;
|
||||
border-radius: 1rem;
|
||||
box-shadow: 0 10px 25px rgba(0,0,0,0.1);
|
||||
overflow: hidden;
|
||||
transition: all 0.3s ease;
|
||||
position: relative;
|
||||
group: hover;
|
||||
" onmouseover="this.style.transform='translateY(-4px)'; this.style.boxShadow='0 20px 40px rgba(0,0,0,0.15)'"
|
||||
onmouseout="this.style.transform='translateY(0)'; this.style.boxShadow='0 10px 25px rgba(0,0,0,0.1)'">
|
||||
<div style="position: relative;">
|
||||
<img src="/images/placeholder-event1.jpg" alt="Nigerian Cultural Festival" style="
|
||||
width: 100%;
|
||||
height: 20rem;
|
||||
object-fit: cover;
|
||||
" />
|
||||
<div style="
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
background: linear-gradient(to top, rgba(0,0,0,0.6), transparent);
|
||||
"></div>
|
||||
<div style="
|
||||
position: absolute;
|
||||
top: 1rem;
|
||||
left: 1rem;
|
||||
background: #f59e0b;
|
||||
color: white;
|
||||
padding: 0.5rem 1rem;
|
||||
border-radius: 20px;
|
||||
font-weight: 600;
|
||||
font-size: 0.875rem;
|
||||
">
|
||||
Cultural Festival
|
||||
</div>
|
||||
<div style="
|
||||
position: absolute;
|
||||
top: 1rem;
|
||||
right: 1rem;
|
||||
background: rgba(255,255,255,0.9);
|
||||
color: #16a34a;
|
||||
padding: 0.5rem 1rem;
|
||||
border-radius: 20px;
|
||||
font-weight: 600;
|
||||
font-size: 0.875rem;
|
||||
">
|
||||
Dec 15, 2024
|
||||
</div>
|
||||
</div>
|
||||
<div style="padding: 2rem;">
|
||||
<h3 style="
|
||||
font-size: 1.5rem;
|
||||
font-weight: 700;
|
||||
margin-bottom: 0.75rem;
|
||||
color: #111827;
|
||||
">
|
||||
Nigerian Cultural Festival 2024
|
||||
</h3>
|
||||
<p style="color: #6b7280; margin-bottom: 1rem; line-height: 1.6;">
|
||||
Join us for a spectacular celebration of Nigerian culture featuring traditional music, dance, authentic cuisine, and art exhibitions. A perfect opportunity to connect with our heritage and community.
|
||||
</p>
|
||||
<div style="display: flex; align-items: center; justify-content: between; flex-wrap: wrap; gap: 1rem;">
|
||||
<div style="display: flex; align-items: center; gap: 0.5rem; color: #9ca3af; font-size: 0.875rem;">
|
||||
<span>📍</span>
|
||||
<span>Amsterdam Community Center</span>
|
||||
</div>
|
||||
<div style="display: flex; align-items: center; gap: 0.5rem; color: #9ca3af; font-size: 0.875rem;">
|
||||
<span>🕒</span>
|
||||
<span>14:00 - 22:00</span>
|
||||
</div>
|
||||
<button style="
|
||||
background: #16a34a;
|
||||
color: white;
|
||||
padding: 0.5rem 1rem;
|
||||
border-radius: 8px;
|
||||
border: none;
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
transition: all 0.3s ease;
|
||||
margin-left: auto;
|
||||
" onmouseover="this.style.background='#15803d'"
|
||||
onmouseout="this.style.background='#16a34a'">
|
||||
Learn More
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
<!-- You can add more events here as needed -->
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
@@ -1,75 +1,71 @@
|
||||
---
|
||||
// Footer.astro - Modern Nigerian-themed footer
|
||||
// Footer.astro - Modern Nigerian-themed footer with custom CSS
|
||||
---
|
||||
|
||||
<footer class="bg-gradient-to-br from-gray-900 via-gray-800 to-gray-900 text-white relative overflow-hidden">
|
||||
<footer class="footer">
|
||||
<!-- Background Pattern -->
|
||||
<div class="absolute inset-0 opacity-5">
|
||||
<div class="absolute inset-0" style="background-image: url('data:image/svg+xml,%3Csvg width=\"60\" height=\"60\" viewBox=\"0 0 60 60\" xmlns=\"http://www.w3.org/2000/svg\"%3E%3Cg fill=\"none\" fill-rule=\"evenodd\"%3E%3Cg fill=\"%23ffffff\" fill-opacity=\"0.1\"%3E%3Cpath d=\"M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z\"/%3E%3C/g%3E%3C/g%3E%3C/svg%3E');"></div>
|
||||
</div>
|
||||
<div class="footer-bg-pattern"></div>
|
||||
|
||||
<!-- Decorative Top Border -->
|
||||
<div class="h-2 bg-gradient-to-r from-nigerian-green-500 via-kente-gold-500 to-ankara-red-500"></div>
|
||||
<div class="footer-top-border"></div>
|
||||
|
||||
<div class="container mx-auto px-4 py-16 relative z-10">
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-12">
|
||||
<div class="footer-container">
|
||||
<div class="footer-grid">
|
||||
|
||||
<!-- Brand Section -->
|
||||
<div class="lg:col-span-2">
|
||||
<div class="flex items-center gap-4 mb-6">
|
||||
<div class="footer-brand">
|
||||
<div class="footer-logo-section">
|
||||
<!-- Logo -->
|
||||
<div class="relative">
|
||||
<div class="w-16 h-16 rounded-full bg-gradient-to-r from-nigerian-green-500 via-white to-nigerian-green-500 p-0.5 shadow-xl">
|
||||
<div class="w-full h-full rounded-full bg-gray-800 flex items-center justify-center">
|
||||
<div class="w-12 h-12 rounded-full bg-gradient-to-br from-nigerian-green-500 to-kente-gold-500 flex items-center justify-center">
|
||||
<span class="text-white font-bold text-xl">O</span>
|
||||
<div class="footer-logo-container">
|
||||
<div class="footer-logo-flag">
|
||||
<div class="footer-logo-inner">
|
||||
<div class="footer-logo-symbol">
|
||||
<span>O</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="absolute -top-1 -right-1 w-5 h-5 bg-kente-gold-400 rounded-full animate-pulse"></div>
|
||||
<div class="footer-logo-accent"></div>
|
||||
</div>
|
||||
<div>
|
||||
<h3 class="font-headline text-3xl font-bold bg-gradient-to-r from-nigerian-green-400 to-kente-gold-400 bg-clip-text text-transparent">
|
||||
Omoluabi Foundation
|
||||
</h3>
|
||||
<p class="text-gray-400 text-sm">Building Bridges, Celebrating Heritage</p>
|
||||
<div class="footer-brand-text">
|
||||
<h3 class="footer-brand-title">Omoluabi Association</h3>
|
||||
<p class="footer-brand-subtitle">Building Bridges, Celebrating Heritage</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="text-gray-300 leading-relaxed mb-6 max-w-md">
|
||||
<p class="footer-description">
|
||||
Connecting Nigerian hearts in the Netherlands through culture, community, and compassion.
|
||||
Together, we preserve our heritage while embracing our future.
|
||||
</p>
|
||||
|
||||
<!-- Nigerian Flag Colors Accent -->
|
||||
<div class="flex items-center gap-4 mb-6">
|
||||
<div class="flex gap-1">
|
||||
<div class="w-4 h-6 bg-nigerian-green-500 rounded-sm"></div>
|
||||
<div class="w-4 h-6 bg-white rounded-sm"></div>
|
||||
<div class="w-4 h-6 bg-nigerian-green-500 rounded-sm"></div>
|
||||
<div class="footer-flag-section">
|
||||
<div class="footer-flag">
|
||||
<div class="flag-stripe flag-green"></div>
|
||||
<div class="flag-stripe flag-white"></div>
|
||||
<div class="flag-stripe flag-green"></div>
|
||||
</div>
|
||||
<span class="text-sm text-gray-400">Proudly Nigerian 🇳🇬 in the Netherlands 🇳🇱</span>
|
||||
<span class="footer-flag-text">Proudly Nigerian 🇳🇬 in the Netherlands 🇳🇱</span>
|
||||
</div>
|
||||
|
||||
<!-- Social Media Links -->
|
||||
<div class="flex gap-4">
|
||||
<a href="#" class="group bg-gray-800 hover:bg-nigerian-green-500 p-3 rounded-full transition-all duration-300 transform hover:scale-110 hover:rotate-6">
|
||||
<svg class="w-5 h-5 group-hover:text-white transition-colors" fill="currentColor" viewBox="0 0 24 24">
|
||||
<div class="footer-social">
|
||||
<a href="#" class="social-link social-twitter">
|
||||
<svg class="social-icon" fill="currentColor" viewBox="0 0 24 24">
|
||||
<path d="M24 4.557c-.883.392-1.832.656-2.828.775 1.017-.609 1.798-1.574 2.165-2.724-.951.564-2.005.974-3.127 1.195-.897-.957-2.178-1.555-3.594-1.555-3.179 0-5.515 2.966-4.797 6.045-4.091-.205-7.719-2.165-10.148-5.144-1.29 2.213-.669 5.108 1.523 6.574-.806-.026-1.566-.247-2.229-.616-.054 2.281 1.581 4.415 3.949 4.89-.693.188-1.452.232-2.224.084.626 1.956 2.444 3.379 4.6 3.419-2.07 1.623-4.678 2.348-7.29 2.04 2.179 1.397 4.768 2.212 7.548 2.212 9.142 0 14.307-7.721 13.995-14.646.962-.695 1.797-1.562 2.457-2.549z"/>
|
||||
</svg>
|
||||
</a>
|
||||
<a href="#" class="group bg-gray-800 hover:bg-kente-gold-500 p-3 rounded-full transition-all duration-300 transform hover:scale-110 hover:rotate-6">
|
||||
<svg class="w-5 h-5 group-hover:text-white transition-colors" fill="currentColor" viewBox="0 0 24 24">
|
||||
<a href="#" class="social-link social-facebook">
|
||||
<svg class="social-icon" fill="currentColor" viewBox="0 0 24 24">
|
||||
<path d="M22.46 6c-.77.35-1.6.58-2.46.69.88-.53 1.56-1.37 1.88-2.38-.83.5-1.75.85-2.72 1.05C18.37 4.5 17.26 4 16 4c-2.35 0-4.27 1.92-4.27 4.29 0 .34.04.67.11.98C8.28 9.09 5.11 7.38 3 4.79c-.37.63-.58 1.37-.58 2.15 0 1.49.75 2.81 1.91 3.56-.71 0-1.37-.2-1.95-.5v.03c0 2.08 1.48 3.82 3.44 4.21a4.22 4.22 0 0 1-1.93.07 4.28 4.28 0 0 0 4 2.98 8.521 8.521 0 0 1-5.33 1.84c-.34 0-.68-.02-1.02-.06C3.44 20.29 5.7 21 8.12 21 16 21 20.33 14.46 20.33 8.79c0-.19 0-.37-.01-.56.84-.6 1.56-1.36 2.14-2.23z"/>
|
||||
</svg>
|
||||
</a>
|
||||
<a href="#" class="group bg-gray-800 hover:bg-ankara-red-500 p-3 rounded-full transition-all duration-300 transform hover:scale-110 hover:rotate-6">
|
||||
<svg class="w-5 h-5 group-hover:text-white transition-colors" fill="currentColor" viewBox="0 0 24 24">
|
||||
<a href="#" class="social-link social-instagram">
|
||||
<svg class="social-icon" fill="currentColor" viewBox="0 0 24 24">
|
||||
<path d="M12.017 0C5.396 0 .029 5.367.029 11.987c0 5.079 3.158 9.417 7.618 11.174-.105-.949-.199-2.403.041-3.439.219-.937 1.406-5.957 1.406-5.957s-.359-.72-.359-1.781c0-1.663.967-2.911 2.168-2.911 1.024 0 1.518.769 1.518 1.688 0 1.029-.653 2.567-.992 3.992-.285 1.193.6 2.165 1.775 2.165 2.128 0 3.768-2.245 3.768-5.487 0-2.861-2.063-4.869-5.008-4.869-3.41 0-5.409 2.562-5.409 5.199 0 1.033.394 2.143.889 2.741.097.118.112.221.083.343-.09.375-.293 1.199-.334 1.363-.053.225-.172.271-.402.165-1.495-.69-2.433-2.878-2.433-4.646 0-3.776 2.748-7.252 7.92-7.252 4.158 0 7.392 2.967 7.392 6.923 0 4.135-2.607 7.462-6.233 7.462-1.214 0-2.357-.629-2.75-1.378l-.748 2.853c-.271 1.043-1.002 2.35-1.492 3.146C9.57 23.812 10.763 24.009 12.017 24.009c6.624 0 11.99-5.367 11.99-11.988C24.007 5.367 18.641.001.012.001z"/>
|
||||
</svg>
|
||||
</a>
|
||||
<a href="#" class="group bg-gray-800 hover:bg-adire-blue-500 p-3 rounded-full transition-all duration-300 transform hover:scale-110 hover:rotate-6">
|
||||
<svg class="w-5 h-5 group-hover:text-white transition-colors" fill="currentColor" viewBox="0 0 24 24">
|
||||
<a href="#" class="social-link social-linkedin">
|
||||
<svg class="social-icon" fill="currentColor" viewBox="0 0 24 24">
|
||||
<path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/>
|
||||
</svg>
|
||||
</a>
|
||||
@@ -77,93 +73,74 @@
|
||||
</div>
|
||||
|
||||
<!-- Quick Links -->
|
||||
<div>
|
||||
<h4 class="font-headline text-xl font-bold mb-6 text-white flex items-center gap-2">
|
||||
<span class="w-1 h-6 bg-gradient-to-b from-nigerian-green-400 to-kente-gold-400 rounded-full"></span>
|
||||
<div class="footer-section">
|
||||
<h4 class="footer-section-title">
|
||||
<span class="footer-section-accent"></span>
|
||||
Quick Links
|
||||
</h4>
|
||||
<nav class="space-y-3">
|
||||
<a href="/" class="block text-gray-300 hover:text-nigerian-green-400 transition-colors duration-200 hover:translate-x-1 transform">
|
||||
Home
|
||||
</a>
|
||||
<a href="/events" class="block text-gray-300 hover:text-nigerian-green-400 transition-colors duration-200 hover:translate-x-1 transform">
|
||||
Events
|
||||
</a>
|
||||
<a href="/members" class="block text-gray-300 hover:text-nigerian-green-400 transition-colors duration-200 hover:translate-x-1 transform">
|
||||
Members
|
||||
</a>
|
||||
<a href="/orphanage" class="block text-gray-300 hover:text-nigerian-green-400 transition-colors duration-200 hover:translate-x-1 transform">
|
||||
Orphanage
|
||||
</a>
|
||||
<a href="/contact" class="block text-gray-300 hover:text-nigerian-green-400 transition-colors duration-200 hover:translate-x-1 transform">
|
||||
Contact
|
||||
</a>
|
||||
<a href="/join" class="block text-kente-gold-400 hover:text-kente-gold-300 transition-colors duration-200 hover:translate-x-1 transform font-semibold">
|
||||
Join Us →
|
||||
</a>
|
||||
<nav class="footer-nav">
|
||||
<a href="/home" class="footer-nav-link">Home</a>
|
||||
<a href="/events" class="footer-nav-link">Events</a>
|
||||
<a href="/members" class="footer-nav-link">Members</a>
|
||||
<a href="/orphanage" class="footer-nav-link">Orphanage</a>
|
||||
<a href="/contact" class="footer-nav-link">Contact</a>
|
||||
<a href="/join" class="footer-nav-link footer-nav-cta">Join Us →</a>
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
<!-- Contact Info -->
|
||||
<div>
|
||||
<h4 class="font-headline text-xl font-bold mb-6 text-white flex items-center gap-2">
|
||||
<span class="w-1 h-6 bg-gradient-to-b from-ankara-red-400 to-nigerian-green-400 rounded-full"></span>
|
||||
<div class="footer-section">
|
||||
<h4 class="footer-section-title">
|
||||
<span class="footer-section-accent footer-section-accent-alt"></span>
|
||||
Get in Touch
|
||||
</h4>
|
||||
<div class="space-y-4">
|
||||
<div class="flex items-start gap-3">
|
||||
<div class="bg-nigerian-green-500/20 p-2 rounded-lg mt-1">
|
||||
<svg class="w-4 h-4 text-nigerian-green-400" fill="currentColor" viewBox="0 0 20 20">
|
||||
<div class="footer-contact">
|
||||
<div class="contact-item">
|
||||
<div class="contact-icon contact-location">
|
||||
<svg class="contact-icon-svg" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M5.05 4.05a7 7 0 119.9 9.9L10 18.9l-4.95-4.95a7 7 0 010-9.9zM10 11a2 2 0 100-4 2 2 0 000 4z" clip-rule="evenodd"></path>
|
||||
</svg>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-gray-300 text-sm leading-relaxed">
|
||||
Amsterdam, Netherlands<br/>
|
||||
Various locations across NL
|
||||
</p>
|
||||
<div class="contact-text">
|
||||
<p>Amsterdam, Netherlands<br/>Various locations across NL</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex items-start gap-3">
|
||||
<div class="bg-kente-gold-500/20 p-2 rounded-lg mt-1">
|
||||
<svg class="w-4 h-4 text-kente-gold-400" fill="currentColor" viewBox="0 0 20 20">
|
||||
<div class="contact-item">
|
||||
<div class="contact-icon contact-phone">
|
||||
<svg class="contact-icon-svg" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M2 3a1 1 0 011-1h2.153a1 1 0 01.986.836l.74 4.435a1 1 0 01-.54 1.06l-1.548.773a11.037 11.037 0 006.105 6.105l.774-1.548a1 1 0 011.059-.54l4.435.74a1 1 0 01.836.986V17a1 1 0 01-1 1h-2C7.82 18 2 12.18 2 5V3z"></path>
|
||||
</svg>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-gray-300 text-sm">
|
||||
+31 (0) 123 456 789
|
||||
</p>
|
||||
<div class="contact-text">
|
||||
<p>+31 (0) 123 456 789</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex items-start gap-3">
|
||||
<div class="bg-ankara-red-500/20 p-2 rounded-lg mt-1">
|
||||
<svg class="w-4 h-4 text-ankara-red-400" fill="currentColor" viewBox="0 0 20 20">
|
||||
<div class="contact-item">
|
||||
<div class="contact-icon contact-email">
|
||||
<svg class="contact-icon-svg" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M2.003 5.884L10 9.882l7.997-3.998A2 2 0 0016 4H4a2 2 0 00-1.997 1.884z"></path>
|
||||
<path d="M18 8.118l-8 4-8-4V14a2 2 0 002 2h12a2 2 0 002-2V8.118z"></path>
|
||||
</svg>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-gray-300 text-sm">
|
||||
info@omoluabi.nl
|
||||
</p>
|
||||
<div class="contact-text">
|
||||
<p>info@omoluabi.nl</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Newsletter Signup -->
|
||||
<div class="mt-8 p-4 bg-gray-800/50 rounded-xl border border-gray-700">
|
||||
<h5 class="font-semibold mb-3 text-white">Stay Updated</h5>
|
||||
<div class="flex gap-2">
|
||||
<div class="footer-newsletter">
|
||||
<h5 class="newsletter-title">Stay Updated</h5>
|
||||
<div class="newsletter-form">
|
||||
<input
|
||||
type="email"
|
||||
placeholder="Your email"
|
||||
class="flex-1 px-3 py-2 bg-gray-700 border border-gray-600 rounded-lg text-sm text-white placeholder-gray-400 focus:border-nigerian-green-400 focus:outline-none"
|
||||
class="newsletter-input"
|
||||
/>
|
||||
<button class="bg-nigerian-green-500 hover:bg-nigerian-green-600 px-4 py-2 rounded-lg transition-colors duration-200">
|
||||
<svg class="w-4 h-4 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<button class="newsletter-button">
|
||||
<svg class="newsletter-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 19l9 2-9-18-9 18 9-2zm0 0v-8"></path>
|
||||
</svg>
|
||||
</button>
|
||||
@@ -173,34 +150,510 @@
|
||||
</div>
|
||||
|
||||
<!-- Bottom Section -->
|
||||
<div class="border-t border-gray-700 mt-12 pt-8">
|
||||
<div class="flex flex-col md:flex-row justify-between items-center gap-4">
|
||||
<div class="footer-bottom">
|
||||
<div class="footer-bottom-content">
|
||||
<!-- Copyright -->
|
||||
<div class="text-gray-400 text-sm">
|
||||
<span>© {new Date().getFullYear()} Omoluabi Foundation Netherlands. </span>
|
||||
<span class="text-nigerian-green-400">Made with ❤️ </span>
|
||||
<div class="footer-copyright">
|
||||
<span>© {new Date().getFullYear()} Omoluabi Association Netherlands. </span>
|
||||
<span class="copyright-heart">Made with ❤️ </span>
|
||||
<span>for the Nigerian community.</span>
|
||||
</div>
|
||||
|
||||
<!-- Additional Links -->
|
||||
<div class="flex gap-6 text-sm">
|
||||
<a href="/privacy" class="text-gray-400 hover:text-white transition-colors">Privacy Policy</a>
|
||||
<a href="/terms" class="text-gray-400 hover:text-white transition-colors">Terms of Service</a>
|
||||
<a href="/sitemap" class="text-gray-400 hover:text-white transition-colors">Sitemap</a>
|
||||
<div class="footer-links">
|
||||
<a href="/privacy" class="footer-link">Privacy Policy</a>
|
||||
<a href="/terms" class="footer-link">Terms of Service</a>
|
||||
<a href="/sitemap" class="footer-link">Sitemap</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Cultural Quote -->
|
||||
<div class="mt-6 text-center">
|
||||
<p class="text-gray-500 italic text-sm">
|
||||
"Omoluabi ni wa" - We are people of good character
|
||||
</p>
|
||||
<div class="flex justify-center mt-2 gap-1">
|
||||
<span class="text-nigerian-green-400">🌟</span>
|
||||
<span class="text-kente-gold-400">🌟</span>
|
||||
<span class="text-ankara-red-400">🌟</span>
|
||||
<div class="footer-quote">
|
||||
<p class="quote-text">"Omoluabi ni wa" - We are people of good character</p>
|
||||
<div class="quote-stars">
|
||||
<span class="star star-green">🌟</span>
|
||||
<span class="star star-gold">🌟</span>
|
||||
<span class="star star-red">🌟</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</footer>
|
||||
|
||||
<style>
|
||||
/* Footer Styles */
|
||||
.footer {
|
||||
background: linear-gradient(135deg, #111827 0%, #1f2937 50%, #111827 100%);
|
||||
color: white;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.footer-bg-pattern {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
opacity: 0.05;
|
||||
background-image: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.1'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
|
||||
}
|
||||
|
||||
.footer-top-border {
|
||||
height: 8px;
|
||||
background: linear-gradient(90deg, #16a34a, #f59e0b, #dc2626);
|
||||
}
|
||||
|
||||
.footer-container {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
padding: 4rem 2rem;
|
||||
position: relative;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.footer-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
gap: 3rem;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.footer-grid {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
.footer-grid {
|
||||
grid-template-columns: 2fr 1fr 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
/* Brand Section */
|
||||
.footer-brand {
|
||||
grid-column: 1 / -1;
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
.footer-brand {
|
||||
grid-column: 1 / 2;
|
||||
}
|
||||
}
|
||||
|
||||
.footer-logo-section {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.footer-logo-container {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.footer-logo-flag {
|
||||
width: 4rem;
|
||||
height: 4rem;
|
||||
border-radius: 50%;
|
||||
background: linear-gradient(45deg, #16a34a, #ffffff, #16a34a);
|
||||
padding: 2px;
|
||||
box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.footer-logo-inner {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border-radius: 50%;
|
||||
background: #1f2937;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.footer-logo-symbol {
|
||||
width: 3rem;
|
||||
height: 3rem;
|
||||
border-radius: 50%;
|
||||
background: linear-gradient(135deg, #16a34a, #f59e0b);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.footer-logo-symbol span {
|
||||
color: white;
|
||||
font-weight: bold;
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
.footer-logo-accent {
|
||||
position: absolute;
|
||||
top: -4px;
|
||||
right: -4px;
|
||||
width: 1.25rem;
|
||||
height: 1.25rem;
|
||||
background: #f59e0b;
|
||||
border-radius: 50%;
|
||||
animation: pulse 2s infinite;
|
||||
}
|
||||
|
||||
.footer-brand-text {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.footer-brand-title {
|
||||
font-family: 'Poppins', sans-serif;
|
||||
font-size: 1.875rem;
|
||||
font-weight: 700;
|
||||
background: linear-gradient(45deg, #16a34a, #f59e0b);
|
||||
background-clip: text;
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
margin-bottom: 0.25rem;
|
||||
}
|
||||
|
||||
.footer-brand-subtitle {
|
||||
color: #9ca3af;
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
|
||||
.footer-description {
|
||||
color: #d1d5db;
|
||||
line-height: 1.7;
|
||||
margin-bottom: 1.5rem;
|
||||
max-width: 24rem;
|
||||
}
|
||||
|
||||
.footer-flag-section {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.footer-flag {
|
||||
display: flex;
|
||||
gap: 1px;
|
||||
}
|
||||
|
||||
.flag-stripe {
|
||||
width: 1rem;
|
||||
height: 1.5rem;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
.flag-green {
|
||||
background: #16a34a;
|
||||
}
|
||||
|
||||
.flag-white {
|
||||
background: white;
|
||||
}
|
||||
|
||||
.footer-flag-text {
|
||||
font-size: 0.875rem;
|
||||
color: #9ca3af;
|
||||
}
|
||||
|
||||
.footer-social {
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.social-link {
|
||||
background: #374151;
|
||||
padding: 0.75rem;
|
||||
border-radius: 50%;
|
||||
transition: all 0.3s ease;
|
||||
transform: scale(1);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.social-link:hover {
|
||||
transform: scale(1.1) rotate(6deg);
|
||||
}
|
||||
|
||||
.social-twitter:hover {
|
||||
background: #16a34a;
|
||||
}
|
||||
|
||||
.social-facebook:hover {
|
||||
background: #f59e0b;
|
||||
}
|
||||
|
||||
.social-instagram:hover {
|
||||
background: #dc2626;
|
||||
}
|
||||
|
||||
.social-linkedin:hover {
|
||||
background: #2563eb;
|
||||
}
|
||||
|
||||
.social-icon {
|
||||
width: 1.25rem;
|
||||
height: 1.25rem;
|
||||
color: #9ca3af;
|
||||
transition: color 0.3s ease;
|
||||
}
|
||||
|
||||
.social-link:hover .social-icon {
|
||||
color: white;
|
||||
}
|
||||
|
||||
/* Footer Sections */
|
||||
.footer-section {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.footer-section-title {
|
||||
font-family: 'Poppins', sans-serif;
|
||||
font-size: 1.25rem;
|
||||
font-weight: 700;
|
||||
margin-bottom: 1.5rem;
|
||||
color: white;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.footer-section-accent {
|
||||
width: 4px;
|
||||
height: 1.5rem;
|
||||
background: linear-gradient(180deg, #16a34a, #f59e0b);
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
.footer-section-accent-alt {
|
||||
background: linear-gradient(180deg, #dc2626, #16a34a);
|
||||
}
|
||||
|
||||
.footer-nav {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.75rem;
|
||||
}
|
||||
|
||||
.footer-nav-link {
|
||||
color: #d1d5db;
|
||||
text-decoration: none;
|
||||
transition: all 0.2s ease;
|
||||
transform: translateX(0);
|
||||
}
|
||||
|
||||
.footer-nav-link:hover {
|
||||
color: #16a34a;
|
||||
transform: translateX(4px);
|
||||
}
|
||||
|
||||
.footer-nav-cta {
|
||||
color: #f59e0b;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.footer-nav-cta:hover {
|
||||
color: #f59e0b;
|
||||
}
|
||||
|
||||
/* Contact Section */
|
||||
.footer-contact {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1rem;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.contact-item {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
gap: 0.75rem;
|
||||
}
|
||||
|
||||
.contact-icon {
|
||||
padding: 0.5rem;
|
||||
border-radius: 8px;
|
||||
margin-top: 2px;
|
||||
}
|
||||
|
||||
.contact-location {
|
||||
background: rgba(22, 163, 74, 0.2);
|
||||
}
|
||||
|
||||
.contact-phone {
|
||||
background: rgba(245, 158, 11, 0.2);
|
||||
}
|
||||
|
||||
.contact-email {
|
||||
background: rgba(220, 38, 38, 0.2);
|
||||
}
|
||||
|
||||
.contact-icon-svg {
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
}
|
||||
|
||||
.contact-location .contact-icon-svg {
|
||||
color: #16a34a;
|
||||
}
|
||||
|
||||
.contact-phone .contact-icon-svg {
|
||||
color: #f59e0b;
|
||||
}
|
||||
|
||||
.contact-email .contact-icon-svg {
|
||||
color: #dc2626;
|
||||
}
|
||||
|
||||
.contact-text p {
|
||||
color: #d1d5db;
|
||||
font-size: 0.875rem;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
/* Newsletter */
|
||||
.footer-newsletter {
|
||||
padding: 1rem;
|
||||
background: rgba(55, 65, 81, 0.5);
|
||||
border-radius: 12px;
|
||||
border: 1px solid #4b5563;
|
||||
}
|
||||
|
||||
.newsletter-title {
|
||||
font-weight: 600;
|
||||
margin-bottom: 0.75rem;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.newsletter-form {
|
||||
display: flex;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.newsletter-input {
|
||||
flex: 1;
|
||||
padding: 0.5rem 0.75rem;
|
||||
background: #374151;
|
||||
border: 1px solid #4b5563;
|
||||
border-radius: 8px;
|
||||
font-size: 0.875rem;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.newsletter-input::placeholder {
|
||||
color: #9ca3af;
|
||||
}
|
||||
|
||||
.newsletter-input:focus {
|
||||
border-color: #16a34a;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.newsletter-button {
|
||||
background: #16a34a;
|
||||
padding: 0.5rem 1rem;
|
||||
border-radius: 8px;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
transition: background-color 0.2s ease;
|
||||
}
|
||||
|
||||
.newsletter-button:hover {
|
||||
background: #15803d;
|
||||
}
|
||||
|
||||
.newsletter-icon {
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
color: white;
|
||||
}
|
||||
|
||||
/* Bottom Section */
|
||||
.footer-bottom {
|
||||
border-top: 1px solid #4b5563;
|
||||
margin-top: 3rem;
|
||||
padding-top: 2rem;
|
||||
}
|
||||
|
||||
.footer-bottom-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1rem;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.footer-bottom-content {
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
}
|
||||
}
|
||||
|
||||
.footer-copyright {
|
||||
color: #9ca3af;
|
||||
font-size: 0.875rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.footer-copyright {
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
|
||||
.copyright-heart {
|
||||
color: #16a34a;
|
||||
}
|
||||
|
||||
.footer-links {
|
||||
display: flex;
|
||||
gap: 1.5rem;
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
|
||||
.footer-link {
|
||||
color: #9ca3af;
|
||||
text-decoration: none;
|
||||
transition: color 0.2s ease;
|
||||
}
|
||||
|
||||
.footer-link:hover {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.footer-quote {
|
||||
margin-top: 1.5rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.quote-text {
|
||||
color: #6b7280;
|
||||
font-style: italic;
|
||||
font-size: 0.875rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.quote-stars {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: 0.25rem;
|
||||
}
|
||||
|
||||
.star-green {
|
||||
color: #16a34a;
|
||||
}
|
||||
|
||||
.star-gold {
|
||||
color: #f59e0b;
|
||||
}
|
||||
|
||||
.star-red {
|
||||
color: #dc2626;
|
||||
}
|
||||
|
||||
/* Animations */
|
||||
@keyframes pulse {
|
||||
0%, 100% { opacity: 1; }
|
||||
50% { opacity: 0.5; }
|
||||
}
|
||||
</style>
|
@@ -1,102 +1,101 @@
|
||||
---
|
||||
import '../styles/main.css';
|
||||
// Header.astro - Updated with better navigation and active states
|
||||
---
|
||||
|
||||
<header class="fixed top-0 left-0 right-0 z-50 bg-white/95 backdrop-blur-lg border-b border-gray-200/50 shadow-lg">
|
||||
<div class="max-w-7xl mx-auto px-4">
|
||||
<header class="header">
|
||||
<div class="header-content">
|
||||
<!-- Top bar with cultural elements -->
|
||||
<div class="hidden md:flex items-center justify-between py-2 text-sm border-b border-gray-100">
|
||||
<div class="flex items-center gap-4 text-gray-600">
|
||||
<div class="flex items-center gap-2">
|
||||
<svg class="w-4 h-4 text-green-600" fill="currentColor" viewBox="0 0 20 20">
|
||||
<div class="header-top-bar">
|
||||
<div class="header-top-left">
|
||||
<div class="header-info-item">
|
||||
<svg class="header-icon header-icon-green" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M5.05 4.05a7 7 0 119.9 9.9L10 18.9l-4.95-4.95a7 7 0 010-9.9zM10 11a2 2 0 100-4 2 2 0 000 4z" clip-rule="evenodd"></path>
|
||||
</svg>
|
||||
<span>Netherlands</span>
|
||||
</div>
|
||||
<div class="flex items-center gap-2">
|
||||
<svg class="w-4 h-4 text-amber-600" fill="currentColor" viewBox="0 0 20 20">
|
||||
<div class="header-info-item">
|
||||
<svg class="header-icon header-icon-amber" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M2 3a1 1 0 011-1h2.153a1 1 0 01.986.836l.74 4.435a1 1 0 01-.54 1.06l-1.548.773a11.037 11.037 0 006.105 6.105l.774-1.548a1 1 0 011.059-.54l4.435.74a1 1 0 01.836.986V17a1 1 0 01-1 1h-2C7.82 18 2 12.18 2 5V3z"></path>
|
||||
</svg>
|
||||
<span>+31 (0) 123 456 789</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-center gap-1">
|
||||
<span class="text-gray-500">🇳🇬</span>
|
||||
<span class="font-semibold text-green-700">Celebrating Nigerian Heritage</span>
|
||||
<span class="text-gray-500">🇳🇱</span>
|
||||
<div class="header-top-right">
|
||||
<span class="flag-emoji">🇳🇬</span>
|
||||
<span class="header-heritage-text">Celebrating Nigerian Heritage</span>
|
||||
<span class="flag-emoji">🇳🇱</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Main navigation -->
|
||||
<nav class="flex items-center justify-between py-4">
|
||||
<nav class="header-nav">
|
||||
<!-- Logo -->
|
||||
<a href="/" class="flex items-center gap-3 group">
|
||||
<div class="relative">
|
||||
<a href="/home" class="header-logo">
|
||||
<div class="logo-container">
|
||||
<!-- Nigerian flag inspired logo -->
|
||||
<div class="w-12 h-12 rounded-full bg-gradient-to-r from-green-500 via-white to-green-500 p-0.5 shadow-lg group-hover:shadow-xl transition-all duration-300">
|
||||
<div class="w-full h-full rounded-full bg-white flex items-center justify-center">
|
||||
<div class="w-8 h-8 rounded-full bg-gradient-to-br from-green-500 to-amber-500 flex items-center justify-center">
|
||||
<span class="text-white font-bold text-sm">O</span>
|
||||
<div class="logo-flag">
|
||||
<div class="logo-inner">
|
||||
<div class="logo-symbol">
|
||||
<span>O</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Floating accent -->
|
||||
<div class="absolute -top-1 -right-1 w-4 h-4 bg-amber-400 rounded-full animate-bounce"></div>
|
||||
<div class="logo-accent"></div>
|
||||
</div>
|
||||
<div class="flex flex-col">
|
||||
<span class="font-bold text-2xl bg-gradient-to-r from-green-600 to-amber-600 bg-clip-text text-transparent">
|
||||
Omoluabi
|
||||
</span>
|
||||
<span class="text-sm text-gray-600 font-medium -mt-1">Foundation</span>
|
||||
<div class="logo-text">
|
||||
<span class="logo-title">Omoluabi</span>
|
||||
<span class="logo-subtitle">Association</span>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<!-- Desktop Navigation -->
|
||||
<div class="hidden lg:flex items-center gap-1">
|
||||
<a href="/" class="nav-link px-4 py-2 rounded-lg font-medium text-gray-700 hover:text-green-600 hover:bg-green-50 transition-all duration-200 relative group">
|
||||
<div class="header-desktop-nav">
|
||||
<a href="/home" class="nav-link">
|
||||
Home
|
||||
<span class="absolute bottom-0 left-0 w-0 h-0.5 bg-green-600 group-hover:w-full transition-all duration-300"></span>
|
||||
<span class="nav-underline"></span>
|
||||
</a>
|
||||
<a href="/about" class="nav-link px-4 py-2 rounded-lg font-medium text-gray-700 hover:text-green-600 hover:bg-green-50 transition-all duration-200 relative group">
|
||||
<a href="/about" class="nav-link">
|
||||
About
|
||||
<span class="absolute bottom-0 left-0 w-0 h-0.5 bg-green-600 group-hover:w-full transition-all duration-300"></span>
|
||||
<span class="nav-underline"></span>
|
||||
</a>
|
||||
<a href="/events" class="nav-link px-4 py-2 rounded-lg font-medium text-gray-700 hover:text-green-600 hover:bg-green-50 transition-all duration-200 relative group">
|
||||
<a href="/events" class="nav-link">
|
||||
Events
|
||||
<span class="absolute bottom-0 left-0 w-0 h-0.5 bg-green-600 group-hover:w-full transition-all duration-300"></span>
|
||||
<span class="nav-underline"></span>
|
||||
</a>
|
||||
<a href="/members" class="nav-link px-4 py-2 rounded-lg font-medium text-gray-700 hover:text-green-600 hover:bg-green-50 transition-all duration-200 relative group">
|
||||
<a href="/members" class="nav-link">
|
||||
Members
|
||||
<span class="absolute bottom-0 left-0 w-0 h-0.5 bg-green-600 group-hover:w-full transition-all duration-300"></span>
|
||||
<span class="nav-underline"></span>
|
||||
</a>
|
||||
<a href="/orphanage" class="nav-link px-4 py-2 rounded-lg font-medium text-gray-700 hover:text-green-600 hover:bg-green-50 transition-all duration-200 relative group">
|
||||
<a href="/orphanage" class="nav-link">
|
||||
Orphanage
|
||||
<span class="absolute bottom-0 left-0 w-0 h-0.5 bg-green-600 group-hover:w-full transition-all duration-300"></span>
|
||||
<span class="nav-underline"></span>
|
||||
</a>
|
||||
<a href="/contact" class="nav-link px-4 py-2 rounded-lg font-medium text-gray-700 hover:text-green-600 hover:bg-green-50 transition-all duration-200 relative group">
|
||||
<a href="/contact" class="nav-link">
|
||||
Contact
|
||||
<span class="absolute bottom-0 left-0 w-0 h-0.5 bg-green-600 group-hover:w-full transition-all duration-300"></span>
|
||||
<span class="nav-underline"></span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- CTA Buttons -->
|
||||
<div class="flex items-center gap-3">
|
||||
<a href="/donate" class="inline-flex items-center px-6 py-2 bg-gradient-to-r from-red-500 to-red-600 text-white rounded-lg shadow-lg hover:shadow-xl hover:from-red-600 hover:to-red-700 transition-all duration-200 font-medium">
|
||||
<svg class="w-4 h-4 mr-2" fill="currentColor" viewBox="0 0 20 20">
|
||||
<div class="header-cta">
|
||||
<a href="/donate" class="btn btn-donate">
|
||||
<svg class="btn-icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M3.172 5.172a4 4 0 015.656 0L10 6.343l1.172-1.171a4 4 0 115.656 5.656L10 17.657l-6.828-6.829a4 4 0 010-5.656z" clip-rule="evenodd"></path>
|
||||
</svg>
|
||||
Donate
|
||||
</a>
|
||||
<a href="/join" class="inline-flex items-center px-6 py-2 bg-gradient-to-r from-amber-500 to-amber-600 text-white rounded-lg shadow-lg hover:shadow-xl hover:from-amber-600 hover:to-amber-700 transition-all duration-200 font-medium">
|
||||
<svg class="w-4 h-4 mr-2" fill="currentColor" viewBox="0 0 20 20">
|
||||
<a href="/join" class="btn btn-join">
|
||||
<svg class="btn-icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M8 9a3 3 0 100-6 3 3 0 000 6zM8 11a6 6 0 016 6H2a6 6 0 016-6zM16 7a1 1 0 10-2 0v1h-1a1 1 0 100 2h1v1a1 1 0 102 0v-1h1a1 1 0 100-2h-1V7z"></path>
|
||||
</svg>
|
||||
Join Us
|
||||
</a>
|
||||
|
||||
<!-- Mobile menu button -->
|
||||
<button class="lg:hidden p-2 rounded-lg hover:bg-gray-100 transition-colors duration-200" onclick="toggleMobileMenu()">
|
||||
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<button class="mobile-menu-btn" id="mobile-menu-btn">
|
||||
<svg class="mobile-menu-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"></path>
|
||||
</svg>
|
||||
</button>
|
||||
@@ -105,24 +104,24 @@
|
||||
</div>
|
||||
|
||||
<!-- Mobile Navigation -->
|
||||
<div id="mobile-menu" class="lg:hidden hidden bg-white border-t border-gray-200 shadow-lg">
|
||||
<div class="max-w-7xl mx-auto px-4 py-4 space-y-2">
|
||||
<a href="/" class="block px-4 py-3 rounded-lg font-medium text-gray-700 hover:text-green-600 hover:bg-green-50 transition-all duration-200">
|
||||
<div id="mobile-menu" class="mobile-menu mobile-menu-hidden">
|
||||
<div class="mobile-menu-content">
|
||||
<a href="/home" class="mobile-nav-link">
|
||||
🏠 Home
|
||||
</a>
|
||||
<a href="/about" class="block px-4 py-3 rounded-lg font-medium text-gray-700 hover:text-green-600 hover:bg-green-50 transition-all duration-200">
|
||||
<a href="/about" class="mobile-nav-link">
|
||||
ℹ️ About
|
||||
</a>
|
||||
<a href="/events" class="block px-4 py-3 rounded-lg font-medium text-gray-700 hover:text-green-600 hover:bg-green-50 transition-all duration-200">
|
||||
<a href="/events" class="mobile-nav-link">
|
||||
📅 Events
|
||||
</a>
|
||||
<a href="/members" class="block px-4 py-3 rounded-lg font-medium text-gray-700 hover:text-green-600 hover:bg-green-50 transition-all duration-200">
|
||||
<a href="/members" class="mobile-nav-link">
|
||||
👥 Members
|
||||
</a>
|
||||
<a href="/orphanage" class="block px-4 py-3 rounded-lg font-medium text-gray-700 hover:text-green-600 hover:bg-green-50 transition-all duration-200">
|
||||
<a href="/orphanage" class="mobile-nav-link">
|
||||
🏠 Orphanage
|
||||
</a>
|
||||
<a href="/contact" class="block px-4 py-3 rounded-lg font-medium text-gray-700 hover:text-green-600 hover:bg-green-50 transition-all duration-200">
|
||||
<a href="/contact" class="mobile-nav-link">
|
||||
📞 Contact
|
||||
</a>
|
||||
</div>
|
||||
@@ -131,30 +130,537 @@
|
||||
|
||||
<script>
|
||||
function toggleMobileMenu() {
|
||||
console.log('toggleMobileMenu function called');
|
||||
const menu = document.getElementById('mobile-menu');
|
||||
menu.classList.toggle('hidden');
|
||||
console.log('Menu element:', menu);
|
||||
if (menu) {
|
||||
const wasHidden = menu.classList.contains('mobile-menu-hidden');
|
||||
menu.classList.toggle('mobile-menu-hidden');
|
||||
const isNowHidden = menu.classList.contains('mobile-menu-hidden');
|
||||
console.log('Menu was hidden:', wasHidden, 'Menu is now hidden:', isNowHidden);
|
||||
console.log('Menu classes:', menu.className);
|
||||
} else {
|
||||
console.log('Menu element not found!');
|
||||
}
|
||||
}
|
||||
|
||||
// Add active state to current page
|
||||
// Initialize mobile menu functionality
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
console.log('DOM loaded, setting up mobile menu');
|
||||
|
||||
// Add click event to mobile menu button
|
||||
const mobileMenuBtn = document.getElementById('mobile-menu-btn');
|
||||
console.log('Mobile menu button:', mobileMenuBtn);
|
||||
if (mobileMenuBtn) {
|
||||
mobileMenuBtn.addEventListener('click', function(e) {
|
||||
console.log('Mobile menu button clicked!');
|
||||
e.preventDefault();
|
||||
toggleMobileMenu();
|
||||
});
|
||||
}
|
||||
|
||||
// Close mobile menu when clicking outside
|
||||
document.addEventListener('click', function(event) {
|
||||
const mobileMenu = document.getElementById('mobile-menu');
|
||||
const mobileMenuBtn = document.getElementById('mobile-menu-btn');
|
||||
|
||||
if (mobileMenu && mobileMenuBtn &&
|
||||
!mobileMenu.contains(event.target as Node) &&
|
||||
!mobileMenuBtn.contains(event.target as Node)) {
|
||||
mobileMenu.classList.add('mobile-menu-hidden');
|
||||
}
|
||||
});
|
||||
|
||||
// Close mobile menu when clicking on a mobile nav link
|
||||
const mobileNavLinks = document.querySelectorAll('.mobile-nav-link');
|
||||
mobileNavLinks.forEach(link => {
|
||||
link.addEventListener('click', function() {
|
||||
const menu = document.getElementById('mobile-menu');
|
||||
if (menu) {
|
||||
menu.classList.add('mobile-menu-hidden');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Add active state to current page
|
||||
const currentPath = window.location.pathname;
|
||||
const navLinks = document.querySelectorAll('.nav-link');
|
||||
|
||||
// Desktop navigation active state
|
||||
navLinks.forEach(link => {
|
||||
const href = link.getAttribute('href');
|
||||
if (href === currentPath || (currentPath !== '/' && href !== '/' && currentPath.startsWith(href))) {
|
||||
link.classList.add('text-green-600', 'bg-green-50');
|
||||
const underline = link.querySelector('span');
|
||||
if (href && (href === currentPath || (currentPath !== '/home' && href !== '/home' && currentPath.startsWith(href)))) {
|
||||
link.classList.add('nav-link-active');
|
||||
const underline = link.querySelector('.nav-underline');
|
||||
if (underline) {
|
||||
underline.classList.add('w-full');
|
||||
underline.classList.add('nav-underline-active');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Mobile navigation active state
|
||||
mobileNavLinks.forEach(link => {
|
||||
const href = link.getAttribute('href');
|
||||
if (href && (href === currentPath || (currentPath !== '/home' && href !== '/home' && currentPath.startsWith(href)))) {
|
||||
link.classList.add('mobile-nav-link-active');
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<style>
|
||||
/* Add some breathing room for fixed header */
|
||||
/* Header Styles */
|
||||
.header {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 50;
|
||||
background: rgba(255, 255, 255, 0.95);
|
||||
backdrop-filter: blur(10px);
|
||||
border-bottom: 1px solid rgba(229, 229, 229, 0.5);
|
||||
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.header-content {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
padding: 0 2rem;
|
||||
}
|
||||
|
||||
/* Top Bar */
|
||||
.header-top-bar {
|
||||
display: none;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 0.5rem 0;
|
||||
border-bottom: 1px solid rgba(229, 229, 229, 0.5);
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.header-top-bar {
|
||||
display: flex;
|
||||
}
|
||||
}
|
||||
|
||||
.header-top-left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
color: #6b7280;
|
||||
}
|
||||
|
||||
.header-info-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.header-icon {
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
}
|
||||
|
||||
.header-icon-green {
|
||||
color: #16a34a;
|
||||
}
|
||||
|
||||
.header-icon-amber {
|
||||
color: #f59e0b;
|
||||
}
|
||||
|
||||
.header-top-right {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.25rem;
|
||||
}
|
||||
|
||||
.flag-emoji {
|
||||
color: #6b7280;
|
||||
}
|
||||
|
||||
.header-heritage-text {
|
||||
font-weight: 600;
|
||||
color: #16a34a;
|
||||
}
|
||||
|
||||
/* Main Navigation */
|
||||
.header-nav {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 1rem 0;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
/* Logo */
|
||||
.header-logo {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.75rem;
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.logo-container {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.logo-flag {
|
||||
width: 3rem;
|
||||
height: 3rem;
|
||||
border-radius: 50%;
|
||||
background: linear-gradient(45deg, #16a34a, #ffffff, #16a34a);
|
||||
padding: 2px;
|
||||
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.logo-flag {
|
||||
width: 2.5rem;
|
||||
height: 2.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.header-logo:hover .logo-flag {
|
||||
box-shadow: 0 8px 12px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
.logo-inner {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border-radius: 50%;
|
||||
background: white;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.logo-symbol {
|
||||
width: 2rem;
|
||||
height: 2rem;
|
||||
border-radius: 50%;
|
||||
background: linear-gradient(135deg, #16a34a, #f59e0b);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.logo-symbol {
|
||||
width: 1.5rem;
|
||||
height: 1.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.logo-symbol span {
|
||||
color: white;
|
||||
font-weight: bold;
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.logo-symbol span {
|
||||
font-size: 0.75rem;
|
||||
}
|
||||
}
|
||||
|
||||
.logo-accent {
|
||||
position: absolute;
|
||||
top: -4px;
|
||||
right: -4px;
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
background: #f59e0b;
|
||||
border-radius: 50%;
|
||||
animation: bounce 2s infinite;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.logo-accent {
|
||||
width: 0.75rem;
|
||||
height: 0.75rem;
|
||||
top: -2px;
|
||||
right: -2px;
|
||||
}
|
||||
}
|
||||
|
||||
.logo-text {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.logo-title {
|
||||
font-family: 'Poppins', sans-serif;
|
||||
font-size: 1.5rem;
|
||||
font-weight: 700;
|
||||
background: linear-gradient(45deg, #16a34a, #f59e0b);
|
||||
background-clip: text;
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.logo-title {
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
}
|
||||
|
||||
.logo-subtitle {
|
||||
font-size: 0.875rem;
|
||||
color: #6b7280;
|
||||
font-weight: 500;
|
||||
margin-top: -0.25rem;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.logo-subtitle {
|
||||
font-size: 0.75rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* Desktop Navigation */
|
||||
.header-desktop-nav {
|
||||
display: none;
|
||||
align-items: center;
|
||||
gap: 0.25rem;
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
.header-desktop-nav {
|
||||
display: flex;
|
||||
}
|
||||
}
|
||||
|
||||
.nav-link {
|
||||
position: relative;
|
||||
padding: 0.5rem 1rem;
|
||||
border-radius: 8px;
|
||||
font-weight: 500;
|
||||
color: #374151;
|
||||
text-decoration: none;
|
||||
transition: all 0.2s ease;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.nav-link:hover {
|
||||
color: #16a34a;
|
||||
background: rgba(22, 163, 74, 0.1);
|
||||
}
|
||||
|
||||
.nav-link-active {
|
||||
color: #16a34a;
|
||||
background: rgba(22, 163, 74, 0.1);
|
||||
}
|
||||
|
||||
.nav-underline {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 0;
|
||||
height: 2px;
|
||||
background: #16a34a;
|
||||
transition: width 0.3s ease;
|
||||
}
|
||||
|
||||
.nav-link:hover .nav-underline,
|
||||
.nav-underline-active {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* CTA Buttons */
|
||||
.header-cta {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.75rem;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.header-cta {
|
||||
gap: 0.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.btn {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
padding: 0.5rem 1.5rem;
|
||||
border-radius: 8px;
|
||||
font-weight: 500;
|
||||
text-decoration: none;
|
||||
transition: all 0.2s ease;
|
||||
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.btn {
|
||||
padding: 0.5rem 1rem;
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
}
|
||||
|
||||
.btn:hover {
|
||||
box-shadow: 0 8px 12px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
.btn-icon {
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
margin-right: 0.5rem;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.btn-icon {
|
||||
width: 0.875rem;
|
||||
height: 0.875rem;
|
||||
margin-right: 0.25rem;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-donate {
|
||||
background: linear-gradient(45deg, #ef4444, #dc2626);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.btn-donate:hover {
|
||||
background: linear-gradient(45deg, #dc2626, #b91c1c);
|
||||
}
|
||||
|
||||
.btn-join {
|
||||
background: linear-gradient(45deg, #f59e0b, #d97706);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.btn-join:hover {
|
||||
background: linear-gradient(45deg, #d97706, #b45309);
|
||||
}
|
||||
|
||||
/* Mobile Menu Button */
|
||||
.mobile-menu-btn {
|
||||
display: none;
|
||||
padding: 0.5rem;
|
||||
border-radius: 8px;
|
||||
background: none;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
transition: background-color 0.2s ease;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
@media (max-width: 1023px) {
|
||||
.mobile-menu-btn {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
.mobile-menu-btn:hover {
|
||||
background: rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
.mobile-menu-icon {
|
||||
width: 1.5rem;
|
||||
height: 1.5rem;
|
||||
}
|
||||
|
||||
/* Mobile Menu */
|
||||
.mobile-menu {
|
||||
display: none;
|
||||
background: white;
|
||||
border-top: 1px solid rgba(229, 229, 229, 0.5);
|
||||
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.mobile-menu:not(.mobile-menu-hidden) {
|
||||
display: block;
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
.mobile-menu {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
.mobile-menu-content {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
padding: 1rem 2rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.mobile-nav-link {
|
||||
display: block;
|
||||
padding: 0.75rem 1rem;
|
||||
border-radius: 8px;
|
||||
font-weight: 500;
|
||||
color: #374151;
|
||||
text-decoration: none;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
.mobile-nav-link:hover {
|
||||
color: #16a34a;
|
||||
background: rgba(22, 163, 74, 0.1);
|
||||
}
|
||||
|
||||
.mobile-nav-link-active {
|
||||
color: #16a34a;
|
||||
background: rgba(22, 163, 74, 0.1);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
/* Mobile-specific adjustments */
|
||||
@media (max-width: 768px) {
|
||||
.header-content {
|
||||
padding: 0 1rem;
|
||||
}
|
||||
|
||||
.header-nav {
|
||||
padding: 0.75rem 0;
|
||||
}
|
||||
|
||||
/* Hide desktop buttons on mobile */
|
||||
.btn {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Show mobile menu button */
|
||||
.mobile-menu-btn {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 769px) and (max-width: 1023px) {
|
||||
/* On tablets, show buttons but make them smaller */
|
||||
.btn {
|
||||
padding: 0.5rem 1rem;
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* Animations */
|
||||
@keyframes bounce {
|
||||
0%, 20%, 53%, 80%, 100% {
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
40%, 43% {
|
||||
transform: translate3d(0, -8px, 0);
|
||||
}
|
||||
70% {
|
||||
transform: translate3d(0, -4px, 0);
|
||||
}
|
||||
90% {
|
||||
transform: translate3d(0, -2px, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/* Body padding for fixed header */
|
||||
body {
|
||||
padding-top: 120px;
|
||||
}
|
||||
@@ -164,26 +670,4 @@
|
||||
padding-top: 80px;
|
||||
}
|
||||
}
|
||||
|
||||
/* Ensure smooth transitions */
|
||||
.nav-link {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Custom bounce animation */
|
||||
@keyframes bounce {
|
||||
0%, 20%, 53%, 80%, 100% {
|
||||
transform: translate3d(0,0,0);
|
||||
}
|
||||
40%, 43% {
|
||||
transform: translate3d(0,-8px,0);
|
||||
}
|
||||
70% {
|
||||
transform: translate3d(0,-4px,0);
|
||||
}
|
||||
90% {
|
||||
transform: translate3d(0,-2px,0);
|
||||
}
|
||||
}
|
||||
</style>
|
@@ -1,220 +0,0 @@
|
||||
import { useState, useEffect } from "react";
|
||||
|
||||
const slides = [
|
||||
{
|
||||
image: "/images/hero1.jpg",
|
||||
alt: "Nigerian community gathering",
|
||||
title: "Celebrating Nigerian Culture",
|
||||
subtitle: "in the Heart of Netherlands",
|
||||
description: "Join our vibrant community events that showcase the rich traditions, music, and cuisine of Nigeria while building lasting friendships.",
|
||||
cta: "Join Our Events",
|
||||
theme: "green"
|
||||
},
|
||||
{
|
||||
image: "/images/hero2.jpg",
|
||||
alt: "Children at orphanage",
|
||||
title: "Supporting Our Future",
|
||||
subtitle: "Orphanage Outreach Program",
|
||||
description: "Making a real difference in the lives of children through education, healthcare, and providing hope for a brighter tomorrow.",
|
||||
cta: "Learn More",
|
||||
theme: "gold"
|
||||
},
|
||||
{
|
||||
image: "/images/hero3.jpg",
|
||||
alt: "Nigerian textiles and art",
|
||||
title: "Proud Heritage",
|
||||
subtitle: "United in Our Mission",
|
||||
description: "Preserving and promoting Nigerian arts, crafts, and cultural traditions while fostering integration in Dutch society.",
|
||||
cta: "Explore Culture",
|
||||
theme: "red"
|
||||
},
|
||||
];
|
||||
|
||||
const themeColors = {
|
||||
green: {
|
||||
primary: "from-green-600 to-green-800",
|
||||
secondary: "from-green-500 to-green-700",
|
||||
accent: "bg-green-500",
|
||||
text: "text-green-600"
|
||||
},
|
||||
gold: {
|
||||
primary: "from-yellow-500 to-orange-600",
|
||||
secondary: "from-yellow-400 to-orange-500",
|
||||
accent: "bg-yellow-500",
|
||||
text: "text-yellow-600"
|
||||
},
|
||||
red: {
|
||||
primary: "from-red-600 to-red-800",
|
||||
secondary: "from-red-500 to-red-700",
|
||||
accent: "bg-red-500",
|
||||
text: "text-red-600"
|
||||
}
|
||||
};
|
||||
|
||||
export default function HeroCarousel() {
|
||||
const [currentSlide, setCurrentSlide] = useState(0);
|
||||
const [isPlaying, setIsPlaying] = useState(true);
|
||||
|
||||
useEffect(() => {
|
||||
if (!isPlaying) return;
|
||||
|
||||
const interval = setInterval(() => {
|
||||
setCurrentSlide((prev) => (prev + 1) % slides.length);
|
||||
}, 6000);
|
||||
|
||||
return () => clearInterval(interval);
|
||||
}, [isPlaying]);
|
||||
|
||||
const nextSlide = () => {
|
||||
setCurrentSlide((prev) => (prev + 1) % slides.length);
|
||||
};
|
||||
|
||||
const prevSlide = () => {
|
||||
setCurrentSlide((prev) => (prev - 1 + slides.length) % slides.length);
|
||||
};
|
||||
|
||||
const goToSlide = (index) => {
|
||||
setCurrentSlide(index);
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="relative w-full max-w-6xl mx-auto rounded-2xl overflow-hidden shadow-2xl bg-white">
|
||||
{/* Main Carousel Container */}
|
||||
<div className="relative h-[600px] overflow-hidden">
|
||||
{slides.map((slide, index) => {
|
||||
const theme = themeColors[slide.theme];
|
||||
return (
|
||||
<div
|
||||
key={index}
|
||||
className={`absolute inset-0 transition-all duration-1000 ease-in-out ${
|
||||
index === currentSlide
|
||||
? 'opacity-100 translate-x-0'
|
||||
: index < currentSlide
|
||||
? 'opacity-0 -translate-x-full'
|
||||
: 'opacity-0 translate-x-full'
|
||||
}`}
|
||||
>
|
||||
{/* Background Image */}
|
||||
<div className="absolute inset-0">
|
||||
<img
|
||||
src={slide.image}
|
||||
alt={slide.alt}
|
||||
className="w-full h-full object-cover"
|
||||
/>
|
||||
<div className={`absolute inset-0 bg-gradient-to-r ${theme.primary} opacity-80`}></div>
|
||||
<div className="absolute inset-0 bg-gradient-to-t from-black/50 via-transparent to-transparent"></div>
|
||||
</div>
|
||||
|
||||
{/* Content */}
|
||||
<div className="relative z-10 h-full flex items-center">
|
||||
<div className="container mx-auto px-8">
|
||||
<div className="max-w-2xl text-white">
|
||||
{/* Animated Content */}
|
||||
<div className={`transition-all duration-1000 delay-300 ${
|
||||
index === currentSlide ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-8'
|
||||
}`}>
|
||||
<div className="flex items-center gap-3 mb-4">
|
||||
<div className={`w-2 h-12 ${theme.accent} rounded-full`}></div>
|
||||
<span className="text-sm font-semibold uppercase tracking-wider opacity-90">
|
||||
Omoluabi Foundation
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<h1 className="text-5xl md:text-6xl font-bold mb-2 leading-tight">
|
||||
{slide.title}
|
||||
</h1>
|
||||
<h2 className="text-2xl md:text-3xl font-light mb-6 text-yellow-200">
|
||||
{slide.subtitle}
|
||||
</h2>
|
||||
|
||||
<p className="text-lg md:text-xl mb-8 leading-relaxed opacity-90 max-w-xl">
|
||||
{slide.description}
|
||||
</p>
|
||||
|
||||
<div className="flex flex-col sm:flex-row gap-4">
|
||||
<button className="bg-white text-gray-900 px-8 py-4 rounded-xl font-bold hover:bg-gray-100 transition-all duration-300 transform hover:scale-105 shadow-lg">
|
||||
{slide.cta}
|
||||
</button>
|
||||
<button className="border-2 border-white text-white px-8 py-4 rounded-xl font-bold hover:bg-white hover:text-gray-900 transition-all duration-300 transform hover:scale-105">
|
||||
Learn More
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Decorative Elements */}
|
||||
<div className="absolute top-10 right-10 w-32 h-32 border-2 border-white/20 rounded-full animate-spin" style={{animationDuration: '20s'}}></div>
|
||||
<div className="absolute bottom-10 left-10 w-24 h-24 border-2 border-white/20 rounded-full animate-bounce"></div>
|
||||
</div>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
|
||||
{/* Navigation Arrows */}
|
||||
<button
|
||||
onClick={prevSlide}
|
||||
className="absolute left-4 top-1/2 -translate-y-1/2 bg-white/20 backdrop-blur-sm hover:bg-white/30 text-white p-3 rounded-full transition-all duration-300 hover:scale-110 group"
|
||||
aria-label="Previous slide"
|
||||
>
|
||||
<svg className="w-6 h-6 group-hover:-translate-x-1 transition-transform" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M15 19l-7-7 7-7" />
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
<button
|
||||
onClick={nextSlide}
|
||||
className="absolute right-4 top-1/2 -translate-y-1/2 bg-white/20 backdrop-blur-sm hover:bg-white/30 text-white p-3 rounded-full transition-all duration-300 hover:scale-110 group"
|
||||
aria-label="Next slide"
|
||||
>
|
||||
<svg className="w-6 h-6 group-hover:translate-x-1 transition-transform" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 5l7 7-7 7" />
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
{/* Slide Indicators */}
|
||||
<div className="absolute bottom-6 left-1/2 -translate-x-1/2 flex gap-3">
|
||||
{slides.map((_, index) => (
|
||||
<button
|
||||
key={index}
|
||||
onClick={() => goToSlide(index)}
|
||||
className={`w-3 h-3 rounded-full transition-all duration-300 ${
|
||||
index === currentSlide
|
||||
? 'bg-white scale-125'
|
||||
: 'bg-white/50 hover:bg-white/75'
|
||||
}`}
|
||||
aria-label={`Go to slide ${index + 1}`}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
|
||||
{/* Play/Pause Button */}
|
||||
<button
|
||||
onClick={() => setIsPlaying(!isPlaying)}
|
||||
className="absolute top-4 right-4 bg-white/20 backdrop-blur-sm hover:bg-white/30 text-white p-2 rounded-full transition-all duration-300 hover:scale-110"
|
||||
aria-label={isPlaying ? "Pause slideshow" : "Play slideshow"}
|
||||
>
|
||||
{isPlaying ? (
|
||||
<svg className="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fillRule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zM7 8a1 1 0 012 0v4a1 1 0 11-2 0V8zm5-1a1 1 0 00-1 1v4a1 1 0 102 0V8a1 1 0 00-1-1z" clipRule="evenodd" />
|
||||
</svg>
|
||||
) : (
|
||||
<svg className="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zM9.555 7.168A1 1 0 008 8v4a1 1 0 001.555.832l3-2a1 1 0 000-1.664l-3-2z" clipRule="evenodd" />
|
||||
</svg>
|
||||
)}
|
||||
</button>
|
||||
|
||||
{/* Progress Bar */}
|
||||
<div className="absolute bottom-0 left-0 right-0 h-1 bg-white/20">
|
||||
<div
|
||||
className="h-full bg-gradient-to-r from-yellow-400 to-red-500 transition-all duration-100"
|
||||
style={{
|
||||
width: `${((currentSlide + 1) / slides.length) * 100}%`
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
34
src/components/HeroSection.astro
Normal file
34
src/components/HeroSection.astro
Normal file
@@ -0,0 +1,34 @@
|
||||
---
|
||||
import '../styles/main.css';
|
||||
// Hero section for homepage
|
||||
---
|
||||
<section class="hero">
|
||||
<div class="floating-element floating-1"></div>
|
||||
<div class="floating-element floating-2"></div>
|
||||
<div class="floating-element floating-3"></div>
|
||||
<div class="hero-content">
|
||||
<h1 class="hero-title">
|
||||
<span class="hero-title-shine">Welcome to<br/>
|
||||
Omoluabi Association</span>
|
||||
</h1>
|
||||
<p class="hero-subtitle">
|
||||
<strong>Bridging cultures, Building communities</strong><br/>
|
||||
Supporting Nigerians in the Netherlands with unity, heritage, and hope
|
||||
</p>
|
||||
<div class="hero-symbols">
|
||||
<span>🇳🇬</span>
|
||||
<span style="color: #f59e0b;">•</span>
|
||||
<span>🤝</span>
|
||||
<span style="color: #f59e0b;">•</span>
|
||||
<span>🇳🇱</span>
|
||||
</div>
|
||||
<div class="hero-cta">
|
||||
<a href="/join" class="btn" style="background: white; color: #16a34a; padding: 1rem 2rem; font-size: 1.125rem;">
|
||||
👥 Join Our Community
|
||||
</a>
|
||||
<a href="/events" class="btn btn-outline" style="padding: 1rem 2rem; font-size: 1.125rem;">
|
||||
📅 View Events
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
@@ -7,7 +7,7 @@ import Footer from '../components/Footer.astro';
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Omoluabi Foundation</title>
|
||||
<title>Omoluabi Association</title>
|
||||
<meta name="description" content="Supporting Nigerians in the Netherlands" />
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,9 +1,485 @@
|
||||
---
|
||||
import BaseLayout from '../layouts/BaseLayout.astro';
|
||||
import ContactForm from '../components/ContactForm.jsx';
|
||||
import Header from '../components/Header.astro';
|
||||
import Footer from '../components/Footer.astro';
|
||||
import ContactForm from '../components/ContactForm.astro';
|
||||
import '../styles/main.css';
|
||||
---
|
||||
<BaseLayout>
|
||||
<h1 class="text-3xl font-headline font-bold text-primary mt-12 text-center">Contact Us</h1>
|
||||
<p class="mt-4 text-center">We'd love to hear from you! Please use the form below or reach out via our contact details.</p>
|
||||
<ContactForm client:load />
|
||||
</BaseLayout>
|
||||
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<meta name="generator" content={Astro.generator} />
|
||||
<title>Contact Us - Omoluabi Association</title>
|
||||
<meta name="description" content="Get in touch with Omoluabi Association. We'd love to hear from you and answer any questions you may have." />
|
||||
</head>
|
||||
<body>
|
||||
<Header />
|
||||
|
||||
<main class="contact-page">
|
||||
<!-- Hero Section -->
|
||||
<section class="contact-hero">
|
||||
<div class="container">
|
||||
<h1 class="contact-title">Get in Touch</h1>
|
||||
<p class="contact-subtitle">We'd love to hear from you! Reach out to us for any questions, support, or to get involved with our community.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Contact Information Section -->
|
||||
<section class="contact-info-section">
|
||||
<div class="container">
|
||||
<div class="contact-info-grid">
|
||||
<div class="contact-info-card">
|
||||
<div class="contact-icon">📍</div>
|
||||
<h3>Visit Us</h3>
|
||||
<p>Amsterdam, Netherlands</p>
|
||||
<p>We're located in the heart of Amsterdam, serving the Nigerian community and beyond.</p>
|
||||
</div>
|
||||
<div class="contact-info-card">
|
||||
<div class="contact-icon">📞</div>
|
||||
<h3>Call Us</h3>
|
||||
<p>+31 (0) 123 456 789</p>
|
||||
<p>Available Monday to Friday, 9:00 AM - 6:00 PM CET</p>
|
||||
</div>
|
||||
<div class="contact-info-card">
|
||||
<div class="contact-icon">✉️</div>
|
||||
<h3>Email Us</h3>
|
||||
<p>info@omoluabi-association.nl</p>
|
||||
<p>We typically respond within 24 hours during business days.</p>
|
||||
</div>
|
||||
<div class="contact-info-card">
|
||||
<div class="contact-icon">🕒</div>
|
||||
<h3>Office Hours</h3>
|
||||
<p>Monday - Friday</p>
|
||||
<p>9:00 AM - 6:00 PM CET</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Contact Form Section -->
|
||||
<section class="contact-form-section">
|
||||
<div class="container">
|
||||
<div class="contact-form-container">
|
||||
<div class="form-intro">
|
||||
<h2 class="form-title">Send Us a Message</h2>
|
||||
<p class="form-subtitle">Fill out the form below and we'll get back to you as soon as possible. All fields marked with * are required.</p>
|
||||
</div>
|
||||
<ContactForm />
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- FAQ Section -->
|
||||
<section class="faq-section">
|
||||
<div class="container">
|
||||
<h2 class="section-title">Frequently Asked Questions</h2>
|
||||
<div class="faq-grid">
|
||||
<div class="faq-item">
|
||||
<h3 class="faq-question">How can I become a member?</h3>
|
||||
<p class="faq-answer">You can become a member by filling out our membership application form and paying the annual membership fee. Contact us for more details about the application process.</p>
|
||||
</div>
|
||||
<div class="faq-item">
|
||||
<h3 class="faq-question">How can I donate to the orphanage?</h3>
|
||||
<p class="faq-answer">You can donate through our secure online donation system, bank transfer, or by contacting us directly. All donations go directly to supporting the children in our care.</p>
|
||||
</div>
|
||||
<div class="faq-item">
|
||||
<h3 class="faq-question">Can I volunteer with the association?</h3>
|
||||
<p class="faq-answer">Yes! We welcome volunteers for various activities including events, fundraising, and orphanage support. Please contact us to discuss available opportunities.</p>
|
||||
</div>
|
||||
<div class="faq-item">
|
||||
<h3 class="faq-question">Do you organize cultural events?</h3>
|
||||
<p class="faq-answer">Yes, we regularly organize cultural events, celebrations, and community gatherings to promote Nigerian heritage and bring our community together.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Map Section -->
|
||||
<section class="map-section">
|
||||
<div class="container">
|
||||
<h2 class="section-title">Find Us</h2>
|
||||
<div class="map-container">
|
||||
<div class="map-placeholder">
|
||||
<span>Interactive Map</span>
|
||||
<p>Amsterdam, Netherlands</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Social Media Section -->
|
||||
<section class="social-section">
|
||||
<div class="container">
|
||||
<h2 class="section-title">Connect With Us</h2>
|
||||
<p class="social-subtitle">Follow us on social media to stay updated with our latest news, events, and community activities.</p>
|
||||
<div class="social-links">
|
||||
<a href="#" class="social-link">
|
||||
<span class="social-icon">📘</span>
|
||||
<span>Facebook</span>
|
||||
</a>
|
||||
<a href="#" class="social-link">
|
||||
<span class="social-icon">📷</span>
|
||||
<span>Instagram</span>
|
||||
</a>
|
||||
<a href="#" class="social-link">
|
||||
<span class="social-icon">🐦</span>
|
||||
<span>Twitter</span>
|
||||
</a>
|
||||
<a href="#" class="social-link">
|
||||
<span class="social-icon">💼</span>
|
||||
<span>LinkedIn</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<Footer />
|
||||
|
||||
<style>
|
||||
/* Contact Page Styles */
|
||||
.contact-page {
|
||||
min-height: 100vh;
|
||||
background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
padding: 0 2rem;
|
||||
}
|
||||
|
||||
/* Hero Section */
|
||||
.contact-hero {
|
||||
background: linear-gradient(135deg, #16a34a 0%, #15803d 100%);
|
||||
color: white;
|
||||
padding: 6rem 0 4rem;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.contact-hero::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><pattern id="grain" width="100" height="100" patternUnits="userSpaceOnUse"><circle cx="25" cy="25" r="1" fill="white" opacity="0.1"/><circle cx="75" cy="75" r="1" fill="white" opacity="0.1"/><circle cx="50" cy="10" r="0.5" fill="white" opacity="0.1"/><circle cx="10" cy="60" r="0.5" fill="white" opacity="0.1"/><circle cx="90" cy="40" r="0.5" fill="white" opacity="0.1"/></pattern></defs><rect width="100" height="100" fill="url(%23grain)"/></svg>');
|
||||
opacity: 0.3;
|
||||
}
|
||||
|
||||
.contact-title {
|
||||
font-size: 3.5rem;
|
||||
font-weight: 700;
|
||||
margin-bottom: 1rem;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.contact-subtitle {
|
||||
font-size: 1.25rem;
|
||||
opacity: 0.9;
|
||||
max-width: 600px;
|
||||
margin: 0 auto;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
/* Contact Info Section */
|
||||
.contact-info-section {
|
||||
padding: 4rem 0;
|
||||
}
|
||||
|
||||
.contact-info-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
||||
gap: 2rem;
|
||||
}
|
||||
|
||||
.contact-info-card {
|
||||
background: white;
|
||||
padding: 2.5rem;
|
||||
border-radius: 20px;
|
||||
text-align: center;
|
||||
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
|
||||
border: 1px solid rgba(22, 163, 74, 0.1);
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.contact-info-card:hover {
|
||||
transform: translateY(-5px);
|
||||
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
.contact-icon {
|
||||
font-size: 3rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.contact-info-card h3 {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 600;
|
||||
color: #16a34a;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.contact-info-card p {
|
||||
color: #6b7280;
|
||||
line-height: 1.6;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.contact-info-card p:last-child {
|
||||
margin-bottom: 0;
|
||||
font-size: 0.9rem;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
/* Contact Form Section */
|
||||
.contact-form-section {
|
||||
padding: 4rem 0;
|
||||
background: white;
|
||||
}
|
||||
|
||||
.contact-form-container {
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.form-intro {
|
||||
text-align: center;
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
.form-title {
|
||||
font-size: 2.5rem;
|
||||
font-weight: 600;
|
||||
color: #16a34a;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.form-subtitle {
|
||||
font-size: 1.1rem;
|
||||
color: #6b7280;
|
||||
max-width: 500px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
/* FAQ Section */
|
||||
.faq-section {
|
||||
padding: 4rem 0;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 2.5rem;
|
||||
font-weight: 600;
|
||||
color: #16a34a;
|
||||
text-align: center;
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
.faq-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
||||
gap: 2rem;
|
||||
}
|
||||
|
||||
.faq-item {
|
||||
background: white;
|
||||
padding: 2rem;
|
||||
border-radius: 15px;
|
||||
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
|
||||
border: 1px solid rgba(22, 163, 74, 0.1);
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.faq-item:hover {
|
||||
transform: translateY(-3px);
|
||||
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
.faq-question {
|
||||
font-size: 1.25rem;
|
||||
font-weight: 600;
|
||||
color: #16a34a;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.faq-answer {
|
||||
color: #6b7280;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
/* Map Section */
|
||||
.map-section {
|
||||
padding: 4rem 0;
|
||||
background: white;
|
||||
}
|
||||
|
||||
.map-section .section-title {
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.map-container {
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.map-placeholder {
|
||||
width: 100%;
|
||||
height: 400px;
|
||||
background: linear-gradient(135deg, #e5e7eb 0%, #d1d5db 100%);
|
||||
border-radius: 20px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: #6b7280;
|
||||
border: 2px dashed #9ca3af;
|
||||
}
|
||||
|
||||
.map-placeholder span {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 600;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.map-placeholder p {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
/* Social Section */
|
||||
.social-section {
|
||||
padding: 4rem 0;
|
||||
background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.social-section .section-title {
|
||||
color: white;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.social-subtitle {
|
||||
text-align: center;
|
||||
font-size: 1.1rem;
|
||||
opacity: 0.9;
|
||||
margin-bottom: 3rem;
|
||||
max-width: 600px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.social-links {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: 2rem;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.social-link {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
padding: 1.5rem;
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
border-radius: 15px;
|
||||
text-decoration: none;
|
||||
color: white;
|
||||
transition: all 0.3s ease;
|
||||
backdrop-filter: blur(10px);
|
||||
border: 1px solid rgba(255, 255, 255, 0.2);
|
||||
}
|
||||
|
||||
.social-link:hover {
|
||||
background: rgba(255, 255, 255, 0.2);
|
||||
transform: translateY(-5px);
|
||||
}
|
||||
|
||||
.social-icon {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.social-link span:last-child {
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
/* Responsive Design */
|
||||
@media (max-width: 768px) {
|
||||
.contact-title {
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
|
||||
.contact-subtitle {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
.contact-info-grid {
|
||||
grid-template-columns: 1fr;
|
||||
gap: 1.5rem;
|
||||
}
|
||||
|
||||
.contact-info-card {
|
||||
padding: 2rem;
|
||||
}
|
||||
|
||||
.form-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.faq-grid {
|
||||
grid-template-columns: 1fr;
|
||||
gap: 1.5rem;
|
||||
}
|
||||
|
||||
.social-links {
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.social-link {
|
||||
padding: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.container {
|
||||
padding: 0 1rem;
|
||||
}
|
||||
|
||||
.contact-hero {
|
||||
padding: 4rem 0 3rem;
|
||||
}
|
||||
|
||||
.contact-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.contact-info-card {
|
||||
padding: 1.5rem;
|
||||
}
|
||||
|
||||
.faq-item {
|
||||
padding: 1.5rem;
|
||||
}
|
||||
|
||||
.map-placeholder {
|
||||
height: 300px;
|
||||
}
|
||||
|
||||
.social-links {
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</body>
|
||||
</html>
|
@@ -1,27 +1,448 @@
|
||||
---
|
||||
import BaseLayout from '../layouts/BaseLayout.astro';
|
||||
// Events page for Omoluabi Association
|
||||
import Header from '../components/Header.astro';
|
||||
import Footer from '../components/Footer.astro';
|
||||
|
||||
// Get all event files
|
||||
const events = await Astro.glob('../../content/events/*.md');
|
||||
const sortedEvents = events.sort((a, b) => new Date(b.frontmatter.date) - new Date(a.frontmatter.date));
|
||||
const sortedEvents = events.sort((a: any, b: any) => new Date(b.frontmatter.date).getTime() - new Date(a.frontmatter.date).getTime());
|
||||
|
||||
// Separate upcoming and past events
|
||||
const now = new Date();
|
||||
const upcomingEvents = sortedEvents.filter((event: any) => new Date(event.frontmatter.date).getTime() >= now.getTime());
|
||||
const pastEvents = sortedEvents.filter((event: any) => new Date(event.frontmatter.date).getTime() < now.getTime());
|
||||
---
|
||||
<BaseLayout>
|
||||
<h1 class="text-3xl font-headline font-bold text-primary mt-12 text-center">Events</h1>
|
||||
<p class="mt-4 text-center">See our upcoming and past events below.</p>
|
||||
<section class="max-w-5xl mx-auto mt-8 grid grid-cols-1 md:grid-cols-2 gap-8 px-4">
|
||||
{sortedEvents.map(event => (
|
||||
<article class="card bg-base-100 shadow-lg">
|
||||
<figure>
|
||||
<img src={event.frontmatter.image} alt={event.frontmatter.title} class="w-full h-48 object-cover" />
|
||||
</figure>
|
||||
<div class="card-body">
|
||||
<div class="flex items-center gap-2 mb-2">
|
||||
<span class="badge badge-secondary">{event.frontmatter.category}</span>
|
||||
<span class="text-xs text-gray-500">{new Date(event.frontmatter.date).toLocaleDateString()}</span>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Events - Omoluabi Association</title>
|
||||
<meta name="description" content="See our upcoming and past events at Omoluabi Association." />
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Inter', system-ui, sans-serif;
|
||||
background: linear-gradient(135deg, #fafafa 0%, #f0fdf4 100%);
|
||||
min-height: 100vh;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
/* Page Header */
|
||||
.page-header {
|
||||
background: linear-gradient(135deg, #16a34a 0%, #f59e0b 50%, #dc2626 100%);
|
||||
color: white;
|
||||
padding: 4rem 2rem;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.page-header::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background-image: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.05'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.page-header-content {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
position: relative;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.page-title {
|
||||
font-size: 3.5rem;
|
||||
font-weight: 800;
|
||||
margin-bottom: 1rem;
|
||||
background: linear-gradient(90deg, #ffffff, #e0e7ff, #8b5cf6, #e0e7ff, #ffffff);
|
||||
background-size: 300% auto;
|
||||
background-clip: text;
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
animation: textShine 4s linear infinite;
|
||||
}
|
||||
|
||||
.page-subtitle {
|
||||
font-size: 1.25rem;
|
||||
opacity: 0.9;
|
||||
max-width: 600px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
@keyframes textShine {
|
||||
0% { background-position: 0% 50%; }
|
||||
100% { background-position: 100% 50%; }
|
||||
}
|
||||
|
||||
/* Content Sections */
|
||||
.content-section {
|
||||
padding: 4rem 2rem;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 2.5rem;
|
||||
font-weight: 700;
|
||||
text-align: center;
|
||||
margin-bottom: 1rem;
|
||||
color: #16a34a;
|
||||
}
|
||||
|
||||
.section-subtitle {
|
||||
font-size: 1.125rem;
|
||||
text-align: center;
|
||||
color: #6b7280;
|
||||
margin-bottom: 3rem;
|
||||
max-width: 600px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
/* Events Grid */
|
||||
.events-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
|
||||
gap: 2rem;
|
||||
margin-bottom: 4rem;
|
||||
}
|
||||
|
||||
.event-card {
|
||||
background: white;
|
||||
border-radius: 1rem;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.1);
|
||||
transition: transform 0.3s ease, box-shadow 0.3s ease;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.event-card:hover {
|
||||
transform: translateY(-5px);
|
||||
box-shadow: 0 15px 30px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
.event-image {
|
||||
width: 100%;
|
||||
height: 200px;
|
||||
object-fit: cover;
|
||||
background: linear-gradient(45deg, #16a34a, #f59e0b);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: white;
|
||||
font-size: 3rem;
|
||||
}
|
||||
|
||||
.event-badge {
|
||||
position: absolute;
|
||||
top: 1rem;
|
||||
right: 1rem;
|
||||
background: #f59e0b;
|
||||
color: white;
|
||||
padding: 0.5rem 1rem;
|
||||
border-radius: 20px;
|
||||
font-weight: 600;
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
|
||||
.event-badge.upcoming {
|
||||
background: #16a34a;
|
||||
}
|
||||
|
||||
.event-badge.past {
|
||||
background: #6b7280;
|
||||
}
|
||||
|
||||
.event-content {
|
||||
padding: 1.5rem;
|
||||
}
|
||||
|
||||
.event-meta {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
margin-bottom: 1rem;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.event-category {
|
||||
background: rgba(22, 163, 74, 0.1);
|
||||
color: #16a34a;
|
||||
padding: 0.25rem 0.75rem;
|
||||
border-radius: 15px;
|
||||
font-size: 0.875rem;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.event-date {
|
||||
color: #6b7280;
|
||||
font-size: 0.875rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.25rem;
|
||||
}
|
||||
|
||||
.event-title {
|
||||
font-size: 1.25rem;
|
||||
font-weight: 600;
|
||||
margin-bottom: 0.75rem;
|
||||
color: #111827;
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
.event-description {
|
||||
color: #6b7280;
|
||||
margin-bottom: 1rem;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.event-details {
|
||||
background: #f9fafb;
|
||||
padding: 1rem;
|
||||
border-radius: 0.5rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.event-detail {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
font-size: 0.875rem;
|
||||
color: #374151;
|
||||
}
|
||||
|
||||
.event-detail:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.event-detail-icon {
|
||||
color: #16a34a;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.event-content-full {
|
||||
color: #6b7280;
|
||||
font-size: 0.875rem;
|
||||
line-height: 1.6;
|
||||
margin-top: 1rem;
|
||||
padding-top: 1rem;
|
||||
border-top: 1px solid #e5e7eb;
|
||||
}
|
||||
|
||||
/* Empty State */
|
||||
.empty-state {
|
||||
text-align: center;
|
||||
padding: 4rem 2rem;
|
||||
background: white;
|
||||
border-radius: 1rem;
|
||||
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.empty-icon {
|
||||
font-size: 4rem;
|
||||
margin-bottom: 1rem;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.empty-title {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 600;
|
||||
margin-bottom: 0.5rem;
|
||||
color: #374151;
|
||||
}
|
||||
|
||||
.empty-description {
|
||||
color: #6b7280;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.cta-button {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
background: linear-gradient(45deg, #16a34a, #f59e0b);
|
||||
color: white;
|
||||
padding: 0.75rem 1.5rem;
|
||||
border-radius: 8px;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
transition: all 0.3s ease;
|
||||
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.cta-button:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 8px 12px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
/* Responsive Design */
|
||||
@media (max-width: 768px) {
|
||||
.page-title {
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
|
||||
.events-grid {
|
||||
grid-template-columns: 1fr;
|
||||
gap: 1.5rem;
|
||||
}
|
||||
|
||||
.content-section {
|
||||
padding: 2rem 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
.events-title {
|
||||
font-size: 3.5rem;
|
||||
font-weight: 700;
|
||||
margin-bottom: 1rem;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<Header />
|
||||
|
||||
<!-- Main Content -->
|
||||
<main>
|
||||
<!-- Page Header -->
|
||||
<header class="page-header">
|
||||
<div class="page-header-content">
|
||||
<h1 class="page-title">Our Events</h1>
|
||||
<p class="page-subtitle">Join us for cultural celebrations, community gatherings, and special programs</p>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- Upcoming Events -->
|
||||
<section class="content-section">
|
||||
<div class="container">
|
||||
<h2 class="section-title">Upcoming Events</h2>
|
||||
<p class="section-subtitle">Mark your calendar for these exciting upcoming events</p>
|
||||
|
||||
{upcomingEvents.length > 0 ? (
|
||||
<div class="events-grid">
|
||||
{upcomingEvents.map((event: any) => (
|
||||
<article class="event-card">
|
||||
<div class="event-badge upcoming">Upcoming</div>
|
||||
<div class="event-image">
|
||||
📅
|
||||
</div>
|
||||
<div class="event-content">
|
||||
<div class="event-meta">
|
||||
<span class="event-category">{event.frontmatter.category}</span>
|
||||
<span class="event-date">
|
||||
📅 {new Date(event.frontmatter.date).toLocaleDateString('en-US', {
|
||||
weekday: 'long',
|
||||
year: 'numeric',
|
||||
month: 'long',
|
||||
day: 'numeric'
|
||||
})}
|
||||
</span>
|
||||
</div>
|
||||
<h3 class="event-title">{event.frontmatter.title}</h3>
|
||||
<p class="event-description">{event.frontmatter.description}</p>
|
||||
<div class="event-content-full">
|
||||
{event.compiledContent()}
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
))}
|
||||
</div>
|
||||
<h2 class="card-title text-lg font-bold">{event.frontmatter.title}</h2>
|
||||
<p class="text-sm mb-2">{event.frontmatter.description}</p>
|
||||
<div class="text-xs text-gray-400">{event.compiledContent()}</div>
|
||||
) : (
|
||||
<div class="empty-state">
|
||||
<div class="empty-icon">📅</div>
|
||||
<h3 class="empty-title">No Upcoming Events</h3>
|
||||
<p class="empty-description">We're currently planning our next events. Check back soon or contact us to stay updated!</p>
|
||||
<a href="/contact" class="cta-button">
|
||||
📞 Contact Us
|
||||
</a>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Past Events -->
|
||||
<section class="content-section" style="background: #f9fafb;">
|
||||
<div class="container">
|
||||
<h2 class="section-title">Past Events</h2>
|
||||
<p class="section-subtitle">Relive the memories of our previous successful events</p>
|
||||
|
||||
{pastEvents.length > 0 ? (
|
||||
<div class="events-grid">
|
||||
{pastEvents.map((event: any) => (
|
||||
<article class="event-card">
|
||||
<div class="event-badge past">Past Event</div>
|
||||
<div class="event-image">
|
||||
🎉
|
||||
</div>
|
||||
<div class="event-content">
|
||||
<div class="event-meta">
|
||||
<span class="event-category">{event.frontmatter.category}</span>
|
||||
<span class="event-date">
|
||||
📅 {new Date(event.frontmatter.date).toLocaleDateString('en-US', {
|
||||
weekday: 'long',
|
||||
year: 'numeric',
|
||||
month: 'long',
|
||||
day: 'numeric'
|
||||
})}
|
||||
</span>
|
||||
</div>
|
||||
<h3 class="event-title">{event.frontmatter.title}</h3>
|
||||
<p class="event-description">{event.frontmatter.description}</p>
|
||||
<div class="event-content-full">
|
||||
{event.compiledContent()}
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
))}
|
||||
</div>
|
||||
) : (
|
||||
<div class="empty-state">
|
||||
<div class="empty-icon">📚</div>
|
||||
<h3 class="empty-title">No Past Events</h3>
|
||||
<p class="empty-description">This is where we'll showcase our past events and achievements.</p>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Call to Action -->
|
||||
<section class="content-section" style="background: linear-gradient(135deg, #16a34a 0%, #f59e0b 100%); color: white; text-align: center;">
|
||||
<div class="container">
|
||||
<h2 style="font-size: 2.5rem; font-weight: 700; margin-bottom: 1rem;">
|
||||
Want to Stay Updated?
|
||||
</h2>
|
||||
<p style="font-size: 1.125rem; margin-bottom: 2rem; opacity: 0.9;">
|
||||
Join our community to receive updates about upcoming events and cultural activities
|
||||
</p>
|
||||
<div style="display: flex; gap: 1rem; justify-content: center; flex-wrap: wrap;">
|
||||
<a href="/join" class="cta-button" style="background: white; color: #16a34a;">
|
||||
👥 Join Our Community
|
||||
</a>
|
||||
<a href="/contact" class="cta-button" style="background: transparent; color: white; border: 2px solid white;">
|
||||
📞 Contact Us
|
||||
</a>
|
||||
</div>
|
||||
</article>
|
||||
))}
|
||||
</section>
|
||||
</BaseLayout>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<Footer />
|
||||
</body>
|
||||
</html>
|
31
src/pages/home.astro
Normal file
31
src/pages/home.astro
Normal file
@@ -0,0 +1,31 @@
|
||||
---
|
||||
// Standalone homepage with no external dependencies
|
||||
import '../styles/main.css';
|
||||
import Header from '../components/Header.astro';
|
||||
import Footer from '../components/Footer.astro';
|
||||
import HeroSection from '../components/HeroSection.astro';
|
||||
import AboutSection from '../components/AboutSection.astro';
|
||||
import EventsSection from '../components/EventsSection.astro';
|
||||
---
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Omoluabi Association</title>
|
||||
<meta name="description" content="Welcome to Omoluabi Association - Promoting Nigerian heritage and supporting our community in the Netherlands." />
|
||||
<!-- Removed font imports, now handled globally -->
|
||||
</head>
|
||||
<body>
|
||||
<Header />
|
||||
|
||||
<!-- Main Content -->
|
||||
<main class="main-content">
|
||||
<HeroSection />
|
||||
<AboutSection />
|
||||
<EventsSection />
|
||||
</main>
|
||||
|
||||
<Footer />
|
||||
</body>
|
||||
</html>
|
File diff suppressed because it is too large
Load Diff
@@ -1,22 +1,410 @@
|
||||
---
|
||||
import BaseLayout from '../layouts/BaseLayout.astro';
|
||||
import Header from '../components/Header.astro';
|
||||
import Footer from '../components/Footer.astro';
|
||||
import '../styles/main.css';
|
||||
|
||||
const membersData = await Astro.glob('../../content/members/members-sample.md');
|
||||
const intro = membersData[0]?.frontmatter.intro || '';
|
||||
const members = membersData[0]?.frontmatter.members || [];
|
||||
---
|
||||
<BaseLayout>
|
||||
<h1 class="text-3xl font-headline font-bold text-primary mt-12 text-center">Meet Our Members</h1>
|
||||
<section class="max-w-3xl mx-auto mt-8 mb-12 bg-base-100 rounded-xl shadow p-6">
|
||||
<h2 class="text-xl font-bold mb-4 text-accent">Membership Benefits/Welfare Packages</h2>
|
||||
<div class="text-gray-700 whitespace-pre-line">{intro}</div>
|
||||
</section>
|
||||
<section class="max-w-6xl mx-auto grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-8 px-4 mb-20">
|
||||
{members.map(member => (
|
||||
<div class="card bg-base-100 shadow-lg rounded-xl flex flex-col items-center p-4">
|
||||
<img src={member.image} alt={member.name} class="w-40 h-40 object-cover rounded-lg mb-4" />
|
||||
<h3 class="font-bold text-lg text-primary mb-1">{member.name}</h3>
|
||||
<p class="text-sm text-gray-600">{member.role}</p>
|
||||
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<meta name="generator" content={Astro.generator} />
|
||||
<title>Members - Omoluabi Association</title>
|
||||
<meta name="description" content="Meet our dedicated members and learn about membership benefits at Omoluabi Association." />
|
||||
</head>
|
||||
<body>
|
||||
<Header />
|
||||
|
||||
<main class="members-page">
|
||||
<!-- Hero Section -->
|
||||
<section class="members-hero">
|
||||
<div class="container">
|
||||
<h1 class="members-title">Meet Our Members</h1>
|
||||
<p class="members-subtitle">Dedicated individuals working together to promote Nigerian heritage and community welfare</p>
|
||||
</div>
|
||||
))}
|
||||
</section>
|
||||
</BaseLayout>
|
||||
</section>
|
||||
|
||||
<!-- Benefits Section -->
|
||||
<section class="benefits-section">
|
||||
<div class="container">
|
||||
<div class="benefits-card">
|
||||
<h2 class="benefits-title">Membership Benefits & Welfare Packages</h2>
|
||||
<div class="benefits-content">
|
||||
{intro.split('\n').map((line: string, index: number) => {
|
||||
if (line.trim()) {
|
||||
return <p class="benefit-item">{line.trim()}</p>;
|
||||
}
|
||||
return null;
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Members Grid -->
|
||||
<section class="members-grid-section">
|
||||
<div class="container">
|
||||
<h2 class="members-grid-title">Our Leadership Team</h2>
|
||||
<div class="members-grid">
|
||||
{members.map((member: any) => (
|
||||
<div class="member-card">
|
||||
<div class="member-image-container">
|
||||
<img src={member.image} alt={member.name} class="member-image" />
|
||||
<div class="member-overlay">
|
||||
<div class="member-role">{member.role}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="member-info">
|
||||
<h3 class="member-name">{member.name}</h3>
|
||||
<p class="member-role-text">{member.role}</p>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Join CTA Section -->
|
||||
<section class="join-cta-section">
|
||||
<div class="container">
|
||||
<div class="join-cta-card">
|
||||
<h2 class="join-cta-title">Join Our Community</h2>
|
||||
<p class="join-cta-text">Become a member and enjoy exclusive benefits while contributing to our mission of promoting Nigerian heritage and community welfare.</p>
|
||||
<div class="join-cta-buttons">
|
||||
<a href="/join" class="btn btn-primary">Join Us</a>
|
||||
<a href="/contact" class="btn btn-secondary">Contact Us</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<Footer />
|
||||
|
||||
<style>
|
||||
/* Members Page Styles */
|
||||
.members-page {
|
||||
min-height: 100vh;
|
||||
background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
padding: 0 2rem;
|
||||
}
|
||||
|
||||
/* Hero Section */
|
||||
.members-hero {
|
||||
background: linear-gradient(135deg, #16a34a 0%, #15803d 100%);
|
||||
color: white;
|
||||
padding: 6rem 0 4rem;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.members-hero::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><pattern id="grain" width="100" height="100" patternUnits="userSpaceOnUse"><circle cx="25" cy="25" r="1" fill="white" opacity="0.1"/><circle cx="75" cy="75" r="1" fill="white" opacity="0.1"/><circle cx="50" cy="10" r="0.5" fill="white" opacity="0.1"/><circle cx="10" cy="60" r="0.5" fill="white" opacity="0.1"/><circle cx="90" cy="40" r="0.5" fill="white" opacity="0.1"/></pattern></defs><rect width="100" height="100" fill="url(%23grain)"/></svg>');
|
||||
opacity: 0.3;
|
||||
}
|
||||
|
||||
.members-title {
|
||||
font-size: 3.5rem;
|
||||
font-weight: 700;
|
||||
margin-bottom: 1rem;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.members-subtitle {
|
||||
font-size: 1.25rem;
|
||||
opacity: 0.9;
|
||||
max-width: 600px;
|
||||
margin: 0 auto;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
/* Benefits Section */
|
||||
.benefits-section {
|
||||
padding: 4rem 0;
|
||||
}
|
||||
|
||||
.benefits-card {
|
||||
background: white;
|
||||
border-radius: 20px;
|
||||
padding: 3rem;
|
||||
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
|
||||
border: 1px solid rgba(22, 163, 74, 0.1);
|
||||
}
|
||||
|
||||
.benefits-title {
|
||||
font-size: 2rem;
|
||||
font-weight: 600;
|
||||
color: #16a34a;
|
||||
margin-bottom: 2rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.benefits-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.benefit-item {
|
||||
font-size: 1.1rem;
|
||||
line-height: 1.6;
|
||||
color: #374151;
|
||||
padding: 1rem;
|
||||
background: #f8fafc;
|
||||
border-radius: 12px;
|
||||
border-left: 4px solid #16a34a;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.benefit-item:hover {
|
||||
background: #f0f9ff;
|
||||
transform: translateX(5px);
|
||||
}
|
||||
|
||||
/* Members Grid Section */
|
||||
.members-grid-section {
|
||||
padding: 4rem 0;
|
||||
background: white;
|
||||
}
|
||||
|
||||
.members-grid-title {
|
||||
font-size: 2.5rem;
|
||||
font-weight: 600;
|
||||
color: #16a34a;
|
||||
text-align: center;
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
.members-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
|
||||
gap: 2rem;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
.member-card {
|
||||
background: white;
|
||||
border-radius: 20px;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
|
||||
transition: all 0.3s ease;
|
||||
border: 1px solid rgba(22, 163, 74, 0.1);
|
||||
}
|
||||
|
||||
.member-card:hover {
|
||||
transform: translateY(-10px);
|
||||
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
.member-image-container {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
height: 250px;
|
||||
}
|
||||
|
||||
.member-image {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
|
||||
.member-card:hover .member-image {
|
||||
transform: scale(1.1);
|
||||
}
|
||||
|
||||
.member-overlay {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
background: linear-gradient(transparent, rgba(0, 0, 0, 0.7));
|
||||
padding: 1rem;
|
||||
transform: translateY(100%);
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
|
||||
.member-card:hover .member-overlay {
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
.member-role {
|
||||
color: white;
|
||||
font-weight: 500;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.member-info {
|
||||
padding: 1.5rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.member-name {
|
||||
font-size: 1.25rem;
|
||||
font-weight: 600;
|
||||
color: #16a34a;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.member-role-text {
|
||||
color: #6b7280;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
/* Join CTA Section */
|
||||
.join-cta-section {
|
||||
padding: 4rem 0;
|
||||
background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);
|
||||
}
|
||||
|
||||
.join-cta-card {
|
||||
background: white;
|
||||
border-radius: 20px;
|
||||
padding: 3rem;
|
||||
text-align: center;
|
||||
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.join-cta-title {
|
||||
font-size: 2.5rem;
|
||||
font-weight: 600;
|
||||
color: #16a34a;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.join-cta-text {
|
||||
font-size: 1.1rem;
|
||||
color: #6b7280;
|
||||
margin-bottom: 2rem;
|
||||
max-width: 600px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.join-cta-buttons {
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
justify-content: center;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.btn {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
padding: 0.75rem 2rem;
|
||||
border-radius: 12px;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
transition: all 0.3s ease;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
background: linear-gradient(45deg, #16a34a, #15803d);
|
||||
color: white;
|
||||
box-shadow: 0 4px 15px rgba(22, 163, 74, 0.3);
|
||||
}
|
||||
|
||||
.btn-primary:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 8px 25px rgba(22, 163, 74, 0.4);
|
||||
}
|
||||
|
||||
.btn-secondary {
|
||||
background: white;
|
||||
color: #16a34a;
|
||||
border: 2px solid #16a34a;
|
||||
}
|
||||
|
||||
.btn-secondary:hover {
|
||||
background: #16a34a;
|
||||
color: white;
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
|
||||
/* Responsive Design */
|
||||
@media (max-width: 768px) {
|
||||
.members-title {
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
|
||||
.members-subtitle {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
.benefits-card {
|
||||
padding: 2rem;
|
||||
}
|
||||
|
||||
.benefits-title {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
.members-grid-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.members-grid {
|
||||
grid-template-columns: 1fr;
|
||||
gap: 1.5rem;
|
||||
}
|
||||
|
||||
.join-cta-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.join-cta-buttons {
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.btn {
|
||||
width: 100%;
|
||||
max-width: 250px;
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.container {
|
||||
padding: 0 1rem;
|
||||
}
|
||||
|
||||
.members-hero {
|
||||
padding: 4rem 0 3rem;
|
||||
}
|
||||
|
||||
.members-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.benefits-card {
|
||||
padding: 1.5rem;
|
||||
}
|
||||
|
||||
.join-cta-card {
|
||||
padding: 2rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</body>
|
||||
</html>
|
@@ -1,8 +1,626 @@
|
||||
---
|
||||
import BaseLayout from '../layouts/BaseLayout.astro';
|
||||
import Header from '../components/Header.astro';
|
||||
import Footer from '../components/Footer.astro';
|
||||
import '../styles/main.css';
|
||||
---
|
||||
<BaseLayout>
|
||||
<h1 class="text-3xl font-headline font-bold text-nigerian-green mt-12 text-center">Orphanage</h1>
|
||||
<p class="mt-4 text-center">Learn more about our affiliated orphanage and how you can help.</p>
|
||||
<!-- Orphanage info, gallery, and donation details will go here -->
|
||||
</BaseLayout>
|
||||
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<meta name="generator" content={Astro.generator} />
|
||||
<title>Orphanage Project - Omoluabi Association</title>
|
||||
<meta name="description" content="Learn about our orphanage project and how you can help support vulnerable children in Nigeria." />
|
||||
</head>
|
||||
<body>
|
||||
<Header />
|
||||
|
||||
<main class="orphanage-page">
|
||||
<!-- Hero Section -->
|
||||
<section class="orphanage-hero">
|
||||
<div class="container">
|
||||
<h1 class="orphanage-title">Our Orphanage Project</h1>
|
||||
<p class="orphanage-subtitle">Providing hope, care, and education to vulnerable children in Nigeria</p>
|
||||
<div class="hero-stats">
|
||||
<div class="stat-item">
|
||||
<span class="stat-number">50+</span>
|
||||
<span class="stat-label">Children Cared For</span>
|
||||
</div>
|
||||
<div class="stat-item">
|
||||
<span class="stat-number">5</span>
|
||||
<span class="stat-label">Years of Service</span>
|
||||
</div>
|
||||
<div class="stat-item">
|
||||
<span class="stat-number">100%</span>
|
||||
<span class="stat-label">Education Funded</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Mission Section -->
|
||||
<section class="mission-section">
|
||||
<div class="container">
|
||||
<div class="mission-content">
|
||||
<div class="mission-text">
|
||||
<h2 class="section-title">Our Mission</h2>
|
||||
<p class="mission-description">
|
||||
Through our orphanage project, we provide a safe haven for vulnerable children who have lost their parents or been abandoned.
|
||||
Our goal is to give these children not just shelter and food, but also love, education, and the opportunity to build a better future.
|
||||
</p>
|
||||
<div class="mission-features">
|
||||
<div class="feature-item">
|
||||
<div class="feature-icon">🏠</div>
|
||||
<h3>Safe Shelter</h3>
|
||||
<p>Providing a secure and nurturing environment for children to grow and thrive.</p>
|
||||
</div>
|
||||
<div class="feature-item">
|
||||
<div class="feature-icon">📚</div>
|
||||
<h3>Quality Education</h3>
|
||||
<p>Ensuring every child has access to proper education and learning opportunities.</p>
|
||||
</div>
|
||||
<div class="feature-item">
|
||||
<div class="feature-icon">❤️</div>
|
||||
<h3>Loving Care</h3>
|
||||
<p>Surrounding children with love, support, and positive role models.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mission-image">
|
||||
<div class="image-placeholder">
|
||||
<span>Orphanage Image</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Impact Section -->
|
||||
<section class="impact-section">
|
||||
<div class="container">
|
||||
<h2 class="section-title">Our Impact</h2>
|
||||
<div class="impact-grid">
|
||||
<div class="impact-card">
|
||||
<div class="impact-icon">🎓</div>
|
||||
<h3>Education Success</h3>
|
||||
<p>15 children have successfully completed their primary education and are now in secondary school.</p>
|
||||
</div>
|
||||
<div class="impact-card">
|
||||
<div class="impact-icon">🏥</div>
|
||||
<h3>Healthcare Access</h3>
|
||||
<p>All children receive regular medical check-ups and access to healthcare when needed.</p>
|
||||
</div>
|
||||
<div class="impact-card">
|
||||
<div class="impact-icon">👨👩👧👦</div>
|
||||
<h3>Family Reunification</h3>
|
||||
<p>8 children have been successfully reunited with extended family members.</p>
|
||||
</div>
|
||||
<div class="impact-card">
|
||||
<div class="impact-icon">🌟</div>
|
||||
<h3>Life Skills</h3>
|
||||
<p>Children learn essential life skills including cooking, cleaning, and personal responsibility.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- How to Help Section -->
|
||||
<section class="help-section">
|
||||
<div class="container">
|
||||
<h2 class="section-title">How You Can Help</h2>
|
||||
<div class="help-options">
|
||||
<div class="help-card">
|
||||
<div class="help-icon">💰</div>
|
||||
<h3>Financial Donations</h3>
|
||||
<p>Your monetary contributions help us provide food, shelter, education, and healthcare for the children.</p>
|
||||
<a href="/donate" class="help-btn">Donate Now</a>
|
||||
</div>
|
||||
<div class="help-card">
|
||||
<div class="help-icon">📦</div>
|
||||
<h3>Material Donations</h3>
|
||||
<p>We accept clothing, books, toys, and other essential items for the children.</p>
|
||||
<a href="/contact" class="help-btn">Contact Us</a>
|
||||
</div>
|
||||
<div class="help-card">
|
||||
<div class="help-icon">🤝</div>
|
||||
<h3>Volunteer</h3>
|
||||
<p>Share your time and skills by volunteering at our orphanage or helping with fundraising events.</p>
|
||||
<a href="/contact" class="help-btn">Get Involved</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Gallery Section -->
|
||||
<section class="gallery-section">
|
||||
<div class="container">
|
||||
<h2 class="section-title">Life at Our Orphanage</h2>
|
||||
<div class="gallery-grid">
|
||||
<div class="gallery-item">
|
||||
<div class="gallery-placeholder">
|
||||
<span>Children Learning</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="gallery-item">
|
||||
<div class="gallery-placeholder">
|
||||
<span>Play Time</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="gallery-item">
|
||||
<div class="gallery-placeholder">
|
||||
<span>Meal Time</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="gallery-item">
|
||||
<div class="gallery-placeholder">
|
||||
<span>Study Time</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CTA Section -->
|
||||
<section class="cta-section">
|
||||
<div class="container">
|
||||
<div class="cta-card">
|
||||
<h2 class="cta-title">Make a Difference Today</h2>
|
||||
<p class="cta-text">Every donation, no matter how small, makes a real difference in the lives of these children. Join us in our mission to provide hope and opportunity.</p>
|
||||
<div class="cta-buttons">
|
||||
<a href="/donate" class="btn btn-primary">Donate Now</a>
|
||||
<a href="/contact" class="btn btn-secondary">Learn More</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<Footer />
|
||||
|
||||
<style>
|
||||
/* Orphanage Page Styles */
|
||||
.orphanage-page {
|
||||
min-height: 100vh;
|
||||
background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
padding: 0 2rem;
|
||||
}
|
||||
|
||||
/* Hero Section */
|
||||
.orphanage-hero {
|
||||
background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);
|
||||
color: white;
|
||||
padding: 6rem 0 4rem;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.orphanage-hero::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><pattern id="grain" width="100" height="100" patternUnits="userSpaceOnUse"><circle cx="25" cy="25" r="1" fill="white" opacity="0.1"/><circle cx="75" cy="75" r="1" fill="white" opacity="0.1"/><circle cx="50" cy="10" r="0.5" fill="white" opacity="0.1"/><circle cx="10" cy="60" r="0.5" fill="white" opacity="0.1"/><circle cx="90" cy="40" r="0.5" fill="white" opacity="0.1"/></pattern></defs><rect width="100" height="100" fill="url(%23grain)"/></svg>');
|
||||
opacity: 0.3;
|
||||
}
|
||||
|
||||
.orphanage-title {
|
||||
font-size: 3.5rem;
|
||||
font-weight: 700;
|
||||
margin-bottom: 1rem;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.orphanage-subtitle {
|
||||
font-size: 1.25rem;
|
||||
opacity: 0.9;
|
||||
max-width: 600px;
|
||||
margin: 0 auto 3rem;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.hero-stats {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: 3rem;
|
||||
flex-wrap: wrap;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.stat-item {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.stat-number {
|
||||
display: block;
|
||||
font-size: 2.5rem;
|
||||
font-weight: 700;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.stat-label {
|
||||
font-size: 1rem;
|
||||
opacity: 0.9;
|
||||
}
|
||||
|
||||
/* Mission Section */
|
||||
.mission-section {
|
||||
padding: 4rem 0;
|
||||
}
|
||||
|
||||
.mission-content {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 4rem;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 2.5rem;
|
||||
font-weight: 600;
|
||||
color: #16a34a;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.mission-description {
|
||||
font-size: 1.1rem;
|
||||
line-height: 1.7;
|
||||
color: #374151;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.mission-features {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1.5rem;
|
||||
}
|
||||
|
||||
.feature-item {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.feature-icon {
|
||||
font-size: 2rem;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.feature-item h3 {
|
||||
font-size: 1.25rem;
|
||||
font-weight: 600;
|
||||
color: #16a34a;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.feature-item p {
|
||||
color: #6b7280;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.mission-image {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.image-placeholder {
|
||||
width: 100%;
|
||||
height: 300px;
|
||||
background: linear-gradient(135deg, #e5e7eb 0%, #d1d5db 100%);
|
||||
border-radius: 20px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: #6b7280;
|
||||
font-size: 1.1rem;
|
||||
border: 2px dashed #9ca3af;
|
||||
}
|
||||
|
||||
/* Impact Section */
|
||||
.impact-section {
|
||||
padding: 4rem 0;
|
||||
background: white;
|
||||
}
|
||||
|
||||
.impact-section .section-title {
|
||||
text-align: center;
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
.impact-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
||||
gap: 2rem;
|
||||
}
|
||||
|
||||
.impact-card {
|
||||
background: white;
|
||||
padding: 2rem;
|
||||
border-radius: 20px;
|
||||
text-align: center;
|
||||
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
|
||||
border: 1px solid rgba(22, 163, 74, 0.1);
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.impact-card:hover {
|
||||
transform: translateY(-5px);
|
||||
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
.impact-icon {
|
||||
font-size: 3rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.impact-card h3 {
|
||||
font-size: 1.25rem;
|
||||
font-weight: 600;
|
||||
color: #16a34a;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.impact-card p {
|
||||
color: #6b7280;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
/* Help Section */
|
||||
.help-section {
|
||||
padding: 4rem 0;
|
||||
}
|
||||
|
||||
.help-section .section-title {
|
||||
text-align: center;
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
.help-options {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
||||
gap: 2rem;
|
||||
}
|
||||
|
||||
.help-card {
|
||||
background: white;
|
||||
padding: 2.5rem;
|
||||
border-radius: 20px;
|
||||
text-align: center;
|
||||
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
|
||||
border: 1px solid rgba(22, 163, 74, 0.1);
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.help-card:hover {
|
||||
transform: translateY(-5px);
|
||||
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
.help-icon {
|
||||
font-size: 3rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.help-card h3 {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 600;
|
||||
color: #16a34a;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.help-card p {
|
||||
color: #6b7280;
|
||||
line-height: 1.6;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.help-btn {
|
||||
display: inline-block;
|
||||
padding: 0.75rem 2rem;
|
||||
background: linear-gradient(45deg, #16a34a, #15803d);
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
border-radius: 12px;
|
||||
font-weight: 600;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.help-btn:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 8px 25px rgba(22, 163, 74, 0.4);
|
||||
}
|
||||
|
||||
/* Gallery Section */
|
||||
.gallery-section {
|
||||
padding: 4rem 0;
|
||||
background: white;
|
||||
}
|
||||
|
||||
.gallery-section .section-title {
|
||||
text-align: center;
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
.gallery-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
||||
gap: 1.5rem;
|
||||
}
|
||||
|
||||
.gallery-item {
|
||||
aspect-ratio: 1;
|
||||
border-radius: 15px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.gallery-placeholder {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: linear-gradient(135deg, #e5e7eb 0%, #d1d5db 100%);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: #6b7280;
|
||||
font-size: 1rem;
|
||||
border: 2px dashed #9ca3af;
|
||||
}
|
||||
|
||||
/* CTA Section */
|
||||
.cta-section {
|
||||
padding: 4rem 0;
|
||||
background: linear-gradient(135deg, #16a34a 0%, #15803d 100%);
|
||||
}
|
||||
|
||||
.cta-card {
|
||||
background: white;
|
||||
border-radius: 20px;
|
||||
padding: 3rem;
|
||||
text-align: center;
|
||||
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.cta-title {
|
||||
font-size: 2.5rem;
|
||||
font-weight: 600;
|
||||
color: #16a34a;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.cta-text {
|
||||
font-size: 1.1rem;
|
||||
color: #6b7280;
|
||||
margin-bottom: 2rem;
|
||||
max-width: 600px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.cta-buttons {
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
justify-content: center;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.btn {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
padding: 0.75rem 2rem;
|
||||
border-radius: 12px;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
transition: all 0.3s ease;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
background: linear-gradient(45deg, #16a34a, #15803d);
|
||||
color: white;
|
||||
box-shadow: 0 4px 15px rgba(22, 163, 74, 0.3);
|
||||
}
|
||||
|
||||
.btn-primary:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 8px 25px rgba(22, 163, 74, 0.4);
|
||||
}
|
||||
|
||||
.btn-secondary {
|
||||
background: white;
|
||||
color: #16a34a;
|
||||
border: 2px solid #16a34a;
|
||||
}
|
||||
|
||||
.btn-secondary:hover {
|
||||
background: #16a34a;
|
||||
color: white;
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
|
||||
/* Responsive Design */
|
||||
@media (max-width: 768px) {
|
||||
.orphanage-title {
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
|
||||
.orphanage-subtitle {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
.hero-stats {
|
||||
gap: 2rem;
|
||||
}
|
||||
|
||||
.stat-number {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.mission-content {
|
||||
grid-template-columns: 1fr;
|
||||
gap: 2rem;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.help-options {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.cta-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.cta-buttons {
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.btn {
|
||||
width: 100%;
|
||||
max-width: 250px;
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.container {
|
||||
padding: 0 1rem;
|
||||
}
|
||||
|
||||
.orphanage-hero {
|
||||
padding: 4rem 0 3rem;
|
||||
}
|
||||
|
||||
.orphanage-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.hero-stats {
|
||||
flex-direction: column;
|
||||
gap: 1.5rem;
|
||||
}
|
||||
|
||||
.help-card {
|
||||
padding: 2rem;
|
||||
}
|
||||
|
||||
.cta-card {
|
||||
padding: 2rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</body>
|
||||
</html>
|
@@ -1,5 +1,323 @@
|
||||
/* Custom CSS for Omoluabi Foundation */
|
||||
|
||||
/* Import Google Fonts */
|
||||
@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700;800&display=swap');
|
||||
|
||||
/* Global Font Settings */
|
||||
* {
|
||||
font-family: 'Poppins', sans-serif;
|
||||
}
|
||||
|
||||
/* Hero Section */
|
||||
.hero {
|
||||
min-height: 100vh;
|
||||
background: linear-gradient(135deg, #16a34a 0%, #f59e0b 50%, #dc2626 100%);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
color: white;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.hero::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background-image: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.05'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.hero-content {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
padding: 0 2rem;
|
||||
position: relative;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.hero-title {
|
||||
font-family: 'Poppins', sans-serif;
|
||||
font-size: 4rem;
|
||||
font-weight: 800;
|
||||
margin-bottom: 1.5rem;
|
||||
line-height: 1.1;
|
||||
}
|
||||
|
||||
.hero-subtitle {
|
||||
font-size: 1.5rem;
|
||||
margin-bottom: 2rem;
|
||||
max-width: 48rem;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
font-weight: 300;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.hero-symbols {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 1rem;
|
||||
margin-bottom: 3rem;
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.hero-symbols span:nth-child(odd) {
|
||||
animation: bounce 2s ease-in-out infinite;
|
||||
}
|
||||
|
||||
.hero-symbols span:nth-child(2) {
|
||||
animation-delay: 0.5s;
|
||||
}
|
||||
|
||||
.hero-symbols span:nth-child(4) {
|
||||
animation-delay: 1s;
|
||||
}
|
||||
|
||||
.hero-cta {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1rem;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
/* Floating Elements */
|
||||
.floating-element {
|
||||
position: absolute;
|
||||
border-radius: 50%;
|
||||
animation: float 6s ease-in-out infinite;
|
||||
}
|
||||
|
||||
.floating-1 {
|
||||
top: 5rem;
|
||||
left: 2.5rem;
|
||||
width: 4rem;
|
||||
height: 4rem;
|
||||
background: rgba(245, 158, 11, 0.3);
|
||||
}
|
||||
|
||||
.floating-2 {
|
||||
top: 10rem;
|
||||
right: 5rem;
|
||||
width: 3rem;
|
||||
height: 3rem;
|
||||
background: rgba(220, 38, 38, 0.3);
|
||||
animation-delay: 1s;
|
||||
}
|
||||
|
||||
.floating-3 {
|
||||
bottom: 8rem;
|
||||
left: 25%;
|
||||
width: 5rem;
|
||||
height: 5rem;
|
||||
background: rgba(37, 99, 235, 0.3);
|
||||
animation-delay: 2s;
|
||||
}
|
||||
|
||||
/* Section Styles */
|
||||
.section {
|
||||
padding: 5rem 2rem;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-family: 'Poppins', sans-serif;
|
||||
font-size: 2.5rem;
|
||||
font-weight: 700;
|
||||
text-align: center;
|
||||
margin-bottom: 1rem;
|
||||
color: #111827;
|
||||
}
|
||||
|
||||
.section-subtitle {
|
||||
font-size: 1.25rem;
|
||||
color: #6b7280;
|
||||
text-align: center;
|
||||
max-width: 42rem;
|
||||
margin: 0 auto 3rem;
|
||||
}
|
||||
|
||||
.section-divider {
|
||||
width: 6rem;
|
||||
height: 0.25rem;
|
||||
background: linear-gradient(to right, #16a34a, #f59e0b);
|
||||
border-radius: 25px;
|
||||
margin: 0 auto 3rem;
|
||||
}
|
||||
|
||||
/* About Section */
|
||||
.about-section {
|
||||
background: linear-gradient(135deg, #f9fafb 0%, #f0fdf4 100%);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.about-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
gap: 3rem;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.about-image {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.about-image-frame {
|
||||
position: absolute;
|
||||
inset: -1rem;
|
||||
background: linear-gradient(45deg, #f59e0b, #dc2626);
|
||||
border-radius: 1rem;
|
||||
transform: rotate(1deg);
|
||||
}
|
||||
|
||||
.about-image-container {
|
||||
position: relative;
|
||||
background: white;
|
||||
padding: 0.5rem;
|
||||
border-radius: 1rem;
|
||||
box-shadow: 0 25px 50px rgba(0, 0, 0, 0.15);
|
||||
transform: rotate(-1deg);
|
||||
transition: transform 0.5s ease;
|
||||
}
|
||||
|
||||
.about-image-container:hover {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
.about-image img {
|
||||
width: 100%;
|
||||
height: 24rem;
|
||||
object-fit: cover;
|
||||
border-radius: 0.75rem;
|
||||
}
|
||||
|
||||
.about-line {
|
||||
width: 0.5rem;
|
||||
height: 3rem;
|
||||
background: linear-gradient(to bottom, #16a34a, #f59e0b);
|
||||
border-radius: 25px;
|
||||
}
|
||||
|
||||
.about-stats {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
gap: 1rem;
|
||||
margin: 2rem 0;
|
||||
}
|
||||
|
||||
.stat-card {
|
||||
text-align: center;
|
||||
padding: 1rem;
|
||||
background: white;
|
||||
border-radius: 0.75rem;
|
||||
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.stat-card:hover {
|
||||
transform: translateY(-4px);
|
||||
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
.stat-number {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 700;
|
||||
margin-bottom: 0.25rem;
|
||||
}
|
||||
|
||||
.stat-label {
|
||||
font-size: 0.875rem;
|
||||
color: #6b7280;
|
||||
}
|
||||
|
||||
.badges {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.75rem;
|
||||
}
|
||||
|
||||
.badge {
|
||||
padding: 0.5rem 1rem;
|
||||
border-radius: 20px;
|
||||
font-weight: 600;
|
||||
font-size: 0.875rem;
|
||||
border: 1px solid;
|
||||
}
|
||||
|
||||
.badge-green {
|
||||
background: rgba(22, 163, 74, 0.1);
|
||||
color: #16a34a;
|
||||
border-color: rgba(22, 163, 74, 0.2);
|
||||
}
|
||||
|
||||
.badge-gold {
|
||||
background: rgba(245, 158, 11, 0.1);
|
||||
color: #f59e0b;
|
||||
border-color: rgba(245, 158, 11, 0.2);
|
||||
}
|
||||
|
||||
.badge-red {
|
||||
background: rgba(220, 38, 38, 0.1);
|
||||
color: #dc2626;
|
||||
border-color: rgba(220, 38, 38, 0.2);
|
||||
}
|
||||
|
||||
.badge-blue {
|
||||
background: rgba(37, 99, 235, 0.1);
|
||||
color: #2563eb;
|
||||
border-color: rgba(37, 99, 235, 0.2);
|
||||
}
|
||||
|
||||
/* Main Content */
|
||||
.main-content {
|
||||
padding-top: 5rem;
|
||||
}
|
||||
|
||||
/* Button Styles */
|
||||
.btn {
|
||||
padding: 0.75rem 1.5rem;
|
||||
border-radius: 8px;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
transition: all 0.3s ease;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
background: #16a34a;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.btn-secondary {
|
||||
background: #f59e0b;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.btn-outline {
|
||||
background: transparent;
|
||||
color: white;
|
||||
border: 2px solid white;
|
||||
}
|
||||
|
||||
.btn:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
/* Hero Section Background Pattern */
|
||||
.hero-pattern {
|
||||
background-image: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.05'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
|
||||
@@ -19,7 +337,7 @@
|
||||
background-clip: text;
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
animation: textShine 4s linear infinite;
|
||||
animation: textShine 20s linear infinite;
|
||||
text-shadow: 0 0 30px rgba(255, 255, 255, 0.3);
|
||||
}
|
||||
|
||||
@@ -57,6 +375,21 @@
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes bounce {
|
||||
0%, 20%, 53%, 80%, 100% {
|
||||
transform: translateY(0);
|
||||
}
|
||||
40%, 43% {
|
||||
transform: translateY(-10px);
|
||||
}
|
||||
70% {
|
||||
transform: translateY(-5px);
|
||||
}
|
||||
90% {
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes pulse {
|
||||
0%, 100% {
|
||||
opacity: 1;
|
||||
@@ -341,4 +674,37 @@
|
||||
.text-gray-400 {
|
||||
color: #9ca3af;
|
||||
}
|
||||
}
|
||||
|
||||
/* Responsive Design */
|
||||
@media (min-width: 768px) {
|
||||
.hero-title {
|
||||
font-size: 5rem;
|
||||
}
|
||||
|
||||
.hero-cta {
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.about-grid {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
.hero-title {
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
|
||||
.hero-subtitle {
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
.section {
|
||||
padding: 3rem 1rem;
|
||||
}
|
||||
|
||||
.main-content {
|
||||
padding-top: 4rem;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user