From 02c5801936f22bed2b44f48052c3d5dbd4c9836f Mon Sep 17 00:00:00 2001 From: Tim Zhang Date: Sun, 22 Feb 2026 15:18:41 +1100 Subject: [PATCH 1/5] fix(ui): stop forcing the webpack vendor output path Currently, starting the local development web server with `npm start` reaches this error: ``` [webpack-dev-middleware] Error: Conflict: Multiple chunks emit assets to the same filename static/vendors.js (chunks vendorsJs-node_modules_mini-css-extract-plugin_dist_hmr_hotModuleReplacement_js-node_modules_-335b30 and vendorsJs-node_modules_hotwired_turbo_dist_turbo_es2017-esm_js-node_modules_github_clipboard--ac61ee) at /home/timzh/osv.dev/gcp/website/frontend3/node_modules/webpack/lib/Compilation.js:5154:12 at /home/timzh/osv.dev/gcp/website/frontend3/node_modules/webpack/lib/Cache.js:98:34 at Array. (/home/timzh/osv.dev/gcp/website/frontend3/node_modules/webpack/lib/cache/MemoryCachePlugin.js:44:13) at /home/timzh/osv.dev/gcp/website/frontend3/node_modules/webpack/lib/Cache.js:98:19 at Hook.eval [as callAsync] (eval at create (/home/timzh/osv.dev/gcp/website/frontend3/node_modules/tapable/lib/HookCodeFactory.js:31:10), :19:1) at Cache.get (/home/timzh/osv.dev/gcp/website/frontend3/node_modules/webpack/lib/Cache.js:82:18) at ItemCacheFacade.get (/home/timzh/osv.dev/gcp/website/frontend3/node_modules/webpack/lib/CacheFacade.js:115:15) at /home/timzh/osv.dev/gcp/website/frontend3/node_modules/webpack/lib/Compilation.js:5096:22 at arrayEach (/home/timzh/osv.dev/gcp/website/frontend3/node_modules/neo-async/async.js:2405:9) at Object.each (/home/timzh/osv.dev/gcp/website/frontend3/node_modules/neo-async/async.js:2846:9) ``` The issue as I understand it is that webpack tries to write to the same vendor.js file twice independently. I think ed504ac introduced the issue when it added a second entry point: https://github.com/google/osv.dev/commit/ed504acf4da7f029e94b62ef72d95aa472761eae#diff-9f8239968359c3509ed79cdc472a92a08b4aea2446077d8cd8453fcb59ffd711R11. Using `name` groups both vendor chunks to the same logical ID, rather than the same conflicting file path. This doesn't change any build artifacts' paths, so shouldn't affect the frontend's deployment, I think. --- gcp/website/frontend3/webpack.dev.js | 2 +- gcp/website/frontend3/webpack.prod.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gcp/website/frontend3/webpack.dev.js b/gcp/website/frontend3/webpack.dev.js index 5d3c4ca110b..fb148bdf3ed 100644 --- a/gcp/website/frontend3/webpack.dev.js +++ b/gcp/website/frontend3/webpack.dev.js @@ -24,7 +24,7 @@ module.exports = { vendorsJs: { test: /node_modules/, chunks: 'initial', - filename: 'static/vendors.js', + name: 'vendors', priority: 1, maxInitialRequests: 2, minChunks: 1, diff --git a/gcp/website/frontend3/webpack.prod.js b/gcp/website/frontend3/webpack.prod.js index 16b681515d4..4cf6c4779ad 100644 --- a/gcp/website/frontend3/webpack.prod.js +++ b/gcp/website/frontend3/webpack.prod.js @@ -24,7 +24,7 @@ module.exports = { vendorsJs: { test: /node_modules/, chunks: 'initial', - filename: 'static/vendors.[contenthash].js', + name: 'vendors', priority: 1, maxInitialRequests: 2, minChunks: 1, From e82d6536027e761f1ff6fbc93f3b41fa55f6f7e3 Mon Sep 17 00:00:00 2001 From: Tim Zhang Date: Sun, 22 Feb 2026 21:03:23 +1100 Subject: [PATCH 2/5] feat: add theme toggler button in top bar The toggler button will read/write to the `theme` key in localStorage. For simplicity, I wanted to keep the theming logic strictly on the client side. This is why I chose localStorage instead of cookies. --- gcp/website/frontend3/src/base.html | 16 +++++++++- gcp/website/frontend3/src/index.js | 15 +++++++++ gcp/website/frontend3/src/styles.scss | 46 +++++++++++++++++++++++++-- 3 files changed, 74 insertions(+), 3 deletions(-) diff --git a/gcp/website/frontend3/src/base.html b/gcp/website/frontend3/src/base.html index 9a8f307fe50..c923dd7c3e6 100644 --- a/gcp/website/frontend3/src/base.html +++ b/gcp/website/frontend3/src/base.html @@ -9,6 +9,14 @@ {% if disable_turbo_cache %} {% endif %} + @@ -92,7 +100,13 @@ {% endif %} -
  • +
  • + +
  • +
  • Github Logo diff --git a/gcp/website/frontend3/src/index.js b/gcp/website/frontend3/src/index.js index e0f6ada973b..37c44d1168a 100644 --- a/gcp/website/frontend3/src/index.js +++ b/gcp/website/frontend3/src/index.js @@ -56,6 +56,20 @@ function initializeSearch() { searchInstance = new ExpandableSearch(); } +function initializeThemeToggle() { + const toggle = document.getElementById('theme-toggle'); + // Ensure the event handler is attached only once. + if (toggle && !toggle.dataset.themeInitialized) { + toggle.dataset.themeInitialized = 'true'; + toggle.addEventListener('click', () => { + const currentTheme = localStorage.getItem("theme") || 'dark'; + const newTheme = currentTheme === 'dark' ? 'light' : 'dark'; + localStorage.setItem('theme', newTheme); + document.documentElement.setAttribute('data-theme', newTheme); + }); + } +} + // Ensure initialization happens after all dependencies are loaded function ensureInitialization() { if (!customElements) { @@ -65,6 +79,7 @@ function ensureInitialization() { if (customElements.get('md-filled-text-field')) { initializeSearch(); + initializeThemeToggle(); } else { // wait a bit longer for components to load setTimeout(ensureInitialization, 50); diff --git a/gcp/website/frontend3/src/styles.scss b/gcp/website/frontend3/src/styles.scss index ded62fd50cd..926921e7d2e 100644 --- a/gcp/website/frontend3/src/styles.scss +++ b/gcp/website/frontend3/src/styles.scss @@ -264,8 +264,8 @@ pre { } .logo-link { - width: 24px; - height: 24px; + width: 20px; + height: 20px; } .tabs { @@ -280,6 +280,11 @@ pre { vertical-align: middle; } + a.logo-img { + display: flex; + align-items: center; + } + // Remove external link indicator. a.logo-img::after { display: none; @@ -290,6 +295,7 @@ pre { .social-icons { padding: 0; display: flex; + align-items: center; gap: 20px; } } @@ -2145,3 +2151,39 @@ div.highlight { .search-suggestions::-webkit-scrollbar-thumb:hover { background-color: $osv-grey-800; } + +/* Theme toggle button visibility */ +.theme-toggle-container { + display: flex; + align-items: center; +} +.theme-toggle-btn { + background: transparent; + border: none; + color: white; + cursor: pointer; + padding: 8px; + display: flex; + align-items: center; + justify-content: center; + transition: background-color 0.2s ease; + border-radius: 50%; + + &:hover { + background-color: rgba(255, 255, 255, 0.1); + } + + .icon-dark-mode { display: none; } + .icon-light-mode { display: inline-block; } +} +html[data-theme="light"] .theme-toggle-btn { + color: $osv-text-color; + .icon-dark-mode { display: inline-block; } + .icon-light-mode { display: none; } +} + +.github-container { + width: 36px; + display: flex; + justify-content: center; +} From f3c62dd127cd24d09bab8ecffb472c60b6d6f490 Mon Sep 17 00:00:00 2001 From: Tim Zhang Date: Sun, 22 Feb 2026 21:24:43 +1100 Subject: [PATCH 3/5] feat: apply light-mode colour palette --- gcp/website/frontend3/img/logo-dark.png | Bin 0 -> 615 bytes gcp/website/frontend3/img/logo-dark@2x.png | Bin 0 -> 1023 bytes gcp/website/frontend3/src/base.html | 4 +- gcp/website/frontend3/src/styles.scss | 290 +++++++++++++++------ 4 files changed, 214 insertions(+), 80 deletions(-) create mode 100644 gcp/website/frontend3/img/logo-dark.png create mode 100644 gcp/website/frontend3/img/logo-dark@2x.png diff --git a/gcp/website/frontend3/img/logo-dark.png b/gcp/website/frontend3/img/logo-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..88d05391e6c9acb9b82c50435a017a65aee16787 GIT binary patch literal 615 zcmV-t0+{`YP)z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy24YJ`L;(B%`vClT9V8_H000SaNLh0L01FcU01FcV0GgZ_00007 zbV*G`2kHVA3N0u64x=>y00FB>L_t(o!?jpVP69C)eJzqGt8obl2`t26*Bj^+Jc2iv z8w{Sna1y*9y~ zfwI*@`?phzL0qI3Y*h5nxs@PWU@xXz2p=(Y1??+_?%w}`g&`1mbmTXchplZLDP_s97UBz0*$AUT92-ShUvT`J$W=8)))(bW& zVii9S%-LF;#Qt9Hm?N*aK<6e^^_(rHy`Gks1T9?P3gp|zQn9v5tv@ZXbL^hose2Jp z)UJ)@o>H_U)tHN|f}ER@B-F!{3lVCg1HqKj@I77QtyuD=(vee;^C|zBrQU)*0O&uwpC?TIc|A^&K)wSsq^=){j z9C`{ntlIzp002ovPDHLkV1o6e B{6zo& literal 0 HcmV?d00001 diff --git a/gcp/website/frontend3/img/logo-dark@2x.png b/gcp/website/frontend3/img/logo-dark@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6153407b93a0a80af768688a0eadcba50fbd5fa3 GIT binary patch literal 1023 zcmVz@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy24YJ`L;(B%`vClT9V8_H000SaNLh0L02UhC;RMYM>Nn^Tq>Yf^HN2pTh&2xpC|YF`|BT08@awMU@0%IVtY-y0 z*5UqvaozLf+gE|e%SA35dA8A`)X9dIhz$}4a3OMSlEsEDl`b}5bvQw)(+gFULaxL8 z1H%#Z6naQ*pr~k5%GE?GHHh^kQh*d{m{_u{lYt`@+MbOv2cS~%Y@6OPC!^W$&N<>^ zuTCtbQb&q!O7kf=ViqZ@bUPsi-X!4aGZ(s{if@xChji;}Z|U1mx){{;{g?*b2Ijiw zxuil#sch=}Z%cpmy*~hP_k2E8X2*rmI)!f4QFj*|C13^;at{E0!OQ?mPW5!+n~Gwe z9l7;Tqy@%02VdQM;+>vCSfya}iUM{PLQxC##P$f`3s)zgsxCLTbI>mPJeT+wqD2h{pW zpG`YhJOyBVei@j_5Bz){BQ>P#mAL6hpReD?x}5j*r}GNtC4h3n*13UsaiXVB&UHDb z@;a_hN4YKGVz}nZ$DM&dr2ugzmH^ERq`t>uTn8zHALZ;h6)g&fvE?N~4Hzqr`%Fuv z04o$Q7d|qUu~YOg|9V=KzMkYdUKaW}hcYd-6;wf`2-T2h=r1@;v|?9`9RIA5P2_TT ztLxB842Q`g4dx)I4evINkWuL&b1_IRAo$9`A%B!{Fb*YS$i;cZ;=@a%G7ObB<~F$$ t^XI$&{s(Ysd9nd3_bMxgtNEB<{RWSdXgWsCKtKQh002ovPDHLkV1i2R!AJlA literal 0 HcmV?d00001 diff --git a/gcp/website/frontend3/src/base.html b/gcp/website/frontend3/src/base.html index c923dd7c3e6..d5df4178829 100644 --- a/gcp/website/frontend3/src/base.html +++ b/gcp/website/frontend3/src/base.html @@ -48,7 +48,9 @@
    diff --git a/gcp/website/frontend3/src/styles.scss b/gcp/website/frontend3/src/styles.scss index 926921e7d2e..708b14c5313 100644 --- a/gcp/website/frontend3/src/styles.scss +++ b/gcp/website/frontend3/src/styles.scss @@ -1,13 +1,75 @@ @use 'sass:string'; +@use '@material/theme'; +@use '@material/layout-grid/mdc-layout-grid'; +@use '@material/data-table/data-table'; +@use '@material/data-table/data-table-theme'; + +:root { + --osv-bg: #292929; + --osv-text: #fff; + --osv-grey-100: #f8f9fa; + --osv-grey-200: #e8eaed; + --osv-grey-300: #e2e2e2; + --osv-grey-400: #bdc1c6; + --osv-grey-500: #9aa0a6; + --osv-grey-600: #80868b; + --osv-grey-700: #5f6368; + --osv-grey-800: #3C4043; + --osv-grey-900: #202124; + --osv-border: #555; + --osv-red-300: #ec928e; + --osv-cyan-300: #C9F5F7; + --osv-code-bg: #202020; + --osv-hover-bg: rgba(255, 255, 255, 0.1); + --osv-search-bg: #696969; + --osv-search-border: rgba(255, 255, 255, 0.3); + --osv-ecosystems-bg: #333333; + --osv-tooltip-bg: #11111199; + --osv-tab-inactive: #aaaaaa; + --osv-tab-active: #ffffff; +} -$osv-background: #292929; -$osv-text-color: #fff; +:root[data-theme="light"] { + --osv-bg: #f5f3f4; + --osv-text: #161A1D; + --osv-grey-100: #202124; + --osv-grey-200: #3c4043; + --osv-grey-300: #5f6368; + --osv-grey-400: #80868b; + --osv-grey-500: #9aa0a6; + --osv-grey-600: #b3b3b3; + --osv-grey-700: #dadce0; + --osv-grey-800: #f1f3f4; + --osv-grey-900: #f8f9fa; + --osv-border: #dadce0; + --osv-red-300: #f23835; + --osv-cyan-300: #007b83; + --osv-code-bg: #dddddd; + --osv-hover-bg: rgba(0, 0, 0, 0.05); + --osv-search-bg: rgba(255, 255, 255, 0.95); + --osv-search-border: rgba(0, 0, 0, 0.2); + --osv-ecosystems-bg: #e8e8e8; + --osv-tooltip-bg: #4f4f4fc8; + --osv-tab-inactive: #e8e8e8; + --osv-tab-active: #aaaaaa; +} + +$osv-background: var(--osv-bg); +$osv-text-color: var(--osv-text); $osv-accent-color: #c5221f; $osv-accent-color-hover: #c5221fb2; -$osv-red-300: #ec928e; -$osv-grey-600: #80868b; -$osv-grey-800: #3C4043; -$osv-cyan-300: #C9F5F7; +$osv-red-300: var(--osv-red-300); +$osv-grey-100: var(--osv-grey-100); +$osv-grey-200: var(--osv-grey-200); +$osv-grey-300: var(--osv-grey-300); +$osv-grey-400: var(--osv-grey-400); +$osv-grey-500: var(--osv-grey-500); +$osv-grey-600: var(--osv-grey-600); +$osv-grey-700: var(--osv-grey-700); +$osv-grey-800: var(--osv-grey-800); +$osv-grey-900: var(--osv-grey-900); +$osv-cyan-300: var(--osv-cyan-300); +$osv-white: #ffffff; $osv-green: #53aa33; $osv-yellow: #ffd700; $osv-orange: #ffa500; @@ -20,13 +82,16 @@ $osv-heading-line-height: 70px; $osv-heading-line-height-mobile: 50px; $osv-mobile-breakpoint: 500px; $osv-border-radius-small: 4px; -$osv-border-color: #555; +$osv-border-color: var(--osv-border); +$osv-code-bg: var(--osv-code-bg); +$osv-hover-bg: var(--osv-hover-bg); +$osv-ecosystems-bg: var(--osv-ecosystems-bg); +$osv-search-bg: var(--osv-search-bg); +$osv-search-border: var(--osv-search-border); +$osv-tooltip-bg: var(--osv-tooltip-bg); +$osv-tab-inactive: var(--osv-tab-inactive); +$osv-tab-active: var(--osv-tab-active); -@use '@material/theme' with ($surface: $osv-background, -); -@use '@material/layout-grid/mdc-layout-grid'; -@use '@material/data-table/data-table'; -@use '@material/data-table/data-table-theme'; @include data-table.core-styles; @include data-table.theme-baseline; @@ -76,6 +141,8 @@ $osv-border-color: #555; *::before, *::after { box-sizing: border-box; + // Fade-in transition for dark/light mode toggling. + transition: background-color 0.3s ease, color 0.3s ease, filter 0.3s ease; } * { @@ -133,14 +200,22 @@ a { .home-page, .vulnerability-page { - a:not([href^="https://osv.dev"]):not([href^="/"]):not([href^="#"]):not([href^="https://google.github.io/osv.dev"]):not([href^="https://github.com/google/osv.dev"])::after { - display: inline-block; - content: ' '; - background-image: url('/static/img/external-link.svg'); - width: 16px; - height: 16px; - margin-left: 3px; - vertical-align: middle; + a:not([href^="https://osv.dev"]):not([href^="/"]):not([href^="#"]):not([href^="https://google.github.io/osv.dev"]):not([href^="https://github.com/google/osv.dev"]) { + &::after { + display: inline-block; + content: ' '; + background-image: url('/static/img/external-link.svg'); + width: 16px; + height: 16px; + margin-left: 3px; + vertical-align: middle; + } + + &:not(.link-button)::after { + html[data-theme="light"] & { + filter: invert(1); + } + } } } @@ -158,27 +233,28 @@ pre { padding: 0 16px; height: 36px; background: $osv-accent-color; - color: $osv-text-color; + color: $osv-white; border-radius: $osv-border-radius-small; align-items: center; text-decoration: none; -} -.link-button:hover { - background: $osv-accent-color-hover; + &:hover { + background: $osv-accent-color-hover; + } } + .tooltip { position: relative; display: inline-block; width: 650px; + color: $osv-white; } .tooltip .tooltiptext { + background: $osv-tooltip-bg; visibility: hidden; width: 120px; - background: #11111199; - color: #fff; text-align: center; padding: 5px; border-radius: $osv-border-radius-small; @@ -257,6 +333,12 @@ pre { // Keep logo visible. z-index: 3; + + .logo-img-dark { display: none; } + html[data-theme="light"] & { + .logo-img-light { display: none; } + .logo-img-dark { display: block; } + } } #hamburger-checkbox { @@ -266,6 +348,10 @@ pre { .logo-link { width: 20px; height: 20px; + + html[data-theme="light"] & { + filter: invert(1); + } } .tabs { @@ -278,6 +364,10 @@ pre { height: 16px; margin-left: 3px; vertical-align: middle; + + html[data-theme="light"] & { + filter: invert(1); + } } a.logo-img { @@ -469,7 +559,7 @@ pre { gap: 16px; font-family: $osv-heading-font-family; padding: 10px 20px; - background: #696969; + background: $osv-search-bg; border-radius: 999px; height: 38px; cursor: pointer; @@ -481,8 +571,11 @@ pre { } input[type=radio]:checked+.ecosystem-label { - background: $osv-text-color; + background: $osv-grey-300; color: $osv-accent-color; + html[data-theme="light"] & { + background: $osv-grey-700; + } } input[type=radio] { @@ -500,7 +593,7 @@ pre { margin-top: 22px; border: 2px solid $osv-text-color; border-radius: 8px; - --md-filled-text-field-container-color: #696969; + --md-filled-text-field-container-color: $osv-search-bg; --md-filled-text-field-label-text-font: $osv-body-font-family; --md-filled-text-field-input-text-font: $osv-body-font-family; --md-filled-text-field-input-text-weight: 100; @@ -524,7 +617,7 @@ pre { /* The underline would otherwise show underneath the border radius. */ &::after { margin-bottom: -4px; - background: #fff; + background: $osv-text-color; height: 2px; position: relative; top: -2px; @@ -544,6 +637,7 @@ md-icon-button.mdc-data-table__sort-icon-button { .vuln-table-container { width: 100%; + color: $osv-text-color; @media (max-width: $osv-mobile-breakpoint) { .vuln-table-container { @@ -587,6 +681,7 @@ md-icon-button.mdc-data-table__sort-icon-button { .vuln-table-cell { display: table-cell; + color: $osv-text-color; } // Table styling. @@ -941,7 +1036,7 @@ osv-tabs.vulnerability-packages[affordance="collapse"] { .vulnerability-packages { h2 { - background: #aaa; + background: $osv-tab-inactive; color: #000; display: inline-block; font-family: $osv-heading-font-family; @@ -969,7 +1064,7 @@ osv-tabs.vulnerability-packages[affordance="collapse"] { } summary.version-header::before { - @include chevron-indicator($margin-right: 16px, $color: #fff); + @include chevron-indicator($margin-right: 16px, $color: $osv-text-color); } &[open] > summary.version-header::before { @@ -979,7 +1074,7 @@ osv-tabs.vulnerability-packages[affordance="collapse"] { summary.version-header { background: none; font-family: $osv-heading-font-family; - color: #fff; + color: $osv-text-color; padding: 16px 0; font-size: 16px; cursor: pointer; @@ -996,7 +1091,7 @@ osv-tabs.vulnerability-packages[affordance="collapse"] { } .versions-separator { - border-bottom: 1px dashed #fff; + border-bottom: 1px dashed $osv-text-color; } .version { @@ -1026,7 +1121,7 @@ osv-tabs.vulnerability-packages[affordance="collapse"] { summary.database-specific-header { background: none; font-family: $osv-heading-font-family; - color: #fff; + color: $osv-text-color; padding: 16px 0; font-size: 16px; display: flex; @@ -1034,7 +1129,7 @@ osv-tabs.vulnerability-packages[affordance="collapse"] { cursor: pointer; &::before { - @include chevron-indicator($color: #fff); + @include chevron-indicator($color: $osv-text-color); } } @@ -1055,8 +1150,8 @@ osv-tabs.vulnerability-packages[affordance="collapse"] { summary.package-header { width: 100%; - background: #393939; - color: #fff; + background: $osv-grey-800; + color: $osv-text-color; padding: 16px; margin-bottom: 2px; border-radius: 0; @@ -1066,27 +1161,41 @@ osv-tabs.vulnerability-packages[affordance="collapse"] { cursor: pointer; display: block; + html[data-theme="light"] & { + background: $osv-grey-700; + } + &::before { - @include chevron-indicator($color: #fff); + @include chevron-indicator($color: $osv-text-color); } &:hover { - background: #4F4F4F; + background: $osv-grey-700; + html[data-theme="light"] & { + background: $osv-grey-600; + } } } .ecosystem-accordion[open] > summary.package-header { - background: #fff; + background: $osv-grey-100; color: $osv-accent-color; font-weight: bold; + html[data-theme="light"] & { + background: $osv-grey-600; + } + &::before { transform: rotate(90deg); background-color: $osv-accent-color; } &:hover { - background: #f0f0f0; + background: $osv-grey-200; + html[data-theme="light"] & { + background: $osv-grey-500; + } } } @@ -1102,7 +1211,7 @@ osv-tabs.vulnerability-packages[affordance="collapse"] { top: 0; bottom: 0; width: 1px; - background: #555; + background: $osv-grey-600; } } @@ -1143,7 +1252,7 @@ osv-tabs.vulnerability-packages[affordance="collapse"] { width: 8px; top: 20px; height: 1px; - background: #555; + background: $osv-grey-600; } } @@ -1156,22 +1265,22 @@ osv-tabs.vulnerability-packages[affordance="collapse"] { font-family: $osv-heading-font-family; font-size: 1.1rem; font-weight: bold; - color: #f1f1f1; + color: $osv-text-color; padding: 12px 16px; cursor: pointer; - background: #333333; + background: $osv-ecosystems-bg; border: 1px solid #444; border-radius: 0; display: block; &::before { - @include chevron-indicator($color: #fff); + @include chevron-indicator($color: $osv-text-color); vertical-align: middle; } } .package-accordion[open] > summary.package-name-title { - border-bottom: 1px dashed #fff; + border-bottom: 1px dashed $osv-grey-600; &::before { transform: rotate(90deg); @@ -1179,7 +1288,7 @@ osv-tabs.vulnerability-packages[affordance="collapse"] { } .package-accordion .package-details-card { - background: #333333; + background: $osv-ecosystems-bg; border: 1px solid #444; border-top: none; border-radius: 0; @@ -1223,15 +1332,18 @@ osv-tabs.vulnerability-packages[affordance="collapse"] { } &[expanded] { - background: #fff; + background: $osv-text-color; color: $osv-accent-color; + html[data-theme="light"] & { + background: $osv-grey-300; + } } width: 100%; } &[affordance="tab-bar"] h2.package-header { - cursor: default; + cursor: pointer; // Default tab spacing of 20px. First tab should match grid margin. margin-left: 20px; @@ -1242,7 +1354,7 @@ osv-tabs.vulnerability-packages[affordance="collapse"] { // Selected tab styling. &[tabindex="0"] { - background: #fff; + background: $osv-tab-active; color: $osv-accent-color; border-bottom: 1px solid $osv-accent-color; } @@ -1265,12 +1377,12 @@ osv-tabs.vulnerability-packages[affordance="collapse"] { // Tab panel styling. [role="tabpanel"] { - border-top: 1px dashed #fff; + border-top: 1px dashed $osv-text-color; } .vulnerability-package-subsection { padding: 14px 0; - border-bottom: 1px dashed #fff; + border-bottom: 1px dashed $osv-text-color; } .severity { @@ -1290,6 +1402,10 @@ osv-tabs.vulnerability-packages[affordance="collapse"] { background: url('/static/img/background-1.webp'); background-repeat: no-repeat; background-position: calc(50% - 70px) top; + + html[data-theme="light"] & { + background-image: url('/static/img/background-1-light.webp'); + } } .mdc-layout-grid.home-page { @@ -1348,7 +1464,7 @@ osv-tabs.vulnerability-packages[affordance="collapse"] { .ecosystem-counts-wrapper { position: relative; - background: #333; + background: $osv-ecosystems-bg; margin-top: 20px; height: $ecosystem-count-wrapper-height; @@ -1400,7 +1516,7 @@ osv-tabs.vulnerability-packages[affordance="collapse"] { padding-bottom: 12px; /* Custom scrollbar styling */ - scrollbar-color: #555 #2c2c2c; + scrollbar-color: $osv-grey-600 $osv-background; scrollbar-width: thin; /* For WebKit browsers (Chrome, Safari) */ @@ -1409,16 +1525,16 @@ osv-tabs.vulnerability-packages[affordance="collapse"] { } &::-webkit-scrollbar-track { - background: #2c2c2c; /* Track color */ + background: $osv-background; /* Track color */ } &::-webkit-scrollbar-thumb { - background-color: #555; /* Thumb color */ + background-color: $osv-grey-600; /* Thumb color */ border-radius: 4px; } &::-webkit-scrollbar-thumb:hover { - background-color: #777; + background-color: $osv-grey-800; } .ecosystem-name { @@ -1430,6 +1546,7 @@ osv-tabs.vulnerability-packages[affordance="collapse"] { justify-content: center; text-align: center; font-family: $osv-heading-font-family; + } .ecosystem-count-wrapper { @@ -1457,9 +1574,9 @@ osv-tabs.vulnerability-packages[affordance="collapse"] { .tooltip { display: none; - color: $osv-text-color; + color: $osv-white; position: absolute; - background: #11111199; + background: $osv-tooltip-bg; max-width: 250px; line-height: 16px; padding: 5px; @@ -1529,6 +1646,10 @@ osv-tabs.vulnerability-packages[affordance="collapse"] { background-repeat: no-repeat; margin-top: 0; padding-top: 205px; + + html[data-theme="light"] & { + background-image: url('/static/img/background-2-light.webp'); + } } .github-action { @@ -1621,7 +1742,7 @@ osv-tabs.vulnerability-packages[affordance="collapse"] { .code-card { position: relative; - background: #202020; + background: $osv-code-bg; border-radius: 10px; padding: 32px; margin-bottom: 32px; @@ -1629,6 +1750,10 @@ osv-tabs.vulnerability-packages[affordance="collapse"] { .code-card-title { color: #C5221F; font-size: 28px; + + html[data-theme="light"] & { + color: $osv-text-color; + } } .code-card-content { @@ -1685,6 +1810,10 @@ osv-tabs.vulnerability-packages[affordance="collapse"] { background-repeat: no-repeat; background-position: center; min-height: 500px; + + html[data-theme="light"] & { + background-image: url('/static/img/footer-decoration-light.webp'); + } } } @@ -1717,7 +1846,7 @@ osv-tabs.vulnerability-packages[affordance="collapse"] { pre.big-code-block { padding: 10px; - background-color: #202020; + background-color: $osv-code-bg; overflow-x: scroll; width: 100%; } @@ -1929,6 +2058,10 @@ div.highlight { width: 100%; position: absolute; left: 0; + + html[data-theme="light"] & { + background-image: url('/static/img/footer-decoration-light.webp'); + } } } @@ -1937,7 +2070,7 @@ div.highlight { position: relative; display: flex; align-items: center; - height: 24px; /* Match the GitHub icon height */ + height: 24px; /* Match the GitHub icon height */ @media (max-width: 990px) { // Max width to prevent navbar from overlapping on other navbar elements display: none; @@ -1954,7 +2087,7 @@ div.highlight { .search-toggle { background: transparent; border: none; - color: white; + color: $osv-text-color; cursor: pointer; padding: 8px; display: flex; @@ -1964,12 +2097,12 @@ div.highlight { border-radius: 50%; &:hover { - background-color: rgba(255, 255, 255, 0.1); + background-color: $osv-hover-bg; } &:focus { outline: none; - background-color: rgba(255, 255, 255, 0.1); + background-color: $osv-hover-bg; } &.active { @@ -1993,14 +2126,17 @@ div.highlight { width: 0; overflow: hidden; transition: width 0.3s ease, opacity 0.3s ease, visibility 0.3s ease; - background: rgba(41, 41, 41, 0.95); border-radius: 24px; z-index: 1000; opacity: 0; visibility: hidden; - border: 1px solid rgba(255, 255, 255, 0.3); + border: 1px solid $osv-search-border; box-sizing: border-box; + html[data-theme="light"] & { + background: $osv-search-bg; + } + &.active { width: 280px; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); @@ -2021,14 +2157,6 @@ div.highlight { height: 36px; line-height: 36px; box-sizing: border-box; - - &::placeholder { - color: rgba(255, 255, 255, 0.7); - } - - &:focus::placeholder { - color: rgba(255, 255, 255, 0.5); - } } .search-submit { @@ -2080,6 +2208,7 @@ div.highlight { cursor: pointer; color: $osv-text-color; transition: background-color 0.15s ease; + background: $osv-background; &:last-child { border-bottom: none; @@ -2130,6 +2259,9 @@ div.highlight { &:hover, &--selected { background: rgba($osv-accent-color, 0.2); + html[data-theme="light"] & { + background: $osv-grey-700; + } } } } @@ -2160,7 +2292,7 @@ div.highlight { .theme-toggle-btn { background: transparent; border: none; - color: white; + color: $osv-text-color; cursor: pointer; padding: 8px; display: flex; @@ -2170,7 +2302,7 @@ div.highlight { border-radius: 50%; &:hover { - background-color: rgba(255, 255, 255, 0.1); + background-color: $osv-hover-bg; } .icon-dark-mode { display: none; } From b448ac6db43df3bc46b8bd7bdc89cbf136d2033e Mon Sep 17 00:00:00 2001 From: Tim Zhang Date: Thu, 26 Feb 2026 08:47:35 +1100 Subject: [PATCH 4/5] fix: set sharper logo image for web dark and light mode --- gcp/website/frontend3/img/logo-dark.png | Bin 615 -> 2271 bytes gcp/website/frontend3/img/logo-dark@2x.png | Bin 1023 -> 0 bytes gcp/website/frontend3/img/logo-dark@4x.png | Bin 0 -> 11350 bytes gcp/website/frontend3/img/logo.png | Bin 956 -> 2102 bytes gcp/website/frontend3/img/logo@2x.png | Bin 1917 -> 0 bytes gcp/website/frontend3/img/logo@4x.png | Bin 0 -> 10442 bytes .../frontend3/img/original-logo-dark.png | Bin 0 -> 28765 bytes gcp/website/frontend3/img/original-logo.png | Bin 0 -> 24175 bytes gcp/website/frontend3/src/base.html | 4 ++-- 9 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 gcp/website/frontend3/img/logo-dark@2x.png create mode 100644 gcp/website/frontend3/img/logo-dark@4x.png delete mode 100644 gcp/website/frontend3/img/logo@2x.png create mode 100644 gcp/website/frontend3/img/logo@4x.png create mode 100644 gcp/website/frontend3/img/original-logo-dark.png create mode 100644 gcp/website/frontend3/img/original-logo.png diff --git a/gcp/website/frontend3/img/logo-dark.png b/gcp/website/frontend3/img/logo-dark.png index 88d05391e6c9acb9b82c50435a017a65aee16787..b4bbd528f19ec8bb88720b3d15cf9a40853a2b49 100644 GIT binary patch delta 2244 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 IlM^NF-!50~ng9R* delta 574 zcmV-E0>S;?5$6OxiBL{Q4GJ0x0000DNk~Le0000s0000K2nGNE0LCHC-~a#s0drDE zLIK&yEPnt100d`2O+f$vv5yPy00FB>L_t(o!?jpVP69C)eJzqGt8obl2`t26 z*Bj^+Jc2iv8w{Sna1ypFQY)Zpzn4(6H+EgcTF1wNIob%-fxfbG zB%x+T|3cOaHY#EjKM>5>TAalGUhbG9ued-p3o025d!;}jVYNG?el+*A%UE{4-@^_}vkyDWK zDgT(I-hw{lQUstjRZ8Ae5}h$1?<8>lgWYAxo62R2HlbYOQV4mHYoxMG9VwqEA)h_} zh~-e#wdoY~ZFr^}dI~$_9+hHhkcRdgU+_?@++qYD{VD$%$l1hy0a2$YhbGFb+W-In M07*qoM6N<$f?QtpU;qFB diff --git a/gcp/website/frontend3/img/logo-dark@2x.png b/gcp/website/frontend3/img/logo-dark@2x.png deleted file mode 100644 index 6153407b93a0a80af768688a0eadcba50fbd5fa3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1023 zcmVz@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy24YJ`L;(B%`vClT9V8_H000SaNLh0L02UhC;RMYM>Nn^Tq>Yf^HN2pTh&2xpC|YF`|BT08@awMU@0%IVtY-y0 z*5UqvaozLf+gE|e%SA35dA8A`)X9dIhz$}4a3OMSlEsEDl`b}5bvQw)(+gFULaxL8 z1H%#Z6naQ*pr~k5%GE?GHHh^kQh*d{m{_u{lYt`@+MbOv2cS~%Y@6OPC!^W$&N<>^ zuTCtbQb&q!O7kf=ViqZ@bUPsi-X!4aGZ(s{if@xChji;}Z|U1mx){{;{g?*b2Ijiw zxuil#sch=}Z%cpmy*~hP_k2E8X2*rmI)!f4QFj*|C13^;at{E0!OQ?mPW5!+n~Gwe z9l7;Tqy@%02VdQM;+>vCSfya}iUM{PLQxC##P$f`3s)zgsxCLTbI>mPJeT+wqD2h{pW zpG`YhJOyBVei@j_5Bz){BQ>P#mAL6hpReD?x}5j*r}GNtC4h3n*13UsaiXVB&UHDb z@;a_hN4YKGVz}nZ$DM&dr2ugzmH^ERq`t>uTn8zHALZ;h6)g&fvE?N~4Hzqr`%Fuv z04o$Q7d|qUu~YOg|9V=KzMkYdUKaW}hcYd-6;wf`2-T2h=r1@;v|?9`9RIA5P2_TT ztLxB842Q`g4dx)I4evINkWuL&b1_IRAo$9`A%B!{Fb*YS$i;cZ;=@a%G7ObB<~F$$ t^XI$&{s(Ysd9nd3_bMxgtNEB<{RWSdXgWsCKtKQh002ovPDHLkV1i2R!AJlA diff --git a/gcp/website/frontend3/img/logo-dark@4x.png b/gcp/website/frontend3/img/logo-dark@4x.png new file mode 100644 index 0000000000000000000000000000000000000000..765f12a57c6c414805aa2cfbd43766cdc67e86c6 GIT binary patch literal 11350 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 DMWBKh diff --git a/gcp/website/frontend3/img/logo@4x.png b/gcp/website/frontend3/img/logo@4x.png new file mode 100644 index 0000000000000000000000000000000000000000..51ab9fcb71e56c5f7fd0694401069a51a5f8359a GIT binary patch literal 10442 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 Cnu*>3 literal 0 HcmV?d00001 diff --git a/gcp/website/frontend3/img/original-logo-dark.png b/gcp/website/frontend3/img/original-logo-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..8d95b51e8d45162a2069b416c524f30b779990e3 GIT binary patch literal 28765 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≠X8B`&D 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 !7}$$t-xE<(E~#wXoW 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 H6BhY@DnAr* literal 0 HcmV?d00001 diff --git a/gcp/website/frontend3/src/base.html b/gcp/website/frontend3/src/base.html index d5df4178829..130ae462026 100644 --- a/gcp/website/frontend3/src/base.html +++ b/gcp/website/frontend3/src/base.html @@ -48,9 +48,9 @@
    From 262265b3aa72a19edb015b0cecc5fc5bd9c1147f Mon Sep 17 00:00:00 2001 From: Tim Zhang Date: Thu, 26 Feb 2026 08:58:48 +1100 Subject: [PATCH 5/5] feat: dynamically style blog code blocks based on light/dark theme --- gcp/website/blog/hugo.toml | 6 +- gcp/website/frontend3/src/styles.scss | 166 ++++++++++++++++++++++++++ 2 files changed, 169 insertions(+), 3 deletions(-) diff --git a/gcp/website/blog/hugo.toml b/gcp/website/blog/hugo.toml index 44b6e779e7e..75a73d1ba5a 100644 --- a/gcp/website/blog/hugo.toml +++ b/gcp/website/blog/hugo.toml @@ -2,6 +2,6 @@ baseURL = 'http://osv.dev/blog/' languageCode = 'en-us' title = 'OSV Blog' [markup] -[markup.highlight] -style = 'native' -tabWidth = 2 + [markup.highlight] + noClasses = false + tabWidth = 2 diff --git a/gcp/website/frontend3/src/styles.scss b/gcp/website/frontend3/src/styles.scss index 708b14c5313..b584a768d10 100644 --- a/gcp/website/frontend3/src/styles.scss +++ b/gcp/website/frontend3/src/styles.scss @@ -2319,3 +2319,169 @@ html[data-theme="light"] .theme-toggle-btn { display: flex; justify-content: center; } + +/* Syntax Highlighting */ +.chroma { + padding: 1em; + margin: 1em 0; + border-radius: 4px; + overflow: auto; +} + +/* Dark theme (Native) */ +[data-theme="dark"] .chroma { + color: #d0d0d0; + background-color: #202020; + .err { color:#a61717;background-color:#e3d2d2 } + .lnlinks { outline:none;text-decoration:none;color:inherit } + .lntd { vertical-align:top;padding:0;margin:0;border:0; } + .lntable { border-spacing:0;padding:0;margin:0;border:0; } + .hl { background-color:#363636 } + .lnt { white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#686868 } + .ln { white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#686868 } + .line { display:flex; } + .k { color:#6ab825;font-weight:bold } + .kc { color:#6ab825;font-weight:bold } + .kd { color:#6ab825;font-weight:bold } + .kn { color:#6ab825;font-weight:bold } + .kp { color:#6ab825 } + .kr { color:#6ab825;font-weight:bold } + .kt { color:#6ab825;font-weight:bold } + .na { color:#bbb } + .nc { color:#447fcf;text-decoration:underline } + .no { color:#40ffff } + .nd { color:#ffa500 } + .ne { color:#bbb } + .nn { color:#447fcf;text-decoration:underline } + .nt { color:#6ab825;font-weight:bold } + .nb { color:#24909d } + .bp { color:#24909d } + .nv { color:#40ffff } + .vc { color:#40ffff } + .vg { color:#40ffff } + .vi { color:#40ffff } + .vm { color:#40ffff } + .nf { color:#447fcf } + .fm { color:#447fcf } + .s { color:#ed9d13 } + .sa { color:#ed9d13 } + .sb { color:#ed9d13 } + .sc { color:#ed9d13 } + .dl { color:#ed9d13 } + .sd { color:#ed9d13 } + .s2 { color:#ed9d13 } + .se { color:#ed9d13 } + .sh { color:#ed9d13 } + .si { color:#ed9d13 } + .sx { color:#ffa500 } + .sr { color:#ed9d13 } + .s1 { color:#ed9d13 } + .ss { color:#ed9d13 } + .m { color:#3677a9 } + .mb { color:#3677a9 } + .mf { color:#3677a9 } + .mh { color:#3677a9 } + .mi { color:#3677a9 } + .il { color:#3677a9 } + .mo { color:#3677a9 } + .ow { color:#6ab825;font-weight:bold } + .c { color:#999;font-style:italic } + .ch { color:#999;font-style:italic } + .cm { color:#999;font-style:italic } + .c1 { color:#999;font-style:italic } + .cs { color:#e50808;background-color:#520000;font-weight:bold } + .cp { color:#cd2828;font-weight:bold } + .cpf { color:#cd2828;font-weight:bold } + .gd { color:#d22323 } + .ge { font-style:italic } + .gr { color:#d22323 } + .gh { color:#fff;font-weight:bold } + .gi { color:#589819 } + .go { color:#ccc } + .gp { color:#aaa } + .gs { font-weight:bold } + .gu { color:#fff;text-decoration:underline } + .gt { color:#d22323 } + .gl { text-decoration:underline } + .w { color:#666 } +} + +/* Light theme (Catppuccin-latte) */ +[data-theme="light"] .chroma { + color: #4c4f69; + background-color: #e9ecf1; + + .err { color: #d20f39; } + .lnlinks { outline: none; text-decoration: none; color: inherit; } + .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; } + .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; } + .hl { background-color: #bcc0cc; } + .lnt { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em; color: #8c8fa1; } + .ln { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em; color: #8c8fa1; } + .line { display: flex; } + .k { color: #8839ef; } + .kc { color: #fe640b; } + .kd { color: #d20f39; } + .kn { color: #179299; } + .kp { color: #8839ef; } + .kr { color: #8839ef; } + .kt { color: #d20f39; } + .na { color: #1e66f5; } + .nc { color: #df8e1d; } + .no { color: #df8e1d; } + .nd { color: #1e66f5; font-weight: bold; } + .ni { color: #179299; } + .ne { color: #fe640b; } + .nl { color: #04a5e5; } + .nn { color: #fe640b; } + .py { color: #fe640b; } + .nt { color: #8839ef; } + .nb { color: #04a5e5; } + .bp { color: #04a5e5; } + .nv { color: #dc8a78; } + .vc { color: #dc8a78; } + .vg { color: #dc8a78; } + .vi { color: #dc8a78; } + .vm { color: #dc8a78; } + .nf { color: #1e66f5; } + .fm { color: #1e66f5; } + .s { color: #40a02b; } + .sa { color: #d20f39; } + .sb { color: #40a02b; } + .sc { color: #40a02b; } + .dl { color: #1e66f5; } + .sd { color: #9ca0b0; } + .s2 { color: #40a02b; } + .se { color: #1e66f5; } + .sh { color: #9ca0b0; } + .si { color: #40a02b; } + .sx { color: #40a02b; } + .sr { color: #179299; } + .s1 { color: #40a02b; } + .ss { color: #40a02b; } + .m { color: #fe640b; } + .mb { color: #fe640b; } + .mf { color: #fe640b; } + .mh { color: #fe640b; } + .mi { color: #fe640b; } + .il { color: #fe640b; } + .mo { color: #fe640b; } + .o { color: #04a5e5; font-weight: bold; } + .ow { color: #04a5e5; font-weight: bold; } + .c { color: #9ca0b0; font-style: italic; } + .ch { color: #acb0be; font-style: italic; } + .cm { color: #9ca0b0; font-style: italic; } + .c1 { color: #9ca0b0; font-style: italic; } + .cs { color: #9ca0b0; font-style: italic; } + .cp { color: #9ca0b0; font-style: italic; } + .cpf { color: #9ca0b0; font-weight: bold; font-style: italic; } + .gd { color: #d20f39; background-color: #ccd0da; } + .ge { font-style: italic; } + .gr { color: #d20f39; } + .gh { color: #fe640b; font-weight: bold; } + .gi { color: #40a02b; background-color: #ccd0da; } + .gs { font-weight: bold; } + .gu { color: #fe640b; font-weight: bold; } + .gt { color: #d20f39; } + .gl { text-decoration: underline; } +}