From 771bc63142a5a2bc75ebf4bc344fef248b05be47 Mon Sep 17 00:00:00 2001 From: Felipe Lima Date: Wed, 27 May 2026 21:12:39 -0400 Subject: [PATCH 1/3] feat(theme): align docs theme with brand-book Default variant Replaces the off-brand teal/cream palette with the brand-book Default variant tokens (grayscale chrome, monochrome --primary). Because Default primary is near-black/near-white and would kill link visibility, every "accent" surface (markdown links, sidebar active, table thead underline, blockquote stripe, transport hover, mermaid primary, homepage hover, timeline gradient, search modal accents, admonition info) routes through the --info token (TagoIO blue) instead. Logos: replaces the legacy hand-drawn SVGs with the canonical brand-book master mark and the five sub-product logomarks (IO pill, RUN pill, Deploy rocket, Core atom, TiP pill). Each ships as a black+white pair so ThemedImage flips them with the active mode. Homepage feature cards now render monochrome sub-product marks instead of the colored 3D PNGs. OG renderer updated to the Default dark palette. Typography: installs @fontsource-variable/inter and @fontsource/monaspace-neon, drops the Google Fonts , and adds the body font-feature-settings, font-optical-sizing, font-synthesis rules Inter needs to render correctly. Code blocks now use Monaspace Neon. Homepage CTAs: switched to pill shape (border-radius: 999px) and the brand-book primary/foreground tokens. Misc fixes: - Docusaurus default --docusaurus-highlighted-code-line-bg is an opaque charcoal that destroyed contrast on light surfaces; overridden to an info-tinted overlay. - Mermaid stadium/pill nodes had a legacy "dark text" override that broke when the mermaid primary moved to info-blue; now every node label paints white in both modes. - Mermaid block-beta labels in the tagotip envelope diagram needed shrinking + centering to fit within the column-based fixed widths. Scoped to svg[aria-roledescription="block"] so other diagrams stay at default size. --- docusaurus.config.ts | 15 +- package-lock.json | 20 + package.json | 2 + src/components/HomepageFeatures/index.tsx | 30 +- .../HomepageFeatures/styles.module.css | 47 +-- src/css/custom.css | 396 ++++++++++-------- src/og/docs-renderer.tsx | 29 +- src/pages/index.module.css | 32 +- src/pages/index.tsx | 4 +- src/pages/search.module.css | 38 +- src/theme/Openapi-Store.tsx | 6 + src/theme/SearchBar/styles.module.css | 38 +- static/img/tagocore-mark-black.svg | 8 + static/img/tagocore-mark-white.svg | 8 + static/img/tagodeploy-mark-black.svg | 4 + static/img/tagodeploy-mark-white.svg | 4 + static/img/tagoio-logo-blue.svg | 13 - static/img/tagoio-logo-white.png | Bin 19542 -> 4979 bytes static/img/tagoio-mark-black.svg | 3 + static/img/tagoio-mark-white.svg | 3 + static/img/tagoio-official-logo-white.svg | 13 +- static/img/tagoio-official-logo.svg | 15 +- static/img/tagorun-icon-original.png | Bin 13545 -> 0 bytes static/img/tagorun-mark-black.svg | 4 + static/img/tagorun-mark-white.svg | 4 + static/img/tagotip-mark-black.svg | 1 + static/img/tagotip-mark-white.svg | 1 + static/img/tip-logo.png | Bin 13325 -> 0 bytes 28 files changed, 439 insertions(+), 299 deletions(-) create mode 100644 static/img/tagocore-mark-black.svg create mode 100644 static/img/tagocore-mark-white.svg create mode 100644 static/img/tagodeploy-mark-black.svg create mode 100644 static/img/tagodeploy-mark-white.svg delete mode 100644 static/img/tagoio-logo-blue.svg create mode 100644 static/img/tagoio-mark-black.svg create mode 100644 static/img/tagoio-mark-white.svg delete mode 100644 static/img/tagorun-icon-original.png create mode 100644 static/img/tagorun-mark-black.svg create mode 100644 static/img/tagorun-mark-white.svg create mode 100644 static/img/tagotip-mark-black.svg create mode 100644 static/img/tagotip-mark-white.svg delete mode 100644 static/img/tip-logo.png diff --git a/docusaurus.config.ts b/docusaurus.config.ts index c9a61032..3476e242 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -130,7 +130,6 @@ const config: Config = { ], themes: ["docusaurus-theme-openapi-docs", "@docusaurus/theme-mermaid"], - stylesheets: ["https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"], clientModules: [require.resolve("./src/theme/Openapi-Store.tsx")], @@ -187,8 +186,8 @@ const config: Config = { alt: "TagoIO Logo", src: "img/tagoio-official-logo.svg", srcDark: "img/tagoio-official-logo-white.svg", - width: 110, - height: 26, + width: 99, + height: 28, }, items: [ { @@ -252,14 +251,14 @@ const config: Config = { }, options: { themeVariables: { - primaryColor: "#2cb1bc", - primaryTextColor: "#ffffff", + primaryColor: "#0067C0", + primaryTextColor: "#FCFCFC", primaryBorderColor: "transparent", - lineColor: "#707070", + lineColor: "#A1A1A1", edgeLabelBackground: "transparent", clusterBkg: "transparent", - clusterBorder: "#2a2a2a", - fontFamily: "Menlo, Consolas, 'Liberation Mono', Courier, monospace", + clusterBorder: "#404040", + fontFamily: "'Monaspace Neon', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace", fontSize: "16px", }, }, diff --git a/package-lock.json b/package-lock.json index 4c7f61eb..250d6036 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,8 @@ "@docusaurus/core": "3.9.2", "@docusaurus/preset-classic": "3.9.2", "@docusaurus/theme-mermaid": "^3.9.2", + "@fontsource-variable/inter": "^5.2.8", + "@fontsource/monaspace-neon": "^5.2.5", "@mdx-js/react": "^3.1.0", "clsx": "^2.0.0", "docusaurus-plugin-openapi-docs": "^4.7.1", @@ -5335,6 +5337,24 @@ "deprecated": "Please update to a newer version.", "license": "MIT" }, + "node_modules/@fontsource-variable/inter": { + "version": "5.2.8", + "resolved": "https://registry.npmjs.org/@fontsource-variable/inter/-/inter-5.2.8.tgz", + "integrity": "sha512-kOfP2D+ykbcX/P3IFnokOhVRNoTozo5/JxhAIVYLpea/UBmCQ/YWPBfWIDuBImXX/15KH+eKh4xpEUyS2sQQGQ==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@fontsource/monaspace-neon": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/@fontsource/monaspace-neon/-/monaspace-neon-5.2.5.tgz", + "integrity": "sha512-TjSSuHC37DroyhP5YCKRCAxdUb3In/uqHzqqW/8Ul+JWilz37d8lr8jFeapnbD3QdYXgiQoU2Rf/CmTdyl06DA==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", diff --git a/package.json b/package.json index 6da27b32..ea1b1a70 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,8 @@ "@docusaurus/core": "3.9.2", "@docusaurus/preset-classic": "3.9.2", "@docusaurus/theme-mermaid": "^3.9.2", + "@fontsource-variable/inter": "^5.2.8", + "@fontsource/monaspace-neon": "^5.2.5", "@mdx-js/react": "^3.1.0", "clsx": "^2.0.0", "docusaurus-plugin-openapi-docs": "^4.7.1", diff --git a/src/components/HomepageFeatures/index.tsx b/src/components/HomepageFeatures/index.tsx index ef54b7ab..0213e813 100644 --- a/src/components/HomepageFeatures/index.tsx +++ b/src/components/HomepageFeatures/index.tsx @@ -1,29 +1,32 @@ import Link from "@docusaurus/Link"; import useBaseUrl from "@docusaurus/useBaseUrl"; import Heading from "@theme/Heading"; +import ThemedImage from "@theme/ThemedImage"; import type { ReactNode } from "react"; import styles from "./styles.module.css"; type FeatureItem = { title: string; - imgSrc: string; + imgLight: string; + imgDark: string; href: string; description: ReactNode; }; -function Feature({ title, imgSrc, href, description }: FeatureItem) { +function Feature({ title, imgLight, imgDark, href, description }: FeatureItem) { return (
- {title}
@@ -41,7 +44,8 @@ export default function HomepageFeatures(): ReactNode { const FeatureList: FeatureItem[] = [ { title: "TagoIO Platform", - imgSrc: "/img/tagoio-icon-original.png", + imgLight: "/img/tagoio-mark-black.svg", + imgDark: "/img/tagoio-mark-white.svg", href: "/docs/tagoio/getting-started", description: ( <> @@ -53,7 +57,8 @@ export default function HomepageFeatures(): ReactNode { }, { title: "TagoRUN", - imgSrc: "/img/tagorun-icon-original.png", + imgLight: "/img/tagorun-mark-black.svg", + imgDark: "/img/tagorun-mark-white.svg", href: "/docs/tagoio/tagorun", description: ( <> @@ -65,7 +70,8 @@ export default function HomepageFeatures(): ReactNode { }, { title: "TagoDeploy", - imgSrc: "/img/tagodeploy-icon-original.png", + imgLight: "/img/tagodeploy-mark-black.svg", + imgDark: "/img/tagodeploy-mark-white.svg", href: "/docs/tagodeploy", description: ( <> @@ -77,7 +83,8 @@ export default function HomepageFeatures(): ReactNode { }, { title: "TagoCore", - imgSrc: "/img/tagocore-icon-original.png", + imgLight: "/img/tagocore-mark-black.svg", + imgDark: "/img/tagocore-mark-white.svg", href: "/docs/tagocore", description: ( <> @@ -89,7 +96,8 @@ export default function HomepageFeatures(): ReactNode { }, { title: "TagoTiP", - imgSrc: "/img/tip-logo.png", + imgLight: "/img/tagotip-mark-black.svg", + imgDark: "/img/tagotip-mark-white.svg", href: "/docs/tagotip", description: ( <> diff --git a/src/components/HomepageFeatures/styles.module.css b/src/components/HomepageFeatures/styles.module.css index 077da406..6d4c70d6 100644 --- a/src/components/HomepageFeatures/styles.module.css +++ b/src/components/HomepageFeatures/styles.module.css @@ -7,30 +7,29 @@ background: var(--home-features-bg); } -/* Feature card icons with stronger shadows for light mode */ +/* Monochrome SVG logomarks — color follows the active theme */ .featureImg { height: 80px; width: 80px; object-fit: contain; - transition: filter 0.3s ease; - filter: drop-shadow(0 3px 12px rgba(0, 0, 0, 0.15)); + transition: transform 0.3s ease; } -/* Icon container with stronger gradient for light mode visibility */ +/* Icon container — neutral info tint */ .featureCard > :first-child { min-height: 120px; display: flex; align-items: center; justify-content: center; - background: linear-gradient(135deg, rgba(44, 177, 188, 0.08) 0%, rgba(44, 177, 188, 0.04) 100%); + background: linear-gradient(135deg, rgba(0, 103, 192, 0.06) 0%, rgba(0, 103, 192, 0.03) 100%); border-radius: 16px; margin-bottom: 1.5rem; position: relative; overflow: hidden; - border: 1px solid rgba(44, 177, 188, 0.1); + border: 1px solid rgba(0, 103, 192, 0.1); } -/* Light mode specific stronger shine effect */ +/* Light mode shine effect */ .featureCard > :first-child::before { content: ""; position: absolute; @@ -41,18 +40,18 @@ background: linear-gradient( 135deg, transparent 0%, - rgba(44, 177, 188, 0.2) 30%, + rgba(0, 103, 192, 0.15) 30%, rgba(255, 255, 255, 0.3) 50%, - rgba(44, 177, 188, 0.15) 70%, + rgba(0, 103, 192, 0.1) 70%, transparent 100% ); opacity: 0; transition: opacity 0.3s ease; } -/* Dark mode keeps the original subtle white shine */ +/* Dark mode keeps a subtle white shine */ html[data-theme="dark"] .featureCard > :first-child::before { - background: linear-gradient(135deg, transparent 0%, rgba(255, 255, 255, 0.1) 50%, transparent 100%); + background: linear-gradient(135deg, transparent 0%, rgba(250, 250, 250, 0.08) 50%, transparent 100%); } /* Row layout for feature cards */ @@ -128,7 +127,7 @@ html[data-theme="dark"] .featureCard > :first-child::before { /* Dark theme specific adjustments */ html[data-theme="dark"] .featureCard { background: var(--surface-elevated); - border-color: #363749; + border-color: var(--border-visible); box-shadow: 0 2px 20px rgba(0, 0, 0, 0.3), 0 1px 3px rgba(0, 0, 0, 0.4); @@ -139,12 +138,12 @@ html[data-theme="dark"] .featureCard { box-shadow: 0 12px 40px rgba(0, 0, 0, 0.16), 0 8px 24px rgba(0, 0, 0, 0.12); - border-color: rgba(44, 177, 188, 0.25); + border-color: rgba(0, 103, 192, 0.3); } -/* More visible icon shadows on hover */ +/* Subtle lift on hover */ .featureCard:hover .featureImg { - filter: drop-shadow(0 6px 20px rgba(0, 0, 0, 0.25)); + transform: translateY(-2px); } /* Show shine effect on icon container */ @@ -152,29 +151,19 @@ html[data-theme="dark"] .featureCard { opacity: 1; } -/* Dark theme - stronger gradient for icon containers */ +/* Dark theme - info gradient for icon containers */ html[data-theme="dark"] .featureCard > :first-child { - background: linear-gradient(135deg, rgba(44, 177, 188, 0.08) 0%, rgba(44, 177, 188, 0.03) 100%); -} - -/* Enhanced dark theme icon shadows */ -html[data-theme="dark"] .featureImg { - filter: drop-shadow(0 2px 8px rgba(0, 0, 0, 0.3)); + background: linear-gradient(135deg, rgba(40, 166, 250, 0.1) 0%, rgba(40, 166, 250, 0.04) 100%); } /* Dark theme hover effects - enhanced lighting only */ html[data-theme="dark"] .featureCard:hover { - border-color: rgba(44, 177, 188, 0.3); + border-color: rgba(40, 166, 250, 0.4); box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4), 0 4px 16px rgba(0, 0, 0, 0.3); } -/* Enhanced dark theme icon shadows on hover */ -html[data-theme="dark"] .featureCard:hover .featureImg { - filter: drop-shadow(0 4px 16px rgba(0, 0, 0, 0.5)); -} - /* Card title styling with improved typography */ .featureCard h3 { color: var(--ifm-heading-color); @@ -187,7 +176,7 @@ html[data-theme="dark"] .featureCard:hover .featureImg { /* Title color change on hover */ .featureCard:hover h3 { - color: #2cb1bc; + color: var(--info); } /* Card description text styling */ diff --git a/src/css/custom.css b/src/css/custom.css index 4c0b5b31..b8247709 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -1,80 +1,94 @@ @import "./api-docs.css"; :root { - /* Legacy aliases (kept for any remaining references) */ - --c-blue-0: #e6f5f3; - --c-blue-70: #2cb1bc; - --c-blue-90: #1a9aa0; - --c-indigo-10: #f6f8fc; - --c-indigo-20: #e8e7e0; - --c-indigo-30: #e8e7e0; - --c-indigo-40: #ced6e0; - --c-indigo-60: #92a0b3; - --c-indigo-80: #445b78; - --c-indigo-90: #2d4665; - --c-carbon-0: #eef1f3; - --c-carbon-30: #98a2ad; - --c-carbon-90: #222d3a; - --c-carbon-100: #03060b; - --c-gray-0: #f8f9fa; - --c-gray-90: #2f2f2f; - - /* Primary: warm teal */ - --ifm-color-primary: #17888d; - --ifm-link-color: #17888d; - --ifm-link-hover-color: #126f73; + --background: #ffffff; + --foreground: #0a0a0a; + --muted: #f5f5f5; + --muted-foreground: #6f6f6f; + --accent: #f5f5f5; + --secondary: #f5f5f5; + --primary: #171717; + --primary-foreground: #fafafa; + --ring: #a1a1a1; + --border: #e5e5e5; + --input: #e5e5e5; + --destructive: #e7000b; + --destructive-foreground: #fafafa; + --success: #006a04; + --success-foreground: #fcfcfc; + --warning: #ebaa2d; + --warning-foreground: #161616; + --info: #0067c0; + --info-foreground: #fcfcfc; + + /* Links use --info so monochrome --primary stays off link surfaces. */ + --ifm-color-primary: var(--primary); + --ifm-color-primary-dark: #0f0f0f; + --ifm-color-primary-darker: #0a0a0a; + --ifm-color-primary-darkest: #050505; + --ifm-color-primary-light: #2e2e2e; + --ifm-color-primary-lighter: #3a3a3a; + --ifm-color-primary-lightest: #525252; + --ifm-link-color: var(--info); + --ifm-link-hover-color: #004f95; --ifm-font-family-base: - "Inter", -apple-system, BlinkMacSystemFont, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI emoji"; - --ifm-font-family-monospace: "SFMono-Regular", "Roboto Mono", Consolas, "Liberation Mono", Menlo, Courier, monospace; + "Inter Variable", "Inter", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, + sans-serif; + --ifm-font-family-monospace: + "Monaspace Neon", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; --ifm-font-weight-semibold: 600; --ifm-font-weight-bold: 700; --ifm-navbar-height: 3.75rem; - --ifm-navbar-background-color: #f5f5f2; - --ifm-navbar-link-color: var(--ifm-font-color-base); - --ifm-navbar-link-hover-color: initial; - - /* Light mode: warm cream */ - --ifm-background-color: #fafaf8; - --ifm-background-surface-color: #f5f5f2; - --ifm-color-content: #1a1b26; - --ifm-font-color-base: var(--ifm-color-content); - - --home-features-bg: #f5f5f2; - - --ifm-code-background: #f0efe8; - --ifm-code-border-radius: 0.4rem; - --ifm-pre-background: var(--ifm-code-background); - - --ifm-menu-color: var(--c-indigo-80); - --ifm-menu-color-active: var(--ifm-link-color); - --ifm-menu-color-background-hover: var(--ifm-hover-overlay); - --ifm-menu-color-background-active: #e6f5f3; + --ifm-navbar-background-color: var(--muted); + --ifm-navbar-link-color: var(--foreground); + --ifm-navbar-link-hover-color: var(--primary); + + --ifm-background-color: var(--background); + --ifm-background-surface-color: var(--muted); + --ifm-color-content: var(--foreground); + --ifm-font-color-base: var(--foreground); + --ifm-heading-color: var(--foreground); + + --home-features-bg: var(--muted); + + --ifm-code-background: var(--muted); + --ifm-code-border-radius: 0.5rem; + --ifm-pre-background: var(--muted); + + --ifm-menu-color: var(--muted-foreground); + --ifm-menu-color-active: var(--info); + --ifm-menu-color-background-hover: var(--accent); + --ifm-menu-color-background-active: rgba(0, 103, 192, 0.1); --ifm-menu-link-padding-vertical: 0.5rem; --dropdown-icon-width: 0.625rem; --dropdown-icon-height: 0.375rem; --dropdown-icon-gap: 0.688rem; - --ifm-menu-link-sublist-icon: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSI2IiBmaWxsPSJub25lIj48cGF0aCBzdHJva2U9IiMwMzA2MEIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Ik05IDUgNSAxIDEgNSIvPjwvc3ZnPg=="); + --ifm-menu-link-sublist-icon: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSI2IiBmaWxsPSJub25lIj48cGF0aCBzdHJva2U9IiMwQTBBMEEiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Ik05IDUgNSAxIDEgNSIvPjwvc3ZnPg=="); --ifm-menu-link-sublist-icon-filter: none; - --sidebar-border-c: #e8e7e0; - + --sidebar-border-c: var(--border); --doc-sidebar-width: 300px; --doc-item-container-width: 50rem; - --sidebar-category-c: var(--c-carbon-100); - --footer-border-c: #e8e7e0; + --sidebar-category-c: var(--foreground); + --footer-border-c: var(--border); /* Surface hierarchy */ --surface-elevated: #ffffff; - --surface-raised: #f0efe8; - --border-visible: #e8e7e0; + --surface-raised: var(--muted); + --border-visible: #d4d4d4; /* Animation durations */ --animation-fast: 200ms; --animation-medium: 300ms; --animation-slow: 500ms; + + /* Code block highlighted line — info-tinted overlay (Docusaurus default + is opaque charcoal that destroys contrast on light surfaces) */ + --docusaurus-highlighted-code-line-bg: rgba(0, 103, 192, 0.12); + /* OpenAPI specific surface color override used by plugin inline styles */ --openapi-card-background-color: var(--ifm-background-surface-color); } @@ -82,55 +96,86 @@ html[data-theme="dark"] { --ifm-color-scheme: dark; - /* Dark mode: neutral gray (VitePress-inspired) */ - --ifm-background-color: #121212; - --ifm-background-surface-color: #1a1a1a; - --ifm-color-content: #e0e0e0; - --ifm-font-color-base: var(--ifm-color-content); - --ifm-heading-color: #ebebeb; - --ifm-code-background: #161616; + --background: #0a0a0a; + --foreground: #fafafa; + --muted: #262626; + --muted-foreground: #a1a1a1; + --accent: #262626; + --secondary: #262626; + --primary: #fafafa; + --primary-foreground: #171717; + --ring: #525252; + --border: #262626; + --input: #262626; + --destructive: #82181a; + --destructive-foreground: #fafafa; + --success: #4db956; + --success-foreground: #0b0b0b; + --warning: #f9b73f; + --warning-foreground: #0b0b0b; + --info: #28a6fa; + --info-foreground: #0b0b0b; + + --ifm-color-primary-dark: #e5e5e5; + --ifm-color-primary-darker: #d4d4d4; + --ifm-color-primary-darkest: #a1a1a1; + --ifm-color-primary-light: #ffffff; + --ifm-color-primary-lighter: #ffffff; + --ifm-color-primary-lightest: #ffffff; + --ifm-link-hover-color: #5cbcfb; + + --ifm-heading-color: var(--foreground); + --ifm-code-background: var(--muted); /* Surface hierarchy */ - --surface-elevated: #1e1e1e; - --surface-raised: #252525; - --border-visible: #333333; + --surface-elevated: #1a1a1a; + --surface-raised: var(--muted); + --border-visible: #404040; /* Emphasis scale overrides */ - --ifm-color-emphasis-200: #1e1e1e; - --ifm-color-emphasis-300: #2a2a2a; - --ifm-color-emphasis-600: #707070; - --ifm-color-emphasis-700: #a0a0a0; - --ifm-color-emphasis-800: #e0e0e0; - --ifm-color-emphasis-900: #ebebeb; - --ifm-color-emphasis-1000: #ebebeb; - - --ifm-menu-color: #a0a0a0; - --ifm-menu-color-background-active: #2cb1bc1a; - --ifm-menu-link-sublist-icon-filter: invert(100%); - --sidebar-border-c: #2a2a2a; - --ifm-hover-overlay: #ffffff0d; - - /* Primary: teal for dark mode */ - --ifm-color-primary: #2cb1bc; - --ifm-link-color: #2cb1bc; - --ifm-link-hover-color: #36c5c9; - - --sidebar-category-c: #ebebeb; - --ifm-navbar-background-color: #1a1a1a; - --ifm-navbar-link-color: #e0e0e0; - --ifm-navbar-link-hover-color: #2cb1bc; - --ifm-navbar-shadow: 0 1px 0 0 #2a2a2a; - --ifm-navbar-search-input-background-color: #252525; - --ifm-navbar-search-input-color: #e0e0e0; - --ifm-navbar-search-input-placeholder-color: #707070; - --footer-border-c: #2a2a2a; - --home-features-bg: #121212; + --ifm-color-emphasis-200: #1a1a1a; + --ifm-color-emphasis-300: #262626; + --ifm-color-emphasis-600: #a1a1a1; + --ifm-color-emphasis-700: #d4d4d4; + --ifm-color-emphasis-800: #e5e5e5; + --ifm-color-emphasis-900: #f5f5f5; + --ifm-color-emphasis-1000: var(--foreground); + + --ifm-menu-color: var(--muted-foreground); + --ifm-menu-color-background-active: rgba(40, 166, 250, 0.16); + --ifm-menu-link-sublist-icon: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSI2IiBmaWxsPSJub25lIj48cGF0aCBzdHJva2U9IiNGQUZBRkEiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Ik05IDUgNSAxIDEgNSIvPjwvc3ZnPg=="); + --ifm-menu-link-sublist-icon-filter: none; + --sidebar-border-c: var(--border); + --ifm-hover-overlay: rgba(250, 250, 250, 0.06); + + --sidebar-category-c: var(--foreground); + --ifm-navbar-background-color: var(--background); + --ifm-navbar-link-color: var(--foreground); + --ifm-navbar-link-hover-color: var(--info); + --ifm-navbar-shadow: 0 1px 0 0 var(--border); + --ifm-navbar-search-input-background-color: var(--muted); + --ifm-navbar-search-input-color: var(--foreground); + --ifm-navbar-search-input-placeholder-color: var(--muted-foreground); + --footer-border-c: var(--border); + --home-features-bg: var(--background); /* TOC and misc borders */ - --ifm-toc-border-color: #2a2a2a; + --ifm-toc-border-color: var(--border); + + /* Code block highlighted line — info-tinted overlay */ + --docusaurus-highlighted-code-line-bg: rgba(40, 166, 250, 0.16); /* Keep right panel cards readable in dark */ - --openapi-card-background-color: #1e1e1e; + --openapi-card-background-color: var(--surface-elevated); +} + +/* Inter rendering rules (per brand book) */ +body { + font-feature-settings: + "liga" 1, + "calt" 1; + font-optical-sizing: auto; + font-synthesis: none; } /* Navbar */ @@ -162,7 +207,7 @@ html[data-theme="dark"] { } html[data-theme="dark"] .navbar { - box-shadow: 0 1px 0 0 #2a2a2a; + box-shadow: 0 1px 0 0 var(--border-visible); } /* Tighten navbar in narrow desktop range to prevent overlap */ @@ -270,15 +315,15 @@ html[data-theme="dark"] .home-status-badge .status-badge--dark { /* Light mode-only footer background */ html[data-theme="light"] .footer { - background: #f2f2ee; + background: var(--surface-raised); } /* Light mode footer title color for better contrast */ html[data-theme="light"] .footer__title { - color: var(--c-indigo-90); + color: var(--foreground); } /* Light mode footer bottom text color for better contrast */ html[data-theme="light"] .footer__bottom { - color: var(--c-indigo-90); + color: var(--foreground); } .navbar__link { @@ -314,7 +359,7 @@ html[data-theme="light"] .footer__bottom { /* Better contrast in dark mode */ html[data-theme="dark"] .navbar__items:not(.navbar__items--right) .navbar__link--active { - color: #2cb1bc; + color: var(--info); } /* Remove active underline bar to avoid floating blue bar */ @@ -709,7 +754,7 @@ code { text-align: center; } .changelog-timeline__item a { - color: var(--c-indigo-90) !important; + color: var(--foreground); text-decoration: none; opacity: 1; font-weight: 500; @@ -718,7 +763,7 @@ code { border-radius: 4px; } .changelog-timeline__item a:hover { - color: var(--c-indigo-90) !important; + color: var(--info); background-color: var(--ifm-hover-overlay); text-decoration: underline; text-underline-offset: 2px; @@ -726,17 +771,17 @@ code { /* Dark mode colors for better contrast */ html[data-theme="dark"] .changelog-timeline__item a { - color: #a0a0a0 !important; + color: var(--muted-foreground); } html[data-theme="dark"] .changelog-timeline__item a:hover { - color: #e0e0e0 !important; + color: var(--info); } /* Breadcrumbs – dark mode accessibility */ html[data-theme="dark"] { /* Ensure active crumb has adequate contrast without implying interactivity */ --ifm-breadcrumb-color-active: var(--ifm-font-color-base); - --ifm-breadcrumb-item-background-active: #252525; + --ifm-breadcrumb-item-background-active: var(--muted); } /* Only real links should look interactive */ html[data-theme="dark"] a.breadcrumbs__link { @@ -793,15 +838,15 @@ html[data-theme="dark"] .breadcrumbs__item--active .breadcrumbs__link { background: var(--sidebar-border-c); } .timeline--current-year:before { - background: linear-gradient(to bottom, var(--c-indigo-80), var(--sidebar-border-c)); + background: linear-gradient(to bottom, var(--info), var(--sidebar-border-c)); } -/* Improve contrast in dark mode with teal glow and animation */ +/* Improve contrast in dark mode with info glow and animation */ html[data-theme="dark"] { - --timeline-line: rgba(44, 177, 188, 0.22); - --timeline-line-strong: rgba(44, 177, 188, 0.7); - --timeline-dot: #2cb1bc; - --timeline-dot-glow: rgba(44, 177, 188, 0.35); + --timeline-line: rgba(40, 166, 250, 0.22); + --timeline-line-strong: rgba(40, 166, 250, 0.7); + --timeline-dot: var(--info); + --timeline-dot-glow: rgba(40, 166, 250, 0.35); } html[data-theme="dark"] .timeline:before { background: var(--timeline-line); @@ -830,13 +875,13 @@ html[data-theme="dark"] .timeline--current-year:before { } @keyframes pulse { 0% { - box-shadow: 0 0 0 0 rgba(44, 177, 188, 0.5); + box-shadow: 0 0 0 0 rgba(40, 166, 250, 0.5); } 70% { - box-shadow: 0 0 0 8px rgba(44, 177, 188, 0.05); + box-shadow: 0 0 0 8px rgba(40, 166, 250, 0.05); } 100% { - box-shadow: 0 0 0 0 rgba(44, 177, 188, 0.05); + box-shadow: 0 0 0 0 rgba(40, 166, 250, 0.05); } } @@ -884,19 +929,19 @@ html[data-theme="dark"] .timeline--current-year:before { color: var(--ifm-color-emphasis-700); } -/* Dark mode: teal links with semi-transparent underline */ +/* Dark mode: info-colored links with semi-transparent underline */ html[data-theme="dark"] .markdown a, html[data-theme="dark"] .theme-doc-markdown a { - color: #2cb1bc !important; + color: var(--info); text-decoration: underline; - text-decoration-color: #2cb1bc66; + text-decoration-color: rgba(40, 166, 250, 0.4); text-underline-offset: 2px; text-decoration-thickness: 1.5px; } html[data-theme="dark"] .markdown a:hover, html[data-theme="dark"] .theme-doc-markdown a:hover { - color: #36c5c9 !important; - text-decoration-color: #36c5c9; + color: var(--ifm-link-hover-color); + text-decoration-color: var(--ifm-link-hover-color); } /* Make whole card clickable affordance */ @@ -1041,7 +1086,7 @@ html[data-theme="dark"] .youtube-container { .docusaurus-mermaid-container rect.actor, .docusaurus-mermaid-container .node rect { stroke: none !important; - fill: #17888d !important; + fill: var(--info) !important; } .docusaurus-mermaid-container .actor tspan { fill: white !important; @@ -1084,39 +1129,39 @@ html[data-theme="light"] pre { /* Dark mode code blocks — inset feel */ html[data-theme="dark"] pre { - background: #161616 !important; - border: 1px solid #2a2a2a; + background: var(--muted) !important; + border: 1px solid var(--border-visible); } /* Dark mode sidebar surface */ html[data-theme="dark"] .theme-doc-sidebar-container { - background: #1a1a1a; - border-right-color: #2a2a2a; + background: var(--background); + border-right-color: var(--border); } /* Dark mode footer surface */ html[data-theme="dark"] .footer { - background: #1a1a1a; + background: var(--muted); } /* Dark mode cards — elevated surface */ html[data-theme="dark"] .timeline-card { background: var(--surface-elevated); - border-color: #2a2a2a; + border-color: var(--border-visible); } html[data-theme="dark"] .changelog-chip { background: var(--surface-elevated); - border-color: #2a2a2a; + border-color: var(--border-visible); } /* Dark mode OpenAPI cards and forms */ html[data-theme="dark"] .openapi-explorer__request-form { background: var(--surface-elevated); - border-color: #2a2a2a; + border-color: var(--border-visible); } html[data-theme="dark"] details.openapi-explorer__details-container { - background: #121212; - border-color: #2a2a2a; + background: var(--background); + border-color: var(--border-visible); } /* ============================================================ @@ -1132,52 +1177,74 @@ html[data-theme="dark"] details.openapi-explorer__details-container { } html[data-theme="dark"] .alert { border: none; - border-left: 4px solid #2cb1bc; - background: rgba(44, 177, 188, 0.06); + border-left: 4px solid var(--info); + background: rgba(40, 166, 250, 0.08); border-radius: 0 8px 8px 0; box-shadow: none; color: var(--ifm-font-color-base); } html[data-theme="dark"] .alert--warning { - border-left-color: #f0c040; - background: rgba(240, 192, 64, 0.06); + border-left-color: var(--warning); + background: rgba(249, 183, 63, 0.08); } html[data-theme="dark"] .alert--danger { - border-left-color: #f38ba8; - background: rgba(243, 139, 168, 0.06); + border-left-color: var(--destructive); + background: rgba(130, 24, 26, 0.12); } /* Heading text color matches left border */ html[data-theme="dark"] .alert--info [class*="admonitionHeading"], html[data-theme="dark"] .alert--success [class*="admonitionHeading"], html[data-theme="dark"] .alert--secondary [class*="admonitionHeading"] { - color: #2cb1bc; + color: var(--info); } html[data-theme="dark"] .alert--warning [class*="admonitionHeading"] { - color: #f0c040; + color: var(--warning); } html[data-theme="dark"] .alert--danger [class*="admonitionHeading"] { - color: #f38ba8; + color: var(--destructive); } /* ============================================================ Mermaid — shared overrides (both light and dark) ============================================================ */ -/* All node labels white — teal backgrounds need white text */ .docusaurus-mermaid-container .nodeLabel { color: #fff !important; fill: #fff !important; } -/* Light mode only: stadium/path nodes have light backgrounds — reset to dark text */ -html[data-theme="light"] .docusaurus-mermaid-container .node:has(path) .nodeLabel { - color: #333 !important; - fill: #333 !important; +/* Every node shape is filled with --info blue, so labels stay white. */ +.docusaurus-mermaid-container .node .nodeLabel, +.docusaurus-mermaid-container .node .nodeLabel *, +.docusaurus-mermaid-container .node foreignObject, +.docusaurus-mermaid-container .node foreignObject *, +.docusaurus-mermaid-container g.block .nodeLabel, +.docusaurus-mermaid-container g.block .nodeLabel *, +.docusaurus-mermaid-container g.block foreignObject, +.docusaurus-mermaid-container g.block foreignObject *, +.docusaurus-mermaid-container g.block .label, +.docusaurus-mermaid-container g.block text, +.docusaurus-mermaid-container g.block tspan { + color: #ffffff !important; + fill: #ffffff !important; +} + +/* Scoped via aria-roledescription="block" (set by mermaid on block-beta + SVGs only) so flowcharts keep default sizing. */ +.docusaurus-mermaid-container svg[aria-roledescription="block"] foreignObject { + display: flex; + align-items: center; + justify-content: center; } - -/* Block-beta text — always white on teal blocks */ -.docusaurus-mermaid-container .block .nodeLabel { - color: #fff !important; +.docusaurus-mermaid-container svg[aria-roledescription="block"] foreignObject > div { + width: 100%; +} +.docusaurus-mermaid-container svg[aria-roledescription="block"] .nodeLabel, +.docusaurus-mermaid-container svg[aria-roledescription="block"] foreignObject > div, +.docusaurus-mermaid-container svg[aria-roledescription="block"] foreignObject p, +.docusaurus-mermaid-container svg[aria-roledescription="block"] foreignObject span { + font-size: 0.82em; + text-align: center !important; } /* ============================================================ @@ -1203,8 +1270,8 @@ html[data-theme="dark"] .docusaurus-mermaid-container .label span { /* Edge labels (e.g. "TagoTiP", "TagoTiP/S") */ html[data-theme="dark"] .docusaurus-mermaid-container .labelBkg { - background: #1e1e1e !important; - outline: 1px solid rgba(44, 177, 188, 0.35); + background: var(--surface-elevated) !important; + outline: 1px solid rgba(40, 166, 250, 0.35); border-radius: 3px !important; } html[data-theme="dark"] .docusaurus-mermaid-container .labelBkg p, @@ -1230,36 +1297,35 @@ html[data-theme="dark"] .docusaurus-mermaid-container marker path { /* Secondary/tertiary node shapes (stadium, circle, etc.) — darken light fills */ html[data-theme="dark"] .docusaurus-mermaid-container .node path, html[data-theme="dark"] .docusaurus-mermaid-container .node circle { - fill: #1a5c60 !important; - stroke: #2cb1bc !important; + fill: #0a3a66 !important; + stroke: var(--info) !important; } -/* Block-beta text inside blocks */ -html[data-theme="dark"] .docusaurus-mermaid-container .block .nodeLabel, +/* Edge labels need explicit white; node labels are handled above. */ html[data-theme="dark"] .docusaurus-mermaid-container foreignObject div { color: #fff !important; } /* ============================================================ - Inline code dark mode — subtle border for distinction + Inline code: muted surface with foreground text (brand book) ============================================================ */ html[data-theme="light"] :not(pre) > code { - color: #17888d; - background: rgba(23, 136, 141, 0.08); - border: 1px solid rgba(23, 136, 141, 0.2); + color: var(--foreground); + background: var(--muted); + border: 1px solid var(--border); } html[data-theme="dark"] :not(pre) > code { - color: #2cb1bc; - background: rgba(44, 177, 188, 0.1); - border: 1px solid rgba(44, 177, 188, 0.25); + color: var(--foreground); + background: var(--muted); + border: 1px solid var(--border); } /* ============================================================ Blockquote — callout style (both modes) ============================================================ */ .markdown blockquote { - border-left: 4px solid var(--ifm-color-emphasis-300); - background: rgba(44, 177, 188, 0.05); + border-left: 4px solid var(--info); + background: rgba(0, 103, 192, 0.05); margin: 1rem 0; padding: 0.75rem 1rem; border-radius: 0 8px 8px 0; @@ -1270,7 +1336,7 @@ html[data-theme="dark"] :not(pre) > code { } /* ============================================================ - Tables — teal accent header, clean rows + Tables — primary accent header, clean rows ============================================================ */ .markdown table { display: table; @@ -1279,7 +1345,7 @@ html[data-theme="dark"] :not(pre) > code { } .markdown thead tr { background: transparent; - border-bottom: 2px solid #2cb1bc; + border-bottom: 2px solid var(--info); } .markdown thead th { font-weight: 600; @@ -1333,15 +1399,15 @@ html[data-theme="dark"] :not(pre) > code { .transport-card:hover { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); transform: translateY(-2px); - border-color: var(--ifm-color-primary); + border-color: var(--info); } html[data-theme="dark"] .transport-card { - border-color: #2a2a2a; + border-color: var(--border-visible); background: var(--surface-elevated); } html[data-theme="dark"] .transport-card:hover { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); - border-color: #2cb1bc; + border-color: var(--info); } .transport-card h3 { margin: 0 0 0.5rem; diff --git a/src/og/docs-renderer.tsx b/src/og/docs-renderer.tsx index 3cb68b04..15f0e5cd 100644 --- a/src/og/docs-renderer.tsx +++ b/src/og/docs-renderer.tsx @@ -9,6 +9,13 @@ const interBold = readFileSync(join(__dirname, "../static/fonts/Inter-Bold.ttf") const logoPng = readFileSync(join(__dirname, "../static/img/tagoio-logo-white.png")); const LOGO_DATA_URI = `data:image/png;base64,${logoPng.toString("base64")}`; +// Default dark palette +const COLOR_BG = "#0A0A0A"; +const COLOR_FG = "#FAFAFA"; +const COLOR_MUTED_FG = "#A1A1A1"; +const COLOR_ACCENT = "#28A6FA"; +const COLOR_BORDER = "#262626"; + export const docsRenderer: ImageRenderer = (data) => [ // oxlint-disable-next-line react/jsx-key -- Satori renders JSX to an image, not a React tree
= (data) => [ flexDirection: "column", width: "100%", height: "100%", - backgroundColor: "#121212", - color: "#ebebeb", + backgroundColor: COLOR_BG, + color: COLOR_FG, fontFamily: "Inter, sans-serif", }} > - {/* Teal accent bar at the top */} + {/* Primary accent bar at the top */}
@@ -44,20 +51,20 @@ export const docsRenderer: ImageRenderer = (data) => [ > {/* Logo + Documentation */}
- TagoIO + TagoIO
@@ -79,7 +86,7 @@ export const docsRenderer: ImageRenderer = (data) => [ fontSize: "52px", fontWeight: 700, lineHeight: 1.15, - color: "#ebebeb", + color: COLOR_FG, }} > {data.metadata.title} @@ -89,7 +96,7 @@ export const docsRenderer: ImageRenderer = (data) => [ style={{ fontSize: "22px", fontWeight: 400, - color: "#a0a0a0", + color: COLOR_MUTED_FG, lineHeight: 1.4, }} > @@ -108,8 +115,8 @@ export const docsRenderer: ImageRenderer = (data) => [ justifyContent: "space-between", }} > - docs.tago.io - IoT Cloud Platform + docs.tago.io + IoT Cloud Platform
, diff --git a/src/pages/index.module.css b/src/pages/index.module.css index 1fc971bb..4d01aa54 100644 --- a/src/pages/index.module.css +++ b/src/pages/index.module.css @@ -86,30 +86,36 @@ .buttons .button { font-weight: 600; padding: 0.75rem 2rem; - border-radius: 8px; + border-radius: 999px; font-size: 1rem; - transition: all 0.2s ease; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); + transition: + background var(--animation-fast) ease, + color var(--animation-fast) ease, + border-color var(--animation-fast) ease, + transform var(--animation-fast) ease; } .demoButton { - background: var(--ifm-color-emphasis-1000); - color: var(--ifm-color-emphasis-0); - border: 2px solid var(--ifm-color-emphasis-1000); + background: var(--primary); + color: var(--primary-foreground); + border: 1.5px solid var(--primary); } .demoButton:hover { - opacity: 0.9; + background: var(--ifm-color-primary-darker); + border-color: var(--ifm-color-primary-darker); + color: var(--primary-foreground); } .demoButton:active { - opacity: 0.85; + transform: translateY(1px); } .getStartedButton { - border: 2px solid var(--ifm-color-emphasis-700); - color: var(--ifm-color-emphasis-800); + background: transparent; + border: 1.5px solid var(--foreground); + color: var(--foreground); } .getStartedButton:hover { - background: var(--ifm-color-emphasis-700); - color: var(--ifm-color-emphasis-0); - border-color: var(--ifm-color-emphasis-700); + background: var(--foreground); + color: var(--background); + border-color: var(--foreground); } diff --git a/src/pages/index.tsx b/src/pages/index.tsx index fb0fc1ec..71016e88 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -21,8 +21,8 @@ function HomepageHeader() { dark: useBaseUrl("/img/tagoio-official-logo-white.svg"), }} alt="TagoIO" - width={160} - height={40} + width={158} + height={45} className={styles.brandLogo} />
diff --git a/src/pages/search.module.css b/src/pages/search.module.css index 9b1c64f2..212ec2da 100644 --- a/src/pages/search.module.css +++ b/src/pages/search.module.css @@ -1,10 +1,10 @@ .main { min-height: calc(100vh - var(--ifm-navbar-height)); - background: radial-gradient(circle at top, rgba(23, 136, 141, 0.06), transparent 55%), var(--ifm-background-color); + background: radial-gradient(circle at top, rgba(0, 103, 192, 0.06), transparent 55%), var(--ifm-background-color); } html[data-theme="dark"] .main { - background: radial-gradient(circle at top, rgba(44, 177, 188, 0.08), transparent 55%), var(--ifm-background-color); + background: radial-gradient(circle at top, rgba(0, 103, 192, 0.08), transparent 55%), var(--ifm-background-color); } .page { @@ -44,7 +44,7 @@ html[data-theme="dark"] .main { .summary { margin: 0; font-size: 0.875rem; - color: var(--c-indigo-60); + color: var(--muted-foreground); } .inputCard { @@ -64,7 +64,7 @@ html[data-theme="dark"] .main { .inputCard:focus-within { border-color: var(--ifm-color-primary); - box-shadow: 0 4px 16px rgba(23, 136, 141, 0.12); + box-shadow: 0 4px 16px rgba(0, 103, 192, 0.12); } html[data-theme="dark"] .inputCard { @@ -75,7 +75,7 @@ html[data-theme="dark"] .inputCard { html[data-theme="dark"] .inputCard:focus-within { border-color: var(--ifm-color-primary); - box-shadow: 0 4px 16px rgba(44, 177, 188, 0.18); + box-shadow: 0 4px 16px rgba(40, 166, 250, 0.16); } .inputIcon { @@ -96,7 +96,7 @@ html[data-theme="dark"] .inputCard:focus-within { } .input::placeholder { - color: var(--c-indigo-60); + color: var(--muted-foreground); font-weight: 400; } @@ -105,7 +105,7 @@ html[data-theme="dark"] .inputCard:focus-within { border: 1px solid var(--border-visible); border-radius: 6px; background: transparent; - color: var(--c-indigo-60); + color: var(--muted-foreground); font-size: 0.8125rem; font-weight: 600; cursor: pointer; @@ -136,13 +136,13 @@ html[data-theme="dark"] .clearButton:hover { gap: 0.625rem; padding: 4rem 1rem; text-align: center; - color: var(--c-indigo-60); + color: var(--muted-foreground); } .empty p { margin: 0; font-size: 0.9375rem; - color: var(--c-indigo-60); + color: var(--muted-foreground); max-width: 28rem; } @@ -159,11 +159,11 @@ html[data-theme="dark"] .empty p { } .emptyError .emptyEyebrow { - color: #c0392b; + color: var(--destructive); } html[data-theme="dark"] .emptyError .emptyEyebrow { - color: #ff6b6b; + color: var(--destructive); } .retryButton { @@ -180,7 +180,7 @@ html[data-theme="dark"] .emptyError .emptyEyebrow { } .retryButton:hover { - background: rgba(23, 136, 141, 0.08); + background: rgba(0, 103, 192, 0.08); } .spinner { @@ -236,7 +236,7 @@ html[data-theme="dark"] .groupHeader { .groupCount { font-size: 0.6875rem; font-weight: 600; - color: var(--c-indigo-60); + color: var(--muted-foreground); padding: 0.125rem 0.5rem; border-radius: 999px; background: var(--ifm-code-background); @@ -272,13 +272,13 @@ html[data-theme="dark"] .groupCount { } .resultLink:hover { - background: rgba(23, 136, 141, 0.08); + background: rgba(0, 103, 192, 0.08); text-decoration: none; color: var(--ifm-font-color-base); } html[data-theme="dark"] .resultLink:hover { - background: rgba(44, 177, 188, 0.14); + background: rgba(40, 166, 250, 0.16); } .resultIcon { @@ -290,7 +290,7 @@ html[data-theme="dark"] .resultLink:hover { height: 2.25rem; border-radius: 8px; background: var(--ifm-code-background); - color: var(--c-indigo-80); + color: var(--foreground); transition: background var(--animation-fast) ease, color var(--animation-fast) ease; @@ -339,7 +339,7 @@ html[data-theme="dark"] .resultLink:hover .resultIcon { flex-wrap: wrap; gap: 0.375rem; font-size: 0.7rem; - color: var(--c-indigo-80); + color: var(--foreground); line-height: 1.2; } @@ -352,7 +352,7 @@ html[data-theme="dark"] .resultPath { } .resultPathSep { - color: var(--c-indigo-60); + color: var(--muted-foreground); } html[data-theme="dark"] .resultPathSep { @@ -361,7 +361,7 @@ html[data-theme="dark"] .resultPathSep { .chevron { flex-shrink: 0; - color: var(--c-indigo-60); + color: var(--muted-foreground); opacity: 0; transform: translateX(-6px); transition: diff --git a/src/theme/Openapi-Store.tsx b/src/theme/Openapi-Store.tsx index 87c1b49d..d4145f21 100644 --- a/src/theme/Openapi-Store.tsx +++ b/src/theme/Openapi-Store.tsx @@ -1,3 +1,9 @@ +/* oxlint-disable import/no-unassigned-import -- font side-effect imports */ +import "@fontsource-variable/inter"; +import "@fontsource/monaspace-neon/400.css"; +import "@fontsource/monaspace-neon/500.css"; +import "@fontsource/monaspace-neon/700.css"; +/* oxlint-enable import/no-unassigned-import */ import { Provider } from "react-redux"; // Import the store creation function from the OpenAPI theme diff --git a/src/theme/SearchBar/styles.module.css b/src/theme/SearchBar/styles.module.css index 8494476d..a243a846 100644 --- a/src/theme/SearchBar/styles.module.css +++ b/src/theme/SearchBar/styles.module.css @@ -10,7 +10,7 @@ border: 1px solid var(--border-visible); border-radius: 10px; background: var(--ifm-background-surface-color); - color: var(--c-indigo-60); + color: var(--muted-foreground); font-size: 0.9375rem; cursor: pointer; transition: @@ -22,7 +22,7 @@ .searchBarTrigger:hover { border-color: var(--ifm-color-primary); background: var(--surface-elevated); - box-shadow: 0 1px 3px rgba(23, 136, 141, 0.08); + box-shadow: 0 1px 3px rgba(0, 103, 192, 0.08); } html[data-theme="dark"] .searchBarTrigger { @@ -154,7 +154,7 @@ html[data-theme="dark"] .inputRow { } .input::placeholder { - color: var(--c-indigo-60); + color: var(--muted-foreground); font-weight: 400; } @@ -168,7 +168,7 @@ html[data-theme="dark"] .inputRow { border: 1px solid var(--border-visible); border-radius: 8px; background: var(--ifm-background-surface-color); - color: var(--c-indigo-60); + color: var(--muted-foreground); cursor: pointer; font-family: inherit; transition: @@ -241,7 +241,7 @@ html[data-theme="dark"] .group + .group { .groupCount { font-size: 0.6875rem; font-weight: 600; - color: var(--c-indigo-60); + color: var(--muted-foreground); padding: 0.125rem 0.5rem; border-radius: 999px; background: var(--ifm-code-background); @@ -290,7 +290,7 @@ html[data-theme="dark"] .groupCount { height: 2rem; border-radius: 8px; background: var(--ifm-code-background); - color: var(--c-indigo-80); + color: var(--foreground); transition: background var(--animation-fast) ease, color var(--animation-fast) ease, @@ -326,7 +326,7 @@ html[data-theme="dark"] .resultIcon { flex-wrap: wrap; gap: 0.375rem; font-size: 0.7rem; - color: var(--c-indigo-80); + color: var(--foreground); line-height: 1.2; } @@ -339,7 +339,7 @@ html[data-theme="dark"] .resultPath { } .resultPathSep { - color: var(--c-indigo-60); + color: var(--muted-foreground); } html[data-theme="dark"] .resultPathSep { @@ -348,7 +348,7 @@ html[data-theme="dark"] .resultPathSep { .chevron { flex-shrink: 0; - color: var(--c-indigo-60); + color: var(--muted-foreground); opacity: 0; transform: translateX(-4px); transition: @@ -357,7 +357,7 @@ html[data-theme="dark"] .resultPathSep { } .resultItem[aria-selected="true"] .resultLink { - background: rgba(23, 136, 141, 0.08); + background: rgba(0, 103, 192, 0.08); } .resultItem[aria-selected="true"] .resultTitle { @@ -376,7 +376,7 @@ html[data-theme="dark"] .resultPathSep { } html[data-theme="dark"] .resultItem[aria-selected="true"] .resultLink { - background: rgba(44, 177, 188, 0.14); + background: rgba(40, 166, 250, 0.16); } html[data-theme="dark"] .resultItem[aria-selected="true"] .resultIcon { @@ -389,7 +389,7 @@ html[data-theme="dark"] .resultItem[aria-selected="true"] .resultIcon { .statusRow { padding: 2.5rem 1.25rem; text-align: center; - color: var(--c-indigo-60); + color: var(--muted-foreground); display: flex; flex-direction: column; align-items: center; @@ -407,7 +407,7 @@ html[data-theme="dark"] .resultItem[aria-selected="true"] .resultIcon { .statusBody { margin: 0; font-size: 0.9375rem; - color: var(--c-indigo-60); + color: var(--muted-foreground); max-width: 24rem; } @@ -416,11 +416,11 @@ html[data-theme="dark"] .statusBody { } .statusRowError .statusEyebrow { - color: #c0392b; + color: var(--destructive); } html[data-theme="dark"] .statusRowError .statusEyebrow { - color: #ff6b6b; + color: var(--destructive); } .retryButton { @@ -438,7 +438,7 @@ html[data-theme="dark"] .statusRowError .statusEyebrow { } .retryButton:hover { - background: rgba(23, 136, 141, 0.08); + background: rgba(0, 103, 192, 0.08); } /* ----------- See all results CTA ----------- */ @@ -475,7 +475,7 @@ html[data-theme="dark"] .statusRowError .statusEyebrow { .seeAllActive { border-color: var(--ifm-color-primary); border-style: solid; - background: rgba(23, 136, 141, 0.06); + background: rgba(0, 103, 192, 0.06); color: var(--ifm-color-primary); } @@ -485,7 +485,7 @@ html[data-theme="dark"] .seeAll { html[data-theme="dark"] .seeAll:hover, html[data-theme="dark"] .seeAllActive { - background: rgba(44, 177, 188, 0.12); + background: rgba(40, 166, 250, 0.14); border-color: var(--ifm-color-primary); } @@ -495,7 +495,7 @@ html[data-theme="dark"] .seeAllActive { padding: 0.75rem 1.25rem; border-top: 1px solid var(--border-visible); font-size: 0.75rem; - color: var(--c-indigo-60); + color: var(--muted-foreground); display: flex; justify-content: flex-start; gap: 1.25rem; diff --git a/static/img/tagocore-mark-black.svg b/static/img/tagocore-mark-black.svg new file mode 100644 index 00000000..6aa5ba7e --- /dev/null +++ b/static/img/tagocore-mark-black.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/static/img/tagocore-mark-white.svg b/static/img/tagocore-mark-white.svg new file mode 100644 index 00000000..02770c4f --- /dev/null +++ b/static/img/tagocore-mark-white.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/static/img/tagodeploy-mark-black.svg b/static/img/tagodeploy-mark-black.svg new file mode 100644 index 00000000..70f88ec2 --- /dev/null +++ b/static/img/tagodeploy-mark-black.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/img/tagodeploy-mark-white.svg b/static/img/tagodeploy-mark-white.svg new file mode 100644 index 00000000..6e53f1d2 --- /dev/null +++ b/static/img/tagodeploy-mark-white.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/img/tagoio-logo-blue.svg b/static/img/tagoio-logo-blue.svg deleted file mode 100644 index c38541bf..00000000 --- a/static/img/tagoio-logo-blue.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/static/img/tagoio-logo-white.png b/static/img/tagoio-logo-white.png index 999b6f587e4afcb9abde251f9441bdea7cb3365c..8aeb4bc7e5f03ad6bd61ddef786f45c7f31134a1 100644 GIT binary patch literal 4979 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 diff --git a/static/img/tagoio-mark-black.svg b/static/img/tagoio-mark-black.svg new file mode 100644 index 00000000..efca9e45 --- /dev/null +++ b/static/img/tagoio-mark-black.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/tagoio-mark-white.svg b/static/img/tagoio-mark-white.svg new file mode 100644 index 00000000..6e407982 --- /dev/null +++ b/static/img/tagoio-mark-white.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/tagoio-official-logo-white.svg b/static/img/tagoio-official-logo-white.svg index 24099956..0c4182c1 100644 --- a/static/img/tagoio-official-logo-white.svg +++ b/static/img/tagoio-official-logo-white.svg @@ -1,7 +1,12 @@ - + - - - + + + + + + + + diff --git a/static/img/tagoio-official-logo.svg b/static/img/tagoio-official-logo.svg index 35a1a44d..d3b82767 100644 --- a/static/img/tagoio-official-logo.svg +++ b/static/img/tagoio-official-logo.svg @@ -1,7 +1,12 @@ - + - - - + + - \ No newline at end of file + + + + + + + diff --git a/static/img/tagorun-icon-original.png b/static/img/tagorun-icon-original.png deleted file mode 100644 index 9658fe844a836fa4a6b8e96f6d649a0816a6f4b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13545 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 + + + diff --git a/static/img/tagorun-mark-white.svg b/static/img/tagorun-mark-white.svg new file mode 100644 index 00000000..e38fd792 --- /dev/null +++ b/static/img/tagorun-mark-white.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/img/tagotip-mark-black.svg b/static/img/tagotip-mark-black.svg new file mode 100644 index 00000000..fd54b3d4 --- /dev/null +++ b/static/img/tagotip-mark-black.svg @@ -0,0 +1 @@ + diff --git a/static/img/tagotip-mark-white.svg b/static/img/tagotip-mark-white.svg new file mode 100644 index 00000000..d44352a2 --- /dev/null +++ b/static/img/tagotip-mark-white.svg @@ -0,0 +1 @@ + diff --git a/static/img/tip-logo.png b/static/img/tip-logo.png deleted file mode 100644 index 4fdb9471ea208e56105cd67d177399e431f772de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13325 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 Date: Wed, 27 May 2026 21:49:27 -0400 Subject: [PATCH 2/3] refactor(theme): split font imports into dedicated client module The font side-effect imports lived in Openapi-Store.tsx, whose name suggests Redux store setup. Move them to src/client/load-fonts.ts so the global-font intent is clear from the file name, and register both modules in clientModules. --- docusaurus.config.ts | 2 +- src/client/load-fonts.ts | 6 ++++++ src/theme/Openapi-Store.tsx | 6 ------ 3 files changed, 7 insertions(+), 7 deletions(-) create mode 100644 src/client/load-fonts.ts diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 3476e242..54f2ac72 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -131,7 +131,7 @@ const config: Config = { themes: ["docusaurus-theme-openapi-docs", "@docusaurus/theme-mermaid"], - clientModules: [require.resolve("./src/theme/Openapi-Store.tsx")], + clientModules: [require.resolve("./src/client/load-fonts.ts"), require.resolve("./src/theme/Openapi-Store.tsx")], themeConfig: { image: "img/tago-social-card.png", diff --git a/src/client/load-fonts.ts b/src/client/load-fonts.ts new file mode 100644 index 00000000..0636e507 --- /dev/null +++ b/src/client/load-fonts.ts @@ -0,0 +1,6 @@ +/* oxlint-disable import/no-unassigned-import -- font side-effect imports */ +import "@fontsource-variable/inter"; +import "@fontsource/monaspace-neon/400.css"; +import "@fontsource/monaspace-neon/500.css"; +import "@fontsource/monaspace-neon/700.css"; +/* oxlint-enable import/no-unassigned-import */ diff --git a/src/theme/Openapi-Store.tsx b/src/theme/Openapi-Store.tsx index d4145f21..87c1b49d 100644 --- a/src/theme/Openapi-Store.tsx +++ b/src/theme/Openapi-Store.tsx @@ -1,9 +1,3 @@ -/* oxlint-disable import/no-unassigned-import -- font side-effect imports */ -import "@fontsource-variable/inter"; -import "@fontsource/monaspace-neon/400.css"; -import "@fontsource/monaspace-neon/500.css"; -import "@fontsource/monaspace-neon/700.css"; -/* oxlint-enable import/no-unassigned-import */ import { Provider } from "react-redux"; // Import the store creation function from the OpenAPI theme From 02d1610cf63a9be6b6f17265787efffce7bff9cd Mon Sep 17 00:00:00 2001 From: Felipe Lima Date: Wed, 27 May 2026 21:55:25 -0400 Subject: [PATCH 3/3] fix(theme): restore openapi details arrow contrast in dark mode The OpenAPI theme paints its
disclosure arrow as a black inline SVG and recolors it in dark mode via --ifm-menu-link-sublist-icon-filter. The Default theme PR set that variable to `none` globally because our sidebar arrow already ships with the correct stroke baked in, which silently broke the OpenAPI arrow: it stayed black on the dark background and disappeared into it. Invert the OpenAPI arrow explicitly in dark mode so the sidebar fix and the OpenAPI theme can coexist. --- src/css/api-docs.css | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/css/api-docs.css b/src/css/api-docs.css index 9babcb6a..97c4940e 100644 --- a/src/css/api-docs.css +++ b/src/css/api-docs.css @@ -305,3 +305,11 @@ details.openapi-explorer__details-container { .openapi-params__list-item { padding-bottom: 0.5rem; } + +/* The OpenAPI theme paints its
arrow as a black SVG and relies on + --ifm-menu-link-sublist-icon-filter to invert it in dark mode. We set that + variable to `none` globally because our sidebar arrow already has the right + stroke baked in, so invert the OpenAPI arrow explicitly in dark mode. */ +html[data-theme="dark"] .openapi-markdown__details > summary::before { + filter: invert(1) !important; +}