diff --git a/src/components/Roadmap/Roadmap.css b/src/components/Roadmap/Roadmap.css
index 3eb8af48..ebf720ee 100644
--- a/src/components/Roadmap/Roadmap.css
+++ b/src/components/Roadmap/Roadmap.css
@@ -3,6 +3,11 @@
padding: 20px;
}
+[data-theme='dark'] .roadmap-container {
+ background: var(--dark-bg-primary);
+ color: var(--dark-text-primary);
+}
+
.roadmap-container .roadmap-title {
text-align: center;
font-size: 2.5rem;
@@ -33,6 +38,16 @@
max-width: 400px;
}
+[data-theme='dark'] .roadmap-container .roadmap-search {
+ background: var(--dark-input-bg);
+ color: var(--dark-text-primary);
+ border-color: var(--dark-input-border);
+}
+
+[data-theme='dark'] .roadmap-container .roadmap-search:focus {
+ border-color: var(--dark-input-focus-border);
+}
+
.roadmap-container .roadmap-category {
margin-bottom: 30px;
}
@@ -83,11 +98,22 @@
text-align: center;
}
+[data-theme='dark'] .roadmap-container .roadmap-category .roadmap-cards .roadmap-card {
+ background: var(--dark-card-bg);
+ border-color: var(--dark-border);
+ box-shadow: var(--dark-shadow);
+ color: var(--dark-text-primary);
+}
+
.roadmap-container .roadmap-category .roadmap-cards .roadmap-card:hover {
transform: translateY(-2px);
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.15);
}
+[data-theme='dark'] .roadmap-container .roadmap-category .roadmap-cards .roadmap-card:hover {
+ box-shadow: var(--dark-shadow-lg);
+}
+
.roadmap-container .roadmap-category .roadmap-cards .roadmap-card .roadmap-link {
text-decoration: none;
color: var(--ifm-color-primary);
diff --git a/src/components/TeamProfileCards/teamcards.css b/src/components/TeamProfileCards/teamcards.css
index 8d6db73c..1f3dc710 100644
--- a/src/components/TeamProfileCards/teamcards.css
+++ b/src/components/TeamProfileCards/teamcards.css
@@ -4,11 +4,21 @@
transition: transform 0.3s ease, box-shadow 0.3s ease;
border: 0.5px solid black;
}
-
+
+[data-theme='dark'] .team-profile-card > .card {
+ border-color: var(--dark-border);
+ background: var(--dark-card-bg);
+ color: var(--dark-text-primary);
+ }
+
.team-profile-card > .card:hover {
transform: translateY(-5px);
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.6);
}
+
+[data-theme='dark'] .team-profile-card > .card:hover {
+ box-shadow: var(--dark-shadow-lg);
+ }
.team-profile-card > .card > .card__header > .avatar > .avatar__photo--xl {
border-radius: 50%;
@@ -22,4 +32,14 @@
.team-profile-card > .card > .card__footer > .button-group > .button:hover {
background-color: #0056b3;
}
+
+[data-theme='dark'] .team-profile-card > .card > .card__footer > .button-group > .button {
+ background: var(--dark-bg-tertiary);
+ color: var(--dark-text-primary);
+ border-color: var(--dark-border);
+ }
+
+[data-theme='dark'] .team-profile-card > .card > .card__footer > .button-group > .button:hover {
+ background: var(--dark-card-hover-bg);
+ }
diff --git a/src/css/custom.css b/src/css/custom.css
index 9d30a21f..54bd2e0d 100644
--- a/src/css/custom.css
+++ b/src/css/custom.css
@@ -32,6 +32,26 @@
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
--ifm-color-primary-text: #ffffff;
--ifm-color-secondary-text: #edf2f7;
+
+ /* Standardized Dark Theme Colors */
+ --dark-bg-primary: #121212;
+ --dark-bg-secondary: #1a1a1a;
+ --dark-bg-tertiary: #2d2d2d;
+ --dark-text-primary: #ffffff;
+ --dark-text-secondary: #edf2f7;
+ --dark-text-muted: #a0aec0;
+ --dark-border: #2d2d2d;
+ --dark-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.3), 0 2px 4px -1px rgba(0, 0, 0, 0.2);
+ --dark-shadow-lg: 0 20px 25px -5px rgba(0, 0, 0, 0.4), 0 10px 10px -5px rgba(0, 0, 0, 0.2);
+
+ /* Card and component backgrounds */
+ --dark-card-bg: #1a1a1a;
+ --dark-card-hover-bg: #2d2d2d;
+
+ /* Form elements */
+ --dark-input-bg: #2d2d2d;
+ --dark-input-border: #4a5568;
+ --dark-input-focus-border: #25c2a0;
}
@@ -161,18 +181,565 @@
color: transparent;
}
-/* Light mode background and text fix */
-[data-theme='light'] {
+/* Light mode background and text fix - EXCLUDE community page */
+[data-theme='light'] body:not(:has(.community-page)) {
--ifm-background-color: #ffffff; /* white background */
--ifm-font-color-base: #000000; /* black text */
background-color: var(--ifm-background-color);
color: var(--ifm-font-color-base);
}
-/* Dark mode overrides (already there, ensure it's working) */
-[data-theme='dark'] {
- background-color: #121212;
- color: #ffffff;
+/* Dark mode overrides - EXCLUDE community page */
+[data-theme='dark'] body:not(:has(.community-page)) {
+ background-color: var(--dark-bg-primary);
+ color: var(--dark-text-primary);
+}
+
+/* Global dark theme utilities */
+[data-theme='dark'] .dark-bg-primary {
+ background-color: var(--dark-bg-primary) !important;
+}
+
+[data-theme='dark'] .dark-bg-secondary {
+ background-color: var(--dark-bg-secondary) !important;
+}
+
+[data-theme='dark'] .dark-bg-tertiary {
+ background-color: var(--dark-bg-tertiary) !important;
+}
+
+[data-theme='dark'] .dark-text-primary {
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .dark-text-secondary {
+ color: var(--dark-text-secondary) !important;
+}
+
+[data-theme='dark'] .dark-text-muted {
+ color: var(--dark-text-muted) !important;
+}
+
+[data-theme='dark'] .dark-border {
+ border-color: var(--dark-border) !important;
+}
+
+[data-theme='dark'] .dark-shadow {
+ box-shadow: var(--dark-shadow) !important;
+}
+
+[data-theme='dark'] .dark-shadow-lg {
+ box-shadow: var(--dark-shadow-lg) !important;
+}
+
+/* Form elements dark theme */
+[data-theme='dark'] input,
+[data-theme='dark'] textarea,
+[data-theme='dark'] select {
+ background-color: var(--dark-input-bg) !important;
+ border-color: var(--dark-input-border) !important;
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] input:focus,
+[data-theme='dark'] textarea:focus,
+[data-theme='dark'] select:focus {
+ border-color: var(--dark-input-focus-border) !important;
+ box-shadow: 0 0 0 2px rgba(37, 194, 160, 0.2) !important;
+}
+
+[data-theme='dark'] input::placeholder,
+[data-theme='dark'] textarea::placeholder {
+ color: var(--dark-text-muted) !important;
+}
+
+/* Button dark theme */
+[data-theme='dark'] .button,
+[data-theme='dark'] button {
+ background-color: var(--dark-bg-tertiary);
+ color: var(--dark-text-primary);
+ border-color: var(--dark-border);
+}
+
+[data-theme='dark'] .button:hover,
+[data-theme='dark'] button:hover {
+ background-color: var(--dark-card-hover-bg);
+}
+
+/* Card components dark theme */
+[data-theme='dark'] .card {
+ background-color: var(--dark-card-bg) !important;
+ border-color: var(--dark-border) !important;
+ color: var(--dark-text-primary) !important;
+ box-shadow: var(--dark-shadow) !important;
+}
+
+[data-theme='dark'] .card:hover {
+ background-color: var(--dark-card-hover-bg) !important;
+ box-shadow: var(--dark-shadow-lg) !important;
+}
+
+/* Table dark theme */
+[data-theme='dark'] table {
+ background-color: var(--dark-bg-secondary) !important;
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] th {
+ background-color: var(--dark-bg-tertiary) !important;
+ color: var(--dark-text-primary) !important;
+ border-color: var(--dark-border) !important;
+}
+
+[data-theme='dark'] td {
+ border-color: var(--dark-border) !important;
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] tr:hover {
+ background-color: var(--dark-card-hover-bg) !important;
+}
+
+/* Navigation dark theme */
+[data-theme='dark'] .navbar {
+ background-color: var(--dark-bg-secondary) !important;
+ border-color: var(--dark-border) !important;
+}
+
+[data-theme='dark'] .navbar__item {
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .navbar__link:hover {
+ color: var(--ifm-color-primary) !important;
+}
+
+/* Footer - keeping original styling */
+
+/* Modal dark theme */
+[data-theme='dark'] .modal {
+ background-color: var(--dark-bg-secondary) !important;
+ color: var(--dark-text-primary) !important;
+ border-color: var(--dark-border) !important;
+}
+
+[data-theme='dark'] .modal-header {
+ background-color: var(--dark-bg-tertiary) !important;
+ border-color: var(--dark-border) !important;
+}
+
+/* Dropdown dark theme */
+[data-theme='dark'] .dropdown {
+ background-color: var(--dark-bg-secondary) !important;
+ border-color: var(--dark-border) !important;
+ box-shadow: var(--dark-shadow-lg) !important;
+}
+
+[data-theme='dark'] .dropdown__link {
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .dropdown__link:hover {
+ background-color: var(--dark-card-hover-bg) !important;
+ color: var(--ifm-color-primary) !important;
+}
+
+/* Code blocks dark theme */
+[data-theme='dark'] pre {
+ background-color: var(--dark-bg-tertiary) !important;
+ border-color: var(--dark-border) !important;
+}
+
+[data-theme='dark'] code {
+ background-color: var(--dark-bg-tertiary) !important;
+ color: var(--dark-text-primary) !important;
+}
+
+/* ===== DOCUSAURUS DOCUMENTATION PAGES DARK THEME ===== */
+
+/* Main documentation layout - EXCLUDE community page */
+[data-theme='dark'] body:not(:has(.community-page)) .main-wrapper {
+ background-color: var(--dark-bg-primary) !important;
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] body:not(:has(.community-page)) .docusaurus-wrapper {
+ background-color: var(--dark-bg-primary) !important;
+}
+
+/* Documentation content area - EXCLUDE community page */
+[data-theme='dark'] body:not(:has(.community-page)) .container {
+ background-color: var(--dark-bg-primary) !important;
+}
+
+[data-theme='dark'] body:not(:has(.community-page)) .row {
+ background-color: var(--dark-bg-primary) !important;
+}
+
+[data-theme='dark'] body:not(:has(.community-page)) .col {
+ background-color: var(--dark-bg-primary) !important;
+}
+
+/* Documentation sidebar */
+[data-theme='dark'] .theme-doc-sidebar-container {
+ background-color: var(--dark-bg-secondary) !important;
+ border-color: var(--dark-border) !important;
+}
+
+[data-theme='dark'] .theme-doc-sidebar-menu {
+ background-color: var(--dark-bg-secondary) !important;
+}
+
+[data-theme='dark'] .menu__link {
+ color: var(--dark-text-secondary) !important;
+}
+
+[data-theme='dark'] .menu__link:hover {
+ background-color: var(--dark-card-hover-bg) !important;
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .menu__link--active {
+ background-color: var(--ifm-color-primary) !important;
+ color: white !important;
+}
+
+[data-theme='dark'] .menu__list-item-collapsible {
+ background-color: var(--dark-bg-secondary) !important;
+}
+
+[data-theme='dark'] .menu__caret {
+ color: var(--dark-text-muted) !important;
+}
+
+/* Documentation content */
+[data-theme='dark'] .theme-doc-markdown {
+ background-color: var(--dark-bg-primary) !important;
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .markdown {
+ background-color: var(--dark-bg-primary) !important;
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .markdown h1,
+[data-theme='dark'] .markdown h2,
+[data-theme='dark'] .markdown h3,
+[data-theme='dark'] .markdown h4,
+[data-theme='dark'] .markdown h5,
+[data-theme='dark'] .markdown h6 {
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .markdown p {
+ color: var(--dark-text-secondary) !important;
+}
+
+[data-theme='dark'] .markdown li {
+ color: var(--dark-text-secondary) !important;
+}
+
+[data-theme='dark'] .markdown a {
+ color: var(--ifm-color-primary) !important;
+}
+
+[data-theme='dark'] .markdown a:hover {
+ color: var(--ifm-color-primary-light) !important;
+}
+
+/* Documentation breadcrumbs */
+[data-theme='dark'] .breadcrumbs {
+ background-color: var(--dark-bg-primary) !important;
+}
+
+[data-theme='dark'] .breadcrumbs__link {
+ color: var(--dark-text-muted) !important;
+}
+
+[data-theme='dark'] .breadcrumbs__link:hover {
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .breadcrumbs__item--active .breadcrumbs__link {
+ color: var(--dark-text-primary) !important;
+}
+
+/* Documentation table of contents */
+[data-theme='dark'] .table-of-contents {
+ background-color: var(--dark-bg-primary) !important;
+}
+
+[data-theme='dark'] .table-of-contents__link {
+ color: var(--dark-text-muted) !important;
+}
+
+[data-theme='dark'] .table-of-contents__link:hover {
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .table-of-contents__link--active {
+ color: var(--ifm-color-primary) !important;
+}
+
+/* Documentation pagination */
+[data-theme='dark'] .pagination-nav {
+ background-color: var(--dark-bg-primary) !important;
+}
+
+[data-theme='dark'] .pagination-nav__link {
+ background-color: var(--dark-bg-secondary) !important;
+ border-color: var(--dark-border) !important;
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .pagination-nav__link:hover {
+ background-color: var(--dark-card-hover-bg) !important;
+ border-color: var(--ifm-color-primary) !important;
+}
+
+[data-theme='dark'] .pagination-nav__sublabel {
+ color: var(--dark-text-muted) !important;
+}
+
+[data-theme='dark'] .pagination-nav__label {
+ color: var(--dark-text-primary) !important;
+}
+
+/* Documentation admonitions (info, warning, etc.) */
+[data-theme='dark'] .admonition {
+ background-color: var(--dark-bg-secondary) !important;
+ border-color: var(--dark-border) !important;
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .admonition-heading {
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .admonition-content {
+ color: var(--dark-text-secondary) !important;
+}
+
+/* Documentation tabs */
+[data-theme='dark'] .tabs-container {
+ background-color: var(--dark-bg-primary) !important;
+}
+
+[data-theme='dark'] .tabs {
+ background-color: var(--dark-bg-secondary) !important;
+ border-color: var(--dark-border) !important;
+}
+
+[data-theme='dark'] .tabs__item {
+ background-color: var(--dark-bg-secondary) !important;
+ color: var(--dark-text-muted) !important;
+ border-color: var(--dark-border) !important;
+}
+
+[data-theme='dark'] .tabs__item:hover {
+ background-color: var(--dark-card-hover-bg) !important;
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .tabs__item--active {
+ background-color: var(--dark-bg-primary) !important;
+ color: var(--ifm-color-primary) !important;
+ border-bottom-color: var(--ifm-color-primary) !important;
+}
+
+[data-theme='dark'] .tabpanel {
+ background-color: var(--dark-bg-primary) !important;
+ color: var(--dark-text-primary) !important;
+}
+
+/* Documentation code blocks */
+[data-theme='dark'] .prism-code {
+ background-color: var(--dark-bg-tertiary) !important;
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .codeBlockTitle {
+ background-color: var(--dark-bg-tertiary) !important;
+ color: var(--dark-text-primary) !important;
+ border-color: var(--dark-border) !important;
+}
+
+[data-theme='dark'] .codeBlockLines {
+ background-color: var(--dark-bg-tertiary) !important;
+}
+
+[data-theme='dark'] .token-line {
+ color: var(--dark-text-primary) !important;
+}
+
+/* Documentation blockquotes */
+[data-theme='dark'] blockquote {
+ background-color: var(--dark-bg-secondary) !important;
+ border-left-color: var(--ifm-color-primary) !important;
+ color: var(--dark-text-secondary) !important;
+}
+
+/* Documentation details/summary */
+[data-theme='dark'] details {
+ background-color: var(--dark-bg-secondary) !important;
+ border-color: var(--dark-border) !important;
+}
+
+[data-theme='dark'] summary {
+ background-color: var(--dark-bg-tertiary) !important;
+ color: var(--dark-text-primary) !important;
+}
+
+/* Documentation search */
+[data-theme='dark'] .DocSearch {
+ --docsearch-primary-color: var(--ifm-color-primary) !important;
+ --docsearch-text-color: var(--dark-text-primary) !important;
+ --docsearch-muted-color: var(--dark-text-muted) !important;
+ --docsearch-container-background: rgba(18, 18, 18, 0.8) !important;
+ --docsearch-modal-background: var(--dark-bg-secondary) !important;
+ --docsearch-searchbox-background: var(--dark-bg-tertiary) !important;
+ --docsearch-searchbox-focus-background: var(--dark-bg-tertiary) !important;
+ --docsearch-hit-color: var(--dark-text-primary) !important;
+ --docsearch-hit-active-color: var(--dark-text-primary) !important;
+ --docsearch-hit-background: var(--dark-bg-tertiary) !important;
+ --docsearch-hit-shadow: var(--dark-shadow) !important;
+ --docsearch-key-gradient: linear-gradient(-225deg, var(--dark-bg-tertiary), var(--dark-bg-secondary)) !important;
+ --docsearch-key-shadow: inset 0 -2px 0 0 var(--dark-border), inset 0 0 1px 1px var(--dark-border), 0 1px 2px 1px rgba(0, 0, 0, 0.3) !important;
+ --docsearch-footer-background: var(--dark-bg-tertiary) !important;
+ --docsearch-footer-shadow: var(--dark-shadow) !important;
+}
+
+/* Documentation edit page link */
+[data-theme='dark'] .theme-edit-this-page {
+ color: var(--dark-text-muted) !important;
+}
+
+[data-theme='dark'] .theme-edit-this-page:hover {
+ color: var(--ifm-color-primary) !important;
+}
+
+/* Documentation last updated */
+[data-theme='dark'] .theme-last-updated {
+ color: var(--dark-text-muted) !important;
+}
+
+/* Documentation category cards */
+[data-theme='dark'] .card {
+ background-color: var(--dark-card-bg) !important;
+ border-color: var(--dark-border) !important;
+ color: var(--dark-text-primary) !important;
+ box-shadow: var(--dark-shadow) !important;
+}
+
+[data-theme='dark'] .card:hover {
+ background-color: var(--dark-card-hover-bg) !important;
+ box-shadow: var(--dark-shadow-lg) !important;
+}
+
+[data-theme='dark'] .card__header {
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .card__body {
+ color: var(--dark-text-secondary) !important;
+}
+
+[data-theme='dark'] .card__footer {
+ border-color: var(--dark-border) !important;
+}
+
+/* Documentation hero banner */
+[data-theme='dark'] .hero {
+ background-color: var(--dark-bg-secondary) !important;
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .hero__title {
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .hero__subtitle {
+ color: var(--dark-text-secondary) !important;
+}
+
+/* Documentation alert/callout boxes */
+[data-theme='dark'] .alert {
+ background-color: var(--dark-bg-secondary) !important;
+ border-color: var(--dark-border) !important;
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .alert--primary {
+ background-color: rgba(37, 194, 160, 0.1) !important;
+ border-color: var(--ifm-color-primary) !important;
+}
+
+[data-theme='dark'] .alert--secondary {
+ background-color: var(--dark-bg-tertiary) !important;
+ border-color: var(--dark-border) !important;
+}
+
+[data-theme='dark'] .alert--success {
+ background-color: rgba(34, 197, 94, 0.1) !important;
+ border-color: #22c55e !important;
+}
+
+[data-theme='dark'] .alert--info {
+ background-color: rgba(59, 130, 246, 0.1) !important;
+ border-color: #3b82f6 !important;
+}
+
+[data-theme='dark'] .alert--warning {
+ background-color: rgba(245, 158, 11, 0.1) !important;
+ border-color: #f59e0b !important;
+}
+
+[data-theme='dark'] .alert--danger {
+ background-color: rgba(239, 68, 68, 0.1) !important;
+ border-color: #ef4444 !important;
+}
+
+/* Documentation inline code */
+[data-theme='dark'] code:not([class*="language-"]) {
+ background-color: var(--dark-bg-tertiary) !important;
+ color: var(--ifm-color-primary) !important;
+ border: 1px solid var(--dark-border) !important;
+}
+
+/* Documentation horizontal rules */
+[data-theme='dark'] hr {
+ border-color: var(--dark-border) !important;
+}
+
+/* Documentation images */
+[data-theme='dark'] .markdown img {
+ border-radius: 8px;
+ box-shadow: var(--dark-shadow);
+}
+
+/* Fix for any remaining white backgrounds */
+[data-theme='dark'] .theme-doc-version-banner {
+ background-color: var(--dark-bg-secondary) !important;
+ border-color: var(--dark-border) !important;
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .theme-doc-version-badge {
+ background-color: var(--dark-bg-tertiary) !important;
+ color: var(--dark-text-primary) !important;
+}
+
+/* Ensure all text is readable */
+[data-theme='dark'] * {
+ border-color: var(--dark-border);
+}
+
+[data-theme='dark'] .theme-doc-markdown > div,
+[data-theme='dark'] .theme-doc-markdown > section,
+[data-theme='dark'] .theme-doc-markdown > article {
+ background-color: var(--dark-bg-primary) !important;
+ color: var(--dark-text-primary) !important;
}
html.theme-light .bg-white {
background-color: #ffffff !important;
diff --git a/src/pages/badges/github-badges.module.css b/src/pages/badges/github-badges.module.css
index 6fa00e59..3c139175 100644
--- a/src/pages/badges/github-badges.module.css
+++ b/src/pages/badges/github-badges.module.css
@@ -1,6 +1,4 @@
-body{
- background-color: #fff;
-}
+/* GitHub badges page styling - light theme */
.github-badges-page {
background: #f6f5f5;
border-radius: 18px;
@@ -9,6 +7,19 @@ body{
margin-top: 24px;
}
+/* Dark theme body override - EXCLUDE community page */
+[data-theme='dark'] body:not(:has(.community-page)) {
+ background-color: var(--dark-bg-primary) !important;
+ color: var(--dark-text-primary) !important;
+}
+
+/* Dark theme for main page container */
+[data-theme='dark'] .github-badges-page {
+ background: var(--dark-bg-secondary) !important;
+ color: var(--dark-text-primary) !important;
+ box-shadow: var(--dark-shadow-lg) !important;
+}
+
.badgeGrid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
@@ -33,6 +44,18 @@ body{
transform: translateY(-4px) scale(1.03);
}
+/* Dark theme for badge items */
+[data-theme='dark'] .badgeItem {
+ background: var(--dark-bg-tertiary) !important;
+ color: var(--dark-text-primary) !important;
+ box-shadow: var(--dark-shadow) !important;
+}
+
+[data-theme='dark'] .badgeItem:hover {
+ background: var(--dark-card-hover-bg) !important;
+ box-shadow: var(--dark-shadow-lg) !important;
+}
+
.badgeImg {
width: 64px;
height: 64px;
@@ -136,6 +159,11 @@ body{
text-align: center;
}
+/* Dark theme for headings */
+[data-theme='dark'] .github-badges-page h1 {
+ color: var(--dark-text-primary) !important;
+}
+
.bannerAchievements {
background: linear-gradient(90deg, #e0e7ff 0%, #f0fdfa 100%);
border-radius: 12px;
@@ -155,6 +183,16 @@ body{
text-align: left;
}
+/* Dark theme for banner and section headings */
+[data-theme='dark'] .bannerAchievements {
+ background: var(--dark-bg-tertiary) !important;
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .sectionHeading {
+ color: var(--dark-text-primary) !important;
+}
+
.skinHeading {
color: #22223b;
font-size: 2rem;
@@ -168,6 +206,11 @@ body{
gap: 10px;
}
+/* Dark theme for skin heading */
+[data-theme='dark'] .skinHeading {
+ color: var(--dark-text-primary) !important;
+}
+
.highlightsHeading {
color: #f59e42;
font-size: 2rem;
@@ -337,6 +380,41 @@ table th, table td {
background: #f9fafb;
}
+/* Dark theme for all table types */
+[data-theme='dark'] .skinToneTable,
+[data-theme='dark'] .highlightsTable,
+[data-theme='dark'] .retiredTable,
+[data-theme='dark'] table {
+ background: var(--dark-bg-secondary) !important;
+ border-color: var(--dark-border) !important;
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .skinToneTable th,
+[data-theme='dark'] .highlightsTable th,
+[data-theme='dark'] .retiredTable th,
+[data-theme='dark'] table th {
+ background: var(--dark-bg-tertiary) !important;
+ color: var(--dark-text-primary) !important;
+ border-color: var(--dark-border) !important;
+}
+
+[data-theme='dark'] .skinToneTable td,
+[data-theme='dark'] .highlightsTable td,
+[data-theme='dark'] .retiredTable td,
+[data-theme='dark'] table td {
+ border-color: var(--dark-border) !important;
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .achievementsTable tr:nth-child(even),
+[data-theme='dark'] .skinToneTable tr:nth-child(even),
+[data-theme='dark'] .highlightsTable tr:nth-child(even),
+[data-theme='dark'] .retiredTable tr:nth-child(even),
+[data-theme='dark'] table tr:nth-child(even) {
+ background: var(--dark-bg-tertiary) !important;
+}
+
.badgeImgSmall {
width: 44px;
height: 44px;
@@ -347,6 +425,17 @@ table th, table td {
box-shadow: 0 1.5px 6px rgba(0,0,0,0.04);
}
+/* Dark theme for badge images */
+[data-theme='dark'] .badgeImg {
+ border-color: var(--dark-border) !important;
+ background: var(--dark-bg-primary) !important;
+}
+
+[data-theme='dark'] .badgeImgSmall {
+ border-color: var(--dark-border) !important;
+ background: var(--dark-bg-primary) !important;
+}
+
@media (max-width: 800px) {
.achievementsTable, .skinToneTable, .highlightsTable, .retiredTable {
font-size: 0.95rem;
@@ -409,6 +498,52 @@ table th, table td {
margin: 32px 0;
}
+/* Dark theme for text elements */
+[data-theme='dark'] .github-badges-page h2 {
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .github-badges-page a {
+ color: var(--ifm-color-primary) !important;
+}
+
+[data-theme='dark'] .github-badges-page a:hover {
+ color: var(--ifm-color-primary-light) !important;
+}
+
+[data-theme='dark'] .github-badges-page p,
+[data-theme='dark'] .github-badges-page li {
+ color: var(--dark-text-secondary) !important;
+}
+
+[data-theme='dark'] .github-badges-page hr {
+ border-top-color: var(--dark-border) !important;
+}
+
+/* Additional text elements */
+.subheading {
+ color: #24292f;
+ font-size: 1.5rem;
+ font-weight: 600;
+ margin: 32px 0 16px 0;
+}
+
+.paragraph {
+ color: #4b5563;
+ font-size: 1rem;
+ line-height: 1.6;
+ margin-bottom: 16px;
+}
+
+/* Dark theme for additional text elements */
+[data-theme='dark'] .subheading {
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .paragraph {
+ color: var(--dark-text-secondary) !important;
+}
+
.github-badges-page .section {
margin-bottom: 32px;
}
@@ -457,6 +592,16 @@ table th, table td {
line-height: 1.6;
}
+/* Dark theme for certification section */
+[data-theme='dark'] .certificationHero {
+ background: var(--dark-bg-primary) !important;
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .certificationHero p {
+ color: var(--dark-text-secondary) !important;
+}
+
.certificationCards {
max-width: 1200px;
margin: 0 auto;
@@ -479,6 +624,13 @@ table th, table td {
backdrop-filter: blur(8px);
}
+/* Dark theme for certification cards */
+[data-theme='dark'] .certCard {
+ background: linear-gradient(135deg, var(--dark-bg-secondary), var(--dark-bg-tertiary)) !important;
+ color: var(--dark-text-primary) !important;
+ box-shadow: var(--dark-shadow-lg) !important;
+}
+
.certCard::before {
content: '';
position: absolute;
@@ -523,6 +675,15 @@ table th, table td {
margin-bottom: 2rem;
}
+/* Dark theme for card content */
+[data-theme='dark'] .cardContent h2 {
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .cardContent p {
+ color: var(--dark-text-secondary) !important;
+}
+
.certBadge {
flex: 0 0 200px;
padding: 1rem;
@@ -581,6 +742,15 @@ table th, table td {
color: white;
}
+/* Dark theme for certification links */
+[data-theme='dark'] .certLink {
+ color: var(--ifm-color-primary) !important;
+}
+
+[data-theme='dark'] .certLink:hover {
+ color: var(--ifm-color-primary-light) !important;
+}
+
.certLink::after {
content: "→";
margin-left: 8px;
@@ -722,26 +892,65 @@ table th, table td {
}
/* Dark mode support */
-@media (prefers-color-scheme: dark) {
- .skinToneBadgeCard {
- background: #0d1117;
- }
-
- .badgeHeader h3 {
- color: #c9d1d9;
- }
-
- .variant {
- background: #161b22;
- }
-
- .variant:hover {
- background: #1c2128;
- }
-
- .skinToneLabel {
- color: #8b949e;
- }
+[data-theme='dark'] .skinToneBadgeCard {
+ background: var(--dark-bg-secondary);
+ color: var(--dark-text-primary);
+}
+
+[data-theme='dark'] .badgeHeader h3 {
+ color: var(--dark-text-primary);
+}
+
+[data-theme='dark'] .variant {
+ background: var(--dark-bg-tertiary);
+ color: var(--dark-text-primary);
+}
+
+[data-theme='dark'] .variant:hover {
+ background: var(--dark-card-hover-bg);
+}
+
+[data-theme='dark'] .skinToneLabel {
+ color: var(--dark-text-muted);
+}
+
+[data-theme='dark'] .achievementsTable {
+ background: var(--dark-bg-secondary);
+ color: var(--dark-text-primary);
+}
+
+[data-theme='dark'] .achievementsTable th {
+ background: var(--dark-bg-tertiary);
+ color: var(--dark-text-primary);
+ border-color: var(--dark-border);
+}
+
+[data-theme='dark'] .achievementsTable td {
+ border-color: var(--dark-border) !important;
+ color: var(--dark-text-primary) !important;
+ background: var(--dark-bg-secondary) !important;
+}
+
+[data-theme='dark'] .achievementsTable td:last-child {
+ background: var(--dark-bg-secondary) !important;
+}
+
+[data-theme='dark'] .achievementsTable tr {
+ background: var(--dark-bg-secondary) !important;
+}
+
+[data-theme='dark'] .achievementsTable tr:hover {
+ background: var(--dark-card-hover-bg) !important;
+}
+
+[data-theme='dark'] .title {
+ color: var(--dark-text-primary);
+}
+
+[data-theme='dark'] .bannerAchievements {
+ background: var(--dark-bg-secondary);
+ color: var(--dark-text-primary);
+ border-color: var(--dark-border);
}
/* Footer Styles */
@@ -751,6 +960,8 @@ table th, table td {
margin-top: 60px;
}
+/* Footer - keeping original styling */
+
.footerGrid {
display: grid;
grid-template-columns: 1fr 2fr 1fr;
@@ -935,67 +1146,179 @@ table th, table td {
box-shadow: 0 1px 3px rgba(0,0,0,0.05);
}
+/* Enhanced Level Images Container */
.achievementsTable .levelImages {
display: flex;
flex-wrap: wrap;
- gap: clamp(6px, 1vw, 10px);
+ gap: clamp(8px, 1.2vw, 12px);
justify-content: center;
- margin: 8px 0;
- padding: 8px;
- background: #f8fafc;
- border-radius: 8px;
- border: 1px solid #e5e7eb;
+ margin: 12px 0;
+ padding: 12px;
+ background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
+ border-radius: 16px;
+ border: 2px solid #e2e8f0;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04), inset 0 1px 0 rgba(255, 255, 255, 0.5);
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.achievementsTable .levelImages:hover {
+ transform: translateY(-1px);
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08), inset 0 1px 0 rgba(255, 255, 255, 0.7);
+ border-color: #c7d2fe;
}
.achievementsTable .levelImages img {
- width: clamp(32px, 5vw, 44px);
- height: clamp(32px, 5vw, 44px);
- transition: transform 0.2s ease;
+ width: clamp(36px, 5vw, 48px);
+ height: clamp(36px, 5vw, 48px);
+ border-radius: 12px;
+ border: 2px solid #e5e7eb;
+ background: white;
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.04);
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+ cursor: pointer;
}
.achievementsTable .levelImages img:hover {
- transform: scale(1.15) rotate(5deg);
+ transform: scale(1.2) rotate(8deg);
+ box-shadow: 0 6px 16px rgba(0, 0, 0, 0.15), 0 3px 8px rgba(0, 0, 0, 0.1);
+ border-color: #3b82f6;
+ z-index: 10;
+ position: relative;
}
+/* Enhanced Needed Amount Section */
.achievementsTable .neededAmount {
- font-weight: 500;
- color: #374151;
- background: linear-gradient(to right, #f1f5f9, #e2e8f0);
- padding: 6px 14px;
- border-radius: 12px;
+ font-weight: 600;
+ color: #1e293b;
+ background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);
+ padding: 10px 16px;
+ border-radius: 16px;
font-size: 0.9em;
- margin-top: 6px;
- box-shadow: 0 1px 2px rgba(0,0,0,0.05);
- border: 1px solid #e5e7eb;
+ margin-top: 8px;
+ text-align: center;
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08), 0 2px 4px rgba(0, 0, 0, 0.04);
+ border: 2px solid #e2e8f0;
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+ position: relative;
+ overflow: hidden;
+ letter-spacing: 0.025em;
}
-/* Adjust levels text styling */
+.achievementsTable .neededAmount::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: -100%;
+ width: 100%;
+ height: 100%;
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent);
+ transition: left 0.5s ease;
+}
+
+.achievementsTable .neededAmount:hover {
+ transform: translateY(-2px) scale(1.02);
+ box-shadow: 0 8px 20px rgba(0, 0, 0, 0.12), 0 4px 8px rgba(0, 0, 0, 0.06);
+ border-color: #3b82f6;
+}
+
+.achievementsTable .neededAmount:hover::before {
+ left: 100%;
+}
+
+/* Enhanced Level Text Styling */
.achievementsTable .levelText {
- font-weight: 600;
- color: #1f2937;
- margin-bottom: 4px;
- padding: 6px 12px;
- background: #f1f5f9;
- border-radius: 6px;
- font-size: 0.9em;
- border: 1px solid #e2e8f0;
+ font-weight: 700;
+ color: white;
+ margin-bottom: 8px;
+ padding: 8px 14px;
+ background: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%);
+ border-radius: 12px;
+ font-size: 0.85em;
+ text-align: center;
+ box-shadow: 0 4px 12px rgba(59, 130, 246, 0.3), 0 2px 4px rgba(59, 130, 246, 0.2);
+ text-transform: uppercase;
+ letter-spacing: 0.05em;
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+ border: none;
+}
+
+.achievementsTable .levelText:hover {
+ transform: translateY(-1px);
+ box-shadow: 0 6px 16px rgba(59, 130, 246, 0.4), 0 3px 6px rgba(59, 130, 246, 0.3);
+}
+
+/* Enhanced Badge Levels Container */
+.achievementsTable .badgeLevels {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 12px;
+ padding: 16px;
+ background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
+ border-radius: 20px;
+ border: 2px solid #e2e8f0;
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06), 0 2px 8px rgba(0, 0, 0, 0.04);
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+ position: relative;
+ overflow: hidden;
+ width: 100%;
+ max-width: 280px;
+ margin: 0 auto;
+}
+
+.achievementsTable .badgeLevels::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ height: 3px;
+ background: linear-gradient(90deg, #3b82f6, #8b5cf6, #ec4899);
+ opacity: 0.8;
}
-/* Single badge center alignment */
+.achievementsTable .badgeLevels:hover {
+ transform: translateY(-3px);
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1), 0 4px 12px rgba(0, 0, 0, 0.06);
+ border-color: #3b82f6;
+}
+
+/* Enhanced Single Badge Container */
.achievementsTable .singleBadge {
display: flex;
flex-direction: column;
align-items: center;
- gap: 10px;
- padding: 12px;
- background: white;
- border-radius: 8px;
- box-shadow: 0 1px 3px rgba(0,0,0,0.05);
+ gap: 12px;
+ padding: 16px;
+ background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
+ border-radius: 20px;
+ border: 2px solid #e2e8f0;
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06), 0 2px 8px rgba(0, 0, 0, 0.04);
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+ position: relative;
+ overflow: hidden;
width: 100%;
- max-width: 200px;
+ max-width: 220px;
margin: 0 auto;
}
+.achievementsTable .singleBadge::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ height: 3px;
+ background: linear-gradient(90deg, #10b981, #3b82f6);
+ opacity: 0.8;
+}
+
+.achievementsTable .singleBadge:hover {
+ transform: translateY(-3px);
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1), 0 4px 12px rgba(0, 0, 0, 0.06);
+ border-color: #10b981;
+}
+
.achievementsTable .singleBadge img {
margin: 4px 0;
}
@@ -1051,12 +1374,116 @@ table th, table td {
}
}
-/* Dark mode adjustments */
+/* Enhanced Dark Mode Adjustments */
[data-theme='dark'] .achievementsTable .neededAmount {
- background: var(--ifm-color-emphasis-200);
- color: var(--ifm-color-content);
+ background: linear-gradient(135deg, var(--dark-bg-tertiary) 0%, var(--dark-bg-secondary) 100%) !important;
+ color: var(--dark-text-primary) !important;
+ border-color: var(--dark-border) !important;
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3), 0 2px 4px rgba(0, 0, 0, 0.2) !important;
+}
+
+[data-theme='dark'] .achievementsTable .neededAmount::before {
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent) !important;
+}
+
+[data-theme='dark'] .achievementsTable .neededAmount:hover {
+ border-color: var(--ifm-color-primary) !important;
+ box-shadow: 0 8px 20px rgba(0, 0, 0, 0.4), 0 4px 8px rgba(0, 0, 0, 0.3) !important;
}
[data-theme='dark'] .achievementsTable .levelText {
- color: var(--ifm-color-content);
+ background: linear-gradient(135deg, var(--ifm-color-primary) 0%, var(--ifm-color-primary-dark) 100%) !important;
+ color: white !important;
+ box-shadow: 0 4px 12px rgba(37, 194, 160, 0.3), 0 2px 4px rgba(37, 194, 160, 0.2) !important;
+}
+
+[data-theme='dark'] .achievementsTable .levelText:hover {
+ box-shadow: 0 6px 16px rgba(37, 194, 160, 0.4), 0 3px 6px rgba(37, 194, 160, 0.3) !important;
+}
+
+/* Dark theme for enhanced badge containers */
+[data-theme='dark'] .achievementsTable .badgeLevels {
+ background: linear-gradient(135deg, var(--dark-bg-secondary) 0%, var(--dark-bg-tertiary) 100%) !important;
+ border-color: var(--dark-border) !important;
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3), 0 2px 8px rgba(0, 0, 0, 0.2) !important;
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .achievementsTable .badgeLevels::before {
+ background: linear-gradient(90deg, var(--ifm-color-primary), #8b5cf6, #ec4899) !important;
+}
+
+[data-theme='dark'] .achievementsTable .badgeLevels:hover {
+ border-color: var(--ifm-color-primary) !important;
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4), 0 4px 12px rgba(0, 0, 0, 0.3) !important;
+}
+
+[data-theme='dark'] .achievementsTable .singleBadge {
+ background: linear-gradient(135deg, var(--dark-bg-secondary) 0%, var(--dark-bg-tertiary) 100%) !important;
+ border-color: var(--dark-border) !important;
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3), 0 2px 8px rgba(0, 0, 0, 0.2) !important;
+ color: var(--dark-text-primary) !important;
+}
+
+[data-theme='dark'] .achievementsTable .singleBadge::before {
+ background: linear-gradient(90deg, #10b981, var(--ifm-color-primary)) !important;
+}
+
+[data-theme='dark'] .achievementsTable .singleBadge:hover {
+ border-color: #10b981 !important;
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4), 0 4px 12px rgba(0, 0, 0, 0.3) !important;
+}
+
+/* Dark theme for enhanced level images */
+[data-theme='dark'] .achievementsTable .levelImages {
+ background: linear-gradient(135deg, var(--dark-bg-tertiary) 0%, var(--dark-bg-secondary) 100%) !important;
+ border-color: var(--dark-border) !important;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.05) !important;
+}
+
+[data-theme='dark'] .achievementsTable .levelImages:hover {
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.1) !important;
+ border-color: var(--ifm-color-primary) !important;
+}
+
+[data-theme='dark'] .achievementsTable .levelImages img {
+ border-color: var(--dark-border) !important;
+ background: var(--dark-bg-primary) !important;
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.4), 0 1px 2px rgba(0, 0, 0, 0.3) !important;
+}
+
+[data-theme='dark'] .achievementsTable .levelImages img:hover {
+ box-shadow: 0 6px 16px rgba(0, 0, 0, 0.5), 0 3px 8px rgba(0, 0, 0, 0.4) !important;
+ border-color: var(--ifm-color-primary) !important;
+}
+
+/* Enhanced styling for inline needed text */
+.achievementsTable td b {
+ display: inline-block;
+ background: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%);
+ color: white;
+ padding: 4px 10px;
+ border-radius: 8px;
+ font-size: 0.85em;
+ font-weight: 700;
+ text-transform: uppercase;
+ letter-spacing: 0.05em;
+ box-shadow: 0 2px 6px rgba(59, 130, 246, 0.3);
+ margin-right: 8px;
+ transition: all 0.2s ease;
+}
+
+.achievementsTable td b:hover {
+ transform: translateY(-1px);
+ box-shadow: 0 4px 10px rgba(59, 130, 246, 0.4);
+}
+
+/* Dark theme for inline needed text */
+[data-theme='dark'] .achievementsTable td b {
+ background: linear-gradient(135deg, var(--ifm-color-primary) 0%, var(--ifm-color-primary-dark) 100%) !important;
+ box-shadow: 0 2px 6px rgba(37, 194, 160, 0.3) !important;
+}
+
+[data-theme='dark'] .achievementsTable td b:hover {
+ box-shadow: 0 4px 10px rgba(37, 194, 160, 0.4) !important;
}
diff --git a/src/pages/badges/github-badges.tsx b/src/pages/badges/github-badges.tsx
index e475b13a..454e0c45 100644
--- a/src/pages/badges/github-badges.tsx
+++ b/src/pages/badges/github-badges.tsx
@@ -1,8 +1,35 @@
-import React, { useEffect } from 'react';
+import React, { useEffect, useState } from 'react';
import Head from '@docusaurus/Head';
import { motion, HTMLMotionProps } from 'framer-motion';
import type { ReactElement } from 'react';
import Layout from '@theme/Layout';
+import { useColorMode } from '@docusaurus/theme-common';
+import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';
+
+// Safe hook for color mode that handles SSR
+function useSafeColorMode() {
+ const [mounted, setMounted] = useState(false);
+
+ useEffect(() => {
+ setMounted(true);
+ }, []);
+
+ let colorMode = 'light';
+ let isDark = false;
+
+ if (mounted && ExecutionEnvironment.canUseDOM) {
+ try {
+ const { useColorMode: useColorModeHook } = require('@docusaurus/theme-common');
+ const colorModeResult = useColorModeHook();
+ colorMode = colorModeResult.colorMode;
+ isDark = colorMode === 'dark';
+ } catch (error) {
+ console.warn('Failed to get color mode:', error);
+ }
+ }
+
+ return { colorMode, isDark, mounted };
+}
import styles from './github-badges.module.css';
type MotionDivProps = HTMLMotionProps<"div">;
@@ -10,7 +37,9 @@ type MotionTrProps = HTMLMotionProps<"tr">;
import Link from '@docusaurus/Link';
-const GithubBadges = (): React.ReactElement => {
+const GithubBadgesContent = (): React.ReactElement => {
+ const { colorMode, isDark, mounted } = useSafeColorMode();
+
// Scroll to top button logic
useEffect(() => {
const scrollToTopBtn = document.getElementById("scrollToTop");
@@ -43,7 +72,9 @@ const GithubBadges = (): React.ReactElement => {
title="GitHub Achievements - RecodeHive"
description="Explore GitHub achievements and badges"
>
-
+
{/* Hero section */}
GitHub Achievements - RecodeHive
@@ -764,4 +795,8 @@ const handleScrollToTop = () => {
window.scrollTo({ top: 0, behavior: "smooth" });
};
+const GithubBadges = (): React.ReactElement => {
+ return
;
+};
+
export default GithubBadges;
diff --git a/src/pages/blogs/blogs.css b/src/pages/blogs/blogs.css
index 2b2f860f..67feb600 100644
--- a/src/pages/blogs/blogs.css
+++ b/src/pages/blogs/blogs.css
@@ -39,17 +39,17 @@
--blog-transition-slow: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
}
-/* Dark Mode Variables */
+/* Dark Mode Variables - Using standardized colors */
[data-theme='dark'] {
- --blog-text-primary: #f7fafc;
- --blog-text-secondary: #e2e8f0;
- --blog-text-muted: #a0aec0;
- --blog-bg-primary: #1a202c;
- --blog-bg-secondary: #2d3748;
- --blog-bg-card: #2d3748;
- --blog-border: #4a5568;
- --blog-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.3), 0 2px 4px -1px rgba(0, 0, 0, 0.2);
- --blog-shadow-lg: 0 20px 25px -5px rgba(0, 0, 0, 0.4), 0 10px 10px -5px rgba(0, 0, 0, 0.2);
+ --blog-text-primary: var(--dark-text-primary);
+ --blog-text-secondary: var(--dark-text-secondary);
+ --blog-text-muted: var(--dark-text-muted);
+ --blog-bg-primary: var(--dark-bg-primary);
+ --blog-bg-secondary: var(--dark-bg-secondary);
+ --blog-bg-card: var(--dark-card-bg);
+ --blog-border: var(--dark-border);
+ --blog-shadow: var(--dark-shadow);
+ --blog-shadow-lg: var(--dark-shadow-lg);
--blog-shadow-xl: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
}
diff --git a/src/pages/broadcasts/index.css b/src/pages/broadcasts/index.css
index ed9efaf3..a320cbaa 100644
--- a/src/pages/broadcasts/index.css
+++ b/src/pages/broadcasts/index.css
@@ -11,11 +11,19 @@
text-align: center;
}
+[data-theme='dark'] .podcast-subtitle {
+ color: var(--dark-text-secondary);
+}
+
h1 {
text-align: center;
margin-bottom: 1rem;
}
+[data-theme='dark'] h1 {
+ color: var(--dark-text-primary);
+}
+
.podcast-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
@@ -32,10 +40,19 @@ h1 {
cursor: pointer;
}
+[data-theme='dark'] .podcast-card {
+ background: var(--dark-card-bg);
+ box-shadow: var(--dark-shadow);
+}
+
.podcast-card:hover {
transform: translateY(-4px);
}
+[data-theme='dark'] .podcast-card:hover {
+ box-shadow: var(--dark-shadow-lg);
+}
+
.podcast-content {
height: 100%;
}
@@ -52,6 +69,10 @@ h1 {
color: #333;
}
+[data-theme='dark'] .podcast-info h3 {
+ color: var(--dark-text-primary);
+}
+
.podcast-description {
font-size: 0.9rem;
color: #666;
@@ -66,6 +87,10 @@ h1 {
text-overflow: ellipsis;
}
+[data-theme='dark'] .podcast-description {
+ color: var(--dark-text-secondary);
+}
+
.podcast-publisher {
font-size: 0.8rem;
color: #888;
@@ -73,6 +98,10 @@ h1 {
font-style: italic;
}
+[data-theme='dark'] .podcast-publisher {
+ color: var(--dark-text-muted);
+}
+
.podcast-embed {
height: 100%;
border-radius: 0 0 12px 12px;
@@ -105,16 +134,31 @@ h1 {
transition: all 0.2s ease;
}
+[data-theme='dark'] .pagination-button {
+ background: var(--dark-bg-secondary);
+ border-color: var(--dark-border);
+ color: var(--dark-text-primary);
+}
+
.pagination-button:hover {
background: #f0f0f0;
}
+[data-theme='dark'] .pagination-button:hover {
+ background: var(--dark-card-hover-bg);
+}
+
.pagination-button.active {
background: #0066cc;
color: white;
border-color: #0066cc;
}
+[data-theme='dark'] .pagination-button.active {
+ background: var(--ifm-color-primary);
+ border-color: var(--ifm-color-primary);
+}
+
@media (max-width: 968px) {
.podcast-grid {
grid-template-columns: repeat(2, 1fr);
@@ -200,6 +244,10 @@ h1 {
text-align: center;
}
+[data-theme='dark'] .video-subtitle {
+ color: var(--dark-text-secondary);
+}
+
.video-section {
margin-bottom: 3rem;
}
@@ -228,10 +276,19 @@ h1 {
height: 100%;
}
+[data-theme='dark'] .video-card {
+ background: var(--dark-card-bg);
+ box-shadow: var(--dark-shadow);
+}
+
.video-card:hover {
transform: translateY(-4px);
}
+[data-theme='dark'] .video-card:hover {
+ box-shadow: var(--dark-shadow-lg);
+}
+
.video-content {
height: 100%;
display: flex;
diff --git a/src/pages/broadcasts/video.css b/src/pages/broadcasts/video.css
index 32ebefef..78209cb8 100644
--- a/src/pages/broadcasts/video.css
+++ b/src/pages/broadcasts/video.css
@@ -15,6 +15,10 @@
font-weight: 300;
}
+[data-theme='dark'] .video-subtitle {
+ color: var(--dark-text-secondary);
+}
+
.video-section {
margin-bottom: 4rem;
position: relative;
@@ -61,11 +65,21 @@
isolation: isolate;
}
+[data-theme='dark'] .video-card {
+ background: var(--dark-card-bg);
+ border-color: var(--dark-border);
+ box-shadow: var(--dark-shadow);
+}
+
.video-card:hover {
transform: translateY(-4px);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
}
+[data-theme='dark'] .video-card:hover {
+ box-shadow: var(--dark-shadow-lg);
+}
+
.video-content {
height: 100%;
display: flex;
@@ -80,6 +94,11 @@
border: 1px solid #e9ecef;
}
+[data-theme='dark'] .video-info {
+ background: var(--dark-bg-secondary);
+ border-color: var(--dark-border);
+}
+
.video-title {
margin: 0 0 0.75rem 0;
font-size: 1.15rem;
@@ -94,6 +113,10 @@
letter-spacing: -0.01em;
}
+[data-theme='dark'] .video-title {
+ color: var(--dark-text-primary);
+}
+
.video-type {
font-size: 0.9rem;
color: #6c757d; /* Neutral gray color */
@@ -103,6 +126,10 @@
margin-top: 0.5rem;
}
+[data-theme='dark'] .video-type {
+ color: var(--dark-text-secondary);
+}
+
/* Force the video type tags to use neutral colors */
.video-card .video-type span,
.video-card .video-type {
@@ -110,6 +137,12 @@
color: #495057 !important;
}
+[data-theme='dark'] .video-card .video-type span,
+[data-theme='dark'] .video-card .video-type {
+ background: var(--dark-bg-tertiary) !important;
+ color: var(--dark-text-secondary) !important;
+}
+
.video-type span {
display: inline-flex;
align-items: center;
@@ -121,12 +154,23 @@
border: 1px solid #e9ecef !important; /* Force subtle border */
}
+[data-theme='dark'] .video-type span {
+ background: var(--dark-bg-tertiary) !important;
+ color: var(--dark-text-secondary) !important;
+ border-color: var(--dark-border) !important;
+}
+
/* Ensure the emoji and text inside the span are also not green */
.video-type span *,
.video-type span {
color: #495057 !important;
}
+[data-theme='dark'] .video-type span *,
+[data-theme='dark'] .video-type span {
+ color: var(--dark-text-secondary) !important;
+}
+
.video-thumbnail {
position: relative;
width: 600px; /* Set desired width */
@@ -239,11 +283,22 @@
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
}
+[data-theme='dark'] .tab-button {
+ background: var(--dark-bg-secondary);
+ color: var(--dark-text-primary);
+ border-color: var(--dark-border);
+ box-shadow: var(--dark-shadow);
+}
+
.tab-button:hover {
background: var(--ifm-color-primary-lighter);
color: var(--ifm-color-white);
}
+[data-theme='dark'] .tab-button:hover {
+ background: var(--dark-card-hover-bg);
+}
+
.tab-button.active {
background: var(--ifm-color-primary);
color: var(--ifm-color-white);
diff --git a/src/pages/careers/index.tsx b/src/pages/careers/index.tsx
index 3cd4e624..75e255d6 100644
--- a/src/pages/careers/index.tsx
+++ b/src/pages/careers/index.tsx
@@ -3,6 +3,33 @@ import Layout from "@theme/Layout";
import Head from "@docusaurus/Head";
import { motion } from "framer-motion";
import Link from "@docusaurus/Link";
+import { useColorMode } from '@docusaurus/theme-common';
+import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';
+
+// Safe hook for color mode that handles SSR
+function useSafeColorMode() {
+ const [mounted, setMounted] = useState(false);
+
+ useEffect(() => {
+ setMounted(true);
+ }, []);
+
+ let colorMode = 'light';
+ let isDark = false;
+
+ if (mounted && ExecutionEnvironment.canUseDOM) {
+ try {
+ const { useColorMode: useColorModeHook } = require('@docusaurus/theme-common');
+ const colorModeResult = useColorModeHook();
+ colorMode = colorModeResult.colorMode;
+ isDark = colorMode === 'dark';
+ } catch (error) {
+ console.warn('Failed to get color mode:', error);
+ }
+ }
+
+ return { colorMode, isDark, mounted };
+}
// Animation variants for consistent animations
const fadeIn = {
@@ -123,7 +150,8 @@ const testimonials = [
}
];
-export default function CareersPage() {
+function CareersContent() {
+ const { colorMode, isDark, mounted } = useSafeColorMode();
const [activeTestimonial, setActiveTestimonial] = useState(0);
useEffect(() => {
@@ -146,7 +174,11 @@ export default function CareersPage() {
/>
-
+
{/* Hero Section */}
-
+
Our Culture & Values
-
+
We're building more than just a company—we're creating a community of learners, innovators, and leaders.
@@ -211,16 +247,22 @@ export default function CareersPage() {
{cultureValues.map((value, index) => (
🚀
-
+
{value.title}
-
+
{value.description}
@@ -429,4 +471,8 @@ export default function CareersPage() {
);
+}
+
+export default function CareersPage() {
+ return ;
}
\ No newline at end of file
diff --git a/src/pages/community/community.css b/src/pages/community/community.css
index fe3241d6..d722d320 100644
--- a/src/pages/community/community.css
+++ b/src/pages/community/community.css
@@ -6,8 +6,9 @@
transition: background-color 0.3s ease;
}
+/* Community page should maintain its own background regardless of theme */
[data-theme='dark'] .community-page {
- background: #121212;
+ background: transparent;
}
/* CSS Custom Properties for better browser support */
@@ -21,11 +22,11 @@
}
[data-theme='dark'] {
- --text-primary: #ffffff;
- --text-secondary: #edf2f7;
- --bg-primary: #1a1a1a;
- --bg-secondary: #121212;
- --border-color: #2d2d2d;
+ --text-primary: var(--dark-text-primary);
+ --text-secondary: var(--dark-text-secondary);
+ --bg-primary: var(--dark-bg-secondary);
+ --bg-secondary: var(--dark-bg-primary);
+ --border-color: var(--dark-border);
}
/* Hero Section */
diff --git a/src/pages/courses/courses.css b/src/pages/courses/courses.css
new file mode 100644
index 00000000..49987b84
--- /dev/null
+++ b/src/pages/courses/courses.css
@@ -0,0 +1,1224 @@
+/* Courses Page Modern Responsive Styles */
+
+/* CSS Custom Properties for Consistent Design */
+:root {
+ /* Spacing System (8px grid) */
+ --courses-spacing-xs: 0.5rem; /* 8px */
+ --courses-spacing-sm: 1rem; /* 16px */
+ --courses-spacing-md: 1.5rem; /* 24px */
+ --courses-spacing-lg: 2rem; /* 32px */
+ --courses-spacing-xl: 3rem; /* 48px */
+ --courses-spacing-2xl: 4rem; /* 64px */
+ --courses-spacing-3xl: 6rem; /* 96px */
+
+ /* Border Radius System */
+ --courses-radius-sm: 0.5rem; /* 8px */
+ --courses-radius-md: 0.75rem; /* 12px */
+ --courses-radius-lg: 1rem; /* 16px */
+ --courses-radius-xl: 1.5rem; /* 24px */
+ --courses-radius-2xl: 2rem; /* 32px */
+
+ /* Typography Scale */
+ --courses-text-xs: 0.75rem; /* 12px */
+ --courses-text-sm: 0.875rem; /* 14px */
+ --courses-text-base: 1rem; /* 16px */
+ --courses-text-lg: 1.125rem; /* 18px */
+ --courses-text-xl: 1.25rem; /* 20px */
+ --courses-text-2xl: 1.5rem; /* 24px */
+ --courses-text-3xl: 1.875rem; /* 30px */
+ --courses-text-4xl: 2.25rem; /* 36px */
+ --courses-text-5xl: 3rem; /* 48px */
+ --courses-text-6xl: 3.75rem; /* 60px */
+
+ /* Transitions */
+ --courses-transition-fast: all 0.15s cubic-bezier(0.4, 0, 0.2, 1);
+ --courses-transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+ --courses-transition-slow: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
+
+ /* Light Theme Colors */
+ --courses-bg-primary: #ffffff;
+ --courses-bg-secondary: #f8fafc;
+ --courses-bg-tertiary: #f1f5f9;
+ --courses-text-primary: #0f172a;
+ --courses-text-secondary: #475569;
+ --courses-text-muted: #64748b;
+ --courses-border: #e2e8f0;
+ --courses-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);
+ --courses-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
+ --courses-shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
+}
+
+/* Dark Theme Colors */
+[data-theme='dark'] {
+ --courses-bg-primary: var(--dark-bg-primary);
+ --courses-bg-secondary: var(--dark-bg-secondary);
+ --courses-bg-tertiary: var(--dark-bg-tertiary);
+ --courses-text-primary: var(--dark-text-primary);
+ --courses-text-secondary: var(--dark-text-secondary);
+ --courses-text-muted: var(--dark-text-muted);
+ --courses-border: var(--dark-border);
+ --courses-shadow: var(--dark-shadow);
+ --courses-shadow-lg: var(--dark-shadow-lg);
+ --courses-shadow-xl: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
+}
+
+/* Main page container */
+.courses-page {
+ background-color: var(--courses-bg-primary);
+ color: var(--courses-text-primary);
+ transition: var(--courses-transition-slow);
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
+ line-height: 1.6;
+}
+
+/* Section Layouts */
+.courses-hero {
+ background: linear-gradient(135deg, var(--courses-bg-primary) 0%, var(--courses-bg-secondary) 100%);
+ border-color: var(--courses-border);
+ position: relative;
+ overflow: hidden;
+}
+
+.courses-hero::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: radial-gradient(circle at 50% 50%, rgba(59, 130, 246, 0.1) 0%, transparent 70%);
+ pointer-events: none;
+}
+
+.courses-section {
+ background-color: var(--courses-bg-primary);
+ color: var(--courses-text-primary);
+ border-color: var(--courses-border);
+ transition: var(--courses-transition-slow);
+}
+
+.courses-stats-section {
+ background-color: var(--courses-bg-secondary);
+ border-color: var(--courses-border);
+ position: relative;
+}
+
+.courses-stats-section::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: linear-gradient(45deg, rgba(99, 102, 241, 0.05) 0%, rgba(59, 130, 246, 0.05) 100%);
+ pointer-events: none;
+}
+
+.courses-faq-section {
+ background-color: var(--courses-bg-secondary);
+ border-color: var(--courses-border);
+}
+
+/* Container and Layout Utilities */
+.courses-container {
+ max-width: 1200px;
+ margin: 0 auto;
+ padding: 0 var(--courses-spacing-md);
+}
+
+.courses-container-wide {
+ max-width: 1400px;
+ margin: 0 auto;
+ padding: 0 var(--courses-spacing-md);
+}
+
+.courses-grid {
+ display: grid;
+ gap: var(--courses-spacing-lg);
+}
+
+.courses-grid-2 {
+ grid-template-columns: repeat(2, 1fr);
+}
+
+.courses-grid-3 {
+ grid-template-columns: repeat(3, 1fr);
+}
+
+.courses-grid-4 {
+ grid-template-columns: repeat(4, 1fr);
+}
+
+.courses-flex {
+ display: flex;
+ gap: var(--courses-spacing-md);
+}
+
+.courses-flex-center {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.courses-flex-between {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+}
+
+/* Card Components */
+.courses-card {
+ background-color: var(--courses-bg-primary);
+ border: 1px solid var(--courses-border);
+ border-radius: var(--courses-radius-xl);
+ padding: var(--courses-spacing-lg);
+ color: var(--courses-text-primary);
+ box-shadow: var(--courses-shadow);
+ transition: var(--courses-transition);
+ position: relative;
+ overflow: hidden;
+}
+
+.courses-card::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: linear-gradient(135deg, rgba(59, 130, 246, 0.02) 0%, rgba(99, 102, 241, 0.02) 100%);
+ opacity: 0;
+ transition: var(--courses-transition);
+ pointer-events: none;
+}
+
+.courses-card:hover {
+ transform: translateY(-4px);
+ box-shadow: var(--courses-shadow-xl);
+ border-color: rgba(59, 130, 246, 0.3);
+}
+
+.courses-card:hover::before {
+ opacity: 1;
+}
+
+.courses-stat-card {
+ background: linear-gradient(135deg, var(--courses-bg-primary) 0%, var(--courses-bg-secondary) 100%);
+ border: 1px solid var(--courses-border);
+ border-radius: var(--courses-radius-xl);
+ padding: var(--courses-spacing-xl);
+ color: var(--courses-text-primary);
+ box-shadow: var(--courses-shadow-lg);
+ transition: var(--courses-transition);
+ position: relative;
+ overflow: hidden;
+}
+
+.courses-stat-card::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: linear-gradient(135deg, rgba(59, 130, 246, 0.05) 0%, rgba(99, 102, 241, 0.05) 100%);
+ opacity: 0;
+ transition: var(--courses-transition);
+ pointer-events: none;
+}
+
+.courses-stat-card:hover {
+ transform: translateY(-8px) scale(1.02);
+ box-shadow: var(--courses-shadow-xl);
+ border-color: rgba(59, 130, 246, 0.4);
+}
+
+.courses-stat-card:hover::before {
+ opacity: 1;
+}
+
+/* Course Timeline Cards */
+.courses-timeline-card {
+ background: linear-gradient(135deg, var(--courses-bg-primary) 0%, var(--courses-bg-secondary) 100%);
+ border: 1px solid var(--courses-border);
+ border-radius: var(--courses-radius-xl);
+ padding: var(--courses-spacing-lg);
+ transition: var(--courses-transition);
+ position: relative;
+ overflow: hidden;
+ backdrop-filter: blur(10px);
+}
+
+.courses-timeline-card::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: linear-gradient(135deg, rgba(59, 130, 246, 0.03) 0%, rgba(99, 102, 241, 0.03) 100%);
+ opacity: 0;
+ transition: var(--courses-transition);
+ pointer-events: none;
+}
+
+.courses-timeline-card:hover {
+ transform: translateY(-6px);
+ box-shadow: var(--courses-shadow-xl);
+ border-color: rgba(59, 130, 246, 0.4);
+}
+
+.courses-timeline-card:hover::before {
+ opacity: 1;
+}
+
+/* Button Components */
+.courses-button {
+ background-color: var(--courses-bg-tertiary);
+ color: var(--courses-text-primary);
+ border: 1px solid var(--courses-border);
+ border-radius: var(--courses-radius-lg);
+ padding: var(--courses-spacing-sm) var(--courses-spacing-lg);
+ font-weight: 600;
+ font-size: var(--courses-text-base);
+ transition: var(--courses-transition);
+ cursor: pointer;
+ position: relative;
+ overflow: hidden;
+ backdrop-filter: blur(10px);
+}
+
+.courses-button::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: -100%;
+ width: 100%;
+ height: 100%;
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent);
+ transition: var(--courses-transition);
+}
+
+.courses-button:hover {
+ transform: translateY(-2px);
+ box-shadow: var(--courses-shadow-lg);
+ border-color: rgba(59, 130, 246, 0.5);
+}
+
+.courses-button:hover::before {
+ left: 100%;
+}
+
+.courses-button-primary {
+ background: linear-gradient(135deg, #3b82f6 0%, #6366f1 100%);
+ color: white;
+ border: none;
+ box-shadow: var(--courses-shadow-lg);
+}
+
+.courses-button-primary:hover {
+ background: linear-gradient(135deg, #2563eb 0%, #4f46e5 100%);
+ transform: translateY(-3px);
+ box-shadow: var(--courses-shadow-xl);
+}
+
+.courses-button-secondary {
+ background: linear-gradient(135deg, var(--courses-bg-primary) 0%, var(--courses-bg-secondary) 100%);
+ color: var(--courses-text-primary);
+ border: 1px solid var(--courses-border);
+ backdrop-filter: blur(10px);
+}
+
+.courses-button-secondary:hover {
+ border-color: rgba(59, 130, 246, 0.5);
+ background: linear-gradient(135deg, var(--courses-bg-secondary) 0%, var(--courses-bg-tertiary) 100%);
+}
+
+.courses-button-ghost {
+ background: transparent;
+ color: var(--courses-text-secondary);
+ border: 1px solid var(--courses-border);
+}
+
+.courses-button-ghost:hover {
+ background-color: var(--courses-bg-secondary);
+ color: var(--courses-text-primary);
+ border-color: rgba(59, 130, 246, 0.3);
+}
+
+/* Icon Buttons */
+.courses-icon-button {
+ width: 48px;
+ height: 48px;
+ border-radius: 50%;
+ background: linear-gradient(135deg, var(--courses-bg-primary) 0%, var(--courses-bg-secondary) 100%);
+ border: 1px solid var(--courses-border);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ transition: var(--courses-transition);
+ cursor: pointer;
+ backdrop-filter: blur(10px);
+}
+
+.courses-icon-button:hover {
+ transform: scale(1.1);
+ box-shadow: var(--courses-shadow-lg);
+ border-color: rgba(59, 130, 246, 0.5);
+}
+
+/* Modal Components */
+.courses-modal {
+ background: linear-gradient(135deg, var(--courses-bg-primary) 0%, var(--courses-bg-secondary) 100%);
+ color: var(--courses-text-primary);
+ border: 1px solid var(--courses-border);
+ border-radius: var(--courses-radius-xl);
+ box-shadow: var(--courses-shadow-xl);
+ backdrop-filter: blur(20px);
+ position: relative;
+ overflow: hidden;
+}
+
+.courses-modal::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: linear-gradient(135deg, rgba(59, 130, 246, 0.05) 0%, rgba(99, 102, 241, 0.05) 100%);
+ pointer-events: none;
+}
+
+/* Text Styles */
+.courses-text-primary {
+ color: var(--courses-text-primary);
+}
+
+.courses-text-secondary {
+ color: var(--courses-text-secondary);
+}
+
+.courses-text-muted {
+ color: var(--courses-text-muted);
+}
+
+.courses-text-gradient {
+ background: linear-gradient(135deg, #3b82f6 0%, #6366f1 50%, #8b5cf6 100%);
+ -webkit-background-clip: text;
+ background-clip: text;
+ -webkit-text-fill-color: transparent;
+ font-weight: 700;
+}
+
+.courses-heading-1 {
+ font-size: var(--courses-text-6xl);
+ font-weight: 800;
+ line-height: 1.1;
+ letter-spacing: -0.025em;
+ text-align: center;
+}
+
+.courses-heading-2 {
+ font-size: var(--courses-text-5xl);
+ font-weight: 700;
+ line-height: 1.2;
+ letter-spacing: -0.025em;
+}
+
+.courses-heading-3 {
+ font-size: var(--courses-text-4xl);
+ font-weight: 600;
+ line-height: 1.3;
+}
+
+.courses-heading-4 {
+ font-size: var(--courses-text-3xl);
+ font-weight: 600;
+ line-height: 1.4;
+}
+
+.courses-body-large {
+ font-size: var(--courses-text-xl);
+ line-height: 1.6;
+ text-align: center;
+}
+
+.courses-body {
+ font-size: var(--courses-text-base);
+ line-height: 1.6;
+}
+
+.courses-body-small {
+ font-size: var(--courses-text-sm);
+ line-height: 1.5;
+}
+
+/* Topic Tags */
+.courses-topic-tag {
+ background: linear-gradient(135deg, var(--courses-bg-primary) 0%, var(--courses-bg-secondary) 100%);
+ color: var(--courses-text-primary);
+ border: 1px solid var(--courses-border);
+ border-radius: var(--courses-radius-lg);
+ padding: var(--courses-spacing-xs) var(--courses-spacing-md);
+ font-size: var(--courses-text-sm);
+ font-weight: 500;
+ transition: var(--courses-transition);
+ cursor: pointer;
+ position: relative;
+ overflow: hidden;
+ backdrop-filter: blur(10px);
+}
+
+.courses-topic-tag::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: linear-gradient(135deg, rgba(59, 130, 246, 0.1) 0%, rgba(99, 102, 241, 0.1) 100%);
+ opacity: 0;
+ transition: var(--courses-transition);
+ pointer-events: none;
+}
+
+.courses-topic-tag:hover {
+ transform: translateY(-2px);
+ box-shadow: var(--courses-shadow-lg);
+ border-color: rgba(59, 130, 246, 0.5);
+ color: #3b82f6;
+}
+
+.courses-topic-tag:hover::before {
+ opacity: 1;
+}
+
+/* Special Topic Tag Variants */
+.courses-topic-tag-featured {
+ background: linear-gradient(135deg, #3b82f6 0%, #6366f1 100%);
+ color: white;
+ border: none;
+ box-shadow: var(--courses-shadow);
+}
+
+.courses-topic-tag-featured:hover {
+ background: linear-gradient(135deg, #2563eb 0%, #4f46e5 100%);
+ transform: translateY(-3px);
+ box-shadow: var(--courses-shadow-lg);
+}
+
+.courses-topic-tag-new {
+ background: linear-gradient(135deg, #10b981 0%, #059669 100%);
+ color: white;
+ border: none;
+ position: relative;
+}
+
+.courses-topic-tag-new::after {
+ content: 'NEW';
+ position: absolute;
+ top: -8px;
+ right: -8px;
+ background: #ef4444;
+ color: white;
+ font-size: 10px;
+ padding: 2px 6px;
+ border-radius: 8px;
+ font-weight: 700;
+}
+
+/* FAQ Components */
+.courses-faq-item {
+ background: linear-gradient(135deg, var(--courses-bg-primary) 0%, var(--courses-bg-secondary) 100%);
+ border: 1px solid var(--courses-border);
+ border-radius: var(--courses-radius-xl);
+ overflow: hidden;
+ transition: var(--courses-transition);
+ backdrop-filter: blur(10px);
+}
+
+.courses-faq-item:hover {
+ box-shadow: var(--courses-shadow-lg);
+ border-color: rgba(59, 130, 246, 0.3);
+}
+
+.courses-faq-button {
+ background: transparent;
+ color: var(--courses-text-primary);
+ border: none;
+ width: 100%;
+ text-align: left;
+ padding: var(--courses-spacing-lg);
+ font-weight: 600;
+ font-size: var(--courses-text-lg);
+ transition: var(--courses-transition);
+ cursor: pointer;
+}
+
+.courses-faq-button:hover {
+ background: linear-gradient(135deg, rgba(59, 130, 246, 0.05) 0%, rgba(99, 102, 241, 0.05) 100%);
+}
+
+.courses-faq-answer {
+ background: linear-gradient(135deg, var(--courses-bg-secondary) 0%, var(--courses-bg-tertiary) 100%);
+ color: var(--courses-text-secondary);
+ padding: var(--courses-spacing-lg);
+ border-top: 1px solid var(--courses-border);
+}
+
+/* Project Cards */
+.courses-project-card {
+ background: linear-gradient(135deg, var(--courses-bg-primary) 0%, var(--courses-bg-secondary) 100%);
+ border: 1px solid var(--courses-border);
+ border-radius: var(--courses-radius-xl);
+ color: var(--courses-text-primary);
+ transition: var(--courses-transition);
+ overflow: hidden;
+ position: relative;
+ backdrop-filter: blur(10px);
+}
+
+.courses-project-card::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: linear-gradient(135deg, rgba(59, 130, 246, 0.03) 0%, rgba(99, 102, 241, 0.03) 100%);
+ opacity: 0;
+ transition: var(--courses-transition);
+ pointer-events: none;
+}
+
+.courses-project-card:hover {
+ transform: translateY(-6px);
+ box-shadow: var(--courses-shadow-xl);
+ border-color: rgba(59, 130, 246, 0.4);
+}
+
+.courses-project-card:hover::before {
+ opacity: 1;
+}
+
+/* Navigation Buttons */
+.courses-nav-button {
+ background: linear-gradient(135deg, var(--courses-bg-primary) 0%, var(--courses-bg-secondary) 100%);
+ color: var(--courses-text-primary);
+ border: 1px solid var(--courses-border);
+ width: 48px;
+ height: 48px;
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ transition: var(--courses-transition);
+ cursor: pointer;
+ backdrop-filter: blur(10px);
+ font-weight: 600;
+ font-size: var(--courses-text-lg);
+}
+
+.courses-nav-button:hover {
+ background: linear-gradient(135deg, #3b82f6 0%, #6366f1 100%);
+ color: white;
+ transform: scale(1.1);
+ box-shadow: var(--courses-shadow-lg);
+ border-color: transparent;
+}
+
+.courses-nav-button:active {
+ transform: scale(0.95);
+}
+
+/* Carousel Indicators */
+.courses-carousel-indicators {
+ display: flex;
+ justify-content: center;
+ gap: var(--courses-spacing-xs);
+ margin-top: var(--courses-spacing-md);
+}
+
+.courses-carousel-indicator {
+ width: 12px;
+ height: 12px;
+ border-radius: 50%;
+ background-color: var(--courses-border);
+ transition: var(--courses-transition);
+ cursor: pointer;
+}
+
+.courses-carousel-indicator.active {
+ background: linear-gradient(135deg, #3b82f6 0%, #6366f1 100%);
+ transform: scale(1.2);
+ box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.2);
+}
+
+.courses-carousel-indicator:hover {
+ background-color: var(--courses-text-muted);
+ transform: scale(1.1);
+}
+
+/* Legacy Theme Overrides - Simplified */
+.courses-gradient-text {
+ background: linear-gradient(135deg, var(--courses-text-primary) 0%, #3b82f6 50%, #6366f1 100%);
+ -webkit-background-clip: text;
+ background-clip: text;
+ -webkit-text-fill-color: transparent;
+}
+
+.courses-bg-overlay {
+ background: radial-gradient(circle, rgba(59, 130, 246, 0.1), transparent 70%);
+}
+
+/* Utility Classes */
+.courses-hide-scrollbar::-webkit-scrollbar {
+ display: none;
+}
+
+.courses-hide-scrollbar {
+ -ms-overflow-style: none;
+ scrollbar-width: none;
+}
+
+.courses-backdrop-blur {
+ backdrop-filter: blur(10px);
+ -webkit-backdrop-filter: blur(10px);
+}
+
+.courses-glass {
+ background: rgba(255, 255, 255, 0.1);
+ backdrop-filter: blur(10px);
+ -webkit-backdrop-filter: blur(10px);
+ border: 1px solid rgba(255, 255, 255, 0.2);
+}
+
+[data-theme='dark'] .courses-glass {
+ background: rgba(0, 0, 0, 0.2);
+ border: 1px solid rgba(255, 255, 255, 0.1);
+}
+
+/* Animation Utilities */
+.courses-fade-in {
+ animation: coursesFadeIn 0.6s ease-out forwards;
+}
+
+.courses-slide-up {
+ animation: coursesSlideUp 0.6s ease-out forwards;
+}
+
+.courses-scale-in {
+ animation: coursesScaleIn 0.4s ease-out forwards;
+}
+
+@keyframes coursesFadeIn {
+ from {
+ opacity: 0;
+ transform: translateY(20px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+@keyframes coursesSlideUp {
+ from {
+ opacity: 0;
+ transform: translateY(40px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+@keyframes coursesScaleIn {
+ from {
+ opacity: 0;
+ transform: scale(0.9);
+ }
+ to {
+ opacity: 1;
+ transform: scale(1);
+ }
+}
+
+/* Floating Animation */
+.courses-float {
+ animation: coursesFloat 6s ease-in-out infinite;
+}
+
+@keyframes coursesFloat {
+ 0%, 100% {
+ transform: translateY(0px);
+ }
+ 50% {
+ transform: translateY(-10px);
+ }
+}
+
+/* Pulse Animation */
+.courses-pulse {
+ animation: coursesPulse 2s infinite;
+}
+
+@keyframes coursesPulse {
+ 0% {
+ transform: scale(1);
+ }
+ 50% {
+ transform: scale(1.05);
+ }
+ 100% {
+ transform: scale(1);
+ }
+}
+
+/* Gradient Animation */
+.courses-gradient-animate {
+ background-size: 200% 200%;
+ animation: coursesGradient 4s ease infinite;
+}
+
+@keyframes coursesGradient {
+ 0% {
+ background-position: 0% 50%;
+ }
+ 50% {
+ background-position: 100% 50%;
+ }
+ 100% {
+ background-position: 0% 50%;
+ }
+}
+
+/* Responsive Design System */
+
+/* Extra Large Desktop (1400px+) */
+@media (min-width: 1400px) {
+ .courses-container {
+ max-width: 1320px;
+ }
+
+ .courses-container-wide {
+ max-width: 1600px;
+ }
+
+ .courses-heading-1 {
+ font-size: 4.5rem;
+ }
+
+ .courses-heading-2 {
+ font-size: 3.5rem;
+ }
+
+ .courses-grid-4 {
+ grid-template-columns: repeat(4, 1fr);
+ }
+}
+
+/* Large Desktop (1200px - 1399px) */
+@media (max-width: 1399px) and (min-width: 1200px) {
+ .courses-container {
+ max-width: 1140px;
+ }
+
+ .courses-heading-1 {
+ font-size: 4rem;
+ }
+
+ .courses-heading-2 {
+ font-size: 3rem;
+ }
+
+ .courses-grid-4 {
+ grid-template-columns: repeat(3, 1fr);
+ }
+
+ .courses-spacing-3xl {
+ --courses-spacing-3xl: 5rem;
+ }
+}
+
+/* Desktop (992px - 1199px) */
+@media (max-width: 1199px) and (min-width: 992px) {
+ .courses-container {
+ max-width: 960px;
+ }
+
+ .courses-heading-1 {
+ font-size: 3.5rem;
+ }
+
+ .courses-heading-2 {
+ font-size: 2.5rem;
+ }
+
+ .courses-grid-4,
+ .courses-grid-3 {
+ grid-template-columns: repeat(2, 1fr);
+ }
+
+ .courses-spacing-3xl {
+ --courses-spacing-3xl: 4rem;
+ }
+
+ .courses-card {
+ padding: var(--courses-spacing-md);
+ }
+}
+
+/* Tablet (768px - 991px) */
+@media (max-width: 991px) and (min-width: 768px) {
+ .courses-container {
+ max-width: 720px;
+ padding: 0 var(--courses-spacing-lg);
+ }
+
+ .courses-heading-1 {
+ font-size: 3rem;
+ }
+
+ .courses-heading-2 {
+ font-size: 2.25rem;
+ text-align: center;
+ }
+
+ .courses-grid-4,
+ .courses-grid-3,
+ .courses-grid-2 {
+ grid-template-columns: repeat(2, 1fr);
+ gap: var(--courses-spacing-md);
+ }
+
+ .courses-flex {
+ flex-direction: column;
+ gap: var(--courses-spacing-md);
+ }
+
+ .courses-spacing-3xl {
+ --courses-spacing-3xl: 3rem;
+ }
+
+ .courses-spacing-2xl {
+ --courses-spacing-2xl: 2.5rem;
+ }
+
+ /* Hero section adjustments */
+ .courses-hero {
+ padding: var(--courses-spacing-2xl) var(--courses-spacing-md);
+ }
+
+ /* Button adjustments */
+ .courses-button {
+ width: 100%;
+ justify-content: center;
+ }
+
+ /* Navigation buttons */
+ .courses-nav-button {
+ width: 44px;
+ height: 44px;
+ }
+}
+
+/* Mobile Large (576px - 767px) */
+@media (max-width: 767px) and (min-width: 576px) {
+ .courses-container {
+ max-width: 540px;
+ padding: 0 var(--courses-spacing-md);
+ }
+
+ .courses-heading-1 {
+ font-size: 2.5rem;
+ line-height: 1.2;
+ }
+
+ .courses-heading-2 {
+ font-size: 2rem;
+ text-align: center;
+ line-height: 1.3;
+ }
+
+ .courses-heading-3 {
+ font-size: 1.75rem;
+ text-align: center;
+ }
+
+ .courses-grid-4,
+ .courses-grid-3,
+ .courses-grid-2 {
+ grid-template-columns: 1fr;
+ gap: var(--courses-spacing-md);
+ }
+
+ .courses-spacing-3xl {
+ --courses-spacing-3xl: 2.5rem;
+ }
+
+ .courses-spacing-2xl {
+ --courses-spacing-2xl: 2rem;
+ }
+
+ .courses-spacing-xl {
+ --courses-spacing-xl: 1.5rem;
+ }
+
+ /* Hero section */
+ .courses-hero {
+ padding: var(--courses-spacing-xl) var(--courses-spacing-md);
+ text-align: center;
+ }
+
+ /* Cards */
+ .courses-card,
+ .courses-stat-card,
+ .courses-timeline-card {
+ padding: var(--courses-spacing-md);
+ }
+
+ /* Buttons */
+ .courses-button {
+ width: 100%;
+ padding: var(--courses-spacing-md) var(--courses-spacing-lg);
+ font-size: var(--courses-text-base);
+ }
+
+ .courses-button-primary,
+ .courses-button-secondary {
+ margin-bottom: var(--courses-spacing-sm);
+ }
+
+ /* Navigation */
+ .courses-nav-button {
+ width: 40px;
+ height: 40px;
+ font-size: var(--courses-text-base);
+ }
+
+ /* Topic tags */
+ .courses-topic-tag {
+ font-size: var(--courses-text-xs);
+ padding: var(--courses-spacing-xs) var(--courses-spacing-sm);
+ }
+
+ /* FAQ */
+ .courses-faq-button {
+ padding: var(--courses-spacing-md);
+ font-size: var(--courses-text-base);
+ }
+
+ .courses-faq-answer {
+ padding: var(--courses-spacing-md);
+ font-size: var(--courses-text-sm);
+ }
+}
+
+/* Mobile Small (320px - 575px) */
+@media (max-width: 575px) {
+ .courses-container {
+ padding: 0 var(--courses-spacing-sm);
+ }
+
+ .courses-heading-1 {
+ font-size: 2rem;
+ line-height: 1.1;
+ margin-bottom: var(--courses-spacing-md);
+ }
+
+ .courses-heading-2 {
+ font-size: 1.75rem;
+ line-height: 1.2;
+ margin-bottom: var(--courses-spacing-md);
+ }
+
+ .courses-heading-3 {
+ font-size: 1.5rem;
+ margin-bottom: var(--courses-spacing-sm);
+ }
+
+ .courses-heading-4 {
+ font-size: 1.25rem;
+ margin-bottom: var(--courses-spacing-sm);
+ }
+
+ .courses-spacing-3xl {
+ --courses-spacing-3xl: 2rem;
+ }
+
+ .courses-spacing-2xl {
+ --courses-spacing-2xl: 1.5rem;
+ }
+
+ .courses-spacing-xl {
+ --courses-spacing-xl: 1rem;
+ }
+
+ /* Hero section */
+ .courses-hero {
+ padding: var(--courses-spacing-lg) var(--courses-spacing-sm);
+ min-height: auto;
+ }
+
+ /* Grid adjustments */
+ .courses-grid {
+ gap: var(--courses-spacing-sm);
+ }
+
+ /* Cards */
+ .courses-card,
+ .courses-stat-card,
+ .courses-timeline-card,
+ .courses-project-card {
+ padding: var(--courses-spacing-sm);
+ border-radius: var(--courses-radius-lg);
+ }
+
+ /* Buttons */
+ .courses-button {
+ padding: var(--courses-spacing-sm) var(--courses-spacing-md);
+ font-size: var(--courses-text-sm);
+ border-radius: var(--courses-radius-md);
+ }
+
+ .courses-icon-button,
+ .courses-nav-button {
+ width: 36px;
+ height: 36px;
+ font-size: var(--courses-text-sm);
+ }
+
+ /* Topic tags */
+ .courses-topic-tag {
+ font-size: 11px;
+ padding: 4px var(--courses-spacing-xs);
+ border-radius: var(--courses-radius-sm);
+ }
+
+ /* Modal */
+ .courses-modal {
+ margin: var(--courses-spacing-sm);
+ padding: var(--courses-spacing-md);
+ border-radius: var(--courses-radius-lg);
+ }
+
+ /* FAQ */
+ .courses-faq-item {
+ border-radius: var(--courses-radius-lg);
+ }
+
+ .courses-faq-button {
+ padding: var(--courses-spacing-sm);
+ font-size: var(--courses-text-sm);
+ }
+
+ .courses-faq-answer {
+ padding: var(--courses-spacing-sm);
+ font-size: var(--courses-text-xs);
+ line-height: 1.5;
+ }
+
+ /* Carousel indicators */
+ .courses-carousel-indicator {
+ width: 8px;
+ height: 8px;
+ }
+
+ /* Text adjustments */
+ .courses-body-large {
+ font-size: var(--courses-text-base);
+ text-align: center;
+ }
+
+ .courses-body {
+ font-size: var(--courses-text-sm);
+ }
+
+ .courses-body-small {
+ font-size: var(--courses-text-xs);
+ }
+}
+
+/* Extra Small Mobile (max-width: 320px) */
+@media (max-width: 320px) {
+ .courses-container {
+ padding: 0 var(--courses-spacing-xs);
+ }
+
+ .courses-heading-1 {
+ font-size: 1.75rem;
+ }
+
+ .courses-heading-2 {
+ font-size: 1.5rem;
+ }
+
+ .courses-card,
+ .courses-stat-card,
+ .courses-timeline-card {
+ padding: var(--courses-spacing-xs);
+ }
+
+ .courses-button {
+ padding: var(--courses-spacing-xs) var(--courses-spacing-sm);
+ font-size: var(--courses-text-xs);
+ }
+}
+
+/* Print Styles */
+@media print {
+ .courses-page {
+ background: white !important;
+ color: black !important;
+ }
+
+ .courses-nav-button,
+ .courses-button,
+ .courses-carousel-indicators {
+ display: none !important;
+ }
+
+ .courses-card,
+ .courses-stat-card,
+ .courses-timeline-card {
+ break-inside: avoid;
+ box-shadow: none !important;
+ border: 1px solid #ccc !important;
+ }
+}
+
+/* High Contrast Mode Support */
+@media (prefers-contrast: high) {
+ .courses-card,
+ .courses-stat-card,
+ .courses-timeline-card {
+ border-width: 2px;
+ }
+
+ .courses-button {
+ border-width: 2px;
+ }
+
+ .courses-topic-tag {
+ border-width: 2px;
+ }
+}
+
+/* Reduced Motion Support */
+@media (prefers-reduced-motion: reduce) {
+ *,
+ *::before,
+ *::after {
+ animation-duration: 0.01ms !important;
+ animation-iteration-count: 1 !important;
+ transition-duration: 0.01ms !important;
+ }
+
+ .courses-float,
+ .courses-pulse,
+ .courses-gradient-animate {
+ animation: none !important;
+ }
+}
diff --git a/src/pages/courses/index.tsx b/src/pages/courses/index.tsx
index 62e51ea6..354fdd88 100644
--- a/src/pages/courses/index.tsx
+++ b/src/pages/courses/index.tsx
@@ -2,6 +2,7 @@ import React, { useState, useRef, useEffect } from "react";
import Layout from "@theme/Layout";
import Head from "@docusaurus/Head";
import { motion } from "framer-motion";
+import './courses.css';
// Animation variants for consistent animations
const fadeIn = {
@@ -134,18 +135,12 @@ const faqs = [
{ q: "Do I need to learn anything before this course starts?", a: "No prior experience is required. All fundamentals will be covered." },
];
-export default function CoursesLanding() {
+function CoursesContent() {
+
const [showAllTopics, setShowAllTopics] = useState(false);
const [modal, setModal] = useState({ open: false, content: "" });
- const [openFaq, setOpenFaq] = useState(null);
+ const [openFaq, setOpenFaq] = useState(null);
const [activeProjectIndex, setActiveProjectIndex] = useState(0);
- const [showStickyEnroll, setShowStickyEnroll] = useState(false);
- const [countdownValues, setCountdownValues] = useState({
- days: 0,
- hours: 0,
- minutes: 0,
- seconds: 0,
- });
const [animatedStats, setAnimatedStats] = useState({
Youtube: 0,
LinkedIn: 0,
@@ -157,37 +152,7 @@ export default function CoursesLanding() {
const techTagsRef = useRef(null);
const statsRef = useRef(null);
- // Countdown timer effect
- useEffect(() => {
- // Set the countdown date to 2 days from now
- const countdownDate = new Date();
- countdownDate.setDate(countdownDate.getDate() + 2);
-
- const updateCountdown = () => {
- const now = new Date().getTime();
- const distance = countdownDate.getTime() - now;
-
- const days = Math.floor(distance / (1000 * 60 * 60 * 24));
- const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
- const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
- const seconds = Math.floor((distance % (1000 * 60)) / 1000);
-
- setCountdownValues({
- days,
- hours,
- minutes,
- seconds
- });
- };
-
- // Initial update
- updateCountdown();
- // Set interval to update every second
- const interval = setInterval(updateCountdown, 1000);
-
- return () => clearInterval(interval);
- }, []);
// Horizontal scrolling for tech tags
useEffect(() => {
@@ -209,15 +174,7 @@ export default function CoursesLanding() {
}
}, []);
- // Check scroll position for sticky enroll button
- useEffect(() => {
- const checkScroll = () => {
- setShowStickyEnroll(window.scrollY > 500);
- };
- window.addEventListener('scroll', checkScroll);
- return () => window.removeEventListener('scroll', checkScroll);
- }, []);
// Set up automatic carousel rotation
useEffect(() => {
@@ -273,7 +230,7 @@ export default function CoursesLanding() {
return () => observer.disconnect();
}, [isStatsVisible]);
- const handleCourseClick = (course) => {
+ const handleCourseClick = (course: any) => {
if (course.title.includes("Coming Soon")) {
setModal({ open: true, content: "This course is coming soon!" });
} else {
@@ -281,11 +238,11 @@ export default function CoursesLanding() {
}
};
- const handleAction = (type) => {
+ const handleAction = (type: string) => {
setModal({ open: true, content: type === "enroll" ? "Enrollment flow coming soon!" : "Purchase flow coming soon!" });
};
- const scrollProjects = (dir) => {
+ const scrollProjects = (dir: number) => {
const newIndex = activeProjectIndex + dir;
if (newIndex >= 0 && newIndex < projects.length) {
@@ -299,11 +256,11 @@ export default function CoursesLanding() {
}
};
- const goToProjectSlide = (index) => {
+ const goToProjectSlide = (index: number) => {
setActiveProjectIndex(index);
};
- const handleInfo = (info) => setModal({ open: true, content: info });
+ const handleInfo = (info: string) => setModal({ open: true, content: info });
return (
@@ -319,91 +276,91 @@ export default function CoursesLanding() {
-ms-overflow-style: none;
scrollbar-width: none;
}
-
+
/* Custom animations */
@keyframes float {
0% { transform: translateY(0px); }
50% { transform: translateY(-10px); }
100% { transform: translateY(0px); }
}
-
+
@keyframes slide {
0% { transform: translateX(0); }
100% { transform: translateX(-100%); }
}
-
+
.float-animation {
animation: float 3s ease-in-out infinite;
}
-
+
.animate-slide {
display: inline-block;
white-space: nowrap;
padding-right: 100%;
}
-
+
/* Fade-in animation */
@keyframes fadeIn {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
-
+
.animate-fadeIn {
animation: fadeIn 0.5s ease-out forwards;
}
-
+
/* Scale-in animation */
@keyframes scaleIn {
from { opacity: 0; transform: scale(0.9); }
to { opacity: 1; transform: scale(1); }
}
-
+
.animate-scaleIn {
animation: scaleIn 0.3s ease-out forwards;
}
-
+
/* Slide-in animation */
@keyframes slideInUp {
from { opacity: 0; transform: translateY(30px); }
to { opacity: 1; transform: translateY(0); }
}
-
+
.animate-slideInUp {
animation: slideInUp 0.5s ease-out forwards;
}
-
+
/* Pulse animation */
@keyframes pulse {
0% { transform: scale(1); }
50% { transform: scale(1.05); }
100% { transform: scale(1); }
}
-
+
.animate-pulse {
animation: pulse 2s infinite;
}
`}
-
+
{/* Modal */}
{modal.open && (
-
-
+
+
-
{modal.content}
+
{modal.content}
)}
{/* Hero Section */}
-
-
- Transform Your Career
in Data Engineering
-
-
+
- Master the art of data engineering with industry-leading courses designed for modern tech careers.
-
-
-
-
-
-
+
+
+
+
{/* Tech Tags */}
-
- {techTags.map((tag, idx) => (
-
- {tag}
-
- ))}
+
+
+ {techTags.map((tag, idx) => (
+
+ {tag}
+
+ ))}
+
-
- {/* Partner Logos */}
-
- Students now available at
-
- {partnerLogos.map((logo, idx) => (
-
- ))}
+ {/* Partner Logos */}
+
+
Students now available at
+
+ {partnerLogos.map((logo, idx) => (
+
+ ))}
+
{/* Projects Carousel */}
-
-
-
- Explore over 14+ extensive projects
-
-
-
-
-
+
+
+
+
+ Explore over 14+ extensive projects
+
+
+
+
- {projects.map((img, idx) => (
-
-

-
- ))}
+
+ {projects.map((img, idx) => (
+
+

+
+ ))}
+
-
-
-
-
- {projects.map((_, idx) => (
-
-
-
- {/* Testimonials */}
-
-
-
- Kind Words from Our Students
-
-
- {testimonials.map((t, idx) => (
-
handleInfo(t.review)}
- >
-
-
-
-

scrollProjects(1)}
+ >
+ >
+
+
+
+ {projects.map((_, idx) => (
+
- {t.name}
-
- {Array.from({ length: t.stars }).map((_, i) => (
-
- ★
-
- ))}
-
- {t.review}
-
- ))}
+ ))}
+
+
- {/* Courses Timeline Section */}
-
-
- Courses Available
-
-
- Courses Covered In the Program
-
-
- {/* Left column */}
-
- {courses.filter((_, i) => i % 2 === 0).map((course, idx) => (
+ {/* Testimonials */}
+
+
+
+
+ Kind Words from Our Students
+
+
+ {testimonials.map((t, idx) => (
handleCourseClick(course)}
- initial={{ opacity: 0, x: -30 }}
- whileInView={{ opacity: 1, x: 0 }}
+ key={idx}
+ className="courses-card group cursor-pointer flex flex-col items-center text-center"
+ initial={{ opacity: 0, y: 30 }}
+ whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true }}
transition={{ duration: 0.5, delay: idx * 0.1 }}
+ whileHover={{ scale: 1.02 }}
+ onClick={() => handleInfo(t.review)}
>
-
+
+

-
-
-
{course.title}
-
{course.desc}
+
{t.name}
+
+ {Array.from({ length: t.stars }).map((_, i) => (
+
+ ★
+
+ ))}
-
+
+ {t.review}
+
))}
- {/* Timeline */}
-
-
- {courses.map((course, idx) => (
-
+
+
+
+ {/* Courses Timeline Section */}
+
+
+
+ Courses Available
+
+
+ Courses Covered In the Program
+
+
+ {/* Left column */}
+
+ {courses.filter((_, i) => i % 2 === 0).map((course, idx) => (
handleCourseClick(course)}
+ initial={{ opacity: 0, x: -30 }}
+ whileInView={{ opacity: 1, x: 0 }}
viewport={{ once: true }}
- transition={{ duration: 0.3, delay: idx * 0.1 }}
+ transition={{ duration: 0.5, delay: idx * 0.1 }}
>
-
- {course.number}
+
+

+
- {idx !== courses.length - 1 &&
}
+
+
{course.title}
+
{course.desc}
+
+
-
- ))}
-
handleAction("enroll")}
- initial={{ opacity: 0, y: 20 }}
- whileInView={{ opacity: 1, y: 0 }}
- viewport={{ once: true }}
- transition={{ duration: 0.5, delay: 0.8 }}
- whileHover={{ y: -5 }}
- whileTap={{ y: 0 }}
- >
- Enroll now
-
+ ))}
+
+ {/* Timeline */}
+
+
+ {courses.map((course, idx) => (
+
+
+
+ {course.number}
+
+ {idx !== courses.length - 1 && }
+
+
+ ))}
+
handleAction("enroll")}
+ initial={{ opacity: 0, y: 20 }}
+ whileInView={{ opacity: 1, y: 0 }}
+ viewport={{ once: true }}
+ transition={{ duration: 0.5, delay: 0.8 }}
+ whileHover={{ y: -5 }}
+ whileTap={{ y: 0 }}
+ >
+ Enroll now
+
+
+ {/* Right column */}
+
+ {courses.filter((_, i) => i % 2 === 1).map((course, idx) => (
+
handleCourseClick(course)}
+ initial={{ opacity: 0, x: 30 }}
+ whileInView={{ opacity: 1, x: 0 }}
+ viewport={{ once: true }}
+ transition={{ duration: 0.5, delay: idx * 0.1 }}
+ >
+
+
{course.title}
+
{course.desc}
+
+
+

+
+
+
+
+ ))}
+
+
+ {/* Mobile Enroll Button */}
+
+ handleAction("enroll")}
+ initial={{ opacity: 0, y: 20 }}
+ whileInView={{ opacity: 1, y: 0 }}
+ viewport={{ once: true }}
+ transition={{ duration: 0.5, delay: 0.8 }}
+ whileHover={{ y: -3 }}
+ whileTap={{ y: 0 }}
+ >
+ Enroll now
+
+
- {/* Right column */}
-
- {courses.filter((_, i) => i % 2 === 1).map((course, idx) => (
+
+
+
+ {/* Project Reviews Section */}
+
+
+
+ Project reviews from students
+
+
+ {projectReviews.map((review, idx) => (
handleCourseClick(course)}
- initial={{ opacity: 0, x: 30 }}
- whileInView={{ opacity: 1, x: 0 }}
+ key={idx}
+ className="courses-card flex flex-col items-center text-center cursor-pointer group"
+ initial={{ opacity: 0, y: 30 }}
+ whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true }}
transition={{ duration: 0.5, delay: idx * 0.1 }}
+ whileHover={{ scale: 1.02 }}
+ onClick={() => handleInfo(review.review)}
>
-
-
{course.title}
-
{course.desc}
-
-
+
+

-
-
+
{review.name}
+
+ {review.review}
+
))}
- {/* Project Reviews Section */}
-
-
- Project reviews from students
-
-
- {projectReviews.map((review, idx) => (
-
handleInfo(review.review)}
- >
-
- {review.name}
- {review.review}
-
- ))}
-
-
-
{/* Topics Tag Cloud & Community Stats */}
-
-
- 100+ topics taught...
-
-
- {(showAllTopics ? topics : topics.slice(0, 20)).map((topic, idx) => (
-
- {topic}
-
- ))}
-
-
-