From 73c4aee0b3c4783afae2007f6215c6f239d0365a Mon Sep 17 00:00:00 2001 From: Mayank Sharma Date: Wed, 19 Aug 2026 14:22:37 +0530 Subject: [PATCH 1/5] [UI] Add dark/light theme toggle Signed-off-by: Mayank Sharma --- assets/scss/_navbar_project.scss | 141 +++++++++++ assets/scss/_styles_project.scss | 392 +++++++++++++++++++++++++++++++ layouts/_default/baseof.html | 2 + layouts/_default/content.html | 2 +- layouts/docs/list.html | 2 +- layouts/docs/rest-apis.html | 2 +- layouts/partials/head.html | 13 + layouts/partials/navbar.html | 62 ++++- layouts/release/list.html | 2 +- layouts/video/list.html | 2 +- 10 files changed, 611 insertions(+), 9 deletions(-) diff --git a/assets/scss/_navbar_project.scss b/assets/scss/_navbar_project.scss index de8e5eab459..94583b095fd 100644 --- a/assets/scss/_navbar_project.scss +++ b/assets/scss/_navbar_project.scss @@ -260,4 +260,145 @@ $ecosystem-box-glow: inset 0 0em 4em #ebc01766, 0 0 0 2px #ebc01766, 0.3em 0.3em &:focus ~ .highlight-box { box-shadow: none; } +} + +// Theme Toggle Button +.theme-toggle-nav-item { + margin-right: 0.75rem; + display: flex; + align-items: center; + justify-content: center; +} + +.theme-toggle { + --size: 1.4rem; + appearance: none; + border: none; + background: transparent; + cursor: pointer; + width: var(--size); + height: var(--size); + border-radius: 50%; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0; + color: #00b39f; + box-shadow: inset calc(var(--size) * 0.33) calc(var(--size) * -0.25) 0 0; + transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1); + vertical-align: middle; + outline: none; + + &:hover { + color: #00d3a9; + transform: scale(1.08); + } + + &:focus-visible { + outline: 2px solid #00b39f; + outline-offset: 3px; + } +} + +// Light theme state for toggle button +[data-theme="light"] .theme-toggle, +[data-bs-theme="light"] .theme-toggle { + --ray-size: calc(var(--size) * -0.4); + --offset-orthogonal: calc(var(--size) * 0.65); + --offset-diagonal: calc(var(--size) * 0.45); + transform: scale(0.8); + color: #ebc017; + box-shadow: inset 0 0 0 var(--size), + calc(var(--offset-orthogonal) * -1) 0 0 var(--ray-size), + var(--offset-orthogonal) 0 0 var(--ray-size), + 0 calc(var(--offset-orthogonal) * -1) 0 var(--ray-size), + 0 var(--offset-orthogonal) 0 var(--ray-size), + calc(var(--offset-diagonal) * -1) calc(var(--offset-diagonal) * -1) 0 var(--ray-size), + var(--offset-diagonal) var(--offset-diagonal) 0 var(--ray-size), + calc(var(--offset-diagonal) * -1) var(--offset-diagonal) 0 var(--ray-size), + var(--offset-diagonal) calc(var(--offset-diagonal) * -1) 0 var(--ray-size); + + &:hover { + color: #f59e0b; + transform: scale(0.9); + } +} + +// Light theme adjustments for the Navbar +[data-theme="light"], +[data-bs-theme="light"] { + .td-navbar, + .navbar-dark { + background-color: #ffffff; + border-bottom: 1px solid #e5e7eb; + + .nav-link { + color: #374151; + + &:hover { + color: $primary; + } + + &.current { + color: $primary; + } + } + + .dropdown-menu { + background-color: #ffffff; + border: 1px solid #e5e7eb; + box-shadow: 0px 4px 20px 0px rgba(0, 0, 0, 0.08); + + .dropdown-item { + color: #1f2937; + + &:hover { + background-color: rgba(0, 179, 159, 0.08); + color: $primary; + box-shadow: 0 0 10px rgba(0, 179, 159, 0.2); + + img { + filter: none; + } + } + } + + .dropdown-divider { + border-top: 1px solid #e5e7eb; + } + } + } + + .apps-dropdown .dropdown-menu { + background-color: #ffffff; + border: 1px solid #e5e7eb; + + .dropdown-item { + background-color: #f8f9fa; + border: 1px solid #e5e7eb; + color: #1f2937; + + span { + color: #1f2937; + } + + &:hover { + background-color: #ffffff; + border-color: $primary; + box-shadow: 0 0 10px rgba(0, 179, 159, 0.25); + color: $primary; + + span { + color: $primary; + } + } + } + } + + img.grid-icon { + filter: invert(0.2); + &:hover { + filter: invert(0.5); + } + } } \ No newline at end of file diff --git a/assets/scss/_styles_project.scss b/assets/scss/_styles_project.scss index 3be288ac14f..174de0b57db 100644 --- a/assets/scss/_styles_project.scss +++ b/assets/scss/_styles_project.scss @@ -809,3 +809,395 @@ h1, h2, h3, h4, h5, h6 { padding-top: 0; } } + +// ========================================== +// LIGHT THEME STYLING +// ========================================== +[data-theme="light"], +[data-bs-theme="light"] { + background-color: #ffffff; + color: #1f2937; + + body { + background-color: #ffffff; + color: #1f2937; + } + + .td-home { + background-color: #ffffff; + } + + .td-main main { + background-color: #ffffff; + } + + .td-content { + color: #1f2937; + + > h1, + > h2, + > h3, + > h4, + > h5, + > h6 { + color: #111827; + } + + h2 { + color: #111827; + } + + p, + li, + td { + color: #374151; + } + + .lead { + color: #4b5563; + } + + p code, + li > code, + table code { + background-color: #f3f4f6; + color: #0f766e; + border: 1px solid #e5e7eb; + } + + blockquote { + color: #4b5563; + border-left-color: $primary; + background-color: #f9fafb; + padding: 0.75rem 1rem; + border-radius: 0 0.375rem 0.375rem 0; + } + } + + a:hover { + color: $primary; + } + + // Left sidebar in light mode + .td-sidebar { + background-image: none; + background-color: #f8f9fa; + border-right: 1px solid #e5e7eb; + + .td-sidebar-nav { + &__section-title a { + color: #111827; + } + + .td-sidebar-link__page { + color: #4b5563; + + &:hover { + color: $primary; + } + } + + a:hover { + color: $primary; + } + + a.active:not(.tree-root) { + background-image: none; + background-color: rgba(0, 179, 159, 0.1); + border-left: 3px solid $primary; + color: $primary; + } + + a.active.tree-root { + background-color: rgba(0, 179, 159, 0.1); + border: 1px solid $primary; + color: $primary; + } + + .td-sidebar-link.tree-root { + border-bottom: 1px solid #e5e7eb; + color: #111827; + } + } + } + + // Right TOC sidebar in light mode + .td-sidebar-toc { + background-image: none; + background-color: #ffffff; + border-left: 1px solid #e5e7eb; + + .td-toc #TableOfContents a { + color: #4b5563; + + &:hover, + &:focus-visible { + color: $primary; + background-color: rgba(0, 179, 159, 0.08); + } + } + + .td-page-meta a { + color: #6b7280; + + &:hover { + color: $primary; + } + } + } + + // Cards + .card { + background-color: #ffffff; + border: 1px solid #e5e7eb; + color: #1f2937; + } + + // Alerts + .alert { + background-color: #f0fdf4; + border: 1px solid #bbf7d0; + color: #166534; + + &.alert-warning { + background-color: #fffbeb; + border-color: #fde68a; + color: #92400e; + } + + &.alert-danger { + background-color: #fef2f2; + border-color: #fecaca; + color: #991b1b; + } + + &.alert-info { + background-color: #f0f9ff; + border-color: #bae6fd; + color: #075985; + } + } + + // Nav tabs + .nav-tabs .nav-link { + color: #4b5563; + border-bottom: 1px solid #e5e7eb; + + &:not(.active):hover { + background-color: #f3f4f6; + color: $primary; + } + + &.active { + background-color: #ffffff; + color: $primary; + border-color: #e5e7eb #e5e7eb transparent #e5e7eb; + } + } + + .tab-content .tab-pane { + background-color: #ffffff; + border: 1px solid #e5e7eb; + color: #1f2937; + } + + // Tables + .td-initial table { + color: #1f2937; + border-color: #e5e7eb; + + th { + background-color: #f9fafb; + color: #111827; + border-bottom: 2px solid #e5e7eb; + box-shadow: none; + } + + td { + background-color: transparent; + border-bottom: 1px solid #e5e7eb; + box-shadow: none; + } + } + + // Front matter info / Page info + .matterinfo, + .pageinfo { + background: #f9fafb; + border-color: rgba(0, 179, 159, 0.4); + color: #1f2937; + + .matterheader { + color: #111827; + } + + .plan-support { + border-color: #e5e7eb; + color: #374151; + + &:hover { + background-color: rgba(0, 179, 159, 0.08); + } + } + + .tier { + color: #111827; + } + } + + // Buttons & Dash signs + .l5btn { + background: #ffffff; + border-color: $primary; + color: #111827; + + > img { + filter: invert(0.8); + } + } + + .dashboard { + background-image: linear-gradient(to right, #111827 0px, #008f7e 34%, #d97706 71%, #059669 100%); + } + + .dash-sign-container a.dash-sign { + color: #111827; + text-shadow: none; + + &:visited { + color: #111827; + } + + &:hover { + color: $primary; + } + } + + // Landing page components + .landing-card { + background: #ffffff; + border: 1px solid #e5e7eb; + box-shadow: 0px 4px 12px 0px rgba(0, 0, 0, 0.05); + + .landing-card-title { + color: #111827; + } + + p { + color: #4b5563; + } + + &:hover { + border-color: $primary; + box-shadow: 0px 6px 16px 0px rgba(0, 179, 159, 0.15); + + .landing-card-title { + color: $primary; + } + + p { + color: #111827; + } + } + } + + .product-section a { + color: #111827; + } + + .forum-section { + background: #ffffff; + border: 1px solid #e5e7eb; + box-shadow: 0px 4px 12px 0px rgba(0, 0, 0, 0.05); + + &:hover { + border-color: $primary; + } + } + + .handbook-section { + background: linear-gradient(112deg, #f9fafb 34.88%, rgba(0, 211, 169, 0.15) 92.89%, #ffffff 159.16%); + border: 1px solid #e5e7eb; + border-radius: 1rem; + } + + // Search input on navbar + .td-navbar .td-search { + background-color: #f3f4f6; + border: 1px solid #e5e7eb; + + .td-search__input { + color: #1f2937; + + &::placeholder { + color: #9ca3af; + } + } + + .td-search__icon { + color: #6b7280; + } + } + + .td-offline-search-results { + .card { + background-color: #ffffff; + border: 1px solid #e5e7eb; + color: #1f2937; + } + } + + // Video and Taxonomies + .video > .card-title { + color: #111827; + } + + .video > .card-text { + color: #6b7280; + } + + .article-teaser.card { + background-color: #ffffff; + border: 1px solid #e5e7eb; + color: #1f2937; + } + + .article-meta-bg { + background-color: #f3f4f6; + color: #4b5563; + } + + .taxonomy-count { + background-color: #f3f4f6; + color: #1f2937; + } + + .taxonomy-term { + background: #e5e7eb; + color: #1f2937; + + &:hover { + background-color: $primary; + color: $white; + } + } + + // Pagination navigation + .pagination-nav__link { + border-color: #e5e7eb; + background-color: #ffffff; + color: #1f2937; + + &:hover { + border-color: $primary; + } + } + + .pagination-nav__sublabel { + color: #6b7280; + } + + .pagination-nav__label { + color: #111827; + } +} diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html index 71d7b856c7d..bf44b09c772 100644 --- a/layouts/_default/baseof.html +++ b/layouts/_default/baseof.html @@ -5,6 +5,8 @@ lang="{{ .Site.Language.Lang }}" dir="{{ .Site.Language.Direction }}" class="no-js" + data-theme="dark" + data-bs-theme="dark" > {{ partial "head.html" . }} diff --git a/layouts/_default/content.html b/layouts/_default/content.html index e5ba33791ab..3a2ff82355d 100644 --- a/layouts/_default/content.html +++ b/layouts/_default/content.html @@ -1,4 +1,4 @@ -
+

{{ .Title }}

{{ with .Params.description }}
{{ . | markdownify }}
{{ end }}