diff --git a/package-lock.json b/package-lock.json index 89fbbbad..cf9df4f0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -280,7 +280,6 @@ "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.40.0.tgz", "integrity": "sha512-nlr/MMgoLNUHcfWC5Ns2ENrzKx9x51orPc6wJ8Ignv1DsrUmKm0LUih+Tj3J+kxYofzqQIQRU495d4xn3ozMbg==", "license": "MIT", - "peer": true, "dependencies": { "@algolia/client-common": "5.40.0", "@algolia/requester-browser-xhr": "5.40.0", @@ -441,7 +440,6 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz", "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", @@ -2276,7 +2274,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -2299,7 +2296,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" } @@ -2409,7 +2405,6 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", - "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -2831,7 +2826,6 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", - "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -3819,7 +3813,6 @@ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.9.2.tgz", "integrity": "sha512-C5wZsGuKTY8jEYsqdxhhFOe1ZDjH0uIYJ9T/jebHwkyxqnr4wW0jTkB72OMqNjsoQRcb0JN3PcSeTwFlVgzCZg==", "license": "MIT", - "peer": true, "dependencies": { "@docusaurus/core": "3.9.2", "@docusaurus/logger": "3.9.2", @@ -5928,7 +5921,6 @@ "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", "license": "MIT", - "peer": true, "dependencies": { "@emotion/memoize": "^0.8.1" } @@ -6201,7 +6193,6 @@ "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.9.13.tgz", "integrity": "sha512-GfiI1JxJ7ecluEmDjPzseRXk/PX31hS7+tjgBopL7XjB2hLUdR+0FTMXy2Q3/hXezypDvU6or7gVFizDESrkXw==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@firebase/component": "0.6.4", "@firebase/logger": "0.4.0", @@ -6259,7 +6250,6 @@ "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.13.tgz", "integrity": "sha512-j6ANZaWjeVy5zg6X7uiqh6lM6o3n3LD1+/SJFNs9V781xyryyZWXe+tmnWNWPkP086QfJoNkWN9pMQRqSG4vMg==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@firebase/app": "0.9.13", "@firebase/component": "0.6.4", @@ -6272,8 +6262,7 @@ "version": "0.9.0", "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.0.tgz", "integrity": "sha512-AeweANOIo0Mb8GiYm3xhTEBVCmPwTYAu9Hcd2qSkLuga/6+j9b1Jskl5bpiSQWy9eJ/j5pavxj6eYogmnuzm+Q==", - "license": "Apache-2.0", - "peer": true + "license": "Apache-2.0" }, "node_modules/@firebase/auth": { "version": "0.23.2", @@ -6683,7 +6672,6 @@ "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.3.tgz", "integrity": "sha512-DY02CRhOZwpzO36fHpuVysz6JZrscPiBXD0fXp6qSrL9oNOx5KWICKdR95C0lSITzxp0TZosVyHqzatE8JbcjA==", "license": "Apache-2.0", - "peer": true, "dependencies": { "tslib": "^2.1.0" } @@ -7300,7 +7288,6 @@ "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.1.tgz", "integrity": "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==", "license": "MIT", - "peer": true, "dependencies": { "@types/mdx": "^2.0.0" }, @@ -7963,7 +7950,6 @@ "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", "license": "MIT", - "peer": true, "dependencies": { "@babel/core": "^7.21.3", "@svgr/babel-preset": "8.1.0", @@ -8480,8 +8466,7 @@ } ], "hasInstallScript": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@tsparticles/interaction-external-attract": { "version": "3.9.1", @@ -9434,7 +9419,6 @@ "integrity": "sha512-/EEvYBdT3BflCWvTMO7YkYBHVE9Ci6XdqZciZANQgKpaiDRGOLIlRo91jbTNRQjgPFWVaRxcYc0luVNFitz57A==", "devOptional": true, "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -9612,7 +9596,6 @@ "integrity": "sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.46.2", "@typescript-eslint/types": "8.46.2", @@ -10071,7 +10054,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -10157,7 +10139,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -10203,7 +10184,6 @@ "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.40.0.tgz", "integrity": "sha512-a9aIL2E3Z7uYUPMCmjMFFd5MWhn+ccTubEvnMy7rOTZCB62dXBJtz0R5BZ/TPuX3R9ocBsgWuAbGWQ+Ph4Fmlg==", "license": "MIT", - "peer": true, "dependencies": { "@algolia/abtesting": "1.6.0", "@algolia/client-abtesting": "5.40.0", @@ -10962,7 +10942,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.9", "caniuse-lite": "^1.0.30001746", @@ -11317,7 +11296,6 @@ "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-11.0.3.tgz", "integrity": "sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@chevrotain/cst-dts-gen": "11.0.3", "@chevrotain/gast": "11.0.3", @@ -12208,7 +12186,6 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", - "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -12539,7 +12516,6 @@ "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.33.1.tgz", "integrity": "sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10" } @@ -12961,7 +12937,6 @@ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "license": "ISC", - "peer": true, "engines": { "node": ">=12" } @@ -13555,8 +13530,7 @@ "version": "8.6.0", "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz", "integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/embla-carousel-autoplay": { "version": "8.6.0", @@ -13942,7 +13916,6 @@ "integrity": "sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -14775,7 +14748,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -14903,7 +14875,6 @@ "resolved": "https://registry.npmjs.org/firebase/-/firebase-9.23.0.tgz", "integrity": "sha512-/4lUVY0lUvBDIaeY1q6dUYhS8Sd18Qb9CgWkPZICUo9IXpJNCEagfNZXBBFCkMTTN5L5gx2Hjr27y21a9NzUcA==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@firebase/analytics": "0.10.0", "@firebase/analytics-compat": "0.2.6", @@ -21110,7 +21081,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -21884,7 +21854,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -22788,7 +22757,6 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", - "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -23402,7 +23370,6 @@ "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -23809,7 +23776,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -23822,7 +23788,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -23888,7 +23853,6 @@ "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz", "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", "license": "MIT", - "peer": true, "dependencies": { "@types/react": "*" }, @@ -23917,7 +23881,6 @@ "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.12.13", "history": "^4.9.0", @@ -26413,8 +26376,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD", - "peer": true + "license": "0BSD" }, "node_modules/tunnel-agent": { "version": "0.6.0", @@ -26589,7 +26551,6 @@ "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", "devOptional": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -26984,7 +26945,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -27257,7 +27217,6 @@ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.102.1.tgz", "integrity": "sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==", "license": "MIT", - "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -28076,7 +28035,6 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz", "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/src/components/blogCarousel/blogCard.tsx b/src/components/blogCarousel/blogCard.tsx index 562fa5c9..1f3db7db 100644 --- a/src/components/blogCarousel/blogCard.tsx +++ b/src/components/blogCarousel/blogCard.tsx @@ -1,14 +1,10 @@ "use client"; import * as React from "react"; -import { useState } from "react"; -import { motion } from "framer-motion"; import Link from "@docusaurus/Link"; import { Card, CardContent } from "../ui/card"; import { getAuthorNames } from "../../utils/authors"; const BlogCard = ({ type, date, title, content, imageUrl, id, authors }) => { - const [isHovered, setIsHovered] = useState(false); - if (!id || !type) { return
data not fetched properly, imageId and entryId not found
; } @@ -36,19 +32,7 @@ const BlogCard = ({ type, date, title, content, imageUrl, id, authors }) => { const category = getCategory(title); return ( - setIsHovered(true)} - onMouseLeave={() => setIsHovered(false)} - className="relative h-full overflow-hidden transition-all duration-300" - > +
{
-
+ ); }; diff --git a/src/components/blogCarousel/blogCarousel.css b/src/components/blogCarousel/blogCarousel.css index bc9923a0..b40238c6 100644 --- a/src/components/blogCarousel/blogCarousel.css +++ b/src/components/blogCarousel/blogCarousel.css @@ -1,16 +1,14 @@ -/* Blog Carousel Card Styles - Matching Blog Page Design */ +/* Blog Carousel Card Styles - Simple and Clean */ /* Article Card */ .article-card { background: white; - border-radius: 20px; + border-radius: 12px; overflow: hidden; - box-shadow: - 0 4px 20px rgba(0, 0, 0, 0.08), - 0 1px 3px rgba(0, 0, 0, 0.1); - transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + transition: box-shadow 0.2s ease; position: relative; - border: 1px solid rgba(255, 255, 255, 0.8); + border: 1px solid rgba(0, 0, 0, 0.1); height: 100%; display: flex; flex-direction: column; @@ -19,176 +17,87 @@ [data-theme="dark"] .article-card { background: #242526; border: 1px solid rgba(74, 85, 104, 0.3); - box-shadow: - 0 4px 20px rgba(0, 0, 0, 0.4), - 0 1px 3px rgba(0, 0, 0, 0.3); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); } -.article-card::before { - content: ""; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: linear-gradient( - 135deg, - rgba(99, 102, 241, 0.02) 0%, - rgba(168, 85, 247, 0.02) 100% - ); - opacity: 0; - transition: opacity 0.3s ease; - pointer-events: none; +.article-card:hover { + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); } -.article-card:hover::before { - opacity: 1; +[data-theme="dark"] .article-card:hover { + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4); } .card-category { position: absolute; - top: 20px; - left: 20px; - background: linear-gradient( - 135deg, - rgba(255, 255, 255, 0.95) 0%, - rgba(255, 255, 255, 0.9) 100% - ); + top: 12px; + left: 12px; + background: rgba(255, 255, 255, 0.9); color: #6366f1; - padding: 8px 16px; - border-radius: 25px; - font-size: 12px; - font-weight: 700; + padding: 6px 12px; + border-radius: 16px; + font-size: 11px; + font-weight: 600; z-index: 2; - backdrop-filter: blur(20px); + backdrop-filter: blur(8px); border: 1px solid rgba(99, 102, 241, 0.1); - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); - transition: all 0.2s ease; text-transform: uppercase; letter-spacing: 0.5px; } [data-theme="dark"] .card-category { - background: linear-gradient( - 135deg, - rgba(36, 37, 38, 0.95) 0%, - rgba(26, 32, 44, 0.9) 100% - ); + background: rgba(36, 37, 38, 0.9); color: #a78bfa; border: 1px solid rgba(167, 139, 250, 0.2); - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); -} - -.article-card:hover .card-category { - background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%); - color: white; - transform: scale(1.05); -} - -[data-theme="dark"] .article-card:hover .card-category { - background: linear-gradient(135deg, #a78bfa 0%, #c084fc 100%); - color: #1a202c; } .card-image { height: 200px; overflow: hidden; position: relative; - background: linear-gradient(135deg, #f1f5f9 0%, #e2e8f0 100%); + background: #f1f5f9; flex-shrink: 0; } -.card-image::before { - content: ""; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: linear-gradient( - 135deg, - rgba(99, 102, 241, 0.1) 0%, - rgba(168, 85, 247, 0.1) 100% - ); - opacity: 0; - transition: opacity 0.3s ease; - z-index: 1; -} - -.article-card:hover .card-image::before { - opacity: 1; -} - .card-image img { width: 100%; height: 100%; object-fit: cover; - transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); - filter: brightness(1) saturate(1); -} - -.article-card:hover .card-image img { - transform: scale(1.08); - filter: brightness(1.1) saturate(1.2); + transition: transform 0.2s ease; } .card-content { - padding: 24px; - position: relative; - background: linear-gradient( - 135deg, - rgba(255, 255, 255, 0.95) 0%, - rgba(248, 250, 252, 0.95) 100% - ); + padding: 20px; flex: 1; display: flex; flex-direction: column; } -[data-theme="dark"] .card-content { - background: linear-gradient( - 135deg, - rgba(36, 37, 38, 0.95) 0%, - rgba(26, 32, 44, 0.95) 100% - ); -} - .card-title { - font-size: 18px; - font-weight: 700; + font-size: 16px; + font-weight: 600; color: #1e293b; - margin: 0 0 12px 0; + margin: 0 0 10px 0; line-height: 1.3; - letter-spacing: -0.01em; - transition: color 0.2s ease; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } -.article-card:hover .card-title { - color: #6366f1; -} - [data-theme="dark"] .card-title { color: #f1f5f9; } -[data-theme="dark"] .article-card:hover .card-title { - color: #a78bfa; -} - .card-description { font-size: 14px; color: #64748b; - line-height: 1.6; - margin: 0 0 20px 0; + line-height: 1.5; + margin: 0 0 16px 0; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; - font-weight: 400; flex: 1; } @@ -200,33 +109,13 @@ display: flex; align-items: center; justify-content: space-between; - margin-bottom: 16px; - padding-bottom: 16px; - border-bottom: 1px solid rgba(226, 232, 240, 0.8); - position: relative; - gap: 12px; + padding-top: 12px; + border-top: 1px solid rgba(226, 232, 240, 0.8); + gap: 10px; } [data-theme="dark"] .card-meta { - border-bottom-color: rgba(74, 85, 104, 0.3); -} - -.card-meta::before { - content: ""; - position: absolute; - bottom: -1px; - left: 0; - width: 40px; - height: 2px; - background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%); - border-radius: 1px; - opacity: 0; - transition: all 0.3s ease; -} - -.article-card:hover .card-meta::before { - opacity: 1; - width: 60px; + border-top-color: rgba(74, 85, 104, 0.3); } .card-author { @@ -238,151 +127,93 @@ } .author-avatar { - width: 28px; - height: 28px; + width: 24px; + height: 24px; border-radius: 50%; - background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%); + background: #6366f1; display: flex; align-items: center; justify-content: center; - font-size: 14px; + font-size: 12px; color: white; font-weight: 600; - box-shadow: 0 2px 8px rgba(99, 102, 241, 0.3); flex-shrink: 0; - transition: all 0.3s ease; -} - -.author-avatar:hover { - transform: scale(1.1); - box-shadow: 0 4px 12px rgba(99, 102, 241, 0.4); } .author-name { font-size: 12px; color: #475569; - font-weight: 600; + font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; - transition: color 0.2s ease; -} - -.author-name:hover { - color: #6366f1; } [data-theme="dark"] .author-name { color: #cbd5e1; } -[data-theme="dark"] .author-name:hover { - color: #a78bfa; -} - .card-read-time { font-size: 11px; color: #94a3b8; font-weight: 500; - background: rgba(148, 163, 184, 0.1); - padding: 4px 8px; - border-radius: 12px; flex-shrink: 0; } [data-theme="dark"] .card-read-time { color: #64748b; - background: rgba(100, 116, 139, 0.2); } .card-read-more { - display: inline-flex; - align-items: center; - gap: 8px; + display: inline-block; color: #6366f1; text-decoration: none; font-size: 13px; - font-weight: 700; - padding: 10px 16px; - border-radius: 12px; - background: linear-gradient( - 135deg, - rgba(99, 102, 241, 0.1) 0%, - rgba(139, 92, 246, 0.1) 100% - ); - border: 1px solid rgba(99, 102, 241, 0.2); - transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); - position: relative; - overflow: hidden; - margin-top: auto; -} - -.card-read-more::before { - content: ""; - position: absolute; - top: 0; - left: -100%; - width: 100%; - height: 100%; - background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%); - transition: left 0.3s ease; - z-index: -1; + font-weight: 600; + margin-top: 12px; } .card-read-more:hover { - color: white; - transform: translateY(-2px); - box-shadow: 0 8px 25px rgba(99, 102, 241, 0.3); -} - -.card-read-more:hover::before { - left: 0; + color: #4f46e5; } [data-theme="dark"] .card-read-more { color: #a78bfa; - background: linear-gradient( - 135deg, - rgba(167, 139, 250, 0.1) 0%, - rgba(192, 132, 252, 0.1) 100% - ); - border-color: rgba(167, 139, 250, 0.2); } [data-theme="dark"] .card-read-more:hover { - color: white; + color: #c084fc; } -/* Responsive adjustments for carousel cards */ +/* Responsive adjustments */ @media (max-width: 768px) { .card-image { height: 160px; } .card-content { - padding: 20px; + padding: 16px; } .card-title { - font-size: 16px; - margin-bottom: 10px; + font-size: 15px; + margin-bottom: 8px; } .card-description { font-size: 13px; - margin-bottom: 16px; + margin-bottom: 12px; -webkit-line-clamp: 2; } .card-meta { - margin-bottom: 12px; - padding-bottom: 12px; + padding-top: 10px; } .author-avatar { - width: 24px; - height: 24px; - font-size: 12px; + width: 22px; + height: 22px; + font-size: 11px; } .author-name { @@ -391,66 +222,9 @@ .card-read-time { font-size: 10px; - padding: 3px 6px; } .card-read-more { font-size: 12px; - padding: 8px 12px; } } - -/* Smooth page transitions */ -.page-transition-enter { - opacity: 0; - transform: translateY(20px); -} - -.page-transition-enter-active { - opacity: 1; - transform: translateY(0); - transition: - opacity 0.6s ease-out, - transform 0.6s ease-out; -} - -.page-transition-exit { - opacity: 1; - transform: translateY(0); -} - -.page-transition-exit-active { - opacity: 0; - transform: translateY(-20px); - transition: - opacity 0.4s ease-in, - transform 0.4s ease-in; -} - -/* Blog Carousel Section Enhancements */ -.blog-carousel-section { - background: linear-gradient(135deg, #f8f9ff 0%, #f0f2ff 50%, #e8ebff 100%); - padding: 5px; - position: relative; - overflow: hidden; -} - -[data-theme="dark"] .blog-carousel-section { - background: linear-gradient(135deg, #1b1b1d 0%, #121212 50%, #1a202c 100%); -} - -/* Enhanced Focus States */ -.article-card:focus-within { - outline: 2px solid #6366f1; - outline-offset: 4px; - border-radius: 24px; -} - -/* Smooth Link Transitions */ -a[href*="/blog/"] { - transition: all 0.3s ease; -} - -a[href*="/blog/"]:hover { - text-decoration: none; -} diff --git a/src/pages/blogs/blogs-new.css b/src/pages/blogs/blogs-new.css index b568ff6c..075dd92f 100644 --- a/src/pages/blogs/blogs-new.css +++ b/src/pages/blogs/blogs-new.css @@ -1,1778 +1,632 @@ -/* Blog Page Styles - recode hive Design */ +/* GitHub-Inspired Blog Page Styles */ * { box-sizing: border-box; } -.blog-page { - font-family: "Inter", sans-serif; - background: linear-gradient(135deg, #f8f9ff 0%, #f0f2ff 50%, #e8ebff 100%); +/* Main Container */ +.github-blog-page { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif; + background: #ffffff; min-height: 100vh; - animation: pageSlideIn 0.8s ease-out; - position: relative; - overflow-x: hidden; -} - -/* Dark theme support */ -[data-theme="dark"] .blog-page { - background: linear-gradient(135deg, #1b1b1d 0%, #121212 50%, #1a202c 100%); -} - -@keyframes pageSlideIn { - 0% { - opacity: 0; - transform: translateY(20px); - } - 100% { - opacity: 1; - transform: translateY(0); - } -} - -/* Navbar adjustments */ -:global(.navbar) { - backdrop-filter: blur(20px) !important; - background: rgba(255, 255, 255, 0.95) !important; - border-bottom: 1px solid rgba(0, 0, 0, 0.05) !important; - transition: all 0.3s ease !important; - height: 60px !important; - min-height: 60px !important; -} - -:global(.navbar--fixed-top) { - animation: navbarSlideDown 0.6s ease-out; } -@keyframes navbarSlideDown { - 0% { - transform: translateY(-100%); - opacity: 0; - } - 100% { - transform: translateY(0); - opacity: 1; - } +[data-theme="dark"] .github-blog-page { + background: #0d1117; } -/* Hero Section */ -.blog-hero-section { - padding: 80px 20px 60px; +/* Hero Section - GitHub Style */ +.github-hero { + background: #f6f8fa; + border-bottom: 1px solid #d0d7de; + padding: 48px 24px; text-align: center; - background: linear-gradient( - 135deg, - #f8f9ff 0%, - #f0f2ff 30%, - #e8ebff 70%, - #f0f4ff 100% - ); - position: relative; - overflow: hidden; - min-height: 50vh; - display: flex; - align-items: center; - margin-top: -10px; -} - -[data-theme="dark"] .blog-hero-section { - background: linear-gradient( - 135deg, - #1b1b1d 0%, - #121212 30%, - #1a202c 70%, - #242526 100% - ); -} - -.blog-hero-section::before { - content: ""; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: - radial-gradient( - circle at 20% 30%, - rgba(99, 102, 241, 0.15) 0%, - transparent 40% - ), - radial-gradient( - circle at 80% 20%, - rgba(168, 85, 247, 0.12) 0%, - transparent 45% - ), - radial-gradient( - circle at 40% 80%, - rgba(236, 72, 153, 0.1) 0%, - transparent 50% - ); - pointer-events: none; - animation: gradientShift 8s ease-in-out infinite; -} - -.blog-hero-section::after { - content: ""; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: 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='%236366f1' fill-opacity='0.03'%3E%3Ccircle cx='30' cy='30' r='2'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E"); - pointer-events: none; - animation: float 20s linear infinite; -} - -@keyframes gradientShift { - 0%, - 100% { - background: - radial-gradient( - circle at 20% 30%, - rgba(99, 102, 241, 0.15) 0%, - transparent 40% - ), - radial-gradient( - circle at 80% 20%, - rgba(168, 85, 247, 0.12) 0%, - transparent 45% - ), - radial-gradient( - circle at 40% 80%, - rgba(236, 72, 153, 0.1) 0%, - transparent 50% - ); - } - 50% { - background: - radial-gradient( - circle at 80% 70%, - rgba(99, 102, 241, 0.12) 0%, - transparent 45% - ), - radial-gradient( - circle at 20% 80%, - rgba(168, 85, 247, 0.15) 0%, - transparent 40% - ), - radial-gradient( - circle at 60% 20%, - rgba(236, 72, 153, 0.1) 0%, - transparent 50% - ); - } } -@keyframes float { - 0% { - transform: translateY(0px) translateX(0px); - } - 33% { - transform: translateY(-10px) translateX(5px); - } - 66% { - transform: translateY(5px) translateX(-5px); - } - 100% { - transform: translateY(0px) translateX(0px); - } +[data-theme="dark"] .github-hero { + background: #161b22; + border-bottom: 1px solid #30363d; } -/* Floating Particles */ -.floating-particles { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - overflow: hidden; - pointer-events: none; - z-index: 0; +.github-hero-content { + max-width: 1280px; + margin: 0 auto; } -.particle { - position: absolute; - border-radius: 50%; - opacity: 0.6; - animation-timing-function: ease-in-out; - animation-iteration-count: infinite; -} - -.particle-1 { - width: 8px; - height: 8px; - background: linear-gradient(45deg, #6366f1, #8b5cf6); - top: 20%; - left: 10%; - animation: particleFloat1 8s infinite; -} - -.particle-2 { - width: 12px; - height: 12px; - background: linear-gradient(45deg, #a855f7, #ec4899); - top: 60%; - left: 80%; - animation: particleFloat2 10s infinite; -} - -.particle-3 { - width: 6px; - height: 6px; - background: linear-gradient(45deg, #ec4899, #f59e0b); - top: 30%; - left: 70%; - animation: particleFloat3 12s infinite; -} - -.particle-4 { - width: 10px; - height: 10px; - background: linear-gradient(45deg, #f59e0b, #10b981); - top: 80%; - left: 20%; - animation: particleFloat4 9s infinite; -} - -.particle-5 { - width: 14px; - height: 14px; - background: linear-gradient(45deg, #10b981, #06b6d4); - top: 15%; - left: 90%; - animation: particleFloat5 11s infinite; -} - -.particle-6 { - width: 7px; - height: 7px; - background: linear-gradient(45deg, #06b6d4, #6366f1); - top: 70%; - left: 5%; - animation: particleFloat6 13s infinite; -} - -@keyframes particleFloat1 { - 0%, - 100% { - transform: translateY(0px) translateX(0px) rotate(0deg); - } - 25% { - transform: translateY(-30px) translateX(20px) rotate(90deg); - } - 50% { - transform: translateY(-10px) translateX(-15px) rotate(180deg); - } - 75% { - transform: translateY(20px) translateX(10px) rotate(270deg); - } +.github-hero-title { + font-size: 40px; + font-weight: 600; + color: #24292f; + margin: 0 0 12px 0; + line-height: 1.25; } -@keyframes particleFloat2 { - 0%, - 100% { - transform: translateY(0px) translateX(0px) rotate(0deg); - } - 33% { - transform: translateY(25px) translateX(-20px) rotate(120deg); - } - 66% { - transform: translateY(-15px) translateX(25px) rotate(240deg); - } +[data-theme="dark"] .github-hero-title { + color: #e6edf3; } -@keyframes particleFloat3 { - 0%, - 100% { - transform: translateY(0px) translateX(0px) rotate(0deg); - } - 50% { - transform: translateY(-40px) translateX(-30px) rotate(180deg); - } +.github-hero-subtitle { + font-size: 16px; + color: #57606a; + margin: 0; + line-height: 1.5; } -@keyframes particleFloat4 { - 0%, - 100% { - transform: translateY(0px) translateX(0px) rotate(0deg); - } - 25% { - transform: translateY(-20px) translateX(30px) rotate(90deg); - } - 50% { - transform: translateY(15px) translateX(-10px) rotate(180deg); - } - 75% { - transform: translateY(-5px) translateX(-25px) rotate(270deg); - } +[data-theme="dark"] .github-hero-subtitle { + color: #8b949e; } -@keyframes particleFloat5 { - 0%, - 100% { - transform: translateY(0px) translateX(0px) rotate(0deg); - } - 40% { - transform: translateY(30px) translateX(-35px) rotate(144deg); - } - 80% { - transform: translateY(-25px) translateX(15px) rotate(288deg); - } +/* Main Container with Sidebar */ +.github-blog-container { + max-width: 1280px; + margin: 0 auto; + padding: 48px 24px; + display: grid; + grid-template-columns: 280px 1fr; + gap: 48px; + align-items: start; } -@keyframes particleFloat6 { - 0%, - 100% { - transform: translateY(0px) translateX(0px) rotate(0deg); - } - 30% { - transform: translateY(-35px) translateX(25px) rotate(108deg); - } - 60% { - transform: translateY(20px) translateX(-20px) rotate(216deg); - } - 90% { - transform: translateY(-10px) translateX(35px) rotate(324deg); +@media (max-width: 1024px) { + .github-blog-container { + grid-template-columns: 1fr; + gap: 32px; } } -.blog-hero-container { - max-width: 900px; - margin: 0 auto; - position: relative; - z-index: 1; -} - -.hero-content { - display: flex; - flex-direction: column; - align-items: center; - gap: 24px; +/* Sidebar */ +.github-sidebar { position: relative; } -.hero-content::before { - content: ""; - position: absolute; - top: -60px; - left: -80px; - width: 120px; - height: 120px; - background: linear-gradient(45deg, #6366f1, #a855f7); - border-radius: 50%; - opacity: 0.08; - animation: floatLeft 6s ease-in-out infinite; - z-index: -1; -} - -.hero-content::after { - content: ""; - position: absolute; - top: 100px; - right: -60px; - width: 80px; - height: 80px; - background: linear-gradient(45deg, #ec4899, #f59e0b); - border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%; - opacity: 0.08; - animation: floatRight 8s ease-in-out infinite; - z-index: -1; -} - -@keyframes floatLeft { - 0%, - 100% { - transform: translateY(0px) rotate(0deg); - } - 50% { - transform: translateY(-25px) rotate(180deg); - } +.sidebar-sticky { + position: sticky; + top: 80px; } -@keyframes floatRight { - 0%, - 100% { - transform: translateY(0px) rotate(0deg); - } - 50% { - transform: translateY(20px) rotate(-180deg); +@media (max-width: 1024px) { + .sidebar-sticky { + position: relative; + top: 0; } } -.blog-main-title { - font-size: 64px; - font-weight: 900; - margin: 0; - line-height: 1.1; - color: #1e293b; - letter-spacing: -0.02em; - animation: titleSlideUp 1s ease-out; -} - -[data-theme="dark"] .blog-main-title { - color: #f1f5f9; +.sidebar-title { + font-size: 20px; + font-weight: 600; + color: #24292f; + margin: 0 0 16px 0; + line-height: 1.25; } -@keyframes titleSlideUp { - 0% { - opacity: 0; - transform: translateY(30px); - } - 100% { - opacity: 1; - transform: translateY(0); - } +[data-theme="dark"] .sidebar-title { + color: #e6edf3; } -.gradient-text { - background: linear-gradient( - 135deg, - #6366f1 0%, - #a855f7 30%, - #ec4899 70%, - #f59e0b 100% - ); - background-size: 300% 300%; - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; - animation: gradientMove 4s ease-in-out infinite; +/* Sidebar Search */ +.sidebar-search { position: relative; + margin-bottom: 24px; } -.gradient-text::before { - content: attr(data-text); +.sidebar-search-icon { position: absolute; - top: 0; - left: 0; - background: linear-gradient( - 135deg, - #6366f1 0%, - #a855f7 30%, - #ec4899 70%, - #f59e0b 100% - ); - background-size: 300% 300%; - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; - filter: blur(1px); - opacity: 0.5; - z-index: -1; - animation: gradientMove 4s ease-in-out infinite reverse; -} - -@keyframes gradientMove { - 0%, - 100% { - background-position: 0% 50%; - } - 50% { - background-position: 100% 50%; - } -} - -.blog-main-subtitle { - font-size: 18px; - color: #64748b; - margin: 0; - line-height: 1.7; - max-width: 700px; - font-weight: 400; -} - -[data-theme="dark"] .blog-main-subtitle { - color: #94a3b8; -} - -.hero-stats { - display: flex; - align-items: center; - gap: 32px; - margin-top: 16px; - padding: 20px 32px; - background: rgba(255, 255, 255, 0.8); - border: 1px solid rgba(99, 102, 241, 0.1); - border-radius: 16px; - backdrop-filter: blur(10px); - box-shadow: 0 8px 32px rgba(99, 102, 241, 0.1); -} - -.stat-item { - display: flex; - flex-direction: column; - align-items: center; - gap: 4px; + left: 12px; + top: 50%; + transform: translateY(-50%); + width: 16px; + height: 16px; + color: #57606a; + pointer-events: none; } -.stat-number { - font-size: 24px; - font-weight: 700; - color: #1e293b; - line-height: 1; +[data-theme="dark"] .sidebar-search-icon { + color: #8b949e; } -.stat-label { +.sidebar-search-input { + width: 100%; + padding: 8px 12px 8px 36px; font-size: 14px; - color: #64748b; - font-weight: 500; + line-height: 20px; + color: #24292f; + background-color: #f6f8fa; + border: 1px solid #d0d7de; + border-radius: 6px; + outline: none; + transition: all 0.15s ease; } -.stat-divider { - width: 1px; - height: 32px; - background: linear-gradient( - to bottom, - transparent, - rgba(99, 102, 241, 0.2), - transparent - ); +[data-theme="dark"] .sidebar-search-input { + color: #e6edf3; + background-color: #0d1117; + border-color: #30363d; } -/* Category Icons */ -.blog-category-icons { - display: flex; - justify-content: center; - gap: 40px; - margin: 40px 0; - flex-wrap: wrap; +.sidebar-search-input:focus { + background-color: #ffffff; + border-color: #0969da; + box-shadow: 0 0 0 3px rgba(9, 105, 218, 0.1); } -.category-icon { - display: flex; - flex-direction: column; - align-items: center; - gap: 8px; - cursor: pointer; - transition: transform 0.2s ease; +[data-theme="dark"] .sidebar-search-input:focus { + background-color: #161b22; + border-color: #1f6feb; + box-shadow: 0 0 0 3px rgba(31, 111, 235, 0.1); } -.category-icon:hover { - transform: translateY(-2px); +.sidebar-search-input::placeholder { + color: #57606a; } -.icon-wrapper { - width: 48px; - height: 48px; - border-radius: 12px; - display: flex; - align-items: center; - justify-content: center; - background: rgba(255, 255, 255, 0.8); - border: 1px solid rgba(99, 102, 241, 0.1); - transition: all 0.2s ease; +[data-theme="dark"] .sidebar-search-input::placeholder { + color: #8b949e; } -.icon-wrapper svg { - width: 24px; - height: 24px; - color: #6366f1; +/* Sidebar Categories */ +.sidebar-categories { + margin-bottom: 32px; + padding-bottom: 24px; + border-bottom: 1px solid #d0d7de; } -/* React Icons styling */ -.icon-wrapper { - color: #6366f1; +[data-theme="dark"] .sidebar-categories { + border-bottom-color: #30363d; } -.icon-wrapper.development { - background: rgba(99, 102, 241, 0.1); - color: #6366f1; +.sidebar-categories-title { + font-size: 14px; + font-weight: 600; + color: #24292f; + margin: 0 0 8px 0; + text-transform: uppercase; + letter-spacing: 0.5px; } -.icon-wrapper.design { - background: rgba(236, 72, 153, 0.1); - color: #ec4899; +[data-theme="dark"] .sidebar-categories-title { + color: #e6edf3; } -.icon-wrapper.ai-tech { - background: rgba(168, 85, 247, 0.1); - color: #a855f7; +.sidebar-category-list { + list-style: none; + padding: 0; + margin: 0; } -.icon-wrapper.innovation { - background: rgba(245, 158, 11, 0.1); - color: #f59e0b; +.sidebar-category-list li { + margin: 0; } -.category-icon span { - font-size: 12px; - color: #64748b; +.sidebar-category-item { + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; + padding: 8px 12px; + font-size: 14px; font-weight: 500; -} - -.explore-articles-btn { - background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%); - color: white; + color: #57606a; + background: transparent; border: none; - padding: 14px 32px; - border-radius: 25px; - font-size: 16px; - font-weight: 600; + border-radius: 6px; + text-align: left; cursor: pointer; - transition: all 0.2s ease; - box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3); - margin-top: 16px; -} - -.explore-articles-btn:hover { - transform: translateY(-1px); - box-shadow: 0 6px 16px rgba(99, 102, 241, 0.4); -} - -/* Latest Articles Section */ -.latest-articles-section { - padding: 60px 20px 80px; - background: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%); - position: relative; - overflow: hidden; - margin-top: -20px; -} - -[data-theme="dark"] .latest-articles-section { - background: linear-gradient(135deg, #121212 0%, #1a202c 100%); -} - -.latest-articles-section::before { - content: ""; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: - radial-gradient( - circle at 10% 20%, - rgba(99, 102, 241, 0.05) 0%, - transparent 50% - ), - radial-gradient( - circle at 90% 80%, - rgba(168, 85, 247, 0.05) 0%, - transparent 50% - ); - pointer-events: none; -} - -.articles-container { - max-width: 1200px; - margin: 0 auto; - position: relative; - z-index: 1; - animation: contentSlideUp 1s ease-out 0.3s both; -} - -@keyframes contentSlideUp { - 0% { - opacity: 0; - transform: translateY(30px); - } - 100% { - opacity: 1; - transform: translateY(0); - } -} - -.section-header { - text-align: center; - margin-bottom: 64px; - position: relative; -} - -.section-title { - font-size: 48px; - font-weight: 800; - color: #1e293b; - margin: 0 0 24px 0; - line-height: 1.1; - letter-spacing: -0.02em; - position: relative; -} - -[data-theme="dark"] .section-title { - color: #f1f5f9; -} - -.section-title::after { - content: ""; - position: absolute; - bottom: -12px; - left: 50%; - transform: translateX(-50%); - width: 80px; - height: 4px; - background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%); - border-radius: 2px; -} - -.section-subtitle { - font-size: 18px; - color: #64748b; - margin: 0; - line-height: 1.6; - max-width: 600px; - margin: 0 auto; - font-weight: 400; + transition: all 0.15s ease; } -[data-theme="dark"] .section-subtitle { - color: #94a3b8; +[data-theme="dark"] .sidebar-category-item { + color: #8b949e; } -/* Search Container */ -.search-container { - max-width: 600px; - margin: 30px auto 30px; - position: relative; +.sidebar-category-item:hover { + background-color: #f6f8fa; + color: #24292f; } -.search-container::before { - content: ""; - position: absolute; - top: -20px; - left: -20px; - right: -20px; - bottom: -20px; - background: linear-gradient(45deg, #6366f1, #a855f7, #ec4899, #f59e0b); - background-size: 400% 400%; - border-radius: 32px; - opacity: 0.08; - animation: searchGlow 6s ease-in-out infinite; - z-index: -1; -} - -@keyframes searchGlow { - 0%, - 100% { - background-position: 0% 50%; - } - 50% { - background-position: 100% 50%; - } +[data-theme="dark"] .sidebar-category-item:hover { + background-color: #161b22; + color: #e6edf3; } -.search-wrapper { - position: relative; - display: flex; - align-items: center; - background: rgba(255, 255, 255, 0.95); - backdrop-filter: blur(30px); - border: 2px solid transparent; - border-radius: 12px; - padding: 0; - box-shadow: - 0 20px 60px rgba(0, 0, 0, 0.08), - 0 8px 32px rgba(99, 102, 241, 0.1), - 0 0 0 1px rgba(255, 255, 255, 0.2) inset; - transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); - background-image: - linear-gradient(white, white), - linear-gradient(135deg, #6366f1, #a855f7, #ec4899); - background-origin: border-box; - background-clip: padding-box, border-box; - animation: searchFloat 4s ease-in-out infinite; -} - -[data-theme="dark"] .search-wrapper { - background: rgba(36, 37, 38, 0.95); - box-shadow: - 0 20px 60px rgba(0, 0, 0, 0.4), - 0 8px 32px rgba(99, 102, 241, 0.2), - 0 0 0 1px rgba(255, 255, 255, 0.05) inset; - background-image: - linear-gradient(rgba(36, 37, 38, 0.95), rgba(36, 37, 38, 0.95)), - linear-gradient(135deg, #6366f1, #a855f7, #ec4899); -} - -@keyframes searchFloat { - 0%, - 100% { - transform: translateY(0px); - } - 50% { - transform: translateY(-3px); - } +.sidebar-category-item.active { + background-color: #ddf4ff; + color: #0969da; + font-weight: 600; } -.search-wrapper:focus-within { - transform: translateY(-8px) scale(1.02); - box-shadow: - 0 32px 80px rgba(0, 0, 0, 0.12), - 0 16px 48px rgba(99, 102, 241, 0.2), - 0 0 0 1px rgba(255, 255, 255, 0.3) inset; - animation-play-state: paused; +[data-theme="dark"] .sidebar-category-item.active { + background-color: rgba(31, 111, 235, 0.15); + color: #58a6ff; } -.search-icon { - position: relative; - left: auto; - top: auto; - transform: none; - width: 24px; - height: 24px; - color: #757575; - flex-shrink: 0; - display: flex; +.category-count { + display: inline-flex; align-items: center; justify-content: center; - pointer-events: none; - stroke: #757575; -} - -@keyframes iconPulse { - 0%, - 100% { - opacity: 0.8; - transform: scale(1); - } - 50% { - opacity: 1; - transform: scale(1.05); - } -} - -[data-theme="dark"] .search-icon { - color: #757575; - stroke: white; -} - -.search-wrapper:focus-within .search-icon { - color: #757575; - animation-play-state: paused; - transform: translateY(-50%) scale(1.1); -} - -.search-input { - flex: 1; - border: none; - outline: none; - font-size: 17px; - color: #1e293b; - background: transparent; + min-width: 20px; + padding: 0 6px; + font-size: 12px; font-weight: 500; - letter-spacing: 0.01em; - transition: all 0.2s ease; - padding: 16px 48px 16px 48px; + line-height: 18px; + color: #57606a; + background-color: rgba(175, 184, 193, 0.2); + border-radius: 2em; } -.search-input:focus { - color: #0f172a; +[data-theme="dark"] .category-count { + color: #8b949e; + background-color: rgba(139, 148, 158, 0.2); } -[data-theme="dark"] .search-input { - color: #f1f5f9; +.sidebar-category-item.active .category-count { + color: #0969da; + background-color: rgba(9, 105, 218, 0.15); } -[data-theme="dark"] .search-input:focus { - color: #ffffff; +[data-theme="dark"] .sidebar-category-item.active .category-count { + color: #58a6ff; + background-color: rgba(88, 166, 255, 0.15); } -.search-input::placeholder { - color: #94a3b8; - font-weight: 400; - font-size: 14px; +/* Sidebar Table of Contents */ +.sidebar-toc { + margin-bottom: 24px; } -.clear-search-icon { - position: absolute; - right: 16px; - width: 24px; - height: 24px; - color: #758090; - background: none; - border: none; - cursor: pointer; - padding: 6px; - border-radius: 50%; - transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); - overflow: hidden; -} - -.clear-search-icon::before { - content: ""; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: linear-gradient(45deg, #ef4444, #f97316); - border-radius: 50%; - opacity: 0; - transform: scale(0); - transition: all 0.3s ease; -} - -.clear-search-icon:hover { - color: white; - transform: scale(1.1); -} - -.clear-search-icon:hover::before { - opacity: 1; - transform: scale(1); +.sidebar-toc-title { + font-size: 14px; + font-weight: 600; + color: #24292f; + margin: 0 0 8px 0; + text-transform: uppercase; + letter-spacing: 0.5px; } -.clear-search-icon svg { - width: 100%; - height: 100%; - position: relative; - z-index: 1; - transition: transform 0.2s ease; - stroke-width: 2.5; +[data-theme="dark"] .sidebar-toc-title { + color: #e6edf3; } -.clear-search-icon:hover svg { - transform: rotate(90deg); +.sidebar-toc-list { + list-style: none; + padding: 0; + margin: 0; } -.search-decoration { - display: none; +.sidebar-toc-list li { + margin: 0 0 4px 0; } -/* Search Results Info */ -.search-results-info { - text-align: center; - margin: 32px 0 24px; - padding: 16px 24px; - background: linear-gradient( - 135deg, - rgba(99, 102, 241, 0.05) 0%, - rgba(168, 85, 247, 0.05) 100% - ); - border-radius: 12px; - border: 1px solid rgba(99, 102, 241, 0.1); - max-width: 500px; - margin-left: auto; - margin-right: auto; -} - -.search-results-info p { - font-size: 15px; - color: #475569; - margin: 0; - font-weight: 600; - display: flex; - align-items: center; - justify-content: center; - gap: 8px; +.sidebar-toc-link { + display: block; + padding: 6px 12px; + font-size: 14px; + color: #57606a; + text-decoration: none; + border-radius: 6px; + transition: all 0.15s ease; + line-height: 1.4; } -.search-results-info p::before { - content: "🔍"; - font-size: 16px; +[data-theme="dark"] .sidebar-toc-link { + color: #8b949e; } -/* No Results State */ -.no-results { - grid-column: 1 / -1; - display: flex; - justify-content: center; - align-items: center; - min-height: 300px; - text-align: center; +.sidebar-toc-link:hover { + background-color: #f6f8fa; + color: #24292f; + text-decoration: none; } -.no-results-content { - max-width: 400px; +[data-theme="dark"] .sidebar-toc-link:hover { + background-color: #161b22; + color: #e6edf3; } -.no-results-icon { - font-size: 48px; - margin-bottom: 16px; - opacity: 0.6; +/* Main Content */ +.github-main-content { + min-width: 0; } -.no-results h3 { - font-size: 24px; - font-weight: 600; - color: #1e293b; - margin: 0 0 8px 0; +.github-search-results { + margin-bottom: 24px; + padding: 12px 16px; + background-color: #ddf4ff; + border: 1px solid #54aeff; + border-radius: 6px; } -.no-results p { - font-size: 16px; - color: #64748b; - margin: 0 0 24px 0; - line-height: 1.5; +[data-theme="dark"] .github-search-results { + background-color: rgba(31, 111, 235, 0.15); + border-color: #1f6feb; } -.clear-search-btn { - background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%); - color: white; - border: none; - padding: 12px 24px; - border-radius: 8px; +.github-search-results p { + margin: 0; font-size: 14px; - font-weight: 600; - cursor: pointer; - transition: all 0.2s ease; - box-shadow: 0 2px 8px rgba(99, 102, 241, 0.3); + color: #0969da; + font-weight: 500; } -.clear-search-btn:hover { - transform: translateY(-1px); - box-shadow: 0 4px 12px rgba(99, 102, 241, 0.4); +[data-theme="dark"] .github-search-results p { + color: #58a6ff; } -/* Articles Grid */ -.articles-grid { +/* Blog Grid */ +.github-blog-grid { display: grid; - grid-template-columns: repeat(2, 1fr); + grid-template-columns: 1fr; gap: 32px; - max-width: 1200px; - margin: 0 auto; - padding: 0 20px; -} - -/* Large Desktop - 3 columns */ -@media (min-width: 1200px) { - .articles-grid { - grid-template-columns: repeat(3, 1fr); - gap: 40px; - max-width: 1400px; - } } -/* Desktop and Tablet - 2 columns */ -@media (max-width: 1199px) and (min-width: 768px) { - .articles-grid { +@media (min-width: 768px) { + .github-blog-grid { grid-template-columns: repeat(2, 1fr); - gap: 32px; - max-width: 900px; - } -} - -/* Small Tablet - 2 columns with smaller gap */ -@media (max-width: 767px) and (min-width: 576px) { - .articles-grid { - grid-template-columns: repeat(2, 1fr); - gap: 20px; - padding: 0 16px; - max-width: 600px; - } -} - -/* Mobile - 1 column */ -@media (max-width: 575px) { - .articles-grid { - grid-template-columns: 1fr; - gap: 24px; - padding: 0 16px; - max-width: 400px; } } -/* Article Card */ -.article-card { - background: white; - border-radius: 20px; +/* Blog Card */ +.github-blog-card { + background: #ffffff; + border: 1px solid #d0d7de; + border-radius: 6px; overflow: hidden; - box-shadow: - 0 4px 20px rgba(0, 0, 0, 0.08), - 0 1px 3px rgba(0, 0, 0, 0.1); - transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); - position: relative; - border: 1px solid rgba(255, 255, 255, 0.8); - animation: cardSlideIn 0.6s ease-out both; -} - -[data-theme="dark"] .article-card { - background: #242526; - border: 1px solid rgba(74, 85, 104, 0.3); - box-shadow: - 0 4px 20px rgba(0, 0, 0, 0.4), - 0 1px 3px rgba(0, 0, 0, 0.3); -} - -.article-card:nth-child(1) { - animation-delay: 0.1s; -} -.article-card:nth-child(2) { - animation-delay: 0.2s; -} -.article-card:nth-child(3) { - animation-delay: 0.3s; -} -.article-card:nth-child(4) { - animation-delay: 0.4s; -} -.article-card:nth-child(5) { - animation-delay: 0.5s; -} -.article-card:nth-child(6) { - animation-delay: 0.6s; -} - -@keyframes cardSlideIn { - 0% { - opacity: 0; - transform: translateY(40px) scale(0.95); - } - 100% { - opacity: 1; - transform: translateY(0) scale(1); - } -} - -.article-card::before { - content: ""; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: linear-gradient( - 135deg, - rgba(99, 102, 241, 0.02) 0%, - rgba(168, 85, 247, 0.02) 100% - ); - opacity: 0; - transition: opacity 0.3s ease; - pointer-events: none; -} - -.article-card:hover { - transform: translateY(-8px) scale(1.02); - box-shadow: - 0 20px 60px rgba(0, 0, 0, 0.15), - 0 8px 20px rgba(99, 102, 241, 0.1); -} - -[data-theme="dark"] .article-card:hover { - box-shadow: - 0 20px 60px rgba(0, 0, 0, 0.6), - 0 8px 20px rgba(99, 102, 241, 0.2); -} - -.article-card:hover::before { - opacity: 1; -} - -.card-category { - position: absolute; - top: 20px; - left: 20px; - background: linear-gradient( - 135deg, - rgba(255, 255, 255, 0.95) 0%, - rgba(255, 255, 255, 0.9) 100% - ); - color: #6366f1; - padding: 8px 16px; - border-radius: 25px; - font-size: 12px; - font-weight: 700; - z-index: 2; - backdrop-filter: blur(20px); - border: 1px solid rgba(99, 102, 241, 0.1); - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); transition: all 0.2s ease; - text-transform: uppercase; - letter-spacing: 0.5px; } -[data-theme="dark"] .card-category { - background: linear-gradient( - 135deg, - rgba(36, 37, 38, 0.95) 0%, - rgba(26, 32, 44, 0.9) 100% - ); - color: #a78bfa; - border: 1px solid rgba(167, 139, 250, 0.2); - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); +[data-theme="dark"] .github-blog-card { + background: #161b22; + border-color: #30363d; } -.article-card:hover .card-category { - background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%); - color: white; - transform: scale(1.05); +.github-blog-card:hover { + border-color: #0969da; + box-shadow: 0 3px 12px rgba(140, 149, 159, 0.15); } -[data-theme="dark"] .article-card:hover .card-category { - background: linear-gradient(135deg, #a78bfa 0%, #c084fc 100%); - color: #1a202c; +[data-theme="dark"] .github-blog-card:hover { + border-color: #1f6feb; + box-shadow: 0 3px 12px rgba(0, 0, 0, 0.4); } -.card-image { - height: 220px; - overflow: hidden; - position: relative; - background: linear-gradient(135deg, #f1f5f9 0%, #e2e8f0 100%); +.github-card-link { + display: block; + color: inherit; + text-decoration: none; } -.card-image::before { - content: ""; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: linear-gradient( - 135deg, - rgba(99, 102, 241, 0.1) 0%, - rgba(168, 85, 247, 0.1) 100% - ); - opacity: 0; - transition: opacity 0.3s ease; - z-index: 1; +.github-card-image { + width: 100%; + height: 200px; + overflow: hidden; + background: #f6f8fa; } -.article-card:hover .card-image::before { - opacity: 1; +[data-theme="dark"] .github-card-image { + background: #0d1117; } -.card-image img { +.github-card-image img { width: 100%; height: 100%; object-fit: cover; - transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); - filter: brightness(1) saturate(1); + transition: transform 0.3s ease; } -.article-card:hover .card-image img { - transform: scale(1.08); - filter: brightness(1.1) saturate(1.2); +.github-blog-card:hover .github-card-image img { + transform: scale(1.05); } -/* Responsive card image heights */ -@media (max-width: 767px) and (min-width: 576px) { - .card-image { - height: 160px; /* Smaller height for 2-column layout on small screens */ - } +.github-card-content { + padding: 16px; } -@media (max-width: 575px) { - .card-image { - height: 200px; /* Larger height for single column on mobile */ - } +.github-card-meta { + display: flex; + align-items: center; + margin-bottom: 12px; } -.card-content { - padding: 28px; - position: relative; - background: linear-gradient( - 135deg, - rgba(255, 255, 255, 0.95) 0%, - rgba(248, 250, 252, 0.95) 100% - ); +.github-card-category { + display: inline-block; + padding: 4px 8px; + font-size: 12px; + font-weight: 500; + color: #0969da; + background-color: #ddf4ff; + border-radius: 2em; } -[data-theme="dark"] .card-content { - background: linear-gradient( - 135deg, - rgba(36, 37, 38, 0.95) 0%, - rgba(26, 32, 44, 0.95) 100% - ); +[data-theme="dark"] .github-card-category { + color: #58a6ff; + background-color: rgba(31, 111, 235, 0.15); } -.card-title { - font-size: 22px; - font-weight: 700; - color: #1e293b; - margin: 0 0 16px 0; - line-height: 1.3; - letter-spacing: -0.01em; +.github-card-title { + font-size: 18px; + font-weight: 600; + color: #24292f; + margin: 0 0 8px 0; + line-height: 1.25; transition: color 0.2s ease; } -.article-card:hover .card-title { - color: #6366f1; +[data-theme="dark"] .github-card-title { + color: #e6edf3; } -[data-theme="dark"] .card-title { - color: #f1f5f9; +.github-blog-card:hover .github-card-title { + color: #0969da; } -[data-theme="dark"] .article-card:hover .card-title { - color: #a78bfa; +[data-theme="dark"] .github-blog-card:hover .github-card-title { + color: #58a6ff; } -.card-description { - font-size: 15px; - color: #64748b; - line-height: 1.6; - margin: 0 0 24px 0; +.github-card-description { + font-size: 14px; + color: #57606a; + line-height: 1.5; + margin: 0 0 16px 0; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; - font-weight: 400; -} - -[data-theme="dark"] .card-description { - color: #94a3b8; -} - -/* Responsive card content */ -@media (max-width: 767px) and (min-width: 576px) { - .card-content { - padding: 20px; - } - - .card-title { - font-size: 18px; - margin-bottom: 10px; - line-height: 1.4; - } - - .card-description { - font-size: 13px; - margin-bottom: 16px; - -webkit-line-clamp: 2; - } } -@media (max-width: 575px) { - .card-content { - padding: 24px; - } - - .card-title { - font-size: 20px; - margin-bottom: 12px; - } - - .card-description { - font-size: 14px; - margin-bottom: 20px; - -webkit-line-clamp: 3; - } +[data-theme="dark"] .github-card-description { + color: #8b949e; } -.card-meta { +.github-card-footer { display: flex; align-items: center; justify-content: space-between; - margin-bottom: 20px; - padding-bottom: 20px; - border-bottom: 1px solid rgba(226, 232, 240, 0.8); - position: relative; - gap: 12px; - flex-wrap: wrap; -} - -.card-meta::before { - content: ""; - position: absolute; - bottom: -1px; - left: 0; - width: 40px; - height: 2px; - background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%); - border-radius: 1px; - opacity: 0; - transition: all 0.3s ease; + padding-top: 16px; + border-top: 1px solid #d0d7de; } -.article-card:hover .card-meta::before { - opacity: 1; - width: 80px; +[data-theme="dark"] .github-card-footer { + border-top-color: #30363d; } -.card-author { +.github-card-author { display: flex; align-items: center; - gap: 10px; + gap: 8px; flex: 1; - min-width: 0; /* Allow text to shrink */ + min-width: 0; } -.author-avatar { - width: 32px; - height: 32px; +.github-author-avatar { + width: 24px; + height: 24px; border-radius: 50%; - background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%); + background: linear-gradient(135deg, #0969da, #1f6feb); display: flex; align-items: center; justify-content: center; - font-size: 16px; - color: white; + font-size: 12px; + color: #ffffff; font-weight: 600; - box-shadow: 0 2px 8px rgba(99, 102, 241, 0.3); flex-shrink: 0; - transition: all 0.3s ease; } -.author-avatar:hover { - transform: scale(1.1); - box-shadow: 0 4px 12px rgba(99, 102, 241, 0.4); -} - -.author-name { +.github-author-name { font-size: 13px; - color: #475569; - font-weight: 600; + color: #57606a; + font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; - max-width: 100%; - position: relative; - cursor: help; - transition: color 0.2s ease; -} - -.author-name:hover { - color: #6366f1; } -[data-theme="dark"] .author-name { - color: #cbd5e1; +[data-theme="dark"] .github-author-name { + color: #8b949e; } -[data-theme="dark"] .author-name:hover { - color: #a78bfa; -} - -/* Tooltip for author names */ -.author-name::after { - content: attr(data-full-name); - position: absolute; - bottom: 100%; - left: 50%; - transform: translateX(-50%); - background: rgba(0, 0, 0, 0.9); - color: white; - padding: 8px 12px; - border-radius: 6px; - font-size: 12px; - white-space: nowrap; - opacity: 0; - visibility: hidden; - transition: all 0.3s ease; - z-index: 1000; - pointer-events: none; - margin-bottom: 5px; -} - -.author-name::before { - content: ""; - position: absolute; - bottom: 100%; - left: 50%; - transform: translateX(-50%); - border: 5px solid transparent; - border-top-color: rgba(0, 0, 0, 0.9); - opacity: 0; - visibility: hidden; - transition: all 0.3s ease; - z-index: 1000; - pointer-events: none; -} - -[data-theme="dark"] .author-name::after { - background: rgba(18, 18, 18, 0.95); - color: #f7fafc; -} - -[data-theme="dark"] .author-name::before { - border-top-color: rgba(18, 18, 18, 0.95); -} - -.author-name:hover::after, -.author-name:hover::before { - opacity: 1; - visibility: visible; -} - -.card-read-time { +.github-card-read-time { font-size: 12px; - color: #94a3b8; + color: #57606a; font-weight: 500; - background: rgba(148, 163, 184, 0.1); - padding: 4px 8px; - border-radius: 12px; -} - -[data-theme="dark"] .card-read-time { - color: #64748b; - background: rgba(100, 116, 139, 0.2); + flex-shrink: 0; } -/* Responsive card meta */ -@media (max-width: 767px) and (min-width: 576px) { - .card-meta { - margin-bottom: 14px; - padding-bottom: 14px; - } - - .author-avatar { - width: 26px; - height: 26px; - font-size: 11px; - } - - .author-name { - font-size: 11px; - } - - .card-read-time { - font-size: 10px; - padding: 2px 6px; - } +[data-theme="dark"] .github-card-read-time { + color: #8b949e; } -@media (max-width: 575px) { - .card-meta { - margin-bottom: 16px; - padding-bottom: 16px; - flex-direction: column; - align-items: flex-start; - gap: 8px; - } - - .card-author { - width: 100%; - gap: 8px; - } - - .author-avatar { - width: 28px; - height: 28px; - font-size: 12px; - } - - .author-name { - font-size: 12px; - white-space: normal; - overflow: visible; - text-overflow: unset; - line-height: 1.3; - } - - .card-read-time { - font-size: 11px; - padding: 3px 6px; - align-self: flex-end; - margin-top: -4px; - } +/* No Results */ +.github-no-results { + grid-column: 1 / -1; + text-align: center; + padding: 64px 24px; } -.card-read-more { - display: inline-flex; - align-items: center; - gap: 8px; - color: #6366f1; - text-decoration: none; - font-size: 14px; - font-weight: 700; - padding: 12px 20px; - border-radius: 12px; - background: linear-gradient( - 135deg, - rgba(99, 102, 241, 0.1) 0%, - rgba(139, 92, 246, 0.1) 100% - ); - border: 1px solid rgba(99, 102, 241, 0.2); - transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); - position: relative; - overflow: hidden; +.github-no-results-icon { + width: 48px; + height: 48px; + margin: 0 auto 16px; + color: #57606a; } -.card-read-more::before { - content: ""; - position: absolute; - top: 0; - left: -100%; - width: 100%; - height: 100%; - background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%); - transition: left 0.3s ease; - z-index: -1; +[data-theme="dark"] .github-no-results-icon { + color: #8b949e; } -.card-read-more:hover { - color: white; - transform: translateY(-2px); - box-shadow: 0 8px 25px rgba(99, 102, 241, 0.3); +.github-no-results h3 { + font-size: 20px; + font-weight: 600; + color: #24292f; + margin: 0 0 8px 0; } -.card-read-more:hover::before { - left: 0; +[data-theme="dark"] .github-no-results h3 { + color: #e6edf3; } -/* Responsive read more button */ -@media (max-width: 767px) and (min-width: 576px) { - .card-read-more { - font-size: 12px; - padding: 8px 14px; - } +.github-no-results p { + font-size: 14px; + color: #57606a; + margin: 0 0 24px 0; } -@media (max-width: 575px) { - .card-read-more { - font-size: 13px; - padding: 10px 16px; - } +[data-theme="dark"] .github-no-results p { + color: #8b949e; } -/* Comprehensive Responsive Design */ - -/* Large Desktop */ -@media (min-width: 1400px) { - .articles-container { - max-width: 1400px; - } - - .articles-grid { - gap: 48px; - } +.github-clear-btn { + padding: 8px 16px; + font-size: 14px; + font-weight: 500; + color: #ffffff; + background-color: #0969da; + border: 1px solid rgba(27, 31, 36, 0.15); + border-radius: 6px; + cursor: pointer; + transition: all 0.15s ease; } -/* Desktop */ -@media (max-width: 1199px) and (min-width: 992px) { - .section-title { - font-size: 42px; - } - - .section-subtitle { - font-size: 17px; - } +.github-clear-btn:hover { + background-color: #0860ca; } -/* Tablet */ -@media (max-width: 991px) and (min-width: 768px) { - .blog-hero-section { - padding: 60px 20px 50px; - } - - .blog-main-title { - font-size: 40px; - } - - .blog-category-icons { - gap: 32px; - } - - .section-title { - font-size: 36px; - } - - .section-subtitle { - font-size: 16px; - } - - .search-container { - max-width: 450px; - } +[data-theme="dark"] .github-clear-btn { + background-color: #1f6feb; + border-color: rgba(240, 246, 252, 0.1); } -/* Mobile Large */ -@media (max-width: 767px) and (min-width: 576px) { - .blog-hero-section { - padding: 50px 16px 40px; - } - - .blog-main-title { - font-size: 32px; - margin-bottom: 20px; - } - - .blog-main-subtitle { - font-size: 16px; - margin-bottom: 32px; - } - - .blog-category-icons { - gap: 24px; - margin: 32px 0; - } - - .icon-wrapper { - width: 44px; - height: 44px; - } - - .section-title { - font-size: 32px; - margin-bottom: 20px; - } - - .section-subtitle { - font-size: 15px; - } - - .search-container { - max-width: 400px; - margin-top: 32px; - } - - .latest-articles-section { - padding: 60px 16px; - } +[data-theme="dark"] .github-clear-btn:hover { + background-color: #1a5cd7; } -/* Mobile Small */ -@media (max-width: 575px) { - .blog-hero-section { - padding: 40px 16px 32px; +/* Responsive */ +@media (max-width: 768px) { + .github-hero { + padding: 32px 16px; } - .blog-main-title { + .github-hero-title { font-size: 28px; - margin-bottom: 16px; - line-height: 1.2; - } - - .blog-main-subtitle { - font-size: 15px; - margin-bottom: 28px; - } - - .blog-category-icons { - gap: 20px; - margin: 28px 0; - flex-wrap: wrap; - } - - .category-icon { - flex: 0 0 calc(50% - 10px); - max-width: calc(50% - 10px); - } - - .icon-wrapper { - width: 40px; - height: 40px; - } - - .category-icon span { - font-size: 11px; } - .explore-articles-btn { - padding: 12px 24px; + .github-hero-subtitle { font-size: 14px; } - .latest-articles-section { - padding: 50px 16px; + .github-blog-container { + padding: 32px 16px; } - .section-header { - margin-bottom: 48px; - } - - .section-title { - font-size: 28px; - margin-bottom: 16px; - } - - .section-subtitle { - font-size: 14px; - } - - .search-container { - max-width: 100%; - margin-top: 28px; - } - - .search-wrapper { - padding: 14px 16px; + .github-blog-grid { + grid-template-columns: 1fr; + gap: 24px; } - .search-icon { - width: 18px; - height: 18px; - margin-right: 12px; + .sidebar-categories { + margin-bottom: 24px; + padding-bottom: 16px; } - .search-input { - font-size: 15px; + .sidebar-toc { + margin-bottom: 16px; } } diff --git a/src/pages/blogs/index.tsx b/src/pages/blogs/index.tsx index b7edb1b9..f976b5a5 100644 --- a/src/pages/blogs/index.tsx +++ b/src/pages/blogs/index.tsx @@ -23,28 +23,65 @@ export default function Blogs(): React.JSX.Element { const { siteConfig } = useDocusaurusContext(); const [searchTerm, setSearchTerm] = useState(""); const [filteredBlogs, setFilteredBlogs] = useState(blogs); + const [selectedCategory, setSelectedCategory] = useState("All"); - // Filter blogs based on search term + // Filter blogs based on search term and category useEffect(() => { - if (searchTerm.trim() === "") { - setFilteredBlogs(blogs); - } else { - const filtered = blogs.filter( + let filtered = blogs; + + // Filter by category + if (selectedCategory !== "All") { + filtered = filtered.filter((blog) => { + const category = getCategory(blog.title); + return category === selectedCategory; + }); + } + + // Filter by search term + if (searchTerm.trim() !== "") { + filtered = filtered.filter( (blog) => blog.title.toLowerCase().includes(searchTerm.toLowerCase()) || - blog.description.toLowerCase().includes(searchTerm.toLowerCase()) || - blog.tags?.some((tag) => - tag.toLowerCase().includes(searchTerm.toLowerCase()), - ), + blog.description.toLowerCase().includes(searchTerm.toLowerCase()), ); - setFilteredBlogs(filtered); } - }, [searchTerm]); + + setFilteredBlogs(filtered); + }, [searchTerm, selectedCategory]); const handleSearchChange = (e: React.ChangeEvent) => { setSearchTerm(e.target.value); }; + // Get category from blog title + const getCategory = (title: string) => { + if ( + title.toLowerCase().includes("design") || + title.toLowerCase().includes("ux") + ) + return "Design"; + if ( + title.toLowerCase().includes("ai") || + title.toLowerCase().includes("deepmind") || + title.toLowerCase().includes("agent") + ) + return "AI & Tech"; + if ( + title.toLowerCase().includes("github") || + title.toLowerCase().includes("git") + ) + return "Development"; + if ( + title.toLowerCase().includes("spark") || + title.toLowerCase().includes("n8n") || + title.toLowerCase().includes("automation") + ) + return "Engineering"; + return "Resources"; + }; + + const categories = ["All", "Design", "AI & Tech", "Development", "Engineering", "Resources"]; + return ( -
- {/* Background Geometric Shapes */} -
-
-
-
-
-
-
- - {/* Hero Section */} -
-
-
-
-
-
-
-
-
-
-
-

- Welcome to recode hive{" "} - Blogs -

-

- Discover comprehensive web development articles, tutorials, and - insights covering everything from HTML & CSS fundamentals to - advanced JavaScript, React, Node.js, Data Structures & - Algorithms, and cutting-edge technologies. -

-
+
+ {/* Hero Section - GitHub Style */} +
+
+

The recode hive Blog

+

+ Insights, updates, and best practices from the recode hive community +

- {/* Latest Articles Section */} -
-
-
- {/* Search Bar */} -
-
- - - - - - {searchTerm && ( - - )} -
+ {category} + + {category === "All" + ? blogs.length + : blogs.filter(b => getCategory(b.title) === category).length} + + + + ))} + +
+ + {/* Blog Table of Contents */} +
+

Recent posts

+
    + {filteredBlogs.slice(0, 8).map((blog) => ( +
  • + + {blog.title} + +
  • + ))} +
+ - {/* Search Results Counter */} + {/* Main Content Area */} +
{searchTerm && ( -
+

{filteredBlogs.length > 0 - ? `Found ${filteredBlogs.length} article${filteredBlogs.length !== 1 ? "s" : ""} for "${searchTerm}"` - : `No articles found for "${searchTerm}"`} + ? `${filteredBlogs.length} article${filteredBlogs.length !== 1 ? "s" : ""} found` + : `No articles found`}

)} -
+
{filteredBlogs.length > 0 ? ( - filteredBlogs.map((blog, index) => ( - + filteredBlogs.map((blog) => ( + )) ) : ( -
-
-
🔍
-

No articles found

-

- Try adjusting your search terms or browse all articles. -

- +
+
+ + +
+

No articles found

+

Try adjusting your search or filters.

+
)}
-
-
+ +
); } -const BlogCard = ({ blog, index }) => { - // Get category from blog title or description for demo purposes - const getCategory = (title) => { - if ( - title.toLowerCase().includes("design") || - title.toLowerCase().includes("ux") - ) - return "Design"; - if ( - title.toLowerCase().includes("ai") || - title.toLowerCase().includes("deepmind") - ) - return "AI & Tech"; - if ( - title.toLowerCase().includes("github") || - title.toLowerCase().includes("git") - ) - return "Development"; - return "Resources"; - }; - +const BlogCard = ({ blog, getCategory }) => { // Get authors for this blog post const getAuthors = (slug) => { const authors = authorMapping[slug] || ["recode hive Team"]; @@ -214,27 +226,28 @@ const BlogCard = ({ blog, index }) => { const authorName = getAuthors(blog.slug); return ( -
-
{category}
-
- {blog.title} -
-
-

{blog.title}

-

{blog.description}

-
-
- 👤 - - {authorName} - +
+ +
+ {blog.title} +
+
+
+ {category} +
+

{blog.title}

+

{blog.description}

+
+
+
+ {authorName.charAt(0).toUpperCase()} +
+ {authorName} +
+ 5 min read
- 5 min read
- - Read Article → - -
-
+ + ); };