diff --git a/doc/user/assets/sass/_base.scss b/doc/user/assets/sass/_base.scss index d1c87ae66585e..57064a0b86dfa 100644 --- a/doc/user/assets/sass/_base.scss +++ b/doc/user/assets/sass/_base.scss @@ -11,14 +11,35 @@ $rem-scale: 0.585; :root { --nav-height: #{rem(6.5)}; // Changes to height requires changes to partials/toc.html since custom scroll logic implementation - --h1: #{rem(4.0)}; + // Brand typefaces (style guide): FAIRE Sprig Sans → headlines; Inter → body/UI; FAIRE Sprig Sans Mono → code + --font-body: "Inter", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; + --font-heading: "FAIRE Sprig Sans", "Inter", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; + --font-mono: "FAIRE Sprig Sans Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace; + + // Style guide rhythm + --leading-headline: 1.4; + --leading-code: 1.55; + --tracking-eyebrow: 0.05em; + --tracking-code: 0.05em; + --weight-body: 400; + --weight-body-emphasis: 500; + --weight-body-strong: 600; + --weight-heading: 500; + + // Typography reference (docs content) + --h1: #{rem(3.9)}; --h2: #{rem(2.8)}; --h3: #{rem(2.1)}; --h4: #{rem(1.7)}; --h5: #{rem(1.6)}; - --base: #{rem(1.6)}; + --base: #{rem(1.5)}; --sm: #{rem(1.4)}; --xsm: #{rem(1.2)}; + --leading-h1: 1.3; + --leading-h2: 1.4; + --leading-body: 1.625; + --tracking-h1: -0.02em; + --tracking-h2: -0.015em; @media(max-width: 850px) { --h1: #{rem(3.4)}; @@ -38,60 +59,170 @@ $rem-scale: 0.585; --medium: #{rem(5)}; --large: #{rem(6)}; - --orchid: #e537c0; + --orchid: var(--color-pink-500); --orange: #ee8660; - --lavender: #ad37e5; - --brand: #7f4eff; - --purple-dark: #472f85; + --lavender: var(--color-purple-300); + --brand: var(--color-purple-500); + --purple-dark: var(--color-purple-800); - --white: #fff; + --white: var(--color-white); --white-light: #fefefe; --code-block-light: #f9f7fd; - --nav-light: #fff; - --nav-dark: #111111d9; + --nav-light: var(--color-white); + --nav-dark: oklch(0.14 0.012 291 / 88%); - --black: #111111; - --black-mid: #141414; - --black-light: #181818; - --black-lighter: #222222; - --black-lightest: #343434; + --bg-black: oklch(0.14 0.012 291); + + --black: var(--color-black); + --black-mid: oklch(0.18 0.014 291); + --black-light: oklch(0.21 0.016 291); + --black-lighter: oklch(0.25 0.018 292); + --black-lightest: oklch(0.30 0.020 292); --gray-dark: #555555; --gray-mid: #888888; - --gray: #bbb; + --gray: #bbbbbb; --gray-light: #dddddd; - --gray-lighter: #dddd; + --gray-lighter: rgba(221, 221, 221, 0.87); --gray-lightest: #eeeeee; --shadow-default: 0 #{rem(0.625)} #{rem(1.5)} #{rem(0)} rgba(0, 0, 0, 0.08); + + --table-surface: #111115; + --table-surface-raised: #15151a; + --table-surface-header: #19191f; + --table-border: #2a2b32; + --table-grid: #24252b; + --table-heading: #5e606a; + --table-text: #d9d9de; + --table-body: #a3a3ad; + --table-muted: #5f606a; + --table-link: #8b97ff; + --table-green: #3ff47a; + --table-green-bg: #0f2a1c; + --table-green-border: #1b5d37; + --table-blue: #8b97ff; + --table-blue-bg: #1b1d33; + --table-blue-border: #333b75; + --table-orange: #ff9a3d; + --table-orange-bg: #332113; + --table-orange-border: #704017; + --table-yellow: #fbbf24; + --table-yellow-bg: rgba(251, 191, 36, 0.08); + --table-yellow-border: rgba(251, 191, 36, 0.22); + --table-blue-glow: rgba(124, 143, 255, 0.9); + --table-radius: 14px; + --table-shadow: 0 18px 50px rgba(0, 0, 0, 0.35), 0 1px 0 rgba(255, 255, 255, 0.04) inset; + + --surface-subtle: rgba(255, 255, 255, 0.015); + --surface-inset: rgba(0, 0, 0, 0.25); + --surface-faint: rgba(255, 255, 255, 0.01); + --border-subtle: rgba(255, 255, 255, 0.06); + --border-faint: rgba(255, 255, 255, 0.04); + + --offerings-cols: minmax(170px, 220px) minmax(0, 1fr) minmax(150px, 190px); + + // Page background mesh rhythm (theme sets colors only) + --docs-mesh-icons-step: #{rem(28)}; + --docs-mesh-icons-step-sm: #{rem(24)}; + --docs-mesh-dot-size: 1px; + --docs-mesh-dot-step: #{rem(3)}; + --docs-mesh-dot-step-sm: #{rem(2.75)}; + --docs-mesh-grid-minor-step: #{rem(2)}; + --docs-mesh-grid-minor-step-sm: #{rem(1.75)}; + --docs-mesh-grid-major-step: #{rem(8)}; + --docs-mesh-grid-major-step-sm: #{rem(7)}; + + // Style guide palette (0326-083) + --sg-midnight: #100C21; + --sg-white: #FFFFFF; + --sg-violet: #7F4EFF; + --sg-lavender-1: #F2EDFF; + --sg-lavender-2: #C0B2E4; + --sg-lavender-3: #8F76CF; + --sg-lavender-4: #472F85; + --sg-lavender-5: #342260; + --sg-lavender-6: #2C1D52; + --sg-gray-1: #DED9EE; + --sg-gray-2: #9B97A3; + --sg-gray-3: #736F81; + --sg-gray-4: #403D4D; + --sg-gray-5: #201D2C; + --sg-heading: #F0EEFF; + --sg-body: #9B97A3; + --sg-inline-lifted: #E2E0F0; + --sg-link: #8F76CF; + --sg-link-hover: #B09EE0; + --sg-divider: #2A2745; + --sg-page-bg: #13111E; + --sg-teal-3: #00C2AA; + --sg-teal-5: #007567; } body.dark { - --bg: #100b21; + --bg: var(--bg-black); --bg-nav: var(--nav-dark); --bg-sub: var(--black-light); --card: var(--black-mid); --card-light: var(--black-light); --color-scheme: dark; - --divider: var(--black-lighter); - --divider-light: var(--black-lightest); + --divider: var(--sg-divider); + --divider-light: var(--sg-divider); - --link: var(--highlight); + --link: var(--sg-link); + --link-hover: var(--sg-link-hover); --code-block: var(--card-light); --code-simple: #c2c2c2; --code-simple-bg: #292929; - --code-red: #fc6e6c; - --code-pink: #f97fe6; - --code-blue: #4b73f8; - --code-green: #819A7B; - --code-highlight: var(--code-blue); - - --important: var(--gray-lightest); - --sub: var(--gray-light); - --body: var(--gray); - --highlight: #e0a5fb; + --code-foreground: #e2e8f0; + --code-keyword: #c4b5fd; + --code-builtin: #7dcfff; + --code-type: #ffcb8b; + --code-function: #2bddc2; + --code-string: #9ece6a; + --code-number: #ff9e64; + --code-comment: #6b7394; + --code-operator: #89ddff; + --code-punctuation: color-mix(in srgb, var(--code-foreground) 48%, var(--code-comment)); + --code-attribute: #ffcb8b; + --code-variable: #e2e8f0; + --code-red: #ff6e7a; + --code-pink: var(--code-keyword); + --code-blue: var(--code-builtin); + --code-green: var(--code-string); + --code-highlight: var(--code-function); + --code-line-highlight: color-mix(in srgb, var(--highlight) 14%, transparent); + --code-lineno: var(--caption); + --code-preproc: color-mix(in srgb, var(--code-builtin) 82%, var(--caption)); + + --heading: var(--sg-heading); + --body: var(--sg-body); + --inline-lifted: var(--sg-inline-lifted); + --sub: var(--sg-lavender-2); + --caption: var(--sg-gray-2); + --important: var(--heading); + --highlight: var(--color-teal-500); + --font-h4: var(--heading); + + // Shared homepage promo surfaces (callout + offerings table) + --docs-card-surface: color-mix(in srgb, var(--card-light) 72%, var(--bg)); + --docs-card-border: color-mix(in srgb, var(--divider-light) 88%, transparent); + --docs-card-divider: color-mix(in srgb, var(--divider-light) 55%, transparent); + --docs-card-divider-strong: color-mix(in srgb, var(--divider-light) 72%, transparent); + --docs-card-glow: color-mix(in srgb, var(--sg-lavender-6) 14%, transparent); + --docs-card-inset: color-mix(in srgb, var(--bg) 55%, transparent); + --docs-card-shadow: + 0 1px 0 color-mix(in srgb, var(--heading) 4%, transparent) inset, + 0 16px 40px color-mix(in srgb, var(--bg) 35%, transparent); + + // Style guide background mesh (dark): grid + data icons + purple accent on the right + --docs-mesh-icons: url("/images/docs-mesh/data-icons-dark.svg"); + --docs-mesh-dot: color-mix(in srgb, #1e293b 25%, transparent); + --docs-mesh-grid-minor: rgba(255, 255, 255, 0.033); + --docs-mesh-grid-major: rgba(255, 255, 255, 0.055); + --docs-mesh-accent: color-mix(in srgb, var(--sg-lavender-6) 13%, transparent); --shadow-default: 0 #{rem(0.625)} #{rem(1.5)} 0 rgba(0, 0, 0, 0.4); --note: #fffad411; @@ -120,35 +251,97 @@ body.dark { --tab-bg: var(--gray-lightest); --tab-selected-bg: var(--tip-after); - --font-h4: var(--gray-lightest); + + --th-border: oklch(var(--color-teal-500-oklch) / 30%); + + --offering-nested-border: var(--border-subtle); + --offering-nested-header-bg: color-mix(in srgb, var(--sg-lavender-6) 38%, var(--card-light)); + --offering-nested-surface: var(--surface-inset); + + --offering-edition-label: var(--sg-lavender-2); + --offering-edition-heading: var(--sg-lavender-2); + --offering-edition-value: var(--sg-lavender-3); } body.light { - --bg: var(--white-light); - --bg-nav: var(--nav-light); - --bg-sub: var(--gray-lighter); - --card: var(--gray-lightest); + --bg: #F7F6FA; + --bg-nav: color-mix(in srgb, var(--bg) 88%, transparent); + --bg-sub: color-mix(in srgb, var(--sg-lavender-1) 45%, var(--white)); + --card: color-mix(in srgb, var(--sg-lavender-1) 30%, var(--white)); --card-light: var(--white); --color-scheme: light; - --divider: var(--gray); - --divider-light: var(--gray-lighter); + --divider: color-mix(in srgb, var(--sg-gray-1) 75%, var(--gray)); + --divider-light: color-mix(in srgb, var(--sg-lavender-1) 55%, var(--gray-lighter)); - --link: var(--brand); + --link: var(--sg-violet); + --link-hover: var(--sg-lavender-4); --code-block: var(--code-block-light); --code-simple: #505050; --code-simple-bg: var(--code-block-light); - --code-red: #c41a16; - --code-pink: #a90d91; - --code-blue: #1c01ce; - --code-green: #177500; - - - --important: var(--black); - --code-highlight: var(--important); - --sub: var(--black-lighter); - --body: var(--black-light); - --highlight: var(--purple-dark); + --code-foreground: var(--heading); + --code-keyword: #6d28d9; + --code-builtin: #0969da; + --code-type: #9a6700; + --code-function: #00857a; + --code-string: #067d62; + --code-number: #bc4c00; + --code-comment: #656d76; + --code-operator: #0550ae; + --code-punctuation: color-mix(in srgb, var(--code-comment) 82%, var(--heading)); + --code-attribute: #953800; + --code-variable: var(--heading); + --code-red: #cf222e; + --code-pink: var(--code-keyword); + --code-blue: var(--code-builtin); + --code-green: var(--code-string); + --code-line-highlight: color-mix(in srgb, var(--table-yellow) 22%, transparent); + --code-lineno: var(--sg-gray-2); + --code-preproc: color-mix(in srgb, var(--code-builtin) 78%, var(--sg-gray-3)); + + --heading: var(--sg-midnight); + --body: var(--sg-gray-4); + --inline-lifted: var(--sg-gray-5); + --sub: var(--sg-gray-3); + --caption: var(--sg-gray-2); + --important: var(--heading); + --code-highlight: var(--code-function); + --highlight: var(--sg-teal-5); + --font-h4: var(--heading); + + --table-text: var(--inline-lifted); + --table-body: var(--body); + + --table-green: var(--color-teal-700); + --table-orange: #C65D17; + + --docs-card-surface: linear-gradient( + 165deg, + color-mix(in srgb, var(--white) 88%, var(--sg-lavender-1)) 0%, + var(--white) 42%, + color-mix(in srgb, var(--white) 94%, var(--sg-lavender-1)) 100% + ); + --docs-card-border: color-mix(in srgb, var(--sg-lavender-2) 28%, var(--gray-light)); + --docs-card-divider: color-mix(in srgb, var(--sg-lavender-2) 24%, var(--gray-lighter)); + --docs-card-divider-strong: color-mix(in srgb, var(--sg-lavender-2) 38%, var(--gray-light)); + --docs-card-glow: color-mix(in srgb, var(--sg-violet) 7%, transparent); + --docs-card-glow-foot: color-mix(in srgb, var(--sg-lavender-1) 55%, transparent); + --docs-card-inset: color-mix(in srgb, var(--sg-lavender-1) 38%, var(--white)); + --docs-card-shadow: + 0 1px 2px rgba(16, 12, 33, 0.04), + 0 10px 32px rgba(16, 12, 33, 0.06); + + --callout-accent-soft-mix: 7%; + --callout-accent-border-mix: 28%; + --docs-card-top-accent-mix: 30%; + --docs-card-top-accent-center-mix: 65%; + + // Style guide background mesh (light): grid + data icons + --docs-mesh-icons: url("/images/docs-mesh/data-icons-light.svg"); + --docs-mesh-icons-opacity: 0.12; + --docs-mesh-dot: rgba(64, 61, 77, 0.085); + --docs-mesh-grid-minor: rgba(64, 61, 77, 0.020); + --docs-mesh-grid-major: rgba(64, 61, 77, 0.035); --note: #fffad411; --note-border: #b9a61545; @@ -175,7 +368,21 @@ body.light { --tab-bg: var(--gray-lighter); --tab-selected-bg: var(--tip); - --font-h4: var(--gray-dark); + + --surface-subtle: rgba(0, 0, 0, 0.025); + --surface-inset: rgba(0, 0, 0, 0.04); + --surface-faint: rgba(0, 0, 0, 0.015); + --border-subtle: rgba(0, 0, 0, 0.10); + --border-faint: rgba(0, 0, 0, 0.06); + + --offering-nested-border: color-mix(in srgb, var(--sg-lavender-2) 20%, var(--gray-lighter)); + --offering-nested-header-bg: color-mix(in srgb, var(--sg-lavender-1) 75%, var(--white)); + --offering-nested-surface: color-mix(in srgb, var(--sg-lavender-1) 32%, var(--white)); + + --offering-edition-label: var(--sg-violet); + --offering-edition-heading: var(--sg-gray-3); + --offering-edition-value: var(--sg-violet); + } *, @@ -187,15 +394,86 @@ body.light { } body { - font-family: "Inter", sans-serif; - color: var(--important); + font-family: var(--font-body); + color: var(--body); color-scheme: var(--color-scheme); background: var(--bg); font-size: var(--base); - line-height: 1.7; - font-weight: 300; + line-height: var(--leading-body); + font-weight: var(--weight-body); max-width: 100vw; overflow-x: hidden; + position: relative; + + &::before, + &::after { + content: ""; + inset: 0; + pointer-events: none; + position: fixed; + z-index: -1; + } + + &.dark::before { + background-color: #000; + background-image: + radial-gradient(ellipse 42% 85% at 100% 45%, var(--docs-mesh-accent) 0%, transparent 68%), + linear-gradient(to right, var(--docs-mesh-grid-major) 1px, transparent 1px), + linear-gradient(to bottom, var(--docs-mesh-grid-major) 1px, transparent 1px), + linear-gradient(to right, var(--docs-mesh-grid-minor) 1px, transparent 1px), + linear-gradient(to bottom, var(--docs-mesh-grid-minor) 1px, transparent 1px), + radial-gradient(circle, var(--docs-mesh-dot) var(--docs-mesh-dot-size), transparent var(--docs-mesh-dot-size)); + background-position: center; + background-repeat: no-repeat, repeat, repeat, repeat, repeat, repeat; + background-size: + 100% 100%, + var(--docs-mesh-grid-major-step) var(--docs-mesh-grid-major-step), + var(--docs-mesh-grid-major-step) var(--docs-mesh-grid-major-step), + var(--docs-mesh-grid-minor-step) var(--docs-mesh-grid-minor-step), + var(--docs-mesh-grid-minor-step) var(--docs-mesh-grid-minor-step), + var(--docs-mesh-dot-step) var(--docs-mesh-dot-step); + mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.65) 0%, black 28%, black 100%); + } + + &.light::before { + background-color: var(--bg); + @include docs-page-mesh-grid-layers-no-icons; + background-position: center; + background-repeat: repeat; + @include docs-page-mesh-grid-size( + var(--docs-mesh-grid-major-step), + var(--docs-mesh-grid-minor-step), + var(--docs-mesh-dot-step) + ); + mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.55) 0%, rgba(0, 0, 0, 0.72) 45%, rgba(0, 0, 0, 0.58) 100%); + } + + @media (max-width: 850px) { + &.dark::before { + background-size: + 100% 100%, + var(--docs-mesh-grid-major-step-sm) var(--docs-mesh-grid-major-step-sm), + var(--docs-mesh-grid-major-step-sm) var(--docs-mesh-grid-major-step-sm), + var(--docs-mesh-grid-minor-step-sm) var(--docs-mesh-grid-minor-step-sm), + var(--docs-mesh-grid-minor-step-sm) var(--docs-mesh-grid-minor-step-sm), + var(--docs-mesh-dot-step-sm) var(--docs-mesh-dot-step-sm); + } + + &.light::before { + @include docs-page-mesh-grid-size( + var(--docs-mesh-grid-major-step-sm), + var(--docs-mesh-grid-minor-step-sm), + var(--docs-mesh-dot-step-sm) + ); + } + } + + @media (prefers-reduced-motion: reduce) { + &::before, + &::after { + background-attachment: scroll; + } + } @media(max-width: 500px) { font-size: rem(1.5); @@ -230,8 +508,7 @@ input[type="submit"] { 5. Links inside notes 6. Links inside notes with **/ -.btn, -.btn-ghost { +.btn { color: var(--white); text-decoration: none; @@ -242,87 +519,170 @@ input[type="submit"] { } } -nav { +.nav, +.sidebar, +.toc, +.toc-wrapper, +.footer { + a:not([class*="btn"]) { + color: var(--important); + + &:hover, + &:focus { + text-decoration: none; + } + } + .link-with-code { - color: var(--sub); + color: var(--important); &:hover, &:focus { text-decoration: underline; - color: var(--link); + color: var(--important); + } + } + + .btn-ghost { + color: var(--important); + + &:hover, + &:focus { + color: var(--important); + text-decoration: none; } } } +.content a:not([class]), p > a, .note > a, .tip > a, .annotation > a, -.link-with-code { +.content .link-with-code { color: var(--link); + font-family: var(--font-body); + font-weight: var(--weight-body); + text-decoration: underline; + text-decoration-color: color-mix(in srgb, var(--link) 30%, transparent); + text-underline-offset: 3px; + transition: color 0.15s ease, text-decoration-color 0.15s ease; &:hover, &:focus { + color: var(--link-hover); text-decoration: underline; - color: var(--sub); + text-decoration-color: var(--link-hover); + } +} + +.content .btn-ghost { + color: var(--important); + + &:hover, + &:focus { + color: var(--important); + text-decoration: none; } } .annotation-title { - font-weight: 600; + font-family: var(--font-heading); + font-weight: 500; + line-height: var(--leading-headline); padding-bottom: rem(1.2); } a { + color: inherit; + text-decoration: none; + &:hover, &:focus { text-decoration: underline; - color: var(--link); } - - color: var(--sub); - text-decoration: none; } /*-------- Finish links color--------*/ [class*="btn"] { + background: var(--brand); + border: 1px solid color-mix(in srgb, var(--brand) 70%, transparent); + border-radius: rem(0.8); + box-shadow: var(--docs-card-shadow); + color: var(--white); display: inline-flex; - justify-content: center; align-items: center; - font-size: 12px; + font-family: var(--font-body); + font-size: rem(1.2); + font-weight: var(--weight-body-emphasis); + justify-content: center; + letter-spacing: var(--tracking-eyebrow); + padding: rem(0.6) rem(1.2); text-transform: uppercase; + transition: + background-color 0.15s ease, + border-color 0.15s ease, + box-shadow 0.15s ease, + opacity 0.15s ease; white-space: nowrap; - font-weight: 600; - letter-spacing: 0.1em; - background: var(--brand); - color: var(--white); - padding: rem(0.6) rem(1.2); - border-radius: 8px; svg { - margin-right: rem(.6); - width: 18px; height: 18px; + margin-right: rem(0.6); + width: 18px; } &:hover, &:focus { + box-shadow: + var(--docs-card-shadow), + 0 0 0 rem(0.35) color-mix(in srgb, var(--brand) 25%, transparent); color: var(--white); text-decoration: none; - box-shadow: rgba(128,78,255,.3) 0px 0px 0px 8px } } .btn-ghost { - position: relative; - background: var(--bg); - border: 1px solid var(--brand); + background: var(--docs-card-inset); + border: 1px solid var(--docs-card-divider); + border-radius: rem(0.75); + box-shadow: none; color: var(--important); + display: inline-flex; + align-items: center; + font-family: var(--font-body); + font-size: var(--sm); + font-weight: var(--weight-body); + gap: rem(0.75); + letter-spacing: 0; + line-height: 1; + padding: rem(0.55) rem(0.85); + position: relative; + text-decoration: none; + text-transform: none; + transition: + background-color 0.15s ease, + border-color 0.15s ease, + color 0.15s ease, + box-shadow 0.15s ease; + + svg { + flex: 0 0 auto; + } &:hover, &:focus { - color: var(--important); + background: color-mix(in srgb, var(--highlight) 8%, var(--docs-card-inset)); + border-color: color-mix(in srgb, var(--highlight) 35%, var(--docs-card-divider)); + box-shadow: var(--docs-card-shadow); + color: var(--heading); + text-decoration: none; + } + + &:focus-visible { + outline: 2px solid var(--highlight); + outline-offset: 2px; } } @@ -333,25 +693,26 @@ a { } select.version-dropdown { + -moz-appearance: none; + -webkit-appearance: none; appearance: none; - -moz-appearance: none; - -webkit-appearance: none; - background-image: url('https://res.cloudinary.com/mzimgcdn/image/upload/v1737129759/dropdown.svg'); - background-position: right 0.5rem top 50%, 0 0; - background-repeat: no-repeat, repeat; - background-size: 1.3rem auto, 100%; - outline: 1px solid transparent; - border: 1px solid var(--divider); + background-color: var(--docs-card-inset); + background-image: url('https://res.cloudinary.com/mzimgcdn/image/upload/v1737129759/dropdown.svg'); + background-position: right 0.5rem top 50%, 0 0; + background-repeat: no-repeat, repeat; + background-size: 1.3rem auto, 100%; + border: 1px solid var(--docs-card-divider); + border-radius: rem(0.6); + color: var(--body); + outline: 1px solid transparent; padding: var(--pico) var(--nano); - border-radius: 4px; - background-color: var(--bg); - &:focus, - &:active { - outline: none; - } + &:focus, + &:active { + border-color: color-mix(in srgb, var(--highlight) 40%, var(--docs-card-divider)); + outline: none; + } } - red { color: var(--code-red); } -blue { color: #2300ce; } +blue { color: var(--code-blue); } diff --git a/doc/user/assets/sass/_colors.scss b/doc/user/assets/sass/_colors.scss new file mode 100644 index 0000000000000..4fb0c382175c7 --- /dev/null +++ b/doc/user/assets/sass/_colors.scss @@ -0,0 +1,226 @@ +/* Color palette from www-temporary — oklch colorspace */ + +:root { + --color-current: currentColor; + --color-transparent: transparent; + --color-black: oklch(0.1807 0.0403 291.01); + --color-white: oklch(100% 0 0); + + /* Gray */ + --color-gray-50-oklch: 0.9707 0.0164 301.22; + --color-gray-50: oklch(var(--color-gray-50-oklch)); + --color-gray-100-oklch: 0.9552 0.0245 298.61; + --color-gray-100: oklch(var(--color-gray-100-oklch)); + --color-gray-200-oklch: 0.94 0.0271 295.05; + --color-gray-200: oklch(var(--color-gray-200-oklch)); + --color-gray-300-oklch: 0.8956 0.0289 296.71; + --color-gray-300: oklch(var(--color-gray-300-oklch)); + --color-gray-400-oklch: 0.7834 0.0285 297.18; + --color-gray-400: oklch(var(--color-gray-400-oklch)); + --color-gray-500-oklch: 0.6836 0.0179 301.07; + --color-gray-500: oklch(var(--color-gray-500-oklch)); + --color-gray-600-oklch: 0.5516 0.028 295.65; + --color-gray-600: oklch(var(--color-gray-600-oklch)); + --color-gray-700-oklch: 0.4815 0.029 295.48; + --color-gray-700: oklch(var(--color-gray-700-oklch)); + --color-gray-800-oklch: 0.3694 0.0274 293.61; + --color-gray-800: oklch(var(--color-gray-800-oklch)); + --color-gray-900-oklch: 0.2413 0.0286 293.31; + --color-gray-900: oklch(var(--color-gray-900-oklch)); + + /* Purple */ + --color-purple-50-oklch: 0.9533 0.0261 300.28; + --color-purple-50: oklch(var(--color-purple-50-oklch)); + --color-purple-100-oklch: 0.8891 0.0649 301.94; + --color-purple-100: oklch(var(--color-purple-100-oklch)); + --color-purple-200-oklch: 0.7791 0.1321 299.85; + --color-purple-200: oklch(var(--color-purple-200-oklch)); + --color-purple-300-oklch: 0.6541 0.2052 293.72; + --color-purple-300: oklch(var(--color-purple-300-oklch)); + --color-purple-400-oklch: 0.5826 0.245663 289.134; + --color-purple-400: oklch(var(--color-purple-400-oklch)); + --color-purple-500-oklch: 0.5098 0.2669 284.47; + --color-purple-500: oklch(var(--color-purple-500-oklch)); + --color-purple-600-oklch: 0.4915 0.2662 280.14; + --color-purple-600: oklch(var(--color-purple-600-oklch)); + --color-purple-700-oklch: 0.4568 0.2639 276.88; + --color-purple-700: oklch(var(--color-purple-700-oklch)); + --color-purple-800-oklch: 0.4307 0.2663 269.92; + --color-purple-800: oklch(var(--color-purple-800-oklch)); + --color-purple-900-oklch: 0.3893 0.2637 264.13; + --color-purple-900: oklch(var(--color-purple-900-oklch)); + + /* Lavender */ + --color-lavender-50-oklch: 0.8445 0.0536 298.49; + --color-lavender-50: oklch(var(--color-lavender-50-oklch)); + --color-lavender-100-oklch: 0.7842 0.0687 297.2; + --color-lavender-100: oklch(var(--color-lavender-100-oklch)); + --color-lavender-200-oklch: 0.7209 0.0977 296.91; + --color-lavender-200: oklch(var(--color-lavender-200-oklch)); + --color-lavender-300-oklch: 0.627 0.1324 295.25; + --color-lavender-300: oklch(var(--color-lavender-300-oklch)); + --color-lavender-400-oklch: 0.5031 0.1765 292.12; + --color-lavender-400: oklch(var(--color-lavender-400-oklch)); + --color-lavender-500-oklch: 0.384 0.1372 291.44; + --color-lavender-500: oklch(var(--color-lavender-500-oklch)); + --color-lavender-600-oklch: 0.3455 0.1201 292.18; + --color-lavender-600: oklch(var(--color-lavender-600-oklch)); + --color-lavender-700-oklch: 0.3113 0.1052 292.61; + --color-lavender-700: oklch(var(--color-lavender-700-oklch)); + --color-lavender-800-oklch: 0.2817 0.0925 292.49; + --color-lavender-800: oklch(var(--color-lavender-800-oklch)); + --color-lavender-900-oklch: 0.1726 0.0425 289.97; + --color-lavender-900: oklch(var(--color-lavender-900-oklch)); + + /* Pink */ + --color-pink-50-oklch: 0.914 0.0788 326.2; + --color-pink-50: oklch(var(--color-pink-50-oklch)); + --color-pink-100-oklch: 0.8511 0.1427 326.74; + --color-pink-100: oklch(var(--color-pink-100-oklch)); + --color-pink-200-oklch: 0.8004 0.1988 327.23; + --color-pink-200: oklch(var(--color-pink-200-oklch)); + --color-pink-300-oklch: 0.7571 0.249 327.95; + --color-pink-300: oklch(var(--color-pink-300-oklch)); + --color-pink-400-oklch: 0.7297 0.2796 328.94; + --color-pink-400: oklch(var(--color-pink-400-oklch)); + --color-pink-500-oklch: 0.7039 0.3082 330.05; + --color-pink-500: oklch(var(--color-pink-500-oklch)); + --color-pink-600-oklch: 0.6814 0.3058 333.1; + --color-pink-600: oklch(var(--color-pink-600-oklch)); + --color-pink-700-oklch: 0.6068 0.2767 329.91; + --color-pink-700: oklch(var(--color-pink-700-oklch)); + --color-pink-800-oklch: 0.5622 0.2569 329.49; + --color-pink-800: oklch(var(--color-pink-800-oklch)); + --color-pink-900-oklch: 0.4773 0.2182 329.4; + --color-pink-900: oklch(var(--color-pink-900-oklch)); + + /* Teal */ + --color-teal-50-oklch: 0.9756 0.0213 186.04; + --color-teal-50: oklch(var(--color-teal-50-oklch)); + --color-teal-100-oklch: 0.9665 0.0298 183.8; + --color-teal-100: oklch(var(--color-teal-100-oklch)); + --color-teal-200-oklch: 0.9378 0.0542 183.4; + --color-teal-200: oklch(var(--color-teal-200-oklch)); + --color-teal-300-oklch: 0.9065 0.0984 182.02; + --color-teal-300: oklch(var(--color-teal-300-oklch)); + --color-teal-350-oklch: 0.8761 0.1297 181.02; + --color-teal-350: oklch(var(--color-teal-350-oklch)); + --color-teal-400-oklch: 0.8562 0.1545 180.23; + --color-teal-400: oklch(var(--color-teal-400-oklch)); + --color-teal-500-oklch: 0.8073 0.1401 179.17; + --color-teal-500: oklch(var(--color-teal-500-oklch)); + --color-teal-550-oklch: 0.8207 0.144 171.1; + --color-teal-550: oklch(var(--color-teal-550-oklch)); + --color-teal-600-oklch: 0.7292 0.1326 179.65; + --color-teal-600: oklch(var(--color-teal-600-oklch)); + --color-teal-700-oklch: 0.6556 0.118699 180.3171; + --color-teal-700: oklch(var(--color-teal-700-oklch)); + --color-teal-800-oklch: 0.5041 0.091051 180.6891; + --color-teal-800: oklch(var(--color-teal-800-oklch)); + --color-teal-900-oklch: 0.3542 0.043 207.05; + --color-teal-900: oklch(var(--color-teal-900-oklch)); + + /* Blue */ + --color-blue-50-oklch: 0.9597 0.0144 244.72; + --color-blue-50: oklch(var(--color-blue-50-oklch)); + --color-blue-100-oklch: 0.9191 0.0281 243.11; + --color-blue-100: oklch(var(--color-blue-100-oklch)); + --color-blue-200-oklch: 0.8881 0.0401 242.45; + --color-blue-200: oklch(var(--color-blue-200-oklch)); + --color-blue-300-oklch: 0.8401 0.0739 238.99; + --color-blue-300: oklch(var(--color-blue-300-oklch)); + --color-blue-400-oklch: 0.8039 0.108 235.56; + --color-blue-400: oklch(var(--color-blue-400-oklch)); + --color-blue-500-oklch: 0.7668 0.142 233.74; + --color-blue-500: oklch(var(--color-blue-500-oklch)); + --color-blue-600-oklch: 0.717 0.1313 234.29; + --color-blue-600: oklch(var(--color-blue-600-oklch)); + --color-blue-700-oklch: 0.6577 0.1176 235.31; + --color-blue-700: oklch(var(--color-blue-700-oklch)); + --color-blue-800-oklch: 0.5973 0.1032 236.86; + --color-blue-800: oklch(var(--color-blue-800-oklch)); + --color-blue-900-oklch: 0.4866 0.0831 240.87; + --color-blue-900: oklch(var(--color-blue-900-oklch)); + + /* Error */ + --color-error-50-oklch: 0.9577 0.0196 13.63; + --color-error-50: oklch(var(--color-error-50-oklch)); + --color-error-100-oklch: 0.9148 0.0391 15.93; + --color-error-100: oklch(var(--color-error-100-oklch)); + --color-error-200-oklch: 0.8429 0.0756 16.74; + --color-error-200: oklch(var(--color-error-200-oklch)); + --color-error-300-oklch: 0.7401 0.144 17.5; + --color-error-300: oklch(var(--color-error-300-oklch)); + --color-error-400-oklch: 0.7031 0.1897 17.76; + --color-error-400: oklch(var(--color-error-400-oklch)); + --color-error-500-oklch: 0.666 0.2229 17.56; + --color-error-500: oklch(var(--color-error-500-oklch)); + --color-error-600-oklch: 0.64 0.217 17.55; + --color-error-600: oklch(var(--color-error-600-oklch)); + --color-error-700-oklch: 0.6136 0.2084 17.78; + --color-error-700: oklch(var(--color-error-700-oklch)); + --color-error-800-oklch: 0.5766 0.1993 17.34; + --color-error-800: oklch(var(--color-error-800-oklch)); + --color-error-900-oklch: 0.5244 0.185 17.34; + --color-error-900: oklch(var(--color-error-900-oklch)); + + /* Warning */ + --color-warning-50-oklch: 0.9844 0.0189 93.66; + --color-warning-50: oklch(var(--color-warning-50-oklch)); + --color-warning-100-oklch: 0.974 0.0346 96.29; + --color-warning-100: oklch(var(--color-warning-100-oklch)); + --color-warning-200-oklch: 0.9525 0.0606 96.15; + --color-warning-200: oklch(var(--color-warning-200-oklch)); + --color-warning-300-oklch: 0.9375 0.0913 96.3; + --color-warning-300: oklch(var(--color-warning-300-oklch)); + --color-warning-400-oklch: 0.929 0.118 96.67; + --color-warning-400: oklch(var(--color-warning-400-oklch)); + --color-warning-500-oklch: 0.921 0.1367 96.69; + --color-warning-500: oklch(var(--color-warning-500-oklch)); + --color-warning-600-oklch: 0.8792 0.129 89.34; + --color-warning-600: oklch(var(--color-warning-600-oklch)); + --color-warning-700-oklch: 0.8297 0.1219 79.7; + --color-warning-700: oklch(var(--color-warning-700-oklch)); + --color-warning-800-oklch: 0.7814 0.1211 69.05; + --color-warning-800: oklch(var(--color-warning-800-oklch)); + --color-warning-900-oklch: 0.7012 0.1352 51.49; + --color-warning-900: oklch(var(--color-warning-900-oklch)); + + /* Success */ + --color-success-50-oklch: 0.9788 0.0221 160.24; + --color-success-50: oklch(var(--color-success-50-oklch)); + --color-success-100-oklch: 0.9489 0.0556 156.34; + --color-success-100: oklch(var(--color-success-100-oklch)); + --color-success-200-oklch: 0.9039 0.1006 157.23; + --color-success-200: oklch(var(--color-success-200-oklch)); + --color-success-300-oklch: 0.8453 0.1477 157.54; + --color-success-300: oklch(var(--color-success-300-oklch)); + --color-success-400-oklch: 0.773 0.1754 155.5; + --color-success-400: oklch(var(--color-success-400-oklch)); + --color-success-500-oklch: 0.6859 0.1667 154.86; + --color-success-500: oklch(var(--color-success-500-oklch)); + --color-success-600-oklch: 0.597 0.1485 154.46; + --color-success-600: oklch(var(--color-success-600-oklch)); + --color-success-700-oklch: 0.51 0.1218 156.56; + --color-success-700: oklch(var(--color-success-700-oklch)); + --color-success-800-oklch: 0.4315 0.0995 157.67; + --color-success-800: oklch(var(--color-success-800-oklch)); + --color-success-900-oklch: 0.2637 0.0332 162.32; + --color-success-900: oklch(var(--color-success-900-oklch)); + + /* Alpha */ + --color-lavender-alpha-oklch: 0.7921 0.0715 297.58; + --color-lavender-alpha: oklch(var(--color-lavender-alpha-oklch) / 20%); + --color-pink-alpha-oklch: 0.6814 0.3058 333.1; + --color-pink-alpha: oklch(var(--color-pink-alpha-oklch) / 20%); + --color-teal-alpha-oklch: 0.8761 0.1297 181.02; + --color-teal-alpha: oklch(var(--color-teal-alpha-oklch) / 20%); + --color-blue-alpha-oklch: 0.7668 0.142 233.74; + --color-blue-alpha: oklch(var(--color-blue-alpha-oklch) / 20%); + --color-error-alpha-oklch: 0.7031 0.1897 17.76; + --color-error-alpha: oklch(var(--color-error-alpha-oklch) / 20%); + --color-warning-alpha-oklch: 0.921 0.1367 96.69; + --color-warning-alpha: oklch(var(--color-warning-alpha-oklch) / 20%); + --color-white-alpha-oklch: 1 0 100; + --color-black-alpha-oklch: 0 0 100; +} diff --git a/doc/user/assets/sass/_content.scss b/doc/user/assets/sass/_content.scss index 6014d9bb8e90f..d989d82134722 100644 --- a/doc/user/assets/sass/_content.scss +++ b/doc/user/assets/sass/_content.scss @@ -8,7 +8,8 @@ h3, h4, h5, h6 { - line-height: 1.2; + font-family: var(--font-heading); + line-height: var(--leading-headline); code { font-size: inherit !important; @@ -23,24 +24,56 @@ h6 { } h1, h2, h3 { - font-weight: 500; - color: var(--important); + font-weight: var(--weight-heading); + color: var(--heading); } h1 { font-size: var(--h1); - margin-bottom: var(--xx-small); + letter-spacing: var(--tracking-h1); + line-height: var(--leading-h1); + margin-bottom: 12px; +} + +.title-row { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: var(--milli); + + .btn-ghost { + flex: 0 0 auto; + margin-top: rem(0.45); + + svg { + width: rem(1.8); + height: auto; + } + } + + @media(max-width: 850px) { + flex-direction: column; + align-items: flex-start; + + .btn-ghost { + margin-top: calc(-1 * var(--micro)); + margin-bottom: var(--micro); + } + } } h2 { font-size: var(--h2); - margin: var(--medium) 0 var(--nano); + letter-spacing: var(--tracking-h2); + line-height: var(--leading-h2); + margin: 28px 0 12px; + scroll-margin-top: calc(var(--nav-height) + #{rem(2)}); } h3 { font-size: var(--h3); - font-weight: 600; - margin: var(--small) 0 var(--nano); + margin: var(--small) 0 12px; + scroll-margin-top: calc(var(--nav-height) + #{rem(2)}); } div.tab-pane > h3 { @@ -48,13 +81,14 @@ div.tab-pane > h3 { } h4, h5, h6 { - font-weight: 600; - color: var(--font-h4); + font-weight: var(--weight-heading); + color: var(--heading); } h4 { font-size: var(--h4); margin: var(--small) 0 var(--nano); + scroll-margin-top: calc(var(--nav-height) + #{rem(2)}); } div.tab-pane > h4 { @@ -67,11 +101,21 @@ h5 { } strong { - font-weight: 500; + font-weight: var(--weight-body-strong); +} + +.content strong { + color: var(--inline-lifted); + font-weight: var(--weight-body-strong); +} + +.content em { + color: var(--inline-lifted); + font-style: italic; } p+p { - margin-top: var(--milli); + margin-top: 12px; } /* ------------------------------------------------- */ @@ -79,8 +123,17 @@ p+p { /* ------------------------------------------------- */ .content { + --code-highlight-font-size: #{rem(1.5)}; + --code-highlight-padding-top: #{rem(2.8)}; + --code-highlight-padding-inline: #{rem(1.6)}; + --code-highlight-padding-bottom: #{rem(1.4)}; + --code-pre-font-size: #{rem(1.5)}; + --code-pre-padding-block: #{rem(1.4)}; + --code-pre-padding-inline: #{rem(1.6)}; + border-left: 1px solid var(--divider-light); border-right: 1px solid var(--divider-light); + color: var(--body); a.anchorjs-link { @@ -154,8 +207,10 @@ p+p { margin-top: rem(1.6); } - p+table { - margin-top: rem(0.5); + * + table, + * + .table-container, + * + .table-scrollable { + margin-top: rem(1); } pre, @@ -165,7 +220,8 @@ p+p { .tip, .important { font-size: rem(1.5); - font-weight: 300; + font-weight: var(--weight-body); + line-height: var(--leading-body); } a:not(a[class]) { @@ -173,9 +229,17 @@ p+p { &, strong { color: var(--link); - font-weight: 300; - transition: all 0.2s; - transition-delay: 50ms; + font-weight: var(--weight-body); + text-decoration: underline; + text-decoration-color: color-mix(in srgb, var(--link) 30%, transparent); + text-underline-offset: 3px; + transition: color 0.15s ease, text-decoration-color 0.15s ease; + + &:hover, + &:focus { + color: var(--link-hover); + text-decoration-color: var(--link-hover); + } } &[href*="https://"] { @@ -201,10 +265,10 @@ p+p { &, strong { - color: var(--important); + color: var(--link-hover); } - border-color: var(--important); + border-color: var(--link-hover); &[href*="https://"] { &::after { @@ -215,495 +279,2266 @@ p+p { } .callout { - background: var(--brand); - border-radius: 3px; - padding: 1px; - border-radius: rem(1.2); - box-shadow: var(--shadow-default); + @include docs-feature-card($top-accent: true); + + margin: var(--x-small) 0; + padding: rem(1.2) rem(1.4); &:not(.bottom) { - margin: var(--large) 0; + margin: var(--x-small) 0; } - a { - margin-top: var(--milli); + > div { + background: transparent; + border: none; + border-radius: 0; + padding: 0; } - div { - background: var(--card-light); - padding: var(--x-small); - border-radius: inherit; - - @media(max-width: 400px) { - padding: var(--milli); - } + h2, + h3 { + color: var(--heading); + margin-bottom: rem(1); } - div> :first-child { + div > :first-child { margin-top: 0; } - } - - .multilinkbox { - margin: var(--small) 0; - display: flex; - gap: var(--milli); - @media(max-width: 1325px) { - flex-direction: column; - max-width: 400px; + div > :last-child { + margin-bottom: 0; } - } - - .linkbox { - flex: 0 0 31%; - position: relative; - padding: var(--milli) var(--milli) var(--nano); - font-size: var(--sm); - @include card; - &::before { - content: ""; - width: 32px; - height: 32px; - position: absolute; - top: rem(2); - background-size: contain; + p, + ul, + ol { + margin-top: rem(1); } - &.book, - &.bulb, - &.doc, - &.materialize, - &.touch { - padding-top: rem(8); + ul, + ol { + padding-left: rem(2.1); } - &.materialize::before { - background-image: url("../images/materialize_favicon_32.png"); - margin-left: -10px; + li { + margin-top: rem(0.35); } - &.book::before { - background-image: url("../images/icon_book.png"); + .btn { + margin-top: rem(1.2); + margin-right: rem(0.8); } + } - &.bulb::before { - background-image: url("../images/icon_bulb.png"); - } + .whats-new-callout { + --callout-item-surface: var(--docs-card-inset); + --callout-item-border: var(--docs-card-divider-strong); - &.doc::before { - background-image: url("../images/icon_doc.png"); + a:not(.whats-new-callout__item) { + border-bottom: 0; + text-decoration: none; } - &.touch::before { - background-image: url("../images/icon_touch.png"); - } + @include docs-card-top-hairline; - .title { - text-transform: uppercase; - font-size: 12px; - font-weight: 500; - color: var(--important); - margin-bottom: var(--nano); - } + @include docs-feature-card; + color: var(--body); + font-family: var(--font-body); + margin: var(--x-small) 0 var(--large); + overflow: hidden; + padding: var(--milli); + position: relative; - ul { - list-style: none; + &, + * { + box-sizing: border-box; } - a { - font-weight: 300; + svg { + display: block; + flex-shrink: 0; } - } - - img { - max-width: 100%; - } - table { - border-collapse: collapse; - font-size: var(--sm); - font-weight: 300; - line-height: rem(2.1); + &__header { + align-items: center; + display: flex; + gap: 14px; + justify-content: space-between; + margin-bottom: 16px; + } + + &__title-wrap { + align-items: center; + display: flex; + gap: 8px; + min-width: 0; + } + + &__sparkle { + align-items: center; + background: linear-gradient( + 145deg, + color-mix(in srgb, var(--sg-violet) 22%, transparent), + color-mix(in srgb, var(--highlight) 12%, transparent) + ); + border: 1px solid color-mix(in srgb, var(--sg-violet) 30%, transparent); + border-radius: rem(0.6); + box-shadow: 0 0 18px color-mix(in srgb, var(--sg-violet) 16%, transparent); + color: color-mix(in srgb, var(--sg-lavender-2) 88%, var(--heading)); + display: flex; + height: 36px; + justify-content: center; + width: 36px; - @media(max-width: 500px) { - code { - font-size: var(--xsm); + svg { + height: 18px; + width: 18px; } } - } - - tr { - border-bottom: 1px solid var(--divider-light); - } - - th { - color: var(--important); - border-bottom: 1px var(--highlight) solid; - text-align: left; - padding: 8px; - font-size: rem(1.3); - vertical-align: bottom; - } - - td { - padding: var(--nano); - vertical-align: top; - - @media(max-width: 500px) { - padding: var(--nano) var(--pico); - } - pre { - background-color: inherit; - border: 0; - font-size: inherit; + h2 { + color: var(--heading); + font-size: var(--h3); + font-weight: var(--weight-heading); + line-height: 1.2; margin: 0; - padding: 0; + white-space: nowrap; } - } - - pre { - background-color: var(--code-block); - border-radius: 4px; - border: 1px solid var(--divider-light); - color: $black-v2; - font-family: Courier, monospace; - font-size: rem(1.5); - margin: rem(1) 0 rem(0.5); - overflow: auto; - padding: rem(1.6); - code { - color: $black-v2; - background: none; - border: none; - padding: 0; + &__version { + background: color-mix(in srgb, var(--sg-violet) 12%, transparent); + border: 1px solid color-mix(in srgb, var(--sg-violet) 24%, transparent); + border-radius: 999px; + color: color-mix(in srgb, var(--sg-lavender-2) 90%, var(--heading)); + font-family: var(--font-mono); + font-size: var(--xsm); + font-weight: var(--weight-body); + letter-spacing: 0.02em; + line-height: 1; + padding: 4px 10px; + white-space: nowrap; } - } - - code { - font-family: "Fira Code", Courier, monospace; - font-variant-ligatures: none; - font-size: rem(1.3); - font-weight: 500; - background: var(--code-block); - border: 1px solid var(--divider-light); - box-sizing: border-box; - border-radius: 2px; - padding: rem(0.1) rem(0.25) rem(0); - color: var(--code-simple); - background: var(--code-simple-bg); - } - // TODO: This common pattern will be removed. - // Merge a highlighted code block followed by a non-highlighted code block, - // since this is a common pattern in our docs to indicate a (highlighted) - // shell or SQL snippet followed by its (unhighlighted) output. - .highlight+pre { - border-top: 0; - margin-top: -8px; - padding-top: 0; - } + &__release-link { + align-items: center; + color: var(--link); + display: inline-flex; + font-size: var(--sm); + font-weight: var(--weight-body); + gap: 6px; + line-height: 1.2; + opacity: 0.92; + transition: color 0.15s ease, opacity 0.15s ease; + white-space: nowrap; + + svg { + opacity: 0.75; + transition: opacity 0.15s ease, transform 0.15s ease; + } - ul, - ol { - margin: 0; + &:hover, + &:focus { + color: var(--link-hover); + opacity: 1; - li { - margin-bottom: rem(0.5); + svg { + opacity: 1; + transform: translate(1px, -1px); + } + } } - } - li { - h4 { - margin-top: 0; + &__items { + display: grid; + gap: 12px; } - } - - :not(div.footnotes) > ol.has-p:not(ol.has-p ol.has-p) { - list-style-type: none; - counter-reset: list-counter; - margin: 0; - padding: 0; - >li { - counter-increment: list-counter; - min-height: rem(5); - position: relative; - padding: rem(1.6) 0 rem(1.6) rem(6); - border-top: 1px solid var(--divider-light); + &__item { + @include callout-item-accent("--sg-violet"); - ul, - ol { - padding-left: var(--milli); - } + align-items: center; + background-color: var(--callout-item-surface); + border: 1px solid var(--callout-item-border); + border-radius: rem(0.8); + color: inherit; + display: flex; + gap: 12px; + padding: 14px 16px; + text-decoration: none; + transition: + background-color 0.18s ease, + border-color 0.18s ease; - ol { - li { - list-style-type: lower-alpha; - } + &:nth-child(2) { + @include callout-item-accent("--highlight"); } - @media(max-width: 850px) { - padding-left: rem(4.5); + &:nth-child(3) { + @include callout-item-accent("--orchid"); } - @media(max-width: 480px) { - padding-left: rem(3); - } + &:hover, + &:focus { + background-color: color-mix(in srgb, var(--callout-accent-soft) 20%, var(--callout-item-surface)); + border-color: var(--callout-accent-border); - &:before { - content: counter(list-counter); - color: var(--orchid); - font-size: rem(3); - font-weight: 100; - position: absolute; - top: 100; - left: rem(1); + .whats-new-callout__item-heading { + color: var(--heading); + } - @media(max-width: 850px) { - font-size: rem(4); - left: rem(.5); + .whats-new-callout__item-icon { + color: var(--heading); } - @media(max-width: 480px) { - font-size: rem(3.5); - left: 0; + .whats-new-callout__item-arrow { + color: color-mix(in srgb, var(--callout-accent) 72%, var(--heading)); + opacity: 1; + transform: translateX(2px); } } + } - &:last-child { - padding-bottom: 0; - } + &__item-icon { + align-items: center; + background: linear-gradient( + 145deg, + color-mix(in srgb, var(--callout-accent) 24%, transparent), + color-mix(in srgb, var(--callout-accent) 8%, transparent) + ); + border: 1px solid color-mix(in srgb, var(--callout-accent) 32%, transparent); + border-radius: rem(0.6); + box-shadow: 0 0 16px color-mix(in srgb, var(--callout-accent) 14%, transparent); + color: color-mix(in srgb, var(--callout-accent) 76%, var(--heading)); + display: flex; + flex-shrink: 0; + height: 40px; + justify-content: center; + transition: color 0.18s ease; + width: 40px; - p { - display: block; + svg { + height: 20px; + width: 20px; } } - } - hr { - border: none; - border-top: 1px solid $medium-grey-v2; - margin: rem(3.6) auto; - width: 80%; - } + &__item-copy { + display: grid; + flex: 1; + gap: 6px; + min-width: 0; + } - .warning, - .private-preview { - // NOTE(benesch): please ensure these colors stay yellowish/orange. - // Private preview and warnings should indicate a moderate amount of - // caution--not serious danger, but nothing to overlook either. - background: rgba(238, 134, 96, 0.05); - border: 1px solid rgba(238, 134, 96, 0.2); + &__item-arrow { + align-self: center; + color: var(--body); + display: flex; + flex-shrink: 0; + opacity: 0.45; + transition: + color 0.18s ease, + opacity 0.18s ease, + transform 0.18s ease; + } + + &__item-heading { + align-items: center; + color: var(--inline-lifted); + display: flex; + flex-wrap: wrap; + font-size: var(--sm); + font-weight: var(--weight-heading); + gap: 8px; + line-height: 1.2; + transition: color 0.18s ease; + } + + &__item-text { + color: var(--body); + display: block; + font-size: var(--sm); + font-weight: var(--weight-body); + line-height: var(--leading-body); + } + + &__badge { + border-radius: 999px; + font-family: var(--font-mono); + font-size: 10px; + font-weight: var(--weight-body-emphasis); + letter-spacing: var(--tracking-code); + line-height: 1; + padding: 4px 8px; + text-transform: uppercase; - &::after { - border-color: var(--bg) var(--bg) #fbe2d9 #fbe2d9; - background: #fbe2d9; - } + &--new { + background: color-mix(in srgb, var(--sg-teal-5) 42%, transparent); + border: 1px solid color-mix(in srgb, var(--sg-teal-3) 34%, transparent); + color: color-mix(in srgb, var(--sg-teal-3) 88%, var(--heading)); + } - .gutter { - color: #d33902; + &--preview { + background: color-mix(in srgb, var(--table-orange) 14%, transparent); + border: 1px solid color-mix(in srgb, var(--table-orange) 28%, transparent); + color: color-mix(in srgb, var(--table-orange) 88%, var(--heading)); + } } - } - - .private-preview-inline { - color: #d33902; - white-space: nowrap; - background: rgba(238, 134, 96, 0.05); - border: 1px solid rgba(238, 134, 96, 0.2); - border-radius: rem(0.6); - padding: rem(0.1); - } - .note, - .important { - background: var(--note); - border: 1px solid var(--note-border); + &__footer { + border-top: 1px solid var(--callout-item-border); + color: var(--body); + font-size: var(--sm); + font-weight: var(--weight-body); + line-height: var(--leading-body); + margin: var(--milli) 0 0; + padding-top: var(--milli); - a { - &:hover, - &:focus { - color: var(--sub) !important; - } + a { + color: var(--link); + font-weight: var(--weight-body); + text-decoration: underline; + text-decoration-color: color-mix(in srgb, var(--link) 30%, transparent); + text-underline-offset: 3px; - code { &:hover, &:focus { - color: var(--sub) !important; + color: var(--link-hover); + text-decoration-color: var(--link-hover); } } } - &::after { - border-color: var(--bg) var(--bg) var(--note-after) var(--note-after); - background: var(--note-after); - } + @media(max-width: 820px) { + padding: var(--milli); - .gutter { - color: var(--note-gutter); + &__header { + align-items: flex-start; + flex-direction: column; + gap: 14px; + } + + h2 { + font-size: var(--h4); + } } - } - .tip { - background: var(--tip); - border: 1px solid var(--tip-border); + @media(max-width: 520px) { + border-radius: var(--table-radius); + padding: 16px; - a { - &:hover, - &:focus { - color: var(--sub) !important; + &__title-wrap { + align-items: flex-start; + flex-wrap: wrap; + gap: 12px; } - code { - &:hover, - &:focus { - color: var(--sub) !important; - } + &__sparkle, + &__item-icon { + height: 30px; + width: 30px; } - } - &::after { - border-color: var(--bg) var(--bg) var(--tip-after) var(--tip-after); - background: var(--tip-after); + &__item { + align-items: flex-start; + gap: 12px; + padding: 14px; + } } + } - .gutter { - color: var(--tip-gutter); + .multilinkbox { + align-items: stretch; + display: grid; + gap: rem(1.2); + grid-template-columns: repeat(3, minmax(0, 1fr)); + margin: var(--xx-small) 0; + + @media(max-width: 860px) { + grid-template-columns: 1fr; } } - .annotation { - border: 1px solid var(--annotation-border); + .linkbox { + --linkbox-accent: var(--sg-violet); + --linkbox-accent-border: color-mix(in srgb, var(--linkbox-accent) 22%, transparent); + --linkbox-accent-soft: color-mix(in srgb, var(--linkbox-accent) 10%, transparent); + --linkbox-divider: var(--docs-card-divider-strong); + --linkbox-label: color-mix(in srgb, var(--linkbox-accent) 72%, var(--heading)); + --linkbox-link: var(--sg-lavender-2); + --linkbox-surface: var(--docs-card-surface); + + @include docs-feature-card; + + --docs-card-glow: color-mix(in srgb, var(--linkbox-accent) 8%, transparent); + + background-color: var(--linkbox-surface); + box-shadow: var(--docs-card-shadow); + color: var(--body); + display: grid; + font-family: var(--font-body); + grid-template-rows: auto 1fr; + height: 100%; + min-height: 100%; + min-width: 0; + overflow: hidden; + position: relative; + transition: + background-color 0.18s ease, + border-color 0.18s ease, + box-shadow 0.18s ease; - a { - &:hover, - &:focus { - color: var(--sub) !important; - } + &:hover, + &:focus-within { + background-color: color-mix(in srgb, var(--linkbox-accent-soft) 20%, var(--linkbox-surface)); + border-color: var(--linkbox-accent-border); - code { - &:hover, - &:focus { - color: var(--sub) !important; - } + .linkbox__category-icon { + color: var(--heading); } } - } + &--databases { + --linkbox-accent: var(--sg-teal-3); + --linkbox-label: color-mix(in srgb, var(--sg-teal-3) 78%, var(--heading)); + } - .public-preview { - background: var(--public-preview); - border: 1px solid var(--public-preview-border); - color: var(--public-preview-text); + &--brokers { + --linkbox-accent: var(--sg-violet); + --linkbox-label: color-mix(in srgb, var(--sg-violet) 72%, var(--heading)); + } - &::after { - border-color: var(--bg) var(--bg) var(--public-preview-after) var(--public-preview-after); - background: var(--public-preview-after); + &--webhooks { + --linkbox-accent: var(--orchid); + --linkbox-label: color-mix(in srgb, var(--orchid) 72%, var(--heading)); } - .gutter { - color: var(--public-preview-gutter); + &.materialize::before, + &.book::before, + &.bulb::before, + &.doc::before, + &.touch::before { + content: ""; + width: 32px; + height: 32px; + position: absolute; + top: rem(2); + left: 0; + background-size: contain; } - } - .annotation { - box-sizing: border-box; - margin: rem(1.6) 0; - padding: rem(1) rem(1) rem(1) rem(2); - position: relative; + &.materialize::before { background-image: url("../images/materialize_favicon_32.png"); } + &.book::before { background-image: url("../images/icon_book.png"); } + &.bulb::before { background-image: url("../images/icon_bulb.png"); } + &.doc::before { background-image: url("../images/icon_doc.png"); } + &.touch::before { background-image: url("../images/icon_touch.png"); } + + &.book .title, + &.bulb .title, + &.doc .title, + &.touch .title, + &.materialize .title { + padding-left: 28px; + } - @media(max-width: 510px) { - padding: rem(.8) rem(.8) rem(.8) rem(1); + &__header { + align-items: center; + border-bottom: 1px solid color-mix(in srgb, var(--linkbox-accent) 16%, var(--linkbox-divider)); + display: flex; + flex-shrink: 0; + gap: 12px; + padding: 16px; } - p:first-of-type { - margin-top: 0; + &__category-icon { + align-items: center; + background: linear-gradient( + 145deg, + color-mix(in srgb, var(--linkbox-accent) 22%, transparent), + color-mix(in srgb, var(--linkbox-accent) 7%, transparent) + ); + border: 1px solid color-mix(in srgb, var(--linkbox-accent) 32%, transparent); + border-radius: rem(0.6); + box-shadow: 0 0 14px color-mix(in srgb, var(--linkbox-accent) 12%, transparent); + color: color-mix(in srgb, var(--linkbox-accent) 72%, var(--heading)); + display: flex; + flex-shrink: 0; + height: 32px; + justify-content: center; + transition: color 0.18s ease; + width: 32px; + + &::before { + background: currentColor; + content: ""; + display: block; + height: 16px; + mask-position: center; + mask-repeat: no-repeat; + mask-size: contain; + -webkit-mask-position: center; + -webkit-mask-repeat: no-repeat; + -webkit-mask-size: contain; + width: 16px; + } + + &--databases::before { + mask-image: url("../images/connectors/category-databases.svg"); + -webkit-mask-image: url("../images/connectors/category-databases.svg"); + } + + &--brokers::before { + mask-image: url("../images/connectors/category-brokers.svg"); + -webkit-mask-image: url("../images/connectors/category-brokers.svg"); + } + + &--webhooks::before { + mask-image: url("../images/connectors/category-webhooks.svg"); + -webkit-mask-image: url("../images/connectors/category-webhooks.svg"); + } + } + + .title { + background: transparent; + border-bottom: none; + color: var(--linkbox-label); + flex: 1; + font-family: var(--font-body); + font-size: var(--xsm); + font-weight: var(--weight-heading); + letter-spacing: var(--tracking-eyebrow); + line-height: 1.3; + margin: 0; + padding: 0; + text-transform: uppercase; + } + + > ul { + align-self: start; + display: block; + list-style: none; + margin: 0; + padding: 14px 16px 18px; + } + + li { + margin: 0; + } + + // a:not(a[class]) to outrank the generic underlined content-link rule. + a:not(a[class]), + a:not(a[class]) strong { + border-radius: rem(0.45); + color: var(--linkbox-link); + display: block; + font-size: var(--sm); + font-weight: var(--weight-body); + line-height: 1.55; + margin: 0 rem(-0.4); + padding: rem(0.45) rem(0.6); + text-decoration: none; + transition: + background-color 0.15s ease, + color 0.15s ease; + + &:hover, + &:focus-visible { + background: color-mix(in srgb, var(--linkbox-accent-soft) 45%, transparent); + border-bottom: none; + color: var(--heading); + text-decoration: none; + } + } + } + + img { + max-width: 100%; + } + + > img, + p > img { + border: 1px solid var(--docs-card-divider); + border-radius: rem(0.6); + box-shadow: var(--docs-card-shadow); + display: block; + margin: rem(1.2) auto; + } + + blockquote { + @include docs-admonition-theme("--sg-lavender-2"); + @include docs-admonition-card; + + font-style: normal; + + p:last-child { + margin-bottom: 0; + } + } + + dl { + margin: rem(1.2) 0; + } + + dt { + color: var(--heading); + font-family: var(--font-heading); + font-size: var(--sm); + font-weight: var(--weight-heading); + margin-top: rem(1.2); + + &:first-child { + margin-top: 0; + } + } + + dd { + border-left: 2px solid var(--docs-card-divider); + color: var(--body); + margin: rem(0.4) 0 rem(0.8); + padding-left: rem(1.2); + } + + figure { + @include docs-feature-card; + + margin: var(--small) 0; + overflow: hidden; + padding: var(--nano); + + img { + border: 1px solid var(--docs-card-divider); + border-radius: rem(0.6); + display: block; + margin: 0 auto; + max-width: 100%; + width: 100%; + } + } + + figcaption { + padding: var(--nano) var(--milli); + font-size: var(--xsm); + font-weight: var(--weight-body); + color: var(--caption); + font-style: italic; + line-height: var(--leading-body); + } + + .architecture-diagram-figure { + @include docs-feature-card; + + margin: var(--small) 0; + overflow: hidden; + padding: rem(1.4) rem(1.4) rem(1.2); + + figcaption { + margin-top: rem(0.6); + padding: 0; + text-align: center; + } + } + + .architecture-diagram { + --arch-source-accent: #6d28d9; + --arch-source-soft: #f5f0ff; + --arch-source-border: #ddd0ff; + --arch-compute-accent: #00857a; + --arch-compute-soft: #ecfdf9; + --arch-compute-border: #9fe8dc; + --arch-serving-accent: #0969da; + --arch-serving-soft: #eff6ff; + --arch-serving-border: #b6d4fe; + --arch-code-bg: #ffffff; + --arch-stack-opacity: 0.55; + --arch-kw: #6d28d9; + --arch-fn: #00857a; + --arch-var: #374151; + --arch-txt: #4b5563; + --arch-punct: #6e7781; + --arch-shadow-color: rgb(15 23 42 / 12%); + + display: block; + aspect-ratio: 1120 / 400; + height: auto; + width: 100%; + + .arch-tier--source { + --arch-tier-accent: var(--arch-source-accent); + --arch-tier-soft: var(--arch-source-soft); + --arch-tier-border: var(--arch-source-border); + } + + .arch-tier--compute { + --arch-tier-accent: var(--arch-compute-accent); + --arch-tier-soft: var(--arch-compute-soft); + --arch-tier-border: var(--arch-compute-border); + } + + .arch-tier--serving { + --arch-tier-accent: var(--arch-serving-accent); + --arch-tier-soft: var(--arch-serving-soft); + --arch-tier-border: var(--arch-serving-border); + } + + .arch-tier-label { + fill: var(--arch-tier-accent); + font-family: var(--font-mono); + font-size: 13px; + font-weight: 600; + letter-spacing: 0.08em; + } + + .arch-tier-card { + fill: var(--arch-code-bg); + stroke: var(--arch-tier-border); + stroke-width: 1.5; + } + + .arch-tier-stack { + fill: var(--arch-tier-soft); + stroke: var(--arch-tier-border); + stroke-width: 1; + } + + .arch-tier-stack--1 { + opacity: calc(var(--arch-stack-opacity) + 0.12); + } + + .arch-tier-stack--2 { + opacity: var(--arch-stack-opacity); + } + + .arch-dot { + fill: var(--arch-tier-accent); + opacity: 0.4; + } + + .arch-card-divider { + opacity: 0.7; + stroke: var(--arch-tier-border); + stroke-width: 1; + } + + .arch-code-panel { + fill: none; + } + + .arch-code-line { + font-family: var(--font-mono); + font-size: 14px; + font-weight: 500; + letter-spacing: var(--tracking-code); + } + + .arch-kw { + fill: var(--arch-kw); + font-weight: 600; + } + + .arch-fn { + fill: var(--arch-fn); + font-weight: 600; + } + + .arch-var { + fill: var(--arch-var); + } + + .arch-txt { + fill: var(--arch-txt); + } + + .arch-punct { + fill: var(--arch-punct); + } + + .arch-stop--source { + stop-color: var(--arch-source-accent); + } + + .arch-stop--compute { + stop-color: var(--arch-compute-accent); + } + + .arch-stop--serving { + stop-color: var(--arch-serving-accent); + } + + .arch-arrowhead--compute { + fill: var(--arch-compute-accent); + } + + .arch-arrowhead--serving { + fill: var(--arch-serving-accent); + } + + .arch-flow-base { + fill: none; + opacity: 0.35; + stroke-linecap: round; + stroke-width: 2; + } + + // Data "packets" flowing along the base line. The dash period (0.1 + // dot + 10 gap) must match the keyframe offset below for a seamless + // loop. + .arch-flow-dots { + animation: arch-flow-dash 1s linear infinite; + fill: none; + stroke-dasharray: 0.1 10; + stroke-linecap: round; + stroke-width: 3; + } + + @media (prefers-reduced-motion: reduce) { + .arch-flow-dots { + animation: none; + } + } + + .arch-shadow { + flood-color: var(--arch-shadow-color); + flood-opacity: 1; + } + } + + @keyframes arch-flow-dash { + to { + stroke-dashoffset: -10.1; + } + } + + body.dark & { + .architecture-diagram { + --arch-source-accent: #c4b5fd; + --arch-source-soft: rgb(196 181 253 / 10%); + --arch-source-border: rgb(196 181 253 / 28%); + --arch-compute-accent: #2bddc2; + --arch-compute-soft: rgb(43 221 194 / 10%); + --arch-compute-border: rgb(43 221 194 / 28%); + --arch-serving-accent: #7dcfff; + --arch-serving-soft: rgb(125 207 255 / 10%); + --arch-serving-border: rgb(125 207 255 / 28%); + --arch-code-bg: color-mix(in srgb, var(--bg) 82%, var(--card-light)); + --arch-stack-opacity: 0.35; + --arch-kw: #c4b5fd; + --arch-fn: #2bddc2; + --arch-var: #e2e8f0; + --arch-txt: #cbd5e1; + --arch-punct: #7b839f; + --arch-shadow-color: rgb(0 0 0 / 45%); + } + } + + table.syntax-table { + background: + linear-gradient( + 180deg, + color-mix(in srgb, var(--sg-lavender-3) 14%, transparent) 0%, + color-mix(in srgb, var(--sg-violet) 5%, transparent) 42%, + transparent 100% + ) + 0 0 / 100% rem(1.4) no-repeat, + var(--bg); + border-collapse: separate; + border-spacing: 0; + border: 1px solid var(--docs-card-border); + border-radius: var(--table-radius); + box-shadow: var(--docs-card-shadow); + font-size: var(--sm); + font-weight: var(--weight-body); + line-height: var(--leading-body); + overflow: hidden; + table-layout: auto; + width: 100%; + + @media(max-width: 500px) { + code { + font-size: var(--xsm); + } + } + + thead th { + backdrop-filter: blur(8px); + background: color-mix(in srgb, var(--bg-sub) 42%, var(--bg)); + border-bottom: 1px solid var(--docs-card-divider); + color: var(--table-text); + font-family: var(--font-heading); + font-size: var(--xsm); + font-weight: 600; + letter-spacing: 0.08em; + text-transform: uppercase; + } + + tbody th { + color: var(--heading); + font-weight: 500; + vertical-align: top; + } + + tbody tr { + transition: background-color 0.15s ease; + + &:hover { + background: color-mix(in srgb, var(--highlight) 4%, var(--bg)); + } + } + + tr:last-child { + > th, + > td { + border-bottom: none; + } + } + + th, + td { + border-bottom: 1px solid var(--docs-card-divider); + padding: rem(0.85) rem(1.4); + text-align: left; + vertical-align: top; + } + + th + th, + th + td, + td + td { + border-left: 1px solid var(--docs-card-divider); + } + + td { + @include docs-nested-code-vars; + + color: var(--body); + + @media(max-width: 500px) { + padding: var(--nano) var(--pico); + } + + pre { + background-color: inherit; + border: 0; + box-shadow: none; + margin: 0; + } + + .highlight { + margin: rem(0.6) 0; + width: 100%; + + pre, + .chroma { + overflow-x: auto; + } + } + } + + a:not(a[class]) { + border-bottom: 1px solid color-mix(in srgb, var(--link) 35%, transparent); + color: var(--link); + font-weight: var(--weight-body-strong); + text-decoration: none; + + &:hover, + &:focus { + border-bottom-color: var(--link); + color: var(--link-hover); + text-decoration: none; + } + } + } + + table:not(.mz-offerings__nested-table):not(.syntax-table) { + background: + linear-gradient( + 180deg, + color-mix(in srgb, var(--sg-lavender-3) 14%, transparent) 0%, + color-mix(in srgb, var(--sg-violet) 5%, transparent) 42%, + transparent 100% + ) + 0 0 / 100% rem(1.4) no-repeat, + radial-gradient(130% 90% at 50% -40%, color-mix(in srgb, var(--sg-violet) 7%, transparent), transparent 58%), + var(--bg); + border-collapse: separate; + border-spacing: 0; + border: 1px solid var(--docs-card-border); + border-radius: var(--table-radius); + box-shadow: var(--docs-card-shadow); + font-size: var(--sm); + font-weight: var(--weight-body); + line-height: var(--leading-body); + overflow: hidden; + table-layout: auto; + width: 100%; + + @media(max-width: 500px) { + code { + font-size: var(--xsm); + } + } + + thead th { + backdrop-filter: blur(8px); + background: color-mix(in srgb, var(--bg-sub) 42%, var(--bg)); + border-bottom: 1px solid var(--docs-card-divider); + color: var(--table-text); + font-family: var(--font-heading); + font-size: var(--xsm); + font-weight: 600; + letter-spacing: 0.08em; + text-transform: uppercase; + } + + tbody th { + color: var(--heading); + font-weight: 500; + vertical-align: top; + } + + tbody tr { + transition: background-color 0.15s ease; + + &:hover { + background: color-mix(in srgb, var(--highlight) 4%, var(--bg)); + } + } + + tr:last-child { + > th, + > td { + border-bottom: none; + } + } + + th, + td { + border-bottom: 1px solid var(--docs-card-divider); + padding: rem(0.85) rem(1.4); + text-align: left; + vertical-align: top; + } + + th + th, + th + td, + td + td { + border-left: 1px solid var(--docs-card-divider); + } + + td { + @include docs-nested-code-vars; + + color: var(--body); + + @media(max-width: 500px) { + padding: var(--nano) var(--pico); + } + + // Inline code chips only. Block snippets live in .highlight / pre. + code:not(pre code):not(.highlight code) { + background: color-mix(in srgb, var(--highlight) 9%, var(--bg)); + border: 1px solid color-mix(in srgb, var(--highlight) 12%, transparent); + border-radius: rem(0.35); + font-size: rem(1.2); + padding: rem(0.08) rem(0.32); + } + + pre, + .highlight { + code { + background: none; + border: none; + border-radius: 0; + color: inherit; + font-size: inherit; + padding: 0; + } + } + + pre { + background-color: inherit; + border: 0; + box-shadow: none; + margin: 0; + } + + .highlight { + margin: rem(0.6) 0; + width: 100%; + + pre, + .chroma { + overflow-x: auto; + } + } + } + + a:not(a[class]) { + border-bottom: 1px solid color-mix(in srgb, var(--link) 35%, transparent); + color: var(--link); + font-weight: var(--weight-body-strong); + text-decoration: none; + + &:hover, + &:focus { + border-bottom-color: var(--link); + color: var(--link-hover); + text-decoration: none; + } + } + } + + .table-container { + overflow-x: auto; + + &.mz-offerings-container { + border-radius: var(--table-radius); + max-width: 100%; + overflow-x: visible; + } + } + + .mz-offerings { + @include docs-feature-card; + color: var(--body); + font-family: var(--font-body); + overflow: hidden; + position: relative; + width: 100%; + + @include docs-card-top-hairline; + + &, + * { + box-sizing: border-box; + } + + a:not(.mz-offerings__action-primary) { + border-bottom: 0; + text-decoration: none; + } + + svg { + display: block; + flex-shrink: 0; + } + + &__headers { + background: color-mix(in srgb, var(--bg) 35%, transparent); + border-bottom: 1px solid var(--docs-card-divider-strong); + display: grid; + grid-template-columns: var(--offerings-cols); + } + + &__col-label { + color: var(--heading); + font-family: var(--font-heading); + font-size: var(--xsm); + font-weight: var(--weight-heading); + letter-spacing: var(--tracking-eyebrow); + padding: 14px 24px; + text-transform: uppercase; + + & + & { + border-left: 1px solid var(--docs-card-divider); + } + } + + &__row { + border-top: 1px solid var(--docs-card-divider); + display: grid; + grid-template-columns: var(--offerings-cols); + position: relative; + transition: background-color 0.15s ease; + + &::before { + background: linear-gradient(180deg, transparent, var(--offering-accent), transparent); + bottom: 0; + content: ""; + left: 0; + opacity: 0.25; + position: absolute; + top: 0; + transition: opacity 0.2s ease; + width: 1px; + } + + &:hover { + background-color: var(--offering-row-glow); + + &::before { + opacity: 0.9; + } + } + + &--cloud { + @include offering-row-theme("--table-green"); + } + + &--self { + @include offering-row-theme("--sg-violet"); + + // Identity + CTA: neutral surfaces; purple only on the row stripe + inner table + --offering-badge-bg: var(--surface-inset); + --offering-badge-border: var(--border-subtle); + --offering-tile-bg: var(--surface-inset); + --offering-tile-glow: none; + --offering-cta-accent: var(--inline-lifted); + --offering-action-bg: var(--surface-subtle); + --offering-action-border: color-mix(in srgb, var(--sg-lavender-2) 28%, var(--border-subtle)); + --offering-action-hover: var(--surface-inset); + + .mz-offerings__icon-tile { + color: var(--sub); + } + + .mz-offerings__badge { + color: var(--caption); + } + + .mz-offerings__action-primary { + &:hover, + &:focus { + border-color: color-mix(in srgb, var(--sg-lavender-2) 40%, var(--border-subtle)); + color: var(--heading); + } + } + } + + &--emulator { + @include offering-row-theme("--table-orange"); + } + } + + &__identity { + display: flex; + flex-direction: column; + gap: 10px; + padding: 24px 20px 24px 26px; + } + + &__icon-badge-row { + align-items: center; + display: flex; + flex-wrap: wrap; + gap: 8px; + } + + &__icon-tile { + align-items: center; + background: var(--offering-tile-bg, var(--offering-badge-bg)); + border: 1px solid var(--offering-badge-border); + border-radius: rem(0.6); + box-shadow: var(--offering-tile-glow, none); + color: color-mix(in srgb, var(--offering-identity-accent, var(--offering-accent)) 72%, var(--heading)); + display: flex; + flex-shrink: 0; + height: 32px; + justify-content: center; + width: 32px; + } + + &__badges { + align-items: center; + display: flex; + flex-wrap: wrap; + gap: 6px; + } + + &__badge { + background: var(--offering-badge-bg); + border: 1px solid var(--offering-badge-border); + border-radius: rem(0.45); + color: var(--offering-identity-accent, var(--offering-accent)); + display: inline-flex; + font-family: var(--font-mono); + font-size: 10px; + letter-spacing: var(--tracking-code); + padding: 3px 8px; + } + + &__badge-popular { + align-items: center; + background: var(--table-yellow-bg); + border: 1px solid var(--table-yellow-border); + border-radius: rem(0.45); + color: var(--table-yellow); + display: inline-flex; + font-family: var(--font-mono); + font-size: 10px; + gap: 4px; + letter-spacing: var(--tracking-code); + padding: 3px 8px; + } + + &__name { + color: var(--inline-lifted); + font-size: var(--sm); + font-weight: var(--weight-heading); + letter-spacing: -0.015em; + line-height: 1.35; + margin: 0; + } + + &__tagline { + color: var(--body); + font-family: var(--font-mono); + font-size: var(--xsm); + line-height: 1.4; + margin: 0; + opacity: 0.88; + } + + &__desc { + border-left: 1px solid var(--docs-card-divider); + color: var(--body); + font-size: var(--sm); + font-weight: var(--weight-body); + line-height: var(--leading-body); + min-width: 0; + padding: rem(2.4); + + p { + margin: 0; + } + } + + &__nested { + margin-top: rem(1); + min-width: 0; + } + + &__nested-note { + align-items: center; + color: var(--offering-edition-label, var(--offering-accent)); + display: flex; + font-family: var(--font-mono); + font-size: var(--xsm); + gap: rem(0.6); + margin-bottom: rem(1); + } + + &__nested-wrap { + background: var(--offering-nested-surface, var(--surface-inset)); + border: 1px solid var(--offering-nested-border, var(--border-subtle)); + border-radius: rem(1); + margin-top: rem(1); + max-width: 100%; + min-width: 0; + overflow: hidden; + } + + &__nested-table { + background: transparent; + border: none; + border-collapse: collapse; + border-radius: 0; + box-shadow: none; + font-size: var(--xsm); + margin-top: 0; + min-width: 0; + table-layout: fixed; + width: 100%; + + thead tr { + background: var(--offering-nested-header-bg, var(--surface-inset)); + border-bottom: 1px solid var(--offering-nested-border, var(--border-subtle)); + } + + thead th { + background: transparent; + border: none; + color: var(--caption); + font-family: var(--font-mono); + font-size: rem(1); + font-weight: var(--weight-body-emphasis); + letter-spacing: 0.06em; + padding: rem(0.75) rem(1); + text-align: left; + text-transform: uppercase; + vertical-align: middle; + + &.mz-offerings__th-com { + text-align: center; + } + } + + th, + td { + border-bottom: none; + border-left: none; + border-top: none; + padding: rem(0.75) rem(1); + vertical-align: middle; + } + + tbody tr + tr { + border-top: 1px solid var(--border-faint); + } + + .mz-offerings__chip--yes { + background: transparent; + color: var(--offering-edition-value, var(--offering-accent)); + } + } + + &__th-ent { + color: var(--offering-edition-heading, var(--offering-accent)); + width: 24%; + } + + &__th-com { + color: var(--caption); + text-align: center; + width: 24%; + } + + &__td-feature { + color: var(--caption); + font-family: var(--font-mono); + line-height: 1.35; + white-space: normal; + width: 52%; + } + + &__td-ent { + color: var(--offering-edition-value, var(--offering-accent)); + font-family: var(--font-mono); + + &--neutral { + color: var(--inline-lifted); + } + } + + &__td-com { + color: var(--caption); + font-family: var(--font-mono); + text-align: center; + + .mz-offerings__chip { + margin-inline: auto; + } + } + + &__chip { + align-items: center; + border-radius: 50%; + display: inline-flex; + flex-shrink: 0; + height: rem(1.75); + justify-content: center; + width: rem(1.75); + + &--no { + background: var(--border-faint); + color: var(--caption); + } + } + + &__cta { + border-left: 1px solid var(--docs-card-divider); + display: flex; + flex-direction: column; + gap: 8px; + min-width: 0; + padding: 20px 16px; + + p { + color: var(--body); + font-size: var(--sm); + line-height: var(--leading-body); + margin: 0; + } + } + + &__action-primary { + align-items: center; + background: var(--offering-action-bg); + border: 1px solid var(--offering-action-border); + border-radius: rem(0.6); + box-sizing: border-box; + color: var(--offering-cta-accent, var(--offering-accent)); + display: flex; + font-family: var(--font-body); + font-size: var(--xsm); + font-weight: var(--weight-body); + gap: 6px; + justify-content: space-between; + padding: 7px 10px; + text-decoration: none; + transition: background-color 0.15s ease, border-color 0.15s ease; + white-space: normal; + + svg { + transition: transform 0.15s ease; + } + + &:hover, + &:focus { + background: var(--offering-action-hover); + border-color: var(--offering-cta-accent, var(--offering-accent)); + color: var(--offering-cta-accent, var(--offering-accent)); + text-decoration: none; + + svg { + transform: translateX(2px); + } + } + } + + &__action-secondary { + align-items: center; + border-radius: rem(0.45); + color: var(--body); + display: flex; + font-size: var(--xsm); + font-weight: var(--weight-body); + gap: 5px; + padding: 4px 10px; + text-decoration: none; + transition: color 0.15s ease; + white-space: normal; + + svg { + opacity: 0.75; + } + + &:hover, + &:focus { + color: var(--inline-lifted); + text-decoration: none; + + svg { + opacity: 1; + } + } + } + + &__footer { + align-items: center; + background: color-mix(in srgb, var(--bg) 40%, transparent); + border-top: 1px solid var(--docs-card-divider); + display: flex; + justify-content: space-between; + padding: 14px 24px; + } + + &__footer-links { + align-items: center; + display: flex; + gap: var(--milli); + } + + &__footer-label { + color: var(--caption); + font-family: var(--font-mono); + font-size: var(--xsm); + letter-spacing: var(--tracking-code); + opacity: 0.75; + } + + &__footer-link { + align-items: center; + color: var(--link); + display: inline-flex; + font-size: var(--xsm); + font-weight: var(--weight-body); + gap: 6px; + opacity: 0.92; + text-decoration: none; + transition: color 0.15s ease, opacity 0.15s ease; + + &:hover, + &:focus { + color: var(--link-hover); + opacity: 1; + text-decoration: none; + } + } + + @media (max-width: 860px) { + &__headers { + display: none; + } + + &__row { + grid-template-columns: 1fr; + + &::before { + display: none; + } + } + + &__desc, + &__cta { + border-left: none; + border-top: 1px solid var(--docs-card-divider); + } + + &__identity { + padding-bottom: 20px; + } + } + + @media (max-width: 480px) { + &__footer { + align-items: flex-start; + flex-direction: column; + gap: 8px; + } + } + } + + body.light & { + .whats-new-callout { + --callout-item-surface: var(--white); + --callout-item-border: var(--sg-gray-1); + + &__sparkle { + background: linear-gradient( + 145deg, + color-mix(in srgb, var(--sg-lavender-1) 92%, var(--sg-violet)), + color-mix(in srgb, var(--white) 88%, var(--sg-lavender-1)) + ); + border-color: color-mix(in srgb, var(--sg-lavender-2) 38%, transparent); + box-shadow: 0 2px 10px color-mix(in srgb, var(--sg-violet) 7%, transparent); + color: var(--sg-lavender-4); + } + + &__version { + background: color-mix(in srgb, var(--sg-lavender-1) 72%, var(--white)); + border-color: color-mix(in srgb, var(--sg-lavender-2) 42%, transparent); + color: var(--sg-lavender-4); + } + + &__badge--new { + background: color-mix(in srgb, var(--color-teal-100) 88%, var(--white)); + border-color: color-mix(in srgb, var(--sg-teal-3) 28%, transparent); + color: var(--sg-teal-5); + } + + &__badge--preview { + background: color-mix(in srgb, #FFF4EB 92%, var(--white)); + border-color: color-mix(in srgb, var(--table-orange) 24%, transparent); + color: color-mix(in srgb, var(--table-orange) 82%, var(--sg-midnight)); + } + } + + :not(div.footnotes) > ol.has-p:not(ol.has-p ol.has-p) { + --steps-accent: var(--sg-teal-5); + + > li { + &:before { + background: linear-gradient( + 145deg, + color-mix(in srgb, var(--sg-teal-3) 18%, var(--white)), + color-mix(in srgb, var(--sg-teal-3) 5%, var(--white)) + ); + border-color: color-mix(in srgb, var(--sg-teal-3) 45%, transparent); + box-shadow: 0 0 12px color-mix(in srgb, var(--sg-teal-3) 14%, transparent); + color: var(--sg-teal-5); + } + + &:not(:last-child)::after { + background: linear-gradient( + to bottom, + color-mix(in srgb, var(--sg-teal-3) 45%, transparent), + color-mix(in srgb, var(--sg-teal-3) 8%, transparent) + ); + } + + .highlight { + border-color: color-mix(in srgb, var(--sg-gray-1) 85%, transparent); + } + + pre { + background: color-mix(in srgb, var(--sg-lavender-1) 18%, var(--white)); + border-color: color-mix(in srgb, var(--sg-gray-1) 85%, transparent); + } + + .highlight + pre { + border-top-color: color-mix(in srgb, var(--sg-gray-1) 70%, var(--sg-teal-3)); + } + } + } + + .mz-offerings { + &__headers { + background: linear-gradient( + 180deg, + color-mix(in srgb, var(--sg-lavender-1) 55%, var(--white)) 0%, + color-mix(in srgb, var(--white) 92%, var(--sg-lavender-1)) 100% + ); + } + + &__footer { + background: color-mix(in srgb, var(--sg-lavender-1) 28%, var(--white)); + } + + &__row--cloud { + --offering-action-bg: color-mix(in srgb, var(--color-teal-100) 75%, var(--white)); + --offering-action-border: color-mix(in srgb, var(--table-green) 22%, transparent); + --offering-action-hover: color-mix(in srgb, var(--color-teal-100) 92%, var(--white)); + } + + &__row--emulator { + --offering-action-bg: color-mix(in srgb, #FFF4EB 88%, var(--white)); + --offering-action-border: color-mix(in srgb, var(--table-orange) 24%, transparent); + --offering-action-hover: color-mix(in srgb, #FFE8D6 92%, var(--white)); + } + } + + .linkbox--databases, + .linkbox--brokers, + .linkbox--webhooks { + --linkbox-divider: color-mix(in srgb, var(--sg-gray-1) 80%, transparent); + --linkbox-icon-bg: color-mix(in srgb, var(--linkbox-accent) 14%, var(--white)); + --linkbox-link: var(--sg-violet); + --docs-card-surface: var(--white); + + border-color: color-mix(in srgb, var(--sg-gray-1) 85%, transparent); + + .linkbox__header { + border-bottom-color: var(--linkbox-divider); + } + + a, + a strong { + color: var(--linkbox-link); + + &:hover, + &:focus-visible { + color: var(--sg-midnight); + } + } + } + + .linkbox:not([class*="linkbox--"]) { + --linkbox-link: var(--sg-violet); + --docs-card-surface: var(--white); + + border-color: color-mix(in srgb, var(--sg-gray-1) 85%, transparent); + } + + table.syntax-table { + background: + linear-gradient( + 180deg, + color-mix(in srgb, var(--sg-lavender-2) 18%, transparent) 0%, + color-mix(in srgb, var(--sg-violet) 4%, transparent) 45%, + transparent 100% + ) + 0 0 / 100% rem(1.4) no-repeat, + var(--bg); + border-color: var(--docs-card-border); + + thead th { + background: color-mix(in srgb, var(--bg-sub) 55%, var(--bg)); + } + + tbody tr:hover { + background: color-mix(in srgb, var(--highlight) 6%, var(--bg)); + } + } + + table:not(.mz-offerings__nested-table):not(.syntax-table) { + background: + linear-gradient( + 180deg, + color-mix(in srgb, var(--sg-lavender-2) 18%, transparent) 0%, + color-mix(in srgb, var(--sg-violet) 4%, transparent) 45%, + transparent 100% + ) + 0 0 / 100% rem(1.4) no-repeat, + radial-gradient(130% 90% at 50% -40%, color-mix(in srgb, var(--sg-violet) 5%, transparent), transparent 58%), + var(--bg); + border-color: var(--docs-card-border); + + thead th { + background: color-mix(in srgb, var(--bg-sub) 55%, var(--bg)); + } + + tbody tr:hover { + background: color-mix(in srgb, var(--highlight) 6%, var(--bg)); + } + + td code:not(pre code):not(.highlight code) { + background: color-mix(in srgb, var(--highlight) 7%, var(--bg)); + } + + td pre code, + td .highlight code { + background: none; + } + } + + .callout { + --docs-card-surface: var(--white); + } + + figure { + --docs-card-surface: var(--white); + } + + code { + background: color-mix(in srgb, var(--sg-lavender-1) 45%, var(--white)); + border-color: color-mix(in srgb, var(--sg-gray-1) 80%, transparent); + } + + .linkbox--databases { + --linkbox-label: color-mix(in srgb, var(--sg-teal-5) 55%, var(--sg-gray-3)); + } + + .linkbox--brokers { + --linkbox-label: color-mix(in srgb, var(--sg-violet) 45%, var(--sg-gray-3)); + } + + .linkbox--webhooks { + --linkbox-label: color-mix(in srgb, var(--orchid) 45%, var(--sg-gray-3)); + } + + .linkbox--databases, + .linkbox--brokers, + .linkbox--webhooks { + .linkbox__category-icon::before { + background: var(--linkbox-accent); + } + } + + pre, + .highlight { + background: var(--white); + border-color: color-mix(in srgb, var(--sg-gray-1) 85%, transparent); + box-shadow: var(--docs-card-shadow); + } + + .copy_button { + background: color-mix(in srgb, var(--sg-lavender-1) 55%, transparent); + border-color: color-mix(in srgb, var(--sg-gray-1) 80%, transparent); + color: var(--sg-gray-3); + + &:hover, + &:focus { + background: color-mix(in srgb, var(--sg-teal-3) 10%, var(--white)); + border-color: color-mix(in srgb, var(--sg-teal-3) 30%, transparent); + color: var(--sg-teal-5); + } + + &.success { + background: color-mix(in srgb, var(--color-teal-100) 85%, var(--white)); + border-color: color-mix(in srgb, var(--sg-teal-3) 35%, transparent); + color: var(--sg-teal-5); + } + } + + .code-tabs { + --code-tabs-bar-surface: color-mix(in srgb, var(--sg-lavender-1) 72%, var(--white)); + --code-tabs-border: color-mix(in srgb, var(--sg-gray-1) 85%, transparent); + --code-tabs-surface: var(--white); + box-shadow: var(--docs-card-shadow); + } + } + + pre { + background: var(--table-surface-raised); + border: 1px solid var(--table-border); + border-radius: var(--table-radius); + box-shadow: var(--docs-card-shadow); + color: var(--sub); + font-family: var(--font-mono); + font-size: var(--code-pre-font-size); + font-weight: var(--weight-body); + letter-spacing: var(--tracking-code); + line-height: var(--leading-code); + margin: rem(1.2) 0; + overflow: auto; + padding: var(--code-pre-padding-block) var(--code-pre-padding-inline); + + code { + background: none; + border: none; + color: inherit; + padding: 0; + } + } + + .highlight { + background: var(--table-surface-raised); + border: 1px solid var(--table-border); + border-radius: var(--table-radius); + box-shadow: + var(--docs-card-shadow), + inset 0 1px 0 color-mix(in srgb, var(--code-foreground) 4%, transparent); + margin: rem(1.2) 0; + overflow: hidden; + position: relative; + + pre, + .chroma { + background: transparent !important; + border: none; + border-radius: 0; + box-shadow: none; + font-size: var(--code-highlight-font-size); + margin: 0; + overflow-x: auto; + padding: + var(--code-highlight-padding-top) + var(--code-highlight-padding-inline) + var(--code-highlight-padding-bottom); + } + + .chroma { + background-color: transparent; + } + + .copy_button { + display: inline-flex; + opacity: 0; + pointer-events: none; + visibility: hidden; + } + + &:hover, + &:focus-within { + .copy_button { + opacity: 1; + pointer-events: auto; + visibility: visible; + } + } + + .copy_button.success { + opacity: 1; + pointer-events: auto; + visibility: visible; + } + } + + // Standalone blocks are full-width, so keep the copy control visible. + > .highlight .copy_button { + opacity: 1; + pointer-events: auto; + visibility: visible; + } + + code { + background: color-mix(in srgb, var(--code-simple-bg) 88%, var(--table-surface-raised)); + border: 1px solid color-mix(in srgb, var(--table-border) 75%, transparent); + border-radius: rem(0.35); + box-sizing: border-box; + color: var(--code-simple); + font-family: var(--font-mono); + font-size: rem(1.3); + font-variant-ligatures: none; + font-weight: 500; + letter-spacing: var(--tracking-code); + line-height: var(--leading-code); + padding: rem(0.1) rem(0.35) rem(0); + } + + li, + .callout, + .note, + .warning, + .tip, + .important, + .annotation, + .public-preview, + .code-tabs .tab-pane { + @include docs-nested-code-vars; + } + + li { + .highlight { + margin: rem(0.6) 0; + } + } + + // Merge a highlighted code block followed by a non-highlighted code block, + // since this is a common pattern in our docs to indicate a (highlighted) + // shell or SQL snippet followed by its (unhighlighted) output. + .highlight + pre { + border-top: 1px solid color-mix(in srgb, var(--table-border) 80%, var(--highlight)); + border-top-left-radius: 0; + border-top-right-radius: 0; + margin-top: rem(-1.2); + padding-top: rem(1.2); + } + + ul, + ol { + margin: 0; + + li { + margin-bottom: rem(0.5); + } + } + + li { + h4 { + margin-top: 0; + } + } + + :not(div.footnotes) > ol.has-p:not(ol.has-p ol.has-p) { + --steps-accent: var(--highlight); + --steps-badge-size: #{rem(3)}; + --steps-rail-width: 1px; + + list-style-type: none; + counter-reset: list-counter; + margin: rem(0.8) 0 rem(1.6); + padding: 0; + + >li { + --steps-badge-offset: #{rem(0.1)}; + counter-increment: list-counter; + min-height: rem(5); + padding: rem(0.4) 0 rem(2.6) calc(var(--steps-badge-size) + #{rem(1.6)}); + position: relative; + + &:has(> :is(h2, h3, h4):first-child) { + --steps-badge-offset: #{rem(0.45)}; + } + + &:not(:last-child)::after { + background: linear-gradient( + to bottom, + color-mix(in srgb, var(--steps-accent) 55%, transparent), + color-mix(in srgb, var(--steps-accent) 10%, transparent) + ); + bottom: rem(0.35); + content: ""; + left: calc(var(--steps-badge-size) / 2 - var(--steps-rail-width) / 2); + position: absolute; + top: calc(var(--steps-badge-offset) + var(--steps-badge-size) + #{rem(0.55)}); + width: var(--steps-rail-width); + z-index: 0; + } + + .highlight { + border: 1px solid var(--table-border); + border-radius: rem(0.8); + margin: rem(1.2) 0; + overflow: hidden; + + pre { + border: none; + border-radius: 0; + margin: 0; + } + } + + .highlight:has(+ pre) { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + margin-bottom: 0; + } + + .highlight + pre { + border-top: 1px solid color-mix(in srgb, var(--table-border) 75%, var(--steps-accent)); + border-top-left-radius: 0; + border-top-right-radius: 0; + margin-top: 0; + padding-top: rem(1.2); + } + + .code-tabs { + --code-tabs-accent: var(--steps-accent); + } + + pre { + background: var(--table-surface-raised); + border: 1px solid var(--table-border); + border-radius: rem(0.8); + margin: rem(1.2) 0; + margin-left: 0; + } + + ul, + ol { + padding-left: var(--milli); + } + + ol { + li { + list-style-type: lower-alpha; + } + } + + @media(max-width: 850px) { + padding-left: calc(var(--steps-badge-size) + #{rem(1.2)}); + } + + @media(max-width: 480px) { + --steps-badge-size: #{rem(2.6)}; + padding-bottom: rem(2.2); + } + + &:before { + align-items: center; + background: linear-gradient( + 145deg, + color-mix(in srgb, var(--steps-accent) 26%, var(--card-light)), + color-mix(in srgb, var(--steps-accent) 8%, var(--card-light)) + ); + border: 1px solid color-mix(in srgb, var(--steps-accent) 45%, transparent); + border-radius: 50%; + box-shadow: 0 0 14px color-mix(in srgb, var(--steps-accent) 18%, transparent); + color: color-mix(in srgb, var(--steps-accent) 88%, var(--heading)); + content: counter(list-counter); + display: flex; + font-family: var(--font-mono); + font-size: rem(1.25); + font-weight: 700; + height: var(--steps-badge-size); + justify-content: center; + left: 0; + letter-spacing: -0.02em; + line-height: 1; + position: absolute; + top: var(--steps-badge-offset); + width: var(--steps-badge-size); + z-index: 1; + } + + &:last-child { + padding-bottom: rem(0.6); + } + + > :is(h2, h3, h4):first-child { + color: var(--inline-lifted); + margin-top: 0; + } + + > p:first-child { + color: var(--inline-lifted); + } + + p { + display: block; + } + + > p:first-child, + > :first-child:not(.highlight):not(pre):not(.code-tabs) { + margin-top: 0; + } + } + } + + hr { + border: none; + border-top: 1px solid var(--docs-card-divider); + margin: rem(3.6) auto; + width: 80%; + } + + // NOTE(benesch): warning/private-preview colors stay yellowish/orange. + // Public preview stays blueish (caution, not encouragement). + .note, + .important { + @include docs-admonition-theme("--table-yellow"); + @include docs-admonition-card; + } + + .tip { + @include docs-admonition-theme("--sg-violet"); + @include docs-admonition-card; + } + + .warning, + .private-preview { + @include docs-admonition-theme("--table-orange"); + @include docs-admonition-card; + } + + .public-preview { + @include docs-admonition-theme("--table-blue"); + @include docs-admonition-card; + color: var(--public-preview-text, var(--body)); + } + + .annotation { + @include docs-admonition-theme("--highlight"); + @include docs-admonition-card; + + .annotation-title { + color: var(--admonition-label); + font-family: var(--font-heading); + font-size: var(--xsm); + font-weight: var(--weight-heading); + letter-spacing: var(--tracking-eyebrow); + line-height: 1.3; + margin: 0 0 rem(0.6); + padding-bottom: 0; + text-transform: uppercase; } - } + .warning, .note, .tip, .important, .private-preview, .public-preview { - box-sizing: border-box; - margin: rem(1.6) 0; - padding: rem(1.6) rem(1.6) rem(1.6) rem(10.4); - position: relative; - border-radius: rem(1.2); - - @media(max-width: 510px) { - padding: rem(1) rem(1) rem(1) rem(6); - } - - p:first-of-type { - margin-top: 0; - } - - &::after { - content: ""; - position: absolute; - top: -1px; - right: -1px; - border-width: 0 rem(1.6) rem(1.6) 0; - border-style: solid; - } + font-size: rem(1.5); + line-height: var(--leading-body); .gutter { - position: absolute; - left: rem(1.6); - top: rem(1.8); - line-height: 23px; - font-size: rem(1.2); - font-weight: bold; + color: var(--admonition-label); + display: block; + font-family: var(--font-heading); + font-size: var(--xsm); + font-weight: var(--weight-heading); + letter-spacing: var(--tracking-eyebrow); + line-height: 1.3; + margin: 0 0 rem(0.6); + position: static; text-transform: uppercase; - - @media(max-width: 510px) { - top: rem(1.2); - } } } - .warning { - @media(max-width: 510px) { - padding-left: rem(9); - } + .private-preview-inline { + background: color-mix(in srgb, var(--table-orange) 10%, transparent); + border: 1px solid color-mix(in srgb, var(--table-orange) 28%, transparent); + border-radius: rem(0.45); + color: color-mix(in srgb, var(--table-orange) 88%, var(--heading)); + font-size: var(--xsm); + font-weight: var(--weight-body-emphasis); + padding: rem(0.15) rem(0.45); + white-space: nowrap; } .cta { - background: $purple-gradient-v2; - border-radius: 4px; - color: #fff; + background: linear-gradient(102.5deg, var(--sg-violet) 17.99%, var(--orchid) 59.07%); + border-radius: rem(0.8); + box-shadow: var(--docs-card-shadow); + color: var(--white); display: inline-block; - font-weight: 500; + font-weight: var(--weight-body-emphasis); margin: rem(3.2) 0; padding: rem(2) rem(6.4); - opacity: 1; - transition: opacity 350ms ease; + transition: opacity 0.2s ease, box-shadow 0.2s ease; &.full_width { display: block; - width: 100%; text-align: center; + width: 100%; } &.secondary { - background: $faded-purple-v2; - color: $dark-purple-v2; + background: color-mix(in srgb, var(--sg-lavender-1) 55%, var(--white)); + border: 1px solid color-mix(in srgb, var(--sg-violet) 24%, transparent); + color: var(--sg-lavender-4); &:hover { - color: $dark-purple-v2; + color: var(--sg-lavender-4); } } &:hover { - opacity: 0.9; - color: #fff; border-bottom: none; + color: var(--white); + opacity: 0.92; } } @@ -718,22 +2553,23 @@ p+p { } .symbol { - color: $purple; + color: var(--sg-violet); } .breadcrumb { + color: var(--caption); font-size: rem(1.4); letter-spacing: 0.03em; - text-transform: uppercase; - color: var(--sub); margin-bottom: var(--nano); + text-transform: uppercase; a { color: var(--sub) !important; margin: 0 rem(0.8); - &:hover { - color: $black-v2; + &:hover, + &:focus { + color: var(--heading) !important; opacity: 1; } @@ -760,13 +2596,16 @@ p+p { } #helpful { - border-top: 1px solid $grey; - margin-top: rem(4.8); - max-width: 40%; - padding-top: rem(0.8); + @include docs-feature-card; + + margin: rem(4.8) auto 0; + max-width: 22rem; + padding: rem(1.2) rem(1.4); text-align: center; table { + border: none; + box-shadow: none; table-layout: fixed; width: 100%; } @@ -776,12 +2615,19 @@ p+p { } .helpful-vote { - border: 3px solid $purple; - color: $purple; + border: 2px solid color-mix(in srgb, var(--sg-violet) 45%, transparent); + border-radius: rem(0.6); + color: var(--sg-lavender-2); display: inline-block; - font-weight: bold; + font-weight: var(--weight-body-emphasis); padding: rem(1.1) 0; + transition: background-color 0.15s ease, border-color 0.15s ease; width: 100%; + + &:hover { + background: color-mix(in srgb, var(--sg-violet) 10%, transparent); + border-color: var(--sg-violet); + } } #got-feedback { @@ -791,92 +2637,160 @@ p+p { // Navigation tabs (tab+tabs.html) .code-tabs { + --code-tabs-accent: var(--highlight); + --code-tabs-border: var(--table-border); + --code-tabs-bar-surface: var(--table-surface-header); + --code-tabs-surface: var(--table-surface); + + background: var(--code-tabs-surface); + border: 1px solid var(--code-tabs-border); + border-radius: var(--table-radius); + box-shadow: var(--table-shadow); + margin: rem(1.2) 0; + overflow: hidden; position: relative; + .nav-tabs-bar { + background: var(--code-tabs-bar-surface); + border-bottom: 1px solid var(--code-tabs-border); + padding: rem(0.6) rem(0.6) 0; + position: relative; + z-index: 2; + + &::before, + &::after { + bottom: 0; + content: ""; + opacity: 0; + pointer-events: none; + position: absolute; + top: 0; + transition: opacity 0.15s ease; + width: rem(2.4); + z-index: 4; + } + + &::before { + background: linear-gradient(to right, var(--code-tabs-bar-surface), transparent); + left: 0; + } + + &::after { + background: linear-gradient(to left, var(--code-tabs-bar-surface), transparent); + right: 0; + } + } + + .nav-tabs-scroll { + overflow: visible; + scrollbar-width: none; + + &::-webkit-scrollbar { + display: none; + } + } + .nav-tabs { + display: flex; + flex-wrap: wrap; + gap: rem(0.2); list-style: none; + margin: 0; + overflow: visible; padding: 0; + position: relative; + } - display: flex; - overflow-x: auto; - overflow-y: hidden; - // white-space: nowrap; + .tab-content { + background: var(--code-tabs-surface); + position: relative; + z-index: 1; + } - li { - display: inline-block; - margin: 0 rem(0.1); - padding: 0; - position: relative; - bottom: -1px; - background: var(--bg); - border-top: 1px solid var(--highlight); - border-left: 1px solid var(--highlight); - border-right: 1px solid var(--highlight); - border-radius: 2px 2px 2px 2px; - background: var(--tab-bg); + .tab-pane { + display: none; + padding: rem(1.2); - a { - color: var(--body); - display: block; - padding: rem(0.8) rem(1.6); - font-size: rem(1.4); - text-decoration: none; - font-weight: 500; + &.active { + display: block; + } + } - @media(max-width: 850px) { - padding: rem(0.8) rem(1.6); - } + .nav-tabs li { + background: transparent; + border: 1px solid transparent; + flex-shrink: 0; + margin: 0; + padding: 0; - @media(max-width: 380px) { - padding: rem(0.8) rem(0.8); - } + a { + color: var(--sub); + display: block; + font-size: rem(1.35); + font-weight: 500; + padding: rem(0.55) rem(1.2); + text-decoration: none; + transition: color 0.15s ease; - &:hover { - color: $purple; - border-bottom: none; - } + @media(max-width: 380px) { + padding: rem(0.55) rem(0.8); } - &.active { - - border-radius: 2px 2px 0 0; - border: 1px solid #9c86e0; - border-bottom-color: var(--bg); - - a { - color: var(--highlight); - background: var(--tab-selected-bg); - } + &:hover, + &:focus { + color: var(--inline-lifted); + text-decoration: none; } } - } - - .tab-pane { - display: none; - padding: rem(1.6) 0; - &.active { - display: block; - border-radius: 0 0 rem(1) rem(1); - border: 1px solid #9c86e0; - padding: rem(0.8) rem(0.5) rem(0.6) rem(0.6); + background: var(--code-tabs-surface); + border-color: var(--code-tabs-border); + border-bottom: none; + border-radius: rem(0.5) rem(0.5) 0 0; + position: relative; + z-index: 2; + + // Bridges the tab bar divider so the active tab reads as connected to the content. + &::after { + background: var(--code-tabs-surface); + content: ""; + height: var(--tab-join-overlap, 2px); + left: 0; + position: absolute; + right: 0; + top: 100%; + z-index: 3; + } + + a { + color: color-mix(in srgb, var(--code-tabs-accent) 88%, var(--heading)); + } } } - &.has-left-overflow .nav-tabs::before { + &.has-left-overflow .nav-tabs-bar::before { opacity: 1; } - &.has-right-overflow .nav-tabs::after { + &.has-right-overflow .nav-tabs-bar::after { opacity: 1; } - - } .table-scrollable { - box-shadow: inset 0 -4px 3px -3px $medium-grey-v2; + background: + linear-gradient( + 180deg, + color-mix(in srgb, var(--sg-lavender-3) 14%, transparent) 0%, + color-mix(in srgb, var(--sg-violet) 5%, transparent) 42%, + transparent 100% + ) + 0 0 / 100% rem(1.4) no-repeat, + var(--bg); + border: 1px solid var(--docs-card-border); + border-radius: var(--table-radius); + box-shadow: var(--docs-card-shadow); margin: rem(1) 0 rem(3); overflow: auto; @@ -884,22 +2798,27 @@ p+p { overflow: visible; } - table { + table:not(.syntax-table) { + background: transparent; + border: none; + box-shadow: none; width: 100%; } thead th { - background: var(--bg); + backdrop-filter: blur(8px); + background: color-mix(in srgb, var(--bg-sub) 42%, var(--bg)); position: sticky; top: 0; + z-index: 1; &:after { - border-bottom: 1px var(--highlight) solid; - content: ""; + border-bottom: 1px solid var(--docs-card-divider); bottom: -1px; + content: ""; left: 0; - right: 0; position: absolute; + right: 0; } } @@ -908,84 +2827,144 @@ p+p { } } +body.light .table-scrollable { + background: + linear-gradient( + 180deg, + color-mix(in srgb, var(--sg-lavender-2) 18%, transparent) 0%, + color-mix(in srgb, var(--sg-violet) 4%, transparent) 45%, + transparent 100% + ) + 0 0 / 100% rem(1.4) no-repeat, + var(--bg); + border-color: var(--docs-card-border); + + thead th { + background: color-mix(in srgb, var(--bg-sub) 55%, var(--bg)); + } +} + .level-of-support { + color: var(--caption); display: inline-block; - width: 17px; + filter: drop-shadow(0 0 rem(0.35) color-mix(in srgb, currentColor 25%, transparent)); height: 17px; position: relative; top: 5px; + width: 17px; &.level-production { - color: $success; + color: var(--table-green); } &.level-alpha, &.level-beta { - color: $progress; + color: var(--table-yellow); } &.level-in-progress { - color: $warning; + color: var(--table-orange); } &.level-researching, &.level-not-supported { - color: $danger; + color: color-mix(in srgb, var(--table-orange) 55%, var(--color-error-500)); } } .highlight { position: relative; - } .copy_button { - display: none; - position: absolute; - right: 10px; - top: 10px; - - font-size: rem(1.2); - font-weight: 300; - border: none; - background-color: $grey-light; - color: var(--black); - height: 26px; - padding: 0 12px; + align-items: center; + backdrop-filter: blur(8px); + background: color-mix(in srgb, var(--table-surface-header) 72%, transparent); + border: 1px solid var(--table-border); + border-radius: rem(0.45); + color: var(--sub); cursor: pointer; - border-radius: $border-radius; + display: inline-flex; + font-family: var(--font-mono); + font-size: rem(1.1); + font-weight: var(--weight-body-emphasis); + gap: rem(0.5); + height: rem(2.4); + justify-content: center; + letter-spacing: var(--tracking-code); + line-height: 1; + opacity: 0; + padding: 0 rem(0.9); + pointer-events: none; + position: absolute; + right: rem(0.8); + top: rem(0.8); + transition: + background-color 0.15s ease, + border-color 0.15s ease, + color 0.15s ease, + opacity 0.15s ease, + visibility 0.15s ease; + visibility: hidden; white-space: nowrap; - line-height: 2; - font-family: 'Inter', sans-serif; + z-index: 2; + + svg { + display: block; + flex-shrink: 0; + } + + .copy_button__icon--check { + display: none; + } + + &:hover, + &:focus { + background: color-mix(in srgb, var(--highlight) 14%, var(--table-surface-header)); + border-color: color-mix(in srgb, var(--highlight) 35%, var(--table-border)); + color: var(--inline-lifted); + } &.success { - opacity: 0.8; - background: #70f2a3; + background: color-mix(in srgb, var(--table-green) 18%, var(--table-surface-header)); + border-color: color-mix(in srgb, var(--table-green) 35%, var(--table-border)); + color: color-mix(in srgb, var(--table-green) 88%, var(--heading)); + opacity: 1; + pointer-events: auto; + visibility: visible; + + .copy_button__icon--copy { + display: none; + } + + .copy_button__icon--check { + display: block; + } } } #subscribe_dialog { + @include docs-feature-card; + display: none; - z-index: 10; + padding: rem(1); position: absolute; - top: 4px; - right: 4px; - padding: 6px; - @include card; + right: rem(0.4); + top: rem(0.4); + z-index: 10; form { display: flex; input[type="email"] { - font-size: rem(1.4); - padding: rem(.5); - border-radius: $border-radius; - border: none; - margin-right: rem(.8); - background: var(--bg); + background: var(--docs-card-inset); + border: 1px solid var(--docs-card-divider); + border-radius: rem(0.6); + box-shadow: none; color: var(--important); - border: 1px solid var(--divider-light); - box-shadow: var(--shadow-default); + font-size: rem(1.4); + margin-right: rem(0.8); + padding: rem(0.5); } input[type="submit"] { @@ -994,13 +2973,13 @@ p+p { } .disclaimer { - width: 100%; - color: var(--important); - margin-top: var(--nano); - padding: rem(.4) rem(.8); + border-bottom-left-radius: rem(0.6); + border-bottom-right-radius: rem(0.6); + color: var(--caption); font-size: var(--xsm); - border-bottom-left-radius: $border-radius; - border-bottom-right-radius: $border-radius; + margin-top: var(--nano); + padding: rem(0.4) rem(0.8); + width: 100%; } } @@ -1013,108 +2992,95 @@ p+p { } div.json_widget { + @include docs-feature-card; + display: flex; flex-direction: column; justify-content: center; - + margin: rem(1.2) 0; + padding: rem(1.2); position: relative; .input_container { display: inline-flex; flex-direction: row; - - margin: 16px; + gap: rem(1.2); + margin: 0 0 rem(1.2); .input_container-text { display: inline-flex; flex-direction: column; flex-grow: 3; - input { - width: 100%; - - border: 1px solid #E0DEE3; - border-radius: 8px; - margin: 8px 0; - padding: 8px; - - background-color: #F7F7F8; + input, + select.text-input { + background: var(--docs-card-inset); + border: 1px solid var(--table-border); + border-radius: rem(0.8); box-shadow: none; - font-size: 16px; - } - - .light & input { - background-color: #F7F7F8; - } - .dark & input { - background-color: #000000; + color: var(--body); + font-size: rem(1.5); + margin: rem(0.6) 0; + padding: rem(0.8); + width: 100%; } - input::placeholder { - color: #BCB9C0; + input::placeholder, + select.text-input { + color: var(--caption); } } .input_container-radio { + background: var(--docs-card-inset); + border: 1px solid var(--table-border); + border-radius: rem(0.8); display: inline-flex; flex-direction: column; flex-grow: 1; justify-content: center; - - margin: 0 16px 12px; - padding: 16px; - - border: 1px solid #E0DEE3; - border-radius: 8px; + margin: 0; + padding: rem(1.2); legend { - padding: 0 4px; + color: var(--caption); + padding: 0 rem(0.4); } } } .json { + margin-top: rem(1.2); width: 100%; - margin-top: 16px; - textarea { + background: var(--docs-card-inset); + border: 1px solid var(--table-border); + border-radius: rem(0.8); height: 400px; - width: 100%; + padding: rem(0.8); resize: none; - - border: 1px solid #E0DEE3; - border-radius: 8px; - // margin: 16px; - padding: 8px; + width: 100%; } textarea::placeholder { - opacity: 0.1; + color: var(--caption); font-size: 4vw; - text-align: center; line-height: 350px; + opacity: 0.25; + text-align: center; } .error { + border: 1px solid color-mix(in srgb, var(--table-orange) 45%, transparent); + border-radius: rem(0.8); opacity: 1; - border-color: #d33902; - border-style: solid; - border-width: thin; - border-radius: 8px; p { - background-color: rgba(229, 6, 68, 0.1); - font-weight: 500; - padding: 8px; - } - - .light & p { - color: #803737; - } - - .dark & p { - color: #fe1d5e; + background: color-mix(in srgb, var(--table-orange) 10%, transparent); + color: color-mix(in srgb, var(--table-orange) 88%, var(--heading)); + font-weight: var(--weight-body-emphasis); + padding: rem(0.8); } } @@ -1124,39 +3090,27 @@ div.json_widget { } .sql_output { - margin: 16px; + margin: rem(1.2) 0; } .log_output { - border: 1px solid #ccc; - border-radius: 4px; - padding: 10px; + background: var(--docs-card-inset); + border: 1px solid var(--table-border); + border-radius: rem(0.6); + margin-top: rem(1); max-height: 150px; overflow-y: auto; - margin-top: 10px; + padding: rem(1); } .input_container-text select.text-input { appearance: none; - background-color: #F7F7F8; - border: 1px solid #E0DEE3; - border-radius: 8px; - padding: 8px; - font-size: 16px; - color: #BCB9C0; cursor: pointer; } .input_container-text select.text-input:focus { + border-color: color-mix(in srgb, var(--highlight) 45%, var(--table-border)); outline: none; - border-color: #aca9b8; - } - - .light & select.text-input { - background-color: #F7F7F8; - } - .dark & select.text-input { - background-color: #000000; } } @@ -1169,67 +3123,7 @@ div.json_widget { } } -/* Unclear why we are suppressing the copy button in tables - but ... at least, allow for cases where we want to enable copy button in tables. -*/ - -td:not(.copyableCode) .copy_button { - display: none !important; -} - -td span.copyableCode pre:hover .copy_button { - display: inline-block !important; -} - -.highlight { - position: relative; - - &:hover { - .copy_button { - display: inline-block; - } - } -} - body.dark .content { - - .note, - .important { - a { - color: var(--link); - } - - &::after { - border-color: --var(--note-border); - background: var(--note); - } - } - - .tip { - a { - color: var(--link); - } - - &::after { - border-color: --var(--tip-border); - background: var(--tip); - } - } - - .annotation { - a { - color: var(--link); - } - - } - - .warning, - .private-preview { - .gutter { - color: #ff8504; - } - } - pre code { color: var(--sub); } @@ -1241,51 +3135,50 @@ body.dark .content { } } -body.dark { - .code-tabs .nav-tabs { - li { - background: var(--bg-sub); - - &.active { - background: var(--bg); - } - } - } -} .caption { font-size: rem(1.2); - font-weight: 300; + font-weight: var(--weight-body); + line-height: var(--leading-body); padding: var(--nano); font-style: italic; + color: var(--caption); } -td.copyableCode{ - .chroma { - background-color: var(--code-block); - } - -} -span.copyableCode{ +td.copyableCode, +span.copyableCode { .chroma { - background-color: var(--code-block); + background-color: transparent; } - } -div.footnotes { +div.footnotes { + @include docs-feature-card; font-size: var(--sm); + margin-top: rem(3); + padding: rem(1.2) rem(1.4); hr { + border-top-color: var(--docs-card-divider); + margin: rem(1.2) 0; width: 100%; } + ol { + margin: 0; + padding-left: rem(2); + } + li::marker { - font-variant-numeric: normal; + color: var(--caption); content: "[" counter(list-item) "] "; + font-variant-numeric: normal; } + a { + word-break: break-word; + } } sup { diff --git a/doc/user/assets/sass/_highlight.scss b/doc/user/assets/sass/_highlight.scss index 552cb0217ba38..f458c82c37bd6 100644 --- a/doc/user/assets/sass/_highlight.scss +++ b/doc/user/assets/sass/_highlight.scss @@ -1,13 +1,19 @@ -// Generated with `hugo gen chromastyles --style=xcode`. +// Chroma token colors mapped to semantic code palette tokens in _base.scss. /* Background */ .chroma { - background-color: #ffffff; + background-color: transparent; + color: var(--code-foreground); + font-family: var(--font-mono); + font-size: var(--code-highlight-font-size, rem(1.5)); + font-weight: 400; + letter-spacing: var(--tracking-code); + line-height: var(--leading-code); } /* Error */ .chroma .err { - color: var(--important); + color: var(--code-red); } /* LineTableTD */ @@ -31,327 +37,198 @@ /* LineHighlight */ .chroma .hl { + background-color: transparent; display: block; width: 100%; - background-color: #ffffcc; +} + +.chroma .line, +.chroma .cl { + background: transparent; } /* LineNumbersTable */ .chroma .lnt { + color: var(--code-lineno); margin-right: 0.4em; - padding: 0 0.4em 0 0.4em; - color: #7f7f7f; + padding: 0 0.4em; } /* LineNumbers */ .chroma .ln { + color: var(--code-lineno); margin-right: 0.4em; - padding: 0 0.4em 0 0.4em; - color: #7f7f7f; + padding: 0 0.4em; } /* Keyword */ -.chroma .k { - color: var(--code-pink); -} - -/* KeywordConstant */ -.chroma .kc { - color: var(--code-pink); -} - -/* KeywordDeclaration */ -.chroma .kd { - color: var(--code-pink); -} - -/* KeywordNamespace */ -.chroma .kn { - color: var(--code-pink); -} - -/* KeywordPseudo */ -.chroma .kp { - color: var(--code-pink); -} - -/* KeywordReserved */ -.chroma .kr { - color: var(--code-pink); -} - -/* KeywordType */ +.chroma .k, +.chroma .kc, +.chroma .kd, +.chroma .kn, +.chroma .kp, +.chroma .kr, .chroma .kt { - color: var(--code-pink); + color: var(--code-keyword); } /* Name */ .chroma .n { - color: var(--important); + color: var(--code-variable); } /* NameAttribute */ .chroma .na { - color: #836c28; + color: var(--code-attribute); } /* NameBuiltin */ -.chroma .nb { - color: var(--code-pink); -} - -/* NameBuiltinPseudo */ +.chroma .nb, .chroma .bp { - color: #5b269a; + color: var(--code-builtin); } /* NameClass */ .chroma .nc { - color: #3f6e75; + color: var(--code-type); } /* NameConstant */ .chroma .no { - color: var(--important); + color: var(--code-number); } /* NameDecorator */ .chroma .nd { - color: var(--important); + color: var(--code-function); } /* NameEntity */ .chroma .ni { - color: var(--important); + color: var(--code-variable); } /* NameException */ .chroma .ne { - color: var(--important); + color: var(--code-type); } /* NameFunction */ -.chroma .nf { - color: var(--important); -} - -/* NameFunctionMagic */ +.chroma .nf, .chroma .fm { - color: var(--important); + color: var(--code-function); } /* NameLabel */ .chroma .nl { - color: var(--important); + color: var(--code-variable); } /* highlighted code line */ - .hl .cl * { color: var(--code-highlight); } /* NameNamespace */ .chroma .nn { - color: var(--important); + color: var(--code-type); } /* NameOther */ .chroma .nx { - color: var(--important); + color: var(--code-variable); } /* NameProperty */ .chroma .py { - color: var(--important); + color: var(--code-variable); } /* NameTag */ .chroma .nt { - color: var(--important); + color: var(--code-keyword); } /* NameVariable */ -.chroma .nv { - color: var(--important); -} - -/* NameVariableClass */ -.chroma .vc { - color: var(--important); -} - -/* NameVariableGlobal */ -.chroma .vg { - color: var(--important); -} - -/* NameVariableInstance */ -.chroma .vi { - color: var(--important); -} - -/* NameVariableMagic */ +.chroma .nv, +.chroma .vc, +.chroma .vg, +.chroma .vi, .chroma .vm { - color: var(--important); + color: var(--code-variable); } /* Literal */ -.chroma .l { - color: var(--code-blue); -} - -/* LiteralDate */ +.chroma .l, .chroma .ld { - color: var(--code-blue); + color: var(--code-number); } /* LiteralString */ -.chroma .s { - color: var(--code-red); -} - -/* LiteralStringAffix */ -.chroma .sa { - color: var(--code-red); -} - -/* LiteralStringBacktick */ -.chroma .sb { - color: var(--code-red); +.chroma .s, +.chroma .sa, +.chroma .sb, +.chroma .sd, +.chroma .sh, +.chroma .si, +.chroma .sx, +.chroma .sr, +.chroma .s1, +.chroma .s2, +.chroma .ss { + color: var(--code-string); } /* LiteralStringChar */ .chroma .sc { - color: #2300ce; + color: var(--code-function); } /* LiteralStringDelimiter */ .chroma .dl { - color: var(--code-red); -} - -/* LiteralStringDoc */ -.chroma .sd { - color: var(--code-red); -} - -/* LiteralStringDouble */ -.chroma .s2 { - color: var(--code-red); + color: var(--code-string); } /* LiteralStringEscape */ .chroma .se { - color: var(--code-red); -} - -/* LiteralStringHeredoc */ -.chroma .sh { - color: var(--code-red); -} - -/* LiteralStringInterpol */ -.chroma .si { - color: var(--code-red); -} - -/* LiteralStringOther */ -.chroma .sx { - color: var(--code-red); -} - -/* LiteralStringRegex */ -.chroma .sr { - color: var(--code-red); -} - -/* LiteralStringSingle */ -.chroma .s1 { - color: var(--code-red); -} - -/* LiteralStringSymbol */ -.chroma .ss { - color: var(--code-red); + color: var(--code-function); } /* LiteralNumber */ -.chroma .m { - color: var(--code-blue); -} - -/* LiteralNumberBin */ -.chroma .mb { - color: var(--code-blue); -} - -/* LiteralNumberFloat */ -.chroma .mf { - color: var(--code-blue); -} - -/* LiteralNumberHex */ -.chroma .mh { - color: var(--code-blue); -} - -/* LiteralNumberInteger */ -.chroma .mi { - color: var(--code-blue); -} - -/* LiteralNumberIntegerLong */ -.chroma .il { - color: var(--code-blue); -} - -/* LiteralNumberOct */ +.chroma .m, +.chroma .mb, +.chroma .mf, +.chroma .mh, +.chroma .mi, +.chroma .il, .chroma .mo { - color: var(--code-blue); + color: var(--code-number); } /* Operator */ -.chroma .o { - color: var(--important); -} - -/* OperatorWord */ +.chroma .o, .chroma .ow { - color: var(--important); -} - -/* Comment */ -.chroma .c { - color: var(--code-green); -} - -/* CommentHashbang */ -.chroma .ch { - color: var(--code-green); + color: var(--code-operator); } -/* CommentMultiline */ -.chroma .cm { - color: var(--code-green); +/* Punctuation: muted so brackets, commas, and semicolons recede behind + the tokens that carry meaning. */ +.chroma .p { + color: var(--code-punctuation, var(--code-operator)); } -/* CommentSingle */ -.chroma .c1 { - color: var(--code-green); -} - -/* CommentSpecial */ +/* Comment */ +.chroma .c, +.chroma .ch, +.chroma .cm, +.chroma .c1, .chroma .cs { - color: var(--code-green); + color: var(--code-comment); + font-style: italic; } /* CommentPreproc */ -.chroma .cp { - color: #633820; -} - -/* CommentPreprocFile */ +.chroma .cp, .chroma .cpf { - color: #633820; + color: var(--code-preproc); } diff --git a/doc/user/assets/sass/_layout.scss b/doc/user/assets/sass/_layout.scss index 7c3499d53e315..e1c7d3461d9ae 100644 --- a/doc/user/assets/sass/_layout.scss +++ b/doc/user/assets/sass/_layout.scss @@ -10,6 +10,8 @@ .content-wrapper { display: flex; justify-content: center; + width: 100%; + box-sizing: border-box; padding-top: var(--nav-height); @media(max-width: 800px) { @@ -30,7 +32,7 @@ min-height: calc(100vh - 178px); // https://weblog.west-wind.com/posts/2016/Feb/15/Flexbox-Containers-PRE-tags-and-managing-Overflow min-width: 0; - max-width: 840px; + max-width: 900px; padding: var(--xx-small) var(--small); @media (max-width: 1260px) { @@ -55,19 +57,592 @@ overflow-x: auto; } -table.inline-headings { - th, td { +.content .fn-list { + --fn-list-cols: minmax(14rem, 44%) 1fr; + + background: + linear-gradient( + 180deg, + color-mix(in srgb, var(--sg-lavender-3) 14%, transparent) 0%, + color-mix(in srgb, var(--sg-violet) 5%, transparent) 42%, + transparent 100% + ) + 0 0 / 100% rem(1.4) no-repeat, + radial-gradient(130% 90% at 50% -40%, color-mix(in srgb, var(--sg-violet) 7%, transparent), transparent 58%), + var(--bg); + border: 1px solid var(--docs-card-border); + border-radius: var(--table-radius); + box-shadow: var(--docs-card-shadow); + font-size: var(--sm); + line-height: var(--leading-body); + margin: rem(1) 0; + overflow: hidden; + + &__header { + backdrop-filter: blur(8px); + background: color-mix(in srgb, var(--bg-sub) 42%, var(--bg)); + border-bottom: 1px solid var(--docs-card-divider); + display: grid; + gap: rem(1.75); + grid-template-columns: var(--fn-list-cols); + padding: rem(0.85) rem(1.4); + } + + &__label { + color: var(--table-text); + font-family: var(--font-heading); + font-size: var(--xsm); + font-weight: 600; + letter-spacing: 0.08em; + text-transform: uppercase; + } +} + +body.light .content .fn-list { + background: + linear-gradient( + 180deg, + color-mix(in srgb, var(--sg-lavender-2) 18%, transparent) 0%, + color-mix(in srgb, var(--sg-violet) 4%, transparent) 45%, + transparent 100% + ) + 0 0 / 100% rem(1.4) no-repeat, + radial-gradient(130% 90% at 50% -40%, color-mix(in srgb, var(--sg-violet) 5%, transparent), transparent 58%), + var(--bg); + border-color: var(--docs-card-border); + box-shadow: var(--docs-card-shadow); + + &__header { + background: color-mix(in srgb, var(--bg-sub) 55%, var(--bg)); + } + + &__label { + color: var(--caption); + } +} + +.content .fn-entry { + --fn-accent: var(--sg-violet); + --fn-accent-name: color-mix(in srgb, var(--fn-accent) 72%, var(--heading)); + --fn-accent-soft: color-mix(in srgb, var(--fn-accent) 10%, var(--bg)); + --fn-accent-border: color-mix(in srgb, var(--fn-accent) 20%, var(--divider-light)); + --fn-accent-text: color-mix(in srgb, var(--fn-accent) 65%, var(--heading)); + --fn-accent-highlight: color-mix(in srgb, var(--fn-accent) 54%, var(--sub)); + + border-bottom: 1px solid var(--docs-card-divider); + display: grid; + gap: rem(0.45) rem(1.75); + grid-template-columns: var(--fn-list-cols); + margin: 0; + padding: rem(0.85) rem(1.4); + position: relative; + transition: + background-color 0.2s ease, + box-shadow 0.2s ease; + + &:last-child { + border-bottom: none; + } + + &::before { + background: color-mix(in srgb, var(--fn-accent) 26%, var(--divider-light)); + border-radius: 0 rem(0.15) rem(0.15) 0; + bottom: 0; + content: ""; + left: 0; + position: absolute; + top: 0; + transition: background-color 0.2s ease; + width: 1px; + } + + &:hover { + background: color-mix(in srgb, var(--fn-accent) 4%, var(--bg)); + + &::before { + background: color-mix(in srgb, var(--fn-accent) 45%, var(--divider-light)); + } + + .fn-sig-pill { + border-color: color-mix(in srgb, var(--fn-accent) 28%, var(--divider-light)); + box-shadow: 0 2px 8px color-mix(in srgb, var(--fn-accent) 10%, transparent); + } + } + + &--violet { + --fn-accent: var(--sg-violet); + } + + &--blue { + --fn-accent: var(--table-blue); + } + + &--green { + --fn-accent: var(--table-green); + } + + &--orange { + --fn-accent: var(--table-orange); + } + + &--pink { + --fn-accent: var(--orchid); + } + + > dt, + > dd { + margin: 0; + } + + > dt { + align-self: center; + display: flex; + flex-wrap: wrap; + align-items: center; + gap: rem(0.6) rem(0.75); + grid-column: 1; + grid-row: 1; + min-width: 0; + } + + > dd { + align-self: center; + color: var(--table-body); + grid-column: 2; + line-height: 1.55; + min-width: 0; + + &:nth-of-type(1) { + grid-row: 1; + } + + &:nth-of-type(2) { + grid-row: 2; + } + + &:nth-of-type(3) { + grid-row: 3; + } + + &:nth-of-type(4) { + grid-row: 4; + } + p { - margin-top: 0.3em; - margin-bottom: 0.3em; - padding-left: 2em; + margin: 0; + + &:not(:last-child) { + margin-bottom: rem(0.45); + } + } + } + + @media (max-width: 640px) { + gap: rem(0.35) 0; + grid-template-columns: 1fr; + + > dt, + > dd { + grid-column: 1; + } + } +} + +.content .fn-name { + color: var(--fn-accent-name); + flex: 0 0 auto; + font-family: var(--font-heading); + font-size: rem(1.35); + font-weight: 600; + letter-spacing: 0.015em; + line-height: var(--leading-code); +} + +.content .fn-sig-pill { + align-self: center; + background: linear-gradient( + 180deg, + color-mix(in srgb, var(--fn-accent) 9%, var(--bg-sub)), + var(--fn-accent-soft) 58%, + color-mix(in srgb, var(--fn-accent) 7%, var(--bg)) + ); + border: 1px solid var(--fn-accent-border); + border-radius: rem(99); + box-shadow: none; + display: inline-flex; + flex: 0 1 auto; + max-width: 100%; + min-width: 0; + padding: rem(0.22) rem(0.7); + transition: + border-color 0.2s ease, + box-shadow 0.2s ease; + + .code-inline, + .highlight { + background: transparent; + border: none; + border-radius: 0; + box-shadow: none; + font-family: var(--font-mono); + font-size: rem(1.25); + letter-spacing: var(--tracking-code); + line-height: var(--leading-code); + margin: 0; + max-width: 100%; + overflow: hidden; + padding: 0; + text-overflow: ellipsis; + white-space: nowrap; + + pre, + .chroma { + background: transparent !important; + border: none; + box-shadow: none; + display: inline; + font-family: inherit; + font-size: inherit; + letter-spacing: inherit; + line-height: inherit; + margin: 0; + padding: 0; + white-space: inherit; + } + } + + .code-inline .cl, + .code-inline .err, + .code-inline .nb, + .code-inline .nf, + .code-inline .nv, + .code-inline .p, + .chroma .cl, + .chroma .err, + .chroma .nb, + .chroma .nf, + .chroma .nv, + .chroma .p { + color: var(--fn-accent-text); + } +} + +body.light .content .fn-sig-pill { + background: linear-gradient( + 180deg, + color-mix(in srgb, var(--fn-accent) 7%, var(--bg)), + color-mix(in srgb, var(--fn-accent) 5%, var(--bg-sub)) 58%, + color-mix(in srgb, var(--fn-accent) 4%, var(--bg)) + ); +} + +.content .fn-desc { + code, + em { + color: var(--fn-accent-highlight); + font-style: normal; + font-weight: 500; + } + + code { + background: color-mix(in srgb, var(--fn-accent) 9%, var(--bg)); + border: 1px solid color-mix(in srgb, var(--fn-accent) 12%, transparent); + border-radius: rem(0.35); + font-size: rem(1.2); + padding: rem(0.08) rem(0.32); + } + + &__link { + border-bottom: 1px solid color-mix(in srgb, var(--fn-accent-name) 35%, transparent); + color: var(--fn-accent-name); + font-weight: var(--weight-body-strong); + text-decoration: none; + transition: border-color 0.15s ease, color 0.15s ease; + + &:hover, + &:focus { + border-bottom-color: var(--fn-accent-name); + text-decoration: none; + } + } +} + +body.light .content .fn-desc code { + background: color-mix(in srgb, var(--fn-accent) 7%, var(--bg)); +} + +.content .fn-note { + color: var(--caption); + font-size: var(--xsm); + grid-column: 2; + line-height: var(--leading-body); + padding-left: rem(0.75); + position: relative; + + &::before { + background: color-mix(in srgb, var(--fn-accent) 35%, var(--table-grid)); + border-radius: rem(0.15); + bottom: rem(0.15); + content: ""; + left: 0; + position: absolute; + top: rem(0.15); + width: 2px; + } +} + +.content .metrics-list { + --metrics-list-cols: minmax(13rem, 30%) 1fr minmax(9rem, 22%); + + background: + linear-gradient( + 180deg, + color-mix(in srgb, var(--sg-lavender-3) 14%, transparent) 0%, + color-mix(in srgb, var(--sg-violet) 5%, transparent) 42%, + transparent 100% + ) + 0 0 / 100% rem(1.4) no-repeat, + radial-gradient(130% 90% at 50% -40%, color-mix(in srgb, var(--sg-violet) 7%, transparent), transparent 58%), + var(--bg); + border: 1px solid var(--docs-card-border); + border-radius: var(--table-radius); + box-shadow: var(--docs-card-shadow); + font-size: var(--sm); + line-height: var(--leading-body); + margin: rem(1) 0; + overflow: hidden; + + &__header { + backdrop-filter: blur(8px); + background: color-mix(in srgb, var(--bg-sub) 42%, var(--bg)); + border-bottom: 1px solid var(--docs-card-divider); + display: grid; + gap: rem(1.75); + grid-template-columns: var(--metrics-list-cols); + padding: rem(0.85) rem(1.4); + } + + &__label { + color: var(--table-text); + font-family: var(--font-heading); + font-size: var(--xsm); + font-weight: 600; + letter-spacing: 0.08em; + text-transform: uppercase; + } +} + +body.light .content .metrics-list { + background: + linear-gradient( + 180deg, + color-mix(in srgb, var(--sg-lavender-2) 18%, transparent) 0%, + color-mix(in srgb, var(--sg-violet) 4%, transparent) 45%, + transparent 100% + ) + 0 0 / 100% rem(1.4) no-repeat, + radial-gradient(130% 90% at 50% -40%, color-mix(in srgb, var(--sg-violet) 5%, transparent), transparent 58%), + var(--bg); + border-color: var(--docs-card-border); + + &__header { + background: color-mix(in srgb, var(--bg-sub) 55%, var(--bg)); + } + + &__label { + color: var(--caption); + } +} + +.content .metrics-entry { + --metrics-accent: var(--sg-violet); + --metrics-accent-soft: color-mix(in srgb, var(--metrics-accent) 10%, var(--bg)); + --metrics-accent-border: color-mix(in srgb, var(--metrics-accent) 20%, var(--divider-light)); + --metrics-accent-text: color-mix(in srgb, var(--metrics-accent) 65%, var(--heading)); + + border-bottom: 1px solid var(--docs-card-divider); + display: grid; + gap: rem(0.45) rem(1.75); + grid-template-columns: var(--metrics-list-cols); + margin: 0; + padding: rem(0.85) rem(1.4); + position: relative; + transition: background-color 0.2s ease; + + &:last-child { + border-bottom: none; + } + + &::before { + background: color-mix(in srgb, var(--metrics-accent) 26%, var(--divider-light)); + border-radius: 0 rem(0.15) rem(0.15) 0; + bottom: 0; + content: ""; + left: 0; + position: absolute; + top: 0; + transition: background-color 0.2s ease; + width: 1px; + } + + &:hover { + background: color-mix(in srgb, var(--metrics-accent) 4%, var(--bg)); + + &::before { + background: color-mix(in srgb, var(--metrics-accent) 45%, var(--divider-light)); + } + + .metrics-name-pill, + .metrics-label-pill { + border-color: color-mix(in srgb, var(--metrics-accent) 28%, var(--divider-light)); + } + } + + &--violet { + --metrics-accent: var(--sg-violet); + } + + &--blue { + --metrics-accent: var(--table-blue); + } + + &--green { + --metrics-accent: var(--table-green); + } + + &--orange { + --metrics-accent: var(--table-orange); + } + + &--pink { + --metrics-accent: var(--orchid); + } + + > dt, + > dd { + margin: 0; + } + + > dt { + align-self: center; + grid-column: 1; + grid-row: 1; + min-width: 0; + } + + > dd { + align-self: center; + min-width: 0; + } + + @media (max-width: 768px) { + gap: rem(0.35) 0; + grid-template-columns: 1fr; + + > dt, + > dd { + grid-column: 1; + } + + > dt { + grid-row: 1; } - .heading .highlight { - display: inline-block; + + .metrics-desc { + grid-column: 1; + grid-row: 2; } + + .metrics-labels { + grid-column: 1; + grid-row: 3; + } + } +} + +.content .metrics-term { + min-width: 0; +} + +.content .metrics-name-pill { + background: linear-gradient( + 180deg, + color-mix(in srgb, var(--metrics-accent) 9%, var(--bg-sub)), + var(--metrics-accent-soft) 58%, + color-mix(in srgb, var(--metrics-accent) 7%, var(--bg)) + ); + border: 1px solid var(--metrics-accent-border); + border-radius: rem(0.55); + display: inline-block; + max-width: 100%; + padding: rem(0.22) rem(0.65); + transition: border-color 0.2s ease; + + code { + background: transparent; + border: none; + color: var(--metrics-accent-text); + font-family: var(--font-mono); + font-size: rem(1.15); + font-weight: 500; + letter-spacing: var(--tracking-code); + line-height: var(--leading-code); + overflow-wrap: anywhere; + padding: 0; + white-space: normal; + word-break: break-word; } } +body.light .content .metrics-name-pill { + background: linear-gradient( + 180deg, + color-mix(in srgb, var(--metrics-accent) 7%, var(--bg)), + color-mix(in srgb, var(--metrics-accent) 5%, var(--bg-sub)) 58%, + color-mix(in srgb, var(--metrics-accent) 4%, var(--bg)) + ); +} + +.content .metrics-desc { + color: var(--table-body); + grid-column: 2; + grid-row: 1; + line-height: 1.55; +} + +.content .metrics-labels { + display: flex; + flex-wrap: wrap; + gap: rem(0.35) rem(0.45); + grid-column: 3; + grid-row: 1; +} + +.content .metrics-label-pill { + background: color-mix(in srgb, var(--metrics-accent) 8%, var(--bg)); + border: 1px solid var(--metrics-accent-border); + border-radius: rem(99); + display: inline-flex; + padding: rem(0.12) rem(0.5); + transition: border-color 0.2s ease; + + code { + background: transparent; + border: none; + color: var(--metrics-accent-text); + font-family: var(--font-mono); + font-size: rem(1.05); + letter-spacing: var(--tracking-code); + line-height: var(--leading-code); + padding: 0; + white-space: nowrap; + } +} + +body.light .content .metrics-label-pill { + background: color-mix(in srgb, var(--metrics-accent) 6%, var(--bg)); +} + .relative { position: relative; } @@ -81,7 +656,24 @@ table.inline-headings { background: var(--card-light); border: 1px solid var(--divider-light); border-radius: 8px; - max-width: 230px; + max-width: none; + + &:hover, + &:focus { + background: var(--card-light); + border-color: var(--divider-light); + color: var(--important); + box-shadow: none; + + .DocSearch-Button-Placeholder, + .DocSearch-Search-Icon { + color: #2bddc2; + } + + .DocSearch-Button-Key { + color: var(--body); + } + } } .DocSearch-Button-Keys { @@ -97,8 +689,9 @@ table.inline-headings { } .DocSearch-Button-Placeholder { + color: var(--body); font-size: rem(1.6); - font-weight: 300; + font-weight: var(--weight-body); @media(max-width: 768px) { display: initial; @@ -114,26 +707,105 @@ table.inline-headings { Theme override for the Algolia Docsearch modal */ +body.dark { + --docsearch-text-color: var(--heading); + --docsearch-muted-color: var(--caption); + --docsearch-container-background: color-mix(in srgb, var(--bg) 35%, rgba(0, 0, 0, 0.72)); + --docsearch-modal-background: var(--card-light); + --docsearch-modal-shadow: var(--docs-card-shadow); + --docsearch-searchbox-background: color-mix(in srgb, var(--bg-sub) 70%, var(--card-light)); + --docsearch-searchbox-focus-background: color-mix(in srgb, var(--bg-sub) 55%, var(--card-light)); + --docsearch-searchbox-shadow: inset 0 0 0 2px color-mix(in srgb, var(--sg-violet) 45%, transparent); + --docsearch-primary-color: var(--sg-violet); + --docsearch-highlight-color: var(--highlight); + --docsearch-hit-color: var(--body); + --docsearch-hit-active-color: var(--heading); + --docsearch-hit-background: color-mix(in srgb, var(--card-light) 88%, var(--bg-sub)); + --docsearch-hit-shadow: none; + --docsearch-footer-background: color-mix(in srgb, var(--bg-sub) 50%, var(--card-light)); + --docsearch-footer-shadow: inset 0 1px 0 color-mix(in srgb, var(--divider-light) 40%, transparent); + --docsearch-logo-color: var(--link); + --docsearch-key-gradient: linear-gradient(-225deg, var(--card), var(--card-light)); + --docsearch-key-shadow: inset 0 -2px 0 0 color-mix(in srgb, var(--divider-light) 65%, transparent); + + .DocSearch-Hit[aria-selected="true"] a { + background-color: color-mix(in srgb, var(--highlight) 18%, var(--card-light)); + } + + .DocSearch-Hit-source { + color: color-mix(in srgb, var(--highlight) 75%, var(--heading)); + } + + .DocSearch-Input { + color: var(--heading); + } + + .DocSearch-Hit[aria-selected="true"] mark { + color: var(--highlight) !important; + } +} + +body.light { + --docsearch-primary-color: var(--sg-violet); + --docsearch-highlight-color: var(--highlight); + --docsearch-text-color: var(--sg-midnight); + --docsearch-muted-color: var(--sg-gray-2); + --docsearch-container-background: color-mix(in srgb, var(--bg) 25%, rgba(16, 12, 33, 0.38)); + --docsearch-modal-background: var(--white); + --docsearch-modal-shadow: var(--docs-card-shadow); + --docsearch-searchbox-background: color-mix(in srgb, var(--bg-sub) 80%, var(--white)); + --docsearch-searchbox-focus-background: var(--white); + --docsearch-searchbox-shadow: inset 0 0 0 2px color-mix(in srgb, var(--sg-violet) 35%, transparent); + --docsearch-hit-color: var(--body); + --docsearch-hit-active-color: var(--heading); + --docsearch-hit-background: var(--white); + --docsearch-hit-shadow: none; + --docsearch-footer-background: color-mix(in srgb, var(--bg-sub) 65%, var(--white)); + --docsearch-footer-shadow: inset 0 1px 0 color-mix(in srgb, var(--docs-card-divider) 55%, transparent); + --docsearch-logo-color: var(--link); + --docsearch-key-gradient: linear-gradient(-225deg, var(--bg-sub), var(--white)); + --docsearch-key-shadow: inset 0 -2px 0 0 color-mix(in srgb, var(--docs-card-divider) 65%, transparent); + + .DocSearch-Hit[aria-selected="true"] a { + background-color: color-mix(in srgb, var(--highlight) 12%, var(--white)); + } + + .DocSearch-Hit-source { + color: color-mix(in srgb, var(--highlight) 70%, var(--sg-midnight)); + } + + .DocSearch-Input { + color: var(--heading); + } -.DocSearch-Modal { - --docsearch-primary-color: #{$purple-v2}; - --docsearch-highlight-color: #{$purple-v2}; - --docsearch-searchbox-shadow: inset 0 0 0 2px var(--docsearch-primary-color); + .DocSearch-Hit[aria-selected="true"] mark { + color: var(--highlight) !important; + } } .backdrop { - position: fixed; + backdrop-filter: blur(4px); + background: color-mix(in srgb, var(--bg) 35%, rgba(0, 0, 0, 0.72)); + display: none; height: 100vh; - width: 100vw; inset: 0; - background: rgba(0, 0, 0, .7); - display: none; + position: fixed; + width: 100vw; } .sidebar-wrapper { - flex: 1; + flex: 0 0 300px; + padding-left: var(--milli); + box-sizing: border-box; + + @media (min-width: 1571px) { + flex-basis: calc(((100vw - 1400px) / 2) + 300px); + padding-left: calc((100vw - 1400px) / 2); + } @media(max-width: 850px) { + min-width: 0; + padding-left: 0; position: fixed; background: var(--bg); z-index: 100; @@ -163,10 +835,10 @@ table.inline-headings { } .sidebar { - margin-left: auto; position: sticky; top: var(--nav-height); - padding: var(--xx-small) var(--small); + padding: var(--xx-small) var(--small) var(--xx-small) 0; + box-sizing: border-box; overflow-y: auto; height: calc(100vh - var(--nav-height)); display: flex; @@ -176,9 +848,10 @@ table.inline-headings { &, ul { + box-sizing: border-box; width: 100%; - min-width: 200px; - max-width: 285px; + min-width: 0; + max-width: 100%; @media(max-width: 850px) { min-width: 260px; @@ -186,7 +859,6 @@ table.inline-headings { } @media (max-width: 1570px) { - padding-left: var(--milli); padding-right: var(--nano); } @@ -199,41 +871,65 @@ table.inline-headings { display: block; cursor: pointer; position: relative; - padding: 3px 30px 3px 15px; - margin-left: 5px; + padding: 5px 26px 5px 10px; + border-radius: 6px; + color: var(--important); + font-weight: var(--weight-body); + line-height: 1.35; text-decoration: none; word-wrap: break-word; white-space: initial; + transition: color 0.2s ease, background-color 0.2s ease; &.active { - font-weight: 500; - background: var(--tip); + color: var(--highlight); + background: rgba(129, 154, 123, 0.18); + font-weight: var(--weight-body-strong); + + &::before { + content: ""; + position: absolute; + top: rem(0.7); + bottom: rem(0.7); + left: rem(0.35); + width: 1px; + background: #2bddc2; + } + } + + &:hover { + color: var(--important); + background: var(--card-light); + text-decoration: none; } - &:hover, &.active { - color: var(--highlight); text-decoration: none; + } + &:hover, + &.active { svg { - color: var(--divider-light); + color: currentColor; + opacity: 1; .darker { - color: var(--highlight); + color: currentColor; } } } svg { position: absolute; - right: 6px; + right: 4px; top: 50%; transform: translateY(-50%); - color: var(--divider-light); + color: var(--gray-dark); + opacity: 0.75; transition: transform 0.2s ease-out; .darker { - color: var(--sub); + color: currentColor; } &:hover { @@ -247,16 +943,13 @@ table.inline-headings { } code { - font-family: "Fira Code", Courier, monospace; + font-family: var(--font-mono); } .no-children>a, .level-4 a { - - - &:hover, - &.active { - border-left: 2px solid var(--highlight); + &:hover:not(.active) { + color: var(--important); } } @@ -266,8 +959,14 @@ table.inline-headings { margin-top: 0; padding-left: 0; + ul { + margin: rem(0.25) 0 rem(0.6) 10px; + padding-left: 10px; + border-left: 1px solid var(--divider-light); + } + ul ul { - margin-left: rem(0.8); + margin-left: 0; } } @@ -277,15 +976,57 @@ table.inline-headings { li.level-1 { &>a { - font-weight: 500; - color: var(--highlight); + color: var(--important); + font-family: var(--font-heading); + font-size: rem(1.55); + font-weight: var(--weight-body); + letter-spacing: 0; + text-transform: none; + + &:hover { + color: var(--important); + } + + &.active { + color: var(--important); + } } &>ul { - margin-bottom: rem(1.5); + margin-bottom: rem(1.25); + } + padding: rem(0.2) 0; + margin-bottom: rem(0.85); + } + + li.level-2>a { + font-size: rem(1.5); + padding-left: 10px; + margin-left: -10px; + + &.active { + padding-left: 10px; + } + } + + li.level-3>a { + font-size: rem(1.5); + padding-left: 10px; + margin-left: -10px; + + &.active { + padding-left: 10px; + } + } + + li.level-4>a { + font-size: rem(1.5); + padding-left: 10px; + margin-left: -10px; + + &.active { + padding-left: 10px; } - padding: 4px 0; - border-bottom: 1px solid var(--gray-light); } li.level-1, @@ -341,28 +1082,36 @@ table.inline-headings { } .toc-wrapper { - flex: 1; + flex: 0 0 240px; position: sticky; top: 90px; overflow-y: auto; height: 100vh; + padding-right: var(--nano); + box-sizing: border-box; + + @media (min-width: 1571px) { + flex-basis: calc(((100vw - 1400px) / 2) + 240px); + padding-right: calc((100vw - 1400px) / 2); + } @media(max-width: 1050px) { display: none; } .btn-ghost { - margin: var(--x-small) var(--milli) var(--milli); + margin: 0 rem(2) var(--pico); } } .toc { max-width: fit-content; min-width: 180px; - padding: var(--x-small) rem(2); + padding: var(--nano) rem(2); position: sticky; top: 0; - font-size: var(--sm); + overflow-y: auto; + font-size: rem(1.45); padding-bottom: 8.5rem; &-top { @@ -370,37 +1119,59 @@ table.inline-headings { } h2 { - font-size: var(--xsm); - letter-spacing: 0.1em; - margin: 0 0 rem(0.75) 0; + font-size: rem(1.4); + font-weight: var(--weight-body); + letter-spacing: 0; + line-height: var(--leading-headline); + margin: 0 0 rem(1.4) 0; padding: 0; display: inline-block; - color: var(--highlight); - text-transform: uppercase; + color: var(--important); + text-transform: none; } ul { + border-left: 2px solid var(--divider-light); list-style-type: none; margin: 0; - padding: 0; + padding: 0 0 0 rem(1.4); } ul ul { - margin-left: var(--milli); + border-left: none; + margin-left: 0; + padding-left: rem(1.4); } li { - padding: rem(0.25) 0; + padding: rem(0.35) 0; } a { + display: block; + color: var(--important); + font-weight: var(--weight-body); + line-height: 1.35; + position: relative; text-decoration: none; &.active { &, code { - font-weight: 500; + color: #2bddc2 !important; + font-weight: inherit; + text-shadow: 0 0 0.35px currentColor; + } + + &::before { + content: ""; + position: absolute; + top: rem(0.1); + bottom: rem(0.1); + left: calc(-1 * #{rem(1.4)} - 2px); + width: 2px; + background: #2bddc2; } } @@ -410,31 +1181,55 @@ table.inline-headings { &, code { - color: var(--highlight); text-decoration: none; } } + + &:hover, + &:focus { + color: var(--important); + } } code { - font-family: "Fira Code", Courier, monospace; + font-family: var(--font-mono); font-variant-ligatures: none; } + + .toc-scroll-top { + display: block; + margin-top: var(--x-small); + padding-top: var(--x-small); + border-top: 1px solid var(--divider-light); + color: var(--important); + font-size: var(--sm); + font-weight: var(--weight-body); + text-decoration: none; + + &:hover, + &:focus { + color: var(--important); + text-decoration: none; + } + } } -.sidebar a, -.toc a { +.sidebar a { white-space: initial; } +.toc a { + white-space: nowrap; +} + .footer { + border-top: 1px solid var(--docs-card-divider); display: flex; flex-direction: column; gap: var(--x-small); - text-align: center; margin-top: var(--large); padding: var(--small) 0 0; - border-top: 1px solid var(--divider-light); + text-align: center; &-links { display: flex; @@ -457,8 +1252,14 @@ table.inline-headings { a:not([class]), button { color: var(--sub) !important; - font-weight: 300 !important; + font-weight: var(--weight-body) !important; text-decoration: none; + transition: color 0.15s ease; + + &:hover, + &:focus { + color: var(--link) !important; + } &[href*="https://"] { border-bottom: none; @@ -481,9 +1282,9 @@ table.inline-headings { } svg { + fill: var(--gray-mid); height: rem(2.2); width: rem(2.2); - fill: var(--gray-mid); } .system.active { @@ -505,6 +1306,62 @@ table.inline-headings { } } +body.light { + .nav { + a:not([class*="btn"]) { + color: var(--body); + + &:hover, + &:focus { + color: var(--heading); + } + + &.active { + color: var(--highlight); + } + } + + &-logo { + color: var(--heading); + } + } + + .sidebar { + a { + color: var(--body); + } + + li.level-1 > a { + color: var(--heading); + } + + a:hover, + a:focus { + color: var(--heading); + } + + a.active { + color: var(--highlight); + } + } + + .toc { + h2 { + color: var(--heading); + } + + a { + color: var(--body); + + &:hover, + &:focus, + &.active { + color: var(--heading); + } + } + } +} + body.dark { .theme-switcher { @@ -515,7 +1372,11 @@ body.dark { } .banner { - background-color: var(--tip); + background: color-mix(in srgb, var(--sg-violet) 12%, var(--docs-card-inset)); + border: 1px solid color-mix(in srgb, var(--sg-violet) 22%, var(--docs-card-divider)); + border-radius: var(--table-radius); + box-shadow: var(--docs-card-shadow); + margin: var(--milli) 0; padding: var(--pico) var(--milli); text-align: center; @@ -525,6 +1386,7 @@ body.dark { a { color: var(--link); + font-weight: var(--weight-body-emphasis); } } diff --git a/doc/user/assets/sass/_mixins.scss b/doc/user/assets/sass/_mixins.scss index 12de2ccee5045..e5632fcff4a49 100644 --- a/doc/user/assets/sass/_mixins.scss +++ b/doc/user/assets/sass/_mixins.scss @@ -5,3 +5,187 @@ box-shadow: var(--shadow-default); } + +// Homepage promo blocks: What's new callout + offerings table +@mixin docs-feature-card($top-accent: false) { + $glow-foot: var(--docs-card-glow-foot, color-mix(in srgb, var(--docs-card-glow) 45%, transparent)); + $surface: + radial-gradient(120% 90% at 50% -22%, var(--docs-card-glow), transparent 62%), + linear-gradient(180deg, transparent 48%, #{$glow-foot} 100%), + var(--docs-card-surface, var(--table-surface)); + + @if $top-accent { + background: + linear-gradient( + 90deg, + transparent 0%, + color-mix(in srgb, var(--brand) var(--docs-card-top-accent-mix, 45%), transparent) 35%, + color-mix(in srgb, var(--brand) var(--docs-card-top-accent-center-mix, 90%), var(--sg-lavender-2)) 50%, + color-mix(in srgb, var(--brand) var(--docs-card-top-accent-mix, 45%), transparent) 65%, + transparent 100% + ) 0 0 / 100% 2px no-repeat, + $surface; + } @else { + background: $surface; + } + + border: 1px solid var(--docs-card-border, var(--table-border)); + border-radius: var(--table-radius); + box-shadow: var(--docs-card-shadow); +} + +// Brand gradient hairline pinned to the top edge of a docs-feature-card. +// The host element needs position: relative. +@mixin docs-card-top-hairline() { + &::before { + background: linear-gradient( + 90deg, + transparent 0%, + color-mix(in srgb, var(--brand) var(--docs-card-top-accent-mix, 45%), transparent) 35%, + color-mix(in srgb, var(--brand) var(--docs-card-top-accent-center-mix, 90%), var(--sg-lavender-2)) 50%, + color-mix(in srgb, var(--brand) var(--docs-card-top-accent-mix, 45%), transparent) 65%, + transparent 100% + ); + border-radius: var(--table-radius) var(--table-radius) 0 0; + content: ""; + height: 1px; + left: 0; + pointer-events: none; + position: absolute; + right: 0; + top: 0; + z-index: 1; + } +} + +@mixin callout-item-accent($token) { + --callout-accent: var(#{$token}); + --callout-accent-soft: color-mix(in srgb, var(#{$token}) var(--callout-accent-soft-mix, 10%), transparent); + --callout-accent-border: color-mix(in srgb, var(#{$token}) var(--callout-accent-border-mix, 22%), transparent); +} + +@mixin docs-admonition-theme($token) { + @include callout-item-accent($token); + + --admonition-surface: color-mix(in srgb, var(--callout-accent-soft) 42%, var(--docs-card-inset, var(--card-light))); + --admonition-border: color-mix(in srgb, var(--callout-accent-border) 85%, var(--table-border, var(--divider-light))); + --admonition-label: color-mix(in srgb, var(--callout-accent) 78%, var(--heading)); +} + +@mixin docs-admonition-card() { + background: var(--admonition-surface); + border: 1px solid var(--admonition-border); + border-radius: var(--table-radius); + box-shadow: var(--docs-card-shadow); + box-sizing: border-box; + color: var(--body); + margin: rem(1.2) 0; + overflow: hidden; + padding: rem(1.2) rem(1.4) rem(1.2) rem(1.6); + position: relative; + + &::before { + background: linear-gradient( + 180deg, + var(--callout-accent), + color-mix(in srgb, var(--callout-accent) 40%, transparent) + ); + bottom: 0; + content: ""; + left: 0; + position: absolute; + top: 0; + width: 3px; + } + + p:first-of-type { + margin-top: 0; + } + + a:not(a[class]) { + color: var(--link); + + &:hover, + &:focus { + color: var(--link-hover); + } + } +} + +@mixin docs-nested-code-vars { + --code-highlight-font-size: #{rem(1.35)}; + --code-highlight-padding-top: #{rem(2.2)}; + --code-highlight-padding-inline: #{rem(1.2)}; + --code-highlight-padding-bottom: #{rem(1)}; + --code-pre-font-size: #{rem(1.35)}; + --code-pre-padding-block: #{rem(1)}; + --code-pre-padding-inline: #{rem(1.2)}; +} + +@mixin offering-row-theme($accent, $cta: null) { + $cta-token: if($cta, $cta, $accent); + + --offering-accent: var(#{$accent}); + --offering-badge-bg: color-mix(in srgb, var(#{$accent}) 12%, transparent); + --offering-badge-border: color-mix(in srgb, var(#{$accent}) 24%, transparent); + --offering-tile-bg: linear-gradient( + 145deg, + color-mix(in srgb, var(#{$accent}) 22%, transparent), + color-mix(in srgb, var(#{$accent}) 7%, transparent) + ); + --offering-tile-glow: 0 0 14px color-mix(in srgb, var(#{$accent}) 14%, transparent); + --offering-row-glow: color-mix(in srgb, var(#{$accent}) 4%, transparent); + --offering-cta-accent: var(#{$cta-token}); + --offering-action-bg: color-mix(in srgb, var(#{$cta-token}) 8%, transparent); + --offering-action-border: color-mix(in srgb, var(#{$cta-token}) 22%, transparent); + --offering-action-hover: color-mix(in srgb, var(#{$cta-token}) 14%, transparent); +} + +@mixin docs-page-mesh-grid-layers() { + background-image: + var(--docs-mesh-icons), + linear-gradient(to right, var(--docs-mesh-grid-major) 1px, transparent 1px), + linear-gradient(to bottom, var(--docs-mesh-grid-major) 1px, transparent 1px), + linear-gradient(to right, var(--docs-mesh-grid-minor) 1px, transparent 1px), + linear-gradient(to bottom, var(--docs-mesh-grid-minor) 1px, transparent 1px), + radial-gradient(circle, var(--docs-mesh-dot) var(--docs-mesh-dot-size), transparent var(--docs-mesh-dot-size)); +} + +@mixin docs-page-mesh-grid-layers-no-icons() { + background-image: + linear-gradient(to right, var(--docs-mesh-grid-major) 1px, transparent 1px), + linear-gradient(to bottom, var(--docs-mesh-grid-major) 1px, transparent 1px), + linear-gradient(to right, var(--docs-mesh-grid-minor) 1px, transparent 1px), + linear-gradient(to bottom, var(--docs-mesh-grid-minor) 1px, transparent 1px), + radial-gradient(circle, var(--docs-mesh-dot) var(--docs-mesh-dot-size), transparent var(--docs-mesh-dot-size)); +} + +@mixin docs-page-mesh-size($icons-step, $major-step, $minor-step, $dot-step, $accent-cover: null) { + @if $accent-cover { + background-size: + $accent-cover, + $icons-step $icons-step, + $major-step $major-step, + $major-step $major-step, + $minor-step $minor-step, + $minor-step $minor-step, + $dot-step $dot-step; + } @else { + background-size: + $icons-step $icons-step, + $major-step $major-step, + $major-step $major-step, + $minor-step $minor-step, + $minor-step $minor-step, + $dot-step $dot-step; + } +} + +@mixin docs-page-mesh-grid-size($major-step, $minor-step, $dot-step) { + background-size: + $major-step $major-step, + $major-step $major-step, + $minor-step $minor-step, + $minor-step $minor-step, + $dot-step $dot-step; +} diff --git a/doc/user/assets/sass/_nav.scss b/doc/user/assets/sass/_nav.scss index b99bfc77fc910..3eb50ae54d537 100644 --- a/doc/user/assets/sass/_nav.scss +++ b/doc/user/assets/sass/_nav.scss @@ -30,7 +30,7 @@ } .active { - font-weight: bold; + font-weight: 500; } @media(max-width: 850px) { @@ -52,22 +52,30 @@ } a:not([class*="btn"]) { + color: var(--important); + font-family: var(--font-body); + font-weight: var(--weight-body); text-decoration: none; - border-bottom: 1px solid transparent; + border-bottom: none; &:hover, &:focus, &.active { text-decoration: none; - color: var(--important); - border-color: var(--important); + color: var(--highlight); } } + .btn { + font-family: var(--font-body); + font-weight: var(--weight-body); + } + &-logo { display: flex; align-items: center; - font-weight: 600; + font-family: var(--font-heading); + font-weight: 500; font-size: rem(1.8); color: var(--important); @@ -151,7 +159,7 @@ button.show-topics { display: none; margin: 0 0 var(--small) !important; text-align: left; - font-weight: 300; + font-weight: var(--weight-body); font-size: var(--base); color: var(--sub); diff --git a/doc/user/assets/sass/_railroad_diagrams.scss b/doc/user/assets/sass/_railroad_diagrams.scss index 53f72995910a4..4f8978a228171 100644 --- a/doc/user/assets/sass/_railroad_diagrams.scss +++ b/doc/user/assets/sass/_railroad_diagrams.scss @@ -26,13 +26,13 @@ text.terminal, text.nonterminal, text.regexp { - font-family: "Inter", sans-serif; + fill: var(--body); + font-family: var(--font-body); font-size: 14px; - fill: $black; } text.terminal { - font-weight: bold; + font-weight: var(--weight-body-emphasis); } rect, @@ -43,12 +43,12 @@ } rect.terminal { - fill: #ab96e0; - stroke: var(--sub); + fill: color-mix(in srgb, var(--sg-lavender-3) 55%, var(--table-surface-raised)); + stroke: color-mix(in srgb, var(--sg-violet) 35%, var(--sub)); } rect.nonterminal { - fill: scale-color($purple-20, $saturation: -50%); + fill: color-mix(in srgb, var(--sg-lavender-6) 45%, var(--table-surface)); stroke: var(--sub); } @@ -58,7 +58,7 @@ } polygon.regexp { - fill: scale-color($purple-10, $saturation: -50%); + fill: color-mix(in srgb, var(--sg-violet) 18%, var(--table-surface)); stroke: var(--sub); } } diff --git a/doc/user/assets/sass/main.scss b/doc/user/assets/sass/main.scss index 8ebc411e70da1..7da476c4010cf 100644 --- a/doc/user/assets/sass/main.scss +++ b/doc/user/assets/sass/main.scss @@ -56,6 +56,7 @@ $progress: #d1fa77; $warning: rgb(255, 145, 0); $danger: #f85151; +@import "colors"; @import "mixins"; @import "base"; @import "content"; diff --git a/doc/user/content/_index.md b/doc/user/content/_index.md index 25f5e6b356877..cc7c4d412b132 100644 --- a/doc/user/content/_index.md +++ b/doc/user/content/_index.md @@ -13,19 +13,7 @@ aliases: {{% include-headless "/headless/materialize-intro/intro" %}} -{{< callout >}} -## What's new! - -- **MCP servers and Agent skills**: - - [MCP server for agents: give your production AI agents fresh context from - Materialize](/releases/#mcp-server-for-agents) - - [MCP server for developers: give coding agents observability into your - Materialize environment](/releases/#mcp-server-for-developers) - - [Agent skills](/integrations/coding-agent-skills/) - -For more information on these and other changes, see the [Release Notes](/releases/). - -{{}} +{{< whats-new-callout >}} ## Materialize offerings diff --git a/doc/user/content/concepts/clusters.md b/doc/user/content/concepts/clusters.md index 5d9632964a35c..809d1332c7763 100644 --- a/doc/user/content/concepts/clusters.md +++ b/doc/user/content/concepts/clusters.md @@ -94,6 +94,10 @@ The following provides some general guidelines for clusters. See also {{% include-from-yaml data="best_practices_details" name="architecture-three-tier" %}} +{{< architecture-diagram tier="three" caption="3-tier architecture" >}} + +{{% include-from-yaml data="best_practices_details" name="architecture-three-tier-details" %}} + See also [Operational guidelines](/manage/operational-guidelines/). #### Alternatives diff --git a/doc/user/content/headless/materialize-intro/offerings.md b/doc/user/content/headless/materialize-intro/offerings.md index 43dd2dd4bd2ed..6fca941230026 100644 --- a/doc/user/content/headless/materialize-intro/offerings.md +++ b/doc/user/content/headless/materialize-intro/offerings.md @@ -4,8 +4,4 @@ headless: true Materialize is available as: -| Offering | Description | Get Started 🚀 | -|----------|-------------|-----------------| -| **Materialize Cloud** | Materialize Cloud is a fully-managed service for Materialize. | Sign up for a [free trial account](https://materialize.com/register/?utm_campaign=General&utm_source=documentation) on Materialize Cloud and try out the [Quickstart](/get-started/quickstart/). | -| **Materialize Self-Managed** | Deploy and operate Materialize in your Kubernetes environment. Whereas Materialize Cloud gives you a fully managed service, Materialize Self-Managed allows you to deploy Materialize in your own infrastructure.

{{< include-md file="shared-content/self-managed/editions-available.md" >}} | [Install self-managed](/get-started/install/) and try out the [Quickstart](/get-started/quickstart/). | -| **Materialize Emulator** | Materialize Emulator is an all-in-one Docker image that provides the fastest way to get hands-on experience with Materialize for local development. | [Download and run Materialize Emulator](/get-started/install-materialize-emulator/) and try out the [Quickstart](/get-started/quickstart/). | +{{< materialize-offerings-table >}} diff --git a/doc/user/content/manage/operational-guidelines.md b/doc/user/content/manage/operational-guidelines.md index 0b2f40304e791..6a747ccefbb3d 100644 --- a/doc/user/content/manage/operational-guidelines.md +++ b/doc/user/content/manage/operational-guidelines.md @@ -22,6 +22,10 @@ production cluster(s) to run development workloads or non-production tasks. {{% include-from-yaml data="best_practices_details" name="architecture-three-tier" %}} +{{< architecture-diagram tier="three" caption="3-tier architecture" >}} + +{{% include-from-yaml data="best_practices_details" name="architecture-three-tier-details" %}} + #### Alternatives If a three-tier architecture is infeasible or unnecessary due to low volume or a diff --git a/doc/user/data/best_practices_details.yml b/doc/user/data/best_practices_details.yml index 0c96c0b4d411c..69bef83049874 100644 --- a/doc/user/data/best_practices_details.yml +++ b/doc/user/data/best_practices_details.yml @@ -6,8 +6,7 @@ one-tier architecture may suffice for your sources, compute objects, and query serving needs. - ![Image of the 1-cluster-architecture - architecture](/images/1-tier-architecture.svg) + {{< architecture-diagram tier="one" >}} {{< yaml-table data="best_practices/one_tier_architecture" >}} @@ -35,8 +34,7 @@ is infeasible or unnecessary due to low volume or a **non**-production setup, a two-tier architecture may suffice. A two-tier architecture consists of: - ![Image of the 2-cluster architecture: Source cluster, Compute/Transform + - Serving cluster](/images/2-tier-architecture.svg) + {{< architecture-diagram tier="two" >}} {{< yaml-table data="best_practices/two_tier_architecture" >}} @@ -58,10 +56,8 @@ content: | In production, use a three-tier architecture, if feasible. - ![Image of the 3-tier architecture: Source cluster(s), Compute/Transform - cluster(s), Serving cluster(s)](/images/3-tier-architecture.svg "3-tier - architecture") - +- name: architecture-three-tier-details + content: | A three-tier architecture consists of: {{< yaml-table data="best_practices/three_tier_architecture" >}} diff --git a/doc/user/layouts/_default/_markup/render-image.html b/doc/user/layouts/_default/_markup/render-image.html index f0d6d7f8c99b4..b6eab1e493cf0 100644 --- a/doc/user/layouts/_default/_markup/render-image.html +++ b/doc/user/layouts/_default/_markup/render-image.html @@ -1,10 +1,14 @@ {{- $url := .Destination | safeURL -}} {{- $parentPath := partial "relative-link.html" . -}} -{{ .Text }} +{{- $caption := or (.Title) (.Text) -}} +
+ {{ .Text }} + {{- with $caption }}
{{ . }}
{{ end -}} +
{{- /* Chomp trailing newline. */ -}} diff --git a/doc/user/layouts/_default/baseof.html b/doc/user/layouts/_default/baseof.html index 167df07159dfe..ccdeb90b92919 100644 --- a/doc/user/layouts/_default/baseof.html +++ b/doc/user/layouts/_default/baseof.html @@ -30,6 +30,10 @@ } else { document.body.classList.add("light"); } + + document.documentElement.dataset.theme = document.body.classList.contains("dark") + ? "dark" + : "light"; {{ partial "header.html" . }} {{ block "body" .}} @@ -77,7 +81,7 @@ diff --git a/doc/user/layouts/shortcodes/include-syntax.html b/doc/user/layouts/shortcodes/include-syntax.html index 7daaf2921fbcb..87e79a199e4e2 100644 --- a/doc/user/layouts/shortcodes/include-syntax.html +++ b/doc/user/layouts/shortcodes/include-syntax.html @@ -23,6 +23,7 @@ {{- if .syntax_elements }} {{ partial "yaml-tables/generic-table.html" (dict + "class" "syntax-table" "columns" (slice (dict "column" "name" "header" "Syntax element") (dict "column" "description" "header" "Description") diff --git a/doc/user/layouts/shortcodes/linkbox.html b/doc/user/layouts/shortcodes/linkbox.html index c52815a1ca9e7..5b0f606910255 100644 --- a/doc/user/layouts/shortcodes/linkbox.html +++ b/doc/user/layouts/shortcodes/linkbox.html @@ -1,6 +1,9 @@ -