Files
awesome-kubernetes/docs/static/v2_elite.css
Inaki Fernandez 5d05d4a17c fix: invert Nutanix logo in dark mode for V2 mosaic visibility
The Nutanix logo is black-on-transparent, invisible on dark backgrounds.
Adds a targeted CSS rule using [data-md-color-scheme="slate"] to invert
it only in dark mode, keeping the original image unchanged.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 11:41:20 +02:00

1807 lines
48 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* Nubenetes V2 Elite Portal - Enterprise Aesthetic (Cyber Cloud)
* Color Palette: Deep Space Black & Neon Cyan
*/
html {
scroll-behavior: smooth;
}
.md-content {
max-width: 1600px;
margin: 0 auto;
}
:root {
/* LIGHT MODE - Modern, Crisp, High Contrast */
--md-primary-fg-color: #09090b; /* Zinc 950 */
--md-primary-fg-color--light: #18181b; /* Zinc 900 */
--md-primary-fg-color--dark: #000000;
--md-accent-fg-color: #0ea5e9; /* Vibrant Sky Blue */
--md-accent-fg-color--transparent: rgba(14, 165, 233, 0.15);
--md-primary-bg-color: #ffffff;
--md-primary-bg-color--light: #f4f4f5; /* Zinc 100 */
/* Header Overrides */
--md-header-bg-color: #09090b;
--md-header-fg-color: #ffffff;
}
[data-md-color-scheme="slate"] {
/* DARK MODE - "Cyber Cloud" (Deep Space & Neon) */
--md-primary-fg-color: #ffffff;
--md-primary-fg-color--light: #e2e8f0;
--md-primary-fg-color--dark: #94a3b8;
--md-accent-fg-color: #22d3ee; /* Brighter Neon Cyan */
--md-accent-fg-color--transparent: rgba(34, 211, 238, 0.15);
--md-default-bg-color: #09090b; /* Zinc 950 for main body */
--md-code-bg-color: #18181b; /* Zinc 900 for code blocks */
/* Header Overrides (Dark) */
--md-header-bg-color: rgba(0, 0, 0, 0.85);
--md-header-fg-color: #ffffff;
}
/* ---------------------------------------------------- */
/* UI DYNAMICS & GLASSMORPHISM */
/* ---------------------------------------------------- */
/* Solid/Glass Header */
.md-header {
background-color: var(--md-header-bg-color) !important;
color: var(--md-header-fg-color) !important;
}
.md-header__button.md-logo img,
.md-header__button.md-logo svg {
fill: currentColor !important;
}
/* Ensure Search and Nav Icons are visible */
.md-header__topic,
.md-header__button,
.md-header__title,
.md-search__input,
.md-search__icon {
color: inherit !important;
}
/* Navigation Tabs */
.md-tabs {
background-color: var(--md-header-bg-color);
opacity: 0.95;
}
.md-tabs__link {
color: rgba(255, 255, 255, 0.7) !important;
}
.md-tabs__link--active,
.md-tabs__link:hover {
color: #ffffff !important;
opacity: 1;
}
[data-md-color-scheme="slate"] .md-header {
backdrop-filter: blur(16px);
-webkit-backdrop-filter: blur(16px);
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
}
/* ---------------------------------------------------- */
/* ENHANCED TAGS AND CHIPS */
/* ---------------------------------------------------- */
.md-tag {
border-radius: 4px;
display: inline-block;
font-size: 0.65rem;
font-weight: 700;
line-height: 1.2;
padding: 0.2rem 0.4rem;
vertical-align: middle;
text-transform: uppercase;
letter-spacing: 0.025em;
transition: transform 0.2s ease, box-shadow 0.2s ease, opacity 0.2s ease;
cursor: pointer;
}
.md-tag:hover {
transform: translateY(-1px);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
opacity: 0.95;
}
.md-tag--info {
background-color: rgba(14, 165, 233, 0.1);
color: #0284c7;
}
[data-md-color-scheme="slate"] .md-tag--info {
background-color: rgba(56, 189, 248, 0.15);
color: #7dd3fc;
}
.md-tag--success {
background-color: rgba(34, 197, 94, 0.1);
color: #16a34a;
}
[data-md-color-scheme="slate"] .md-tag--success {
background-color: rgba(74, 222, 128, 0.15);
color: #86efac;
}
.md-tag--warning {
background-color: rgba(249, 115, 22, 0.1);
color: #ea580c;
}
[data-md-color-scheme="slate"] .md-tag--warning {
background-color: rgba(253, 186, 116, 0.15);
color: #fdbb74;
}
.md-tag--critical {
background-color: rgba(239, 68, 68, 0.1);
color: #dc2626;
}
[data-md-color-scheme="slate"] .md-tag--critical {
background-color: rgba(252, 165, 165, 0.15);
color: #fca5a5;
}
.md-tag--primary {
background-color: rgba(6, 182, 212, 0.1);
color: #0891b2;
}
[data-md-color-scheme="slate"] .md-tag--primary {
background-color: rgba(103, 232, 249, 0.15);
color: #67e8f9;
}
.md-tag--secondary {
background-color: rgba(139, 92, 246, 0.1);
color: #7c3aed;
}
[data-md-color-scheme="slate"] .md-tag--secondary {
background-color: rgba(196, 181, 253, 0.15);
color: #c4b5fd;
}
/* ---------------------------------------------------- */
/* LABEL HEATMAP (Confluence-style popular-labels cloud) */
/* ---------------------------------------------------- */
.v2-tag-heatmap {
display: flex;
flex-wrap: wrap;
gap: 0.45rem 0.7rem;
align-items: baseline;
padding: 1.1rem 1.2rem;
margin: 1rem 0 1.75rem;
border: 1px solid rgba(38, 50, 56, 0.12);
border-radius: 10px;
background: rgba(38, 50, 56, 0.04);
}
[data-md-color-scheme="slate"] .v2-tag-heatmap {
background: rgba(255, 255, 255, 0.03);
border-color: rgba(255, 255, 255, 0.1);
}
.v2-heat-tag {
display: inline-flex;
align-items: baseline;
gap: 0.2em;
line-height: 1.1;
font-weight: 600;
text-decoration: none;
color: #455a64;
transition: color 0.15s ease, transform 0.15s ease;
}
.v2-heat-tag:hover {
transform: translateY(-1px);
color: var(--md-accent-fg-color);
}
.v2-heat-n {
font-size: 0.6em;
font-weight: 700;
opacity: 0.55;
vertical-align: super;
}
/* Size + warmth ramp: level 1 = least used, level 6 = most used. */
.v2-heat-1 { font-size: 0.8rem; opacity: 0.7; }
.v2-heat-2 { font-size: 0.95rem; }
.v2-heat-3 { font-size: 1.15rem; }
.v2-heat-4 { font-size: 1.45rem; }
.v2-heat-5 { font-size: 1.8rem; color: #ef6c00; }
.v2-heat-6 { font-size: 2.25rem; color: #d84315; font-weight: 700; }
[data-md-color-scheme="slate"] .v2-heat-tag { color: #b0bec5; }
[data-md-color-scheme="slate"] .v2-heat-5 { color: #ffb74d; }
[data-md-color-scheme="slate"] .v2-heat-6 { color: #ff8a65; }
/* ---------------------------------------------------- */
/* MICRO-ANIMATIONS & HOVER STATES */
/* ---------------------------------------------------- */
/* Smooth Transition for all links */
a {
transition: color 0.25s ease-in-out, text-shadow 0.25s ease-in-out;
}
/* Navigation items highlight with subtle glow in dark mode */
.md-nav__link:hover {
color: var(--md-accent-fg-color);
}
[data-md-color-scheme="slate"] .md-nav__link:hover {
text-shadow: 0 0 8px rgba(6, 182, 212, 0.4);
}
/* Fix mobile navigation drawer header and repository section contrast in dark mode */
@media screen and (max-width: 76.1875em) {
[data-md-color-scheme="slate"] .md-nav--primary .md-nav__title {
background-color: #18181b !important; /* Solid Zinc 900 for dark mode */
color: #ffffff !important;
border-bottom: 1px solid rgba(255, 255, 255, 0.08) !important;
}
[data-md-color-scheme="slate"] .md-nav--primary .md-nav__title .md-logo svg,
[data-md-color-scheme="slate"] .md-nav--primary .md-nav__title .md-logo img {
fill: #ffffff !important;
}
[data-md-color-scheme="slate"] .md-nav--primary .md-nav__title .md-icon {
color: #ffffff !important;
}
[data-md-color-scheme="slate"] .md-nav__source {
background-color: #0f0f11 !important; /* Solid Zinc 950 / dark background */
border-bottom: 1px solid rgba(255, 255, 255, 0.08) !important;
}
[data-md-color-scheme="slate"] .md-source {
color: #ffffff !important;
}
}
/* Elegant Table Rows (Audit Matrix) */
.md-typeset table tr {
transition: background-color 0.2s ease-in-out, transform 0.2s ease;
}
.md-typeset table tr:hover {
background-color: var(--md-accent-fg-color--transparent);
}
/* Buttons and primary actions */
.md-button {
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
border-radius: 8px;
font-weight: 600;
border: 1px solid transparent;
}
.md-button:hover {
transform: translateY(-2px);
box-shadow: 0 8px 20px rgba(14, 165, 233, 0.25);
}
[data-md-color-scheme="slate"] .md-button:hover {
box-shadow: 0 0 20px rgba(6, 182, 212, 0.35);
border: 1px solid rgba(6, 182, 212, 0.5);
}
/* Star tags (Platinum status) */
.md-typeset mark {
background-color: rgba(245, 158, 11, 0.15); /* Subtle Amber */
color: #d97706;
border-radius: 4px;
padding: 0.1em 0.3em;
font-weight: bold;
}
[data-md-color-scheme="slate"] .md-typeset mark {
background-color: rgba(251, 191, 36, 0.15);
color: #fbbf24;
text-shadow: 0 0 5px rgba(251, 191, 36, 0.4);
}
.channel-logo {
width: 48px;
height: 48px;
object-fit: contain;
margin: 6px;
transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), filter 0.25s ease;
vertical-align: middle;
}
.channel-logo:hover {
transform: scale(1.15);
filter: brightness(1.25);
box-shadow: 0 0 12px var(--md-accent-fg-color);
border-radius: 4px;
}
/* Dark-logo fix: invert black-on-transparent logos so they remain visible in dark mode */
[data-md-color-scheme="slate"] img[src*="nutanix_logo"] {
filter: invert(1);
}
[data-md-color-scheme="slate"] img[src*="nutanix_logo"]:hover {
filter: invert(1) brightness(1.25);
}
/* V2 Homepage Hero Dashboard Cards */
.hero-badge-card {
flex: 1;
max-width: 280px;
min-width: 200px;
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 16px;
padding: 24px 16px;
text-align: center;
background: rgba(255, 255, 255, 0.015);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
display: inline-block;
cursor: pointer;
vertical-align: top;
}
.hero-badge-card img {
width: 100px;
height: 100px;
object-fit: contain;
margin-bottom: 12px;
transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), filter 0.25s ease;
}
.hero-badge-card:hover {
transform: translateY(-4px);
}
.hero-badge-card:hover img {
transform: scale(1.15);
filter: brightness(1.25);
}
/* Modifiers for custom theme accents */
.hero-badge-card--cyan {
border-color: rgba(34, 211, 238, 0.15);
background: rgba(34, 211, 238, 0.015);
}
.hero-badge-card--cyan:hover {
background: rgba(34, 211, 238, 0.04) !important;
box-shadow: 0 8px 24px rgba(34, 211, 238, 0.15);
border-color: #22d3ee !important;
}
.hero-badge-card--purple {
border-color: rgba(139, 92, 246, 0.15);
background: rgba(139, 92, 246, 0.015);
}
.hero-badge-card--purple:hover {
background: rgba(139, 92, 246, 0.04) !important;
box-shadow: 0 8px 24px rgba(139, 92, 246, 0.15);
border-color: #a78bfa !important;
}
.hero-badge-card--pink {
border-color: rgba(236, 72, 153, 0.15);
background: rgba(236, 72, 153, 0.015);
}
.hero-badge-card--pink:hover {
background: rgba(236, 72, 153, 0.04) !important;
box-shadow: 0 8px 24px rgba(236, 72, 153, 0.15);
border-color: #f472b6 !important;
}
.hero-badge-card--teal {
border-color: rgba(20, 184, 166, 0.15);
background: rgba(20, 184, 166, 0.015);
}
.hero-badge-card--teal:hover {
background: rgba(20, 184, 166, 0.04) !important;
box-shadow: 0 8px 24px rgba(20, 184, 166, 0.15);
border-color: #2dd4bf !important;
}
.hero-badge-card--amber {
border-color: rgba(245, 158, 11, 0.2);
background: rgba(245, 158, 11, 0.02);
}
.hero-badge-card--amber:hover {
background: rgba(245, 158, 11, 0.06) !important;
box-shadow: 0 8px 24px rgba(245, 158, 11, 0.18);
border-color: #f59e0b !important;
}
.hero-badge-icon {
/* Match the 100px logo <img> box on the other hero cards so the
emoji-based Intelligence Digest card is the same height. */
height: 100px;
display: flex;
align-items: center;
justify-content: center;
font-size: 3.5rem;
line-height: 1;
margin-bottom: 12px;
}
.hero-badge-title {
font-weight: bold;
font-size: 0.95rem;
color: var(--md-primary-fg-color);
}
.hero-badge-subtitle {
font-size: 0.78rem;
color: var(--md-primary-fg-color--dark);
margin-top: 4px;
}
/* Intelligence Digest mini-preview on index */
.digest-preview {
background: rgba(245, 158, 11, 0.04);
border: 1px solid rgba(245, 158, 11, 0.15);
border-radius: 12px;
padding: 20px 24px;
margin: 24px 0;
}
.digest-preview-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 12px;
}
.digest-preview-title {
font-weight: 700;
font-size: 1rem;
color: var(--md-primary-fg-color);
}
.digest-preview-link {
font-size: 0.8rem;
color: #f59e0b;
text-decoration: none;
font-weight: 600;
letter-spacing: 0.02em;
}
.digest-preview-link:hover { text-decoration: underline; }
.digest-preview-list {
list-style: none;
margin: 0;
padding: 0;
}
.digest-preview-list li {
padding: 5px 0;
border-bottom: 1px solid rgba(245, 158, 11, 0.08);
font-size: 0.875rem;
display: flex;
align-items: center;
gap: 8px;
}
.digest-preview-list li:last-child { border-bottom: none; }
.digest-preview-cat {
font-size: 0.7rem;
color: #f59e0b;
background: rgba(245, 158, 11, 0.1);
border-radius: 4px;
padding: 1px 6px;
white-space: nowrap;
}
/* Hero Showcase Image wrapper (4 cars in a container) */
.hero-showcase-wrapper {
margin: 24px auto;
max-width: 1100px; /* Increased from 650px to make it responsive and as large as possible */
width: 100%;
border-radius: 16px;
overflow: hidden;
border: 1px solid rgba(255, 255, 255, 0.08);
background: rgba(255, 255, 255, 0.015);
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
display: block;
}
[data-md-color-scheme="slate"] .hero-showcase-wrapper {
border-color: rgba(34, 211, 238, 0.1);
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5);
}
.hero-showcase-link {
display: block;
text-decoration: none;
color: inherit;
position: relative;
}
.hero-showcase-image {
width: 100% !important;
display: block;
object-fit: cover;
transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1), filter 0.4s ease;
margin: 0 !important;
}
.hero-showcase-footer {
display: flex;
align-items: center;
justify-content: space-between;
padding: 14px 20px;
background: rgba(9, 9, 11, 0.5);
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
border-top: 1px solid rgba(255, 255, 255, 0.06);
gap: 16px;
flex-wrap: wrap;
}
[data-md-color-scheme="slate"] .hero-showcase-footer {
background: rgba(0, 0, 0, 0.6);
}
.hero-showcase-badge {
background: rgba(34, 211, 238, 0.1);
border: 1px solid rgba(34, 211, 238, 0.3);
color: var(--md-accent-fg-color);
font-size: 0.72rem;
font-weight: 700;
text-transform: uppercase;
padding: 4px 10px;
border-radius: 20px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
letter-spacing: 0.05em;
transition: all 0.3s ease;
white-space: nowrap;
}
.hero-showcase-caption {
font-size: 0.8rem;
color: var(--md-primary-fg-color--dark);
text-align: right;
flex: 1;
min-width: 250px;
line-height: 1.4;
transition: color 0.3s ease;
}
/* Hover effects */
.hero-showcase-wrapper:hover {
transform: translateY(-4px);
border-color: var(--md-accent-fg-color);
box-shadow: 0 12px 30px rgba(34, 211, 238, 0.15);
}
.hero-showcase-wrapper:hover .hero-showcase-image {
transform: scale(1.02); /* slightly reduced zoom to keep it elegant */
filter: brightness(1.05) contrast(1.02);
}
.hero-showcase-wrapper:hover .hero-showcase-footer {
border-top-color: rgba(34, 211, 238, 0.3);
background: rgba(34, 211, 238, 0.02) !important;
}
.hero-showcase-wrapper:hover .hero-showcase-badge {
background: var(--md-accent-fg-color);
color: #09090b;
box-shadow: 0 0 10px var(--md-accent-fg-color);
}
.hero-showcase-wrapper:hover .hero-showcase-caption {
color: var(--md-primary-fg-color);
}
/* Clickable Quote Card */
.quote-card-link {
display: block;
text-decoration: none !important;
color: inherit !important;
margin: 28px auto;
max-width: 1100px;
width: 100%;
}
.quote-card {
padding: 28px 36px;
border-radius: 14px;
border: 1px dashed rgba(34, 211, 238, 0.25);
background: rgba(34, 211, 238, 0.005);
position: relative;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
text-align: center;
}
[data-md-color-scheme="slate"] .quote-card {
background: rgba(34, 211, 238, 0.015);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
}
.quote-card::before {
content: '“';
position: absolute;
top: -10px;
left: 24px;
font-size: 4.5rem;
font-family: Georgia, serif;
color: rgba(34, 211, 238, 0.25);
line-height: 1;
}
.quote-card-text {
font-size: 1.15rem;
font-style: italic;
font-weight: 500;
line-height: 1.6;
margin-bottom: 10px;
color: var(--md-primary-fg-color);
transition: color 0.3s ease;
}
[data-md-color-scheme="slate"] .quote-card-text {
color: #e2e8f0;
}
.quote-card-author {
font-size: 0.85rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.12em;
color: var(--md-accent-fg-color);
transition: text-shadow 0.3s ease;
}
/* Quote Hover effects */
.quote-card-link:hover .quote-card {
transform: translateY(-2px);
border-style: solid;
border-color: var(--md-accent-fg-color);
background: rgba(34, 211, 238, 0.03) !important;
box-shadow: 0 8px 24px rgba(34, 211, 238, 0.18);
}
.quote-card-link:hover .quote-card-text {
color: #ffffff;
text-shadow: 0 0 10px rgba(255, 255, 255, 0.35);
}
.quote-card-link:hover .quote-card-author {
text-shadow: 0 0 8px rgba(34, 211, 238, 0.5);
}
/* ---------------------------------------------------- */
/* INTERACTIVE FILTER & SEARCH SYSTEM UI */
/* ---------------------------------------------------- */
.v2-filtered-hidden {
display: none !important;
}
.v2-filter-container {
margin: 24px 0 20px 0;
padding: 20px;
border-radius: 12px;
border: 1px solid rgba(0, 0, 0, 0.08);
background: rgba(244, 244, 245, 0.5); /* Zinc 100 translucent */
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
display: flex;
flex-direction: column;
gap: 16px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05);
transition: all 0.3s ease;
}
[data-md-color-scheme="slate"] .v2-filter-container {
border-color: rgba(34, 211, 238, 0.15);
background: rgba(24, 24, 27, 0.6); /* Zinc 900 translucent */
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);
}
.v2-search-wrapper {
position: relative;
display: flex;
align-items: center;
width: 100%;
}
.v2-search-input {
width: 100%;
padding: 12px 40px 12px 16px;
font-size: 0.85rem;
font-family: inherit;
border-radius: 8px;
border: 1px solid rgba(0, 0, 0, 0.15);
background: #ffffff;
color: var(--md-primary-fg-color);
transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
outline: none;
}
[data-md-color-scheme="slate"] .v2-search-input {
border-color: rgba(255, 255, 255, 0.08);
background: rgba(9, 9, 11, 0.7); /* Zinc 950 */
color: #ffffff;
}
.v2-search-input:focus {
border-color: var(--md-accent-fg-color);
box-shadow: 0 0 0 3px var(--md-accent-fg-color--transparent);
}
[data-md-color-scheme="slate"] .v2-search-input:focus {
border-color: var(--md-accent-fg-color);
box-shadow: 0 0 12px rgba(34, 211, 238, 0.25);
background: rgba(9, 9, 11, 0.9);
}
.v2-search-clear {
position: absolute;
right: 14px;
font-size: 1.4rem;
cursor: pointer;
color: var(--md-primary-fg-color--dark);
transition: color 0.2s ease;
user-select: none;
line-height: 1;
}
.v2-search-clear:hover {
color: var(--md-accent-fg-color);
}
.v2-tag-pills {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.v2-pill {
padding: 6px 12px;
font-size: 0.68rem;
font-weight: 700;
border-radius: 6px;
border: 1px solid rgba(0, 0, 0, 0.08);
background: rgba(0, 0, 0, 0.02);
color: var(--md-primary-fg-color--dark);
cursor: pointer;
transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
text-transform: uppercase;
letter-spacing: 0.05em;
font-family: inherit;
}
[data-md-color-scheme="slate"] .v2-pill {
border-color: rgba(255, 255, 255, 0.08);
background: rgba(255, 255, 255, 0.03);
color: rgba(255, 255, 255, 0.6);
}
.v2-pill:hover {
border-color: var(--md-accent-fg-color);
color: var(--md-primary-fg-color);
background: var(--md-accent-fg-color--transparent);
}
[data-md-color-scheme="slate"] .v2-pill:hover {
color: #ffffff;
text-shadow: 0 0 8px rgba(34, 211, 238, 0.3);
}
.v2-pill.active {
border-color: var(--md-accent-fg-color) !important;
color: #ffffff !important;
background: var(--md-accent-fg-color) !important;
box-shadow: 0 4px 10px rgba(14, 165, 233, 0.3);
}
[data-md-color-scheme="slate"] .v2-pill.active {
color: #09090b !important;
background: var(--md-accent-fg-color) !important;
box-shadow: 0 0 14px rgba(34, 211, 238, 0.4);
}
.v2-filter-stats {
display: flex;
justify-content: space-between;
font-size: 0.72rem;
color: var(--md-primary-fg-color--dark);
border-top: 1px solid rgba(0, 0, 0, 0.06);
padding-top: 12px;
margin-top: 4px;
}
[data-md-color-scheme="slate"] .v2-filter-stats {
border-top-color: rgba(255, 255, 255, 0.06);
}
.v2-visible-count, .v2-total-count {
color: var(--md-primary-fg-color);
font-weight: 700;
}
[data-md-color-scheme="slate"] .v2-visible-count,
[data-md-color-scheme="slate"] .v2-total-count {
color: #ffffff;
}
/* ---------------------------------------------------- */
/* V2 PREMIUM DYNAMIC EXPANSION */
/* ---------------------------------------------------- */
/* 1. Lazy Video Container Hover Animations */
.video-lazy-container {
position: relative;
transition: transform 0.35s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.35s ease;
}
.video-lazy-container:hover {
transform: translateY(-2px);
box-shadow: 0 10px 25px rgba(34, 211, 238, 0.2);
}
.video-lazy-container:hover .video-lazy-thumbnail {
opacity: 1 !important;
transform: scale(1.01);
}
.video-lazy-container:hover .video-lazy-play-btn {
background: var(--md-accent-fg-color) !important;
box-shadow: 0 0 18px var(--md-accent-fg-color);
transform: translate(-50%, -50%) scale(1.08);
}
.video-lazy-container:hover .video-lazy-play-btn svg {
fill: #09090b !important;
}
/* 2. Theme-Aware Mermaid Flowchart Styles */
.mermaid {
background-color: var(--md-primary-bg-color--light) !important;
border: 1px solid rgba(0, 0, 0, 0.06);
border-radius: 12px;
padding: 20px;
margin: 20px 0;
display: block;
transition: background-color 0.3s ease, border-color 0.3s ease;
}
[data-md-color-scheme="slate"] .mermaid {
background-color: var(--md-code-bg-color) !important;
border-color: rgba(255, 255, 255, 0.08);
}
[data-md-color-scheme="slate"] .mermaid svg {
filter: invert(0.9) hue-rotate(180deg) brightness(1.1);
}
/* 3. V2 Sparkline Path Drawing Animation */
.v2-sparkline {
overflow: visible !important;
}
.v2-sparkline-path {
stroke-dasharray: 120;
stroke-dashoffset: 120;
animation: v2-sparkline-draw 1.8s cubic-bezier(0.4, 0, 0.2, 1) forwards;
}
@keyframes v2-sparkline-draw {
to {
stroke-dashoffset: 0;
}
}
/* 4. Glassmorphic Code Copy Clipboard Button Overrides */
.highlight {
position: relative;
}
.md-clipboard {
position: absolute;
top: 8px;
right: 8px;
opacity: 0 !important;
transition: opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1), background-color 0.25s ease, border-color 0.25s ease, transform 0.2s ease !important;
background-color: rgba(9, 9, 11, 0.65) !important;
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
border: 1px solid rgba(255, 255, 255, 0.12) !important;
border-radius: 6px !important;
color: rgba(255, 255, 255, 0.75) !important;
cursor: pointer;
z-index: 5;
}
.highlight:hover .md-clipboard {
opacity: 1 !important;
}
.md-clipboard:hover {
background-color: var(--md-accent-fg-color) !important;
color: #09090b !important;
border-color: var(--md-accent-fg-color) !important;
transform: scale(1.06);
}
[data-md-color-scheme="slate"] .md-clipboard {
background-color: rgba(0, 0, 0, 0.55) !important;
}
/* ---------------------------------------------------- */
/* PERFORMANCE OPTIMIZATIONS FOR DENSE INDEXES */
/* ---------------------------------------------------- */
/* NOTE: `content-visibility: auto` was removed here (v2.9.2). It deferred
painting of off-screen <ul>/<ol> lists, which on the dark (slate) theme
produced black flashes while scrolling and made the link lists below the
index mosaic appear broken/collapsed (intrinsic-size mismatch caused
scrollbar jumps). The tags page already uses collapsed <details>, which
skip rendering natively, so the optimization was both redundant and
harmful. Do NOT reintroduce content-visibility on broad selectors. */
/* Collapsible tag lists on the tags index page */
.v2-tag-section details {
border: 1px solid rgba(0, 0, 0, 0.08);
border-radius: 8px;
margin: 12px 0 24px 0;
background: rgba(244, 244, 245, 0.3);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
overflow: hidden;
}
[data-md-color-scheme="slate"] .v2-tag-section details {
border-color: rgba(255, 255, 255, 0.08);
background: rgba(24, 24, 27, 0.4);
}
.v2-tag-section details[open] {
border-color: var(--md-accent-fg-color);
box-shadow: 0 4px 12px rgba(14, 165, 233, 0.08);
}
[data-md-color-scheme="slate"] .v2-tag-section details[open] {
box-shadow: 0 0 16px rgba(34, 211, 238, 0.12);
}
.v2-tag-section summary {
padding: 14px 20px;
font-weight: 600;
cursor: pointer;
user-select: none;
display: flex;
align-items: center;
justify-content: space-between;
outline: none;
transition: background-color 0.2s ease, color 0.2s ease;
}
.v2-tag-section summary:hover {
background-color: rgba(14, 165, 233, 0.05);
color: var(--md-accent-fg-color);
}
[data-md-color-scheme="slate"] .v2-tag-section summary:hover {
background-color: rgba(34, 211, 238, 0.04);
}
/* Custom indicator icon */
.v2-tag-section summary::after {
content: '▼';
font-size: 0.75rem;
transition: transform 0.3s ease;
color: var(--md-primary-fg-color--dark);
}
.v2-tag-section details[open] summary::after {
transform: rotate(-180deg);
color: var(--md-accent-fg-color);
}
/* Inner content area padding when expanded */
.v2-tag-section details > ul {
padding: 16px 24px 20px 24px !important;
margin: 0 !important;
border-top: 1px solid rgba(0, 0, 0, 0.06);
}
[data-md-color-scheme="slate"] .v2-tag-section details > ul {
border-top-color: rgba(255, 255, 255, 0.06);
}
/* ---------------------------------------------------- */
/* MODERN BROWSER-NATIVE CSS FEATURES */
/* ---------------------------------------------------- */
/* Typography Enhancements: Balanced headings & orphan prevention */
.md-typeset h1,
.md-typeset h2,
.md-typeset h3 {
text-wrap: balance;
}
.md-typeset p,
.md-typeset li {
text-wrap: pretty;
}
/* Textarea and input field auto-sizing */
textarea,
input[type="text"] {
field-sizing: content;
}
/* Keyboard focus accessibility indicators */
.md-typeset a:focus-visible,
.md-button:focus-visible,
.v2-tag-section summary:focus-visible {
outline: 2px solid var(--md-accent-fg-color);
outline-offset: 4px;
}
/* Coarse touch pointer optimizations (Mobile AA targets) */
@media (pointer: coarse) {
.md-tag,
.md-button,
.v2-tag-section summary {
min-block-size: 44px;
}
}
/* ---------------------------------------------------- */
/* ANNOUNCEMENT BAR */
/* ---------------------------------------------------- */
.md-banner {
background: linear-gradient(135deg, #0ea5e9, #22d3ee);
color: #ffffff;
font-weight: 500;
text-align: center;
padding: 8px 16px;
}
.md-banner a {
color: #ffffff;
text-decoration: underline;
font-weight: 700;
}
[data-md-color-scheme="slate"] .md-banner {
background: linear-gradient(135deg, #0284c7, #06b6d4);
}
/* ---------------------------------------------------- */
/* TRENDING NOW — NEWS DIGEST CARDS */
/* ---------------------------------------------------- */
.trending-section {
margin: 32px 0;
padding: 24px;
border-radius: 16px;
border: 1px solid rgba(14, 165, 233, 0.15);
background: linear-gradient(180deg, rgba(14, 165, 233, 0.03) 0%, transparent 100%);
}
[data-md-color-scheme="slate"] .trending-section {
border-color: rgba(34, 211, 238, 0.15);
background: linear-gradient(180deg, rgba(34, 211, 238, 0.05) 0%, transparent 100%);
}
.trending-section__title {
font-size: 1.4em;
font-weight: 700;
margin-bottom: 20px;
display: flex;
align-items: center;
gap: 8px;
flex-wrap: wrap;
}
.trending-section__updated {
font-size: 0.55em;
font-weight: 500;
padding: 2px 10px;
border-radius: 20px;
background: rgba(14, 165, 233, 0.12);
color: var(--md-accent-fg-color);
border: 1px solid rgba(14, 165, 233, 0.25);
letter-spacing: 0.02em;
}
.trending-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 16px;
margin: 16px 0;
}
/* --- Collapsible "Show more" lane (pure CSS, no JS) --- */
.trending-lane {
margin-bottom: 4px;
}
.trending-toggle {
position: absolute;
opacity: 0;
width: 0;
height: 0;
pointer-events: none;
}
.trending-card--extra {
display: none;
}
.trending-toggle:checked ~ .trending-grid .trending-card--extra {
display: block;
animation: trending-fade-in 0.25s ease;
}
@keyframes trending-fade-in {
from { opacity: 0; transform: translateY(6px); }
to { opacity: 1; transform: translateY(0); }
}
.trending-showmore {
display: inline-flex;
align-items: center;
gap: 6px;
margin-top: 2px;
padding: 7px 18px;
font-size: 0.8em;
font-weight: 600;
cursor: pointer;
user-select: none;
color: var(--md-accent-fg-color);
background: rgba(14, 165, 233, 0.08);
border: 1px solid rgba(14, 165, 233, 0.25);
border-radius: 20px;
transition: background 0.15s ease, transform 0.15s ease;
}
.trending-showmore:hover {
background: rgba(14, 165, 233, 0.16);
transform: translateY(-1px);
}
[data-md-color-scheme="slate"] .trending-showmore {
background: rgba(34, 211, 238, 0.10);
border-color: rgba(34, 211, 238, 0.25);
}
.trending-showmore__less {
display: none;
}
.trending-toggle:checked ~ .trending-showmore .trending-showmore__more {
display: none;
}
.trending-toggle:checked ~ .trending-showmore .trending-showmore__less {
display: inline;
}
.trending-card {
border: 1px solid rgba(0, 0, 0, 0.08);
border-radius: 12px;
padding: 16px 20px;
background: var(--md-primary-bg-color--light);
transition: transform 0.2s ease, box-shadow 0.2s ease;
position: relative;
overflow: hidden;
}
.trending-card:hover {
transform: translateY(-2px);
box-shadow: 0 8px 24px rgba(14, 165, 233, 0.12);
}
[data-md-color-scheme="slate"] .trending-card {
border-color: rgba(255, 255, 255, 0.08);
background: rgba(24, 24, 27, 0.4);
}
[data-md-color-scheme="slate"] .trending-card:hover {
box-shadow: 0 8px 24px rgba(34, 211, 238, 0.12);
}
.trending-card__category {
font-size: 0.75em;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--md-accent-fg-color);
margin-bottom: 8px;
}
.trending-card__title {
font-size: 0.95em;
font-weight: 600;
margin-bottom: 6px;
line-height: 1.3;
}
.trending-card__title a {
color: inherit;
text-decoration: none;
}
.trending-card__title a:hover {
color: var(--md-accent-fg-color);
}
.trending-card__meta {
font-size: 0.8em;
color: var(--md-primary-fg-color--dark);
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 8px;
}
.trending-card__why {
font-size: 0.82em;
line-height: 1.45;
color: var(--md-primary-fg-color--light);
}
.trending-card__impact {
/* In normal flow as a right-aligned pill on its own line, so a long celeste
category/title can never slide underneath it. `width: fit-content` keeps the
colored pill wrapped tightly around "CRITICAL"/"HIGH" + the optional NEW
pill; `margin-left: auto` pins it to the top-right corner. */
width: fit-content;
max-width: 100%;
margin-left: auto;
margin-bottom: 8px;
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 6px;
font-size: 0.75em;
font-weight: 700;
padding: 2px 8px;
border-radius: 6px;
}
.trending-card__impact--critical {
background: rgba(239, 68, 68, 0.15);
color: #ef4444;
}
.trending-card__impact--high {
background: rgba(245, 158, 11, 0.15);
color: #f59e0b;
}
.trending-card__impact--medium {
background: rgba(14, 165, 233, 0.15);
color: #0ea5e9;
}
.trending-card__new {
padding: 1px 6px;
border-radius: 6px;
font-size: 0.85em;
font-weight: 800;
letter-spacing: 0.03em;
background: rgba(16, 185, 129, 0.18);
color: #10b981;
}
/* Digest link cards (CTA to full digest pages) */
.digest-links {
display: flex;
gap: 16px;
margin-top: 20px;
flex-wrap: wrap;
}
.digest-link-card {
flex: 1;
min-width: 240px;
padding: 16px 24px;
border-radius: 12px;
border: 2px solid var(--md-accent-fg-color);
text-align: center;
text-decoration: none;
color: inherit;
font-weight: 600;
transition: all 0.2s ease;
}
.digest-link-card:hover {
background: var(--md-accent-fg-color);
color: #ffffff;
transform: translateY(-2px);
}
[data-md-color-scheme="slate"] .digest-link-card:hover {
color: #09090b;
}
/* ===================================================================
v2.9.16 — Home restructure: hero badge row, Topic Map grid,
mosaic labels, responsive video embeds
=================================================================== */
/* Hero badge row (was an inline flexbox style on the index) */
.hero-badge-row {
display: flex;
justify-content: center;
gap: 24px;
margin: 16px 0;
flex-wrap: wrap;
}
/* Indigo accent for the new Topic Map badge card */
.hero-badge-card--indigo {
border-color: rgba(99, 102, 241, 0.2);
background: rgba(99, 102, 241, 0.02);
}
.hero-badge-card--indigo:hover {
background: rgba(99, 102, 241, 0.06) !important;
box-shadow: 0 8px 24px rgba(99, 102, 241, 0.18);
border-color: #6366f1 !important;
}
/* Topic Map: full category directory as a multi-column grid.
CSS columns flow the per-dimension sections into 3 (then 2, then 1)
columns; break-inside keeps a dimension block intact across columns. */
.topic-map-grid {
column-count: 3;
column-gap: 2.5rem;
margin-top: 1.5rem;
}
.topic-map-dim {
break-inside: avoid;
-webkit-column-break-inside: avoid;
page-break-inside: avoid;
display: inline-block; /* helps WebKit honor break-inside */
width: 100%;
margin: 0 0 1.4rem;
}
.topic-map-dim h2 {
margin-top: 0;
font-size: 1.05rem;
}
/* ===================================================================
Slim quick-nav bar (rendered in the theme `tabs` block, below header)
Persistent one-click access to key destinations on every page.
=================================================================== */
.nb-quicknav {
background: var(--md-header-bg-color);
border-bottom: 1px solid color-mix(in srgb, var(--md-accent-fg-color) 22%, transparent);
}
.nb-quicknav__inner {
max-width: 1600px;
margin-inline: auto;
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center; /* centered rows read as a balanced command bar */
gap: 0.4rem 0.32rem;
padding-block: 0.5rem;
padding-inline: 0.7rem;
}
.nb-quicknav__link {
/* chip colors derived from the theme accent via color-mix (Chrome 111+) */
--nb-chip-bg: color-mix(in srgb, var(--md-accent-fg-color) 8%, transparent);
--nb-chip-bd: color-mix(in srgb, var(--md-accent-fg-color) 18%, transparent);
display: inline-flex;
align-items: center;
gap: 0.3em;
color: rgba(255, 255, 255, 0.82) !important;
text-decoration: none;
font-size: 0.62rem; /* sized so all pills + menus fit one row down to ~1280px */
font-weight: 600;
letter-spacing: 0.01em;
white-space: nowrap;
padding: 0.22rem 0.55rem;
border-radius: 999px;
background: var(--nb-chip-bg);
border: 1px solid var(--nb-chip-bd);
transition: background 0.18s ease, border-color 0.18s ease,
color 0.18s ease, transform 0.18s ease, box-shadow 0.18s ease;
}
.nb-quicknav__link:hover {
color: #fff !important;
background: color-mix(in srgb, var(--md-accent-fg-color) 32%, transparent);
border-color: var(--md-accent-fg-color);
transform: translateY(-1px);
box-shadow: 0 2px 10px color-mix(in srgb, var(--md-accent-fg-color) 40%, transparent);
}
.nb-quicknav__link:focus-visible {
outline: 2px solid var(--md-accent-fg-color);
outline-offset: 2px;
}
.nb-quicknav__link--muted {
opacity: 0.6;
}
.nb-quicknav__link--muted:hover {
opacity: 1;
}
/* ── Category menus: native Popover API + CSS Anchor Positioning (Baseline 2026)
The long-tail clusters collapse behind category buttons so the bar stays one
row. Opening is click-driven via the Popover API (free Esc / click-outside
dismissal + focus management); zero JS. ── */
.nb-quicknav__group {
display: inline-flex;
}
/* thin divider between the direct pills and the category menus */
.nb-quicknav__group:first-of-type {
margin-inline-start: 0.3rem;
padding-inline-start: 0.55rem;
border-inline-start: 1px solid color-mix(in srgb, var(--md-accent-fg-color) 18%, transparent);
}
.nb-quicknav__btn {
font-family: inherit;
cursor: pointer;
}
.nb-quicknav__caret {
font-size: 0.85em;
opacity: 0.75;
transition: transform 0.18s ease;
}
.nb-quicknav__group:has(.nb-quicknav__menu:popover-open) .nb-quicknav__caret {
transform: rotate(180deg);
}
/* Explicit anchor pairing per button↔menu — do NOT rely on the popover's
implicit anchor (it isn't established reliably, leaving the menu in its
static position over the button). */
[popovertarget="nb-pop-guide"] { anchor-name: --nb-a-guide; }
#nb-pop-guide { position-anchor: --nb-a-guide; }
[popovertarget="nb-pop-digest"] { anchor-name: --nb-a-digest; }
#nb-pop-digest { position-anchor: --nb-a-digest; }
[popovertarget="nb-pop-videos"] { anchor-name: --nb-a-videos; }
#nb-pop-videos { position-anchor: --nb-a-videos; }
[popovertarget="nb-pop-k8s"] { anchor-name: --nb-a-k8s; }
#nb-pop-k8s { position-anchor: --nb-a-k8s; }
[popovertarget="nb-pop-delivery"] { anchor-name: --nb-a-delivery; }
#nb-pop-delivery { position-anchor: --nb-a-delivery; }
[popovertarget="nb-pop-iac"] { anchor-name: --nb-a-iac; }
#nb-pop-iac { position-anchor: --nb-a-iac; }
[popovertarget="nb-pop-cloud"] { anchor-name: --nb-a-cloud; }
#nb-pop-cloud { position-anchor: --nb-a-cloud; }
[popovertarget="nb-pop-net"] { anchor-name: --nb-a-net; }
#nb-pop-net { position-anchor: --nb-a-net; }
[popovertarget="nb-pop-sec"] { anchor-name: --nb-a-sec; }
#nb-pop-sec { position-anchor: --nb-a-sec; }
[popovertarget="nb-pop-obs"] { anchor-name: --nb-a-obs; }
#nb-pop-obs { position-anchor: --nb-a-obs; }
[popovertarget="nb-pop-aidata"] { anchor-name: --nb-a-aidata; }
#nb-pop-aidata { position-anchor: --nb-a-aidata; }
[popovertarget="nb-pop-dev"] { anchor-name: --nb-a-dev; }
#nb-pop-dev { position-anchor: --nb-a-dev; }
[popovertarget="nb-pop-more"] { anchor-name: --nb-a-more; }
#nb-pop-more { position-anchor: --nb-a-more; }
/* nested submenus anchor to their in-menu trigger */
[popovertarget="nb-pop-aws"] { anchor-name: --nb-a-aws; }
#nb-pop-aws { position-anchor: --nb-a-aws; }
[popovertarget="nb-pop-ocp"] { anchor-name: --nb-a-ocp; }
#nb-pop-ocp { position-anchor: --nb-a-ocp; }
.nb-quicknav__menu {
inset: auto; /* reset the UA-centered popover defaults */
margin: 0;
max-height: 82vh; /* tall menus (e.g. Kubernetes) scroll instead of overflowing */
overflow-y: auto;
overscroll-behavior: contain;
/* drop below the invoking button, left-aligned. NB: position-area values must
be all-physical or all-logical — mixing (e.g. `bottom span-inline-end`) is
invalid and silently computes to `none`, leaving the menu over the button. */
position-area: bottom span-right;
/* Only flip horizontally near the right edge. NEVER flip-block: the quick-nav
is a sticky top bar, so a tall menu flipped above would shoot off-screen. */
position-try-fallbacks: flip-inline;
margin-block-start: 0.45rem;
min-width: 9.5rem;
padding: 0.35rem;
display: flex;
flex-direction: column;
gap: 0.1rem;
border: 1px solid color-mix(in srgb, var(--md-accent-fg-color) 30%, transparent);
border-radius: 0.6rem;
background: color-mix(in srgb, var(--md-header-bg-color) 86%, #000);
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.45);
/* entry/exit animation across the display toggle */
opacity: 0;
transform: translateY(-4px);
transition: opacity 0.16s ease, transform 0.16s ease,
overlay 0.16s allow-discrete, display 0.16s allow-discrete;
}
.nb-quicknav__menu:popover-open {
opacity: 1;
transform: translateY(0);
}
@starting-style {
.nb-quicknav__menu:popover-open {
opacity: 0;
transform: translateY(-4px);
}
}
.nb-quicknav__menu a {
display: block;
padding: 0.34rem 0.6rem;
border-radius: 0.4rem;
color: rgba(255, 255, 255, 0.86);
text-decoration: none;
font-size: 0.72rem;
font-weight: 600;
white-space: nowrap;
transition: background 0.14s ease, color 0.14s ease;
}
.nb-quicknav__menu a:hover,
.nb-quicknav__menu a:focus-visible {
background: color-mix(in srgb, var(--md-accent-fg-color) 30%, transparent);
color: #fff;
outline: none;
}
.nb-quicknav__menu-muted {
opacity: 0.62;
margin-block-start: 0.15rem;
padding-block-start: 0.42rem !important;
border-block-start: 1px solid rgba(255, 255, 255, 0.1);
}
/* Two-column layout for long menus (e.g. Kubernetes, 22 items) so they stay
short enough to show in full WITHOUT a scrollbar — the scrollable tall popover
was unreliable. Multicol is column-major, so reading order is preserved. */
/* Deterministic 2-column layout (column-major grid) so the menu height equals
the row count exactly — no balancing remainder, hence no stray scrollbar.
11 rows × 2 cols fits the 22 top-level Kubernetes entries. */
.nb-quicknav__menu--cols {
display: grid;
grid-auto-flow: column;
grid-template-rows: repeat(11, auto);
grid-template-columns: repeat(2, minmax(0, 1fr));
column-gap: 0.4rem;
min-width: 22rem;
/* a 2-column menu (~370px) always fits below the sticky bar, so never
scroll — avoids the sub-pixel grid/overflow scrollbar entirely */
max-height: none;
overflow: visible;
}
/* the submenu wrapper must be a real block (not display:contents) so its
trigger occupies one grid cell cleanly */
.nb-quicknav__menu--cols .nb-quicknav__subwrap {
display: block;
}
/* ── Nested submenu (e.g. Cloud → AWS ▸ → AWS pages) ──
A second-level popover invoked from inside a menu. The trigger looks like a
menu item; the submenu opens to the side (inline-end) of the trigger, with a
flip fallback so it never leaves the viewport. Popover nesting keeps the
parent menu open while the submenu is shown. */
.nb-quicknav__subwrap { display: contents; }
.nb-quicknav__subtrigger {
display: flex;
align-items: center;
justify-content: space-between;
gap: 0.6rem;
width: 100%;
padding: 0.34rem 0.6rem;
border: none;
border-radius: 0.4rem;
background: none;
color: rgba(255, 255, 255, 0.86);
font-family: inherit;
font-size: 0.72rem;
font-weight: 600;
text-align: left;
white-space: nowrap;
cursor: pointer;
transition: background 0.14s ease, color 0.14s ease;
}
.nb-quicknav__subtrigger:hover,
.nb-quicknav__subtrigger:focus-visible {
background: color-mix(in srgb, var(--md-accent-fg-color) 30%, transparent);
color: #fff;
outline: none;
}
.nb-quicknav__subwrap:has(.nb-quicknav__submenu:popover-open) .nb-quicknav__caret {
transform: rotate(0); /* caret is a side-arrow ▸, keep it static */
}
.nb-quicknav__submenu {
/* Open to the RIGHT of the trigger, top-aligned. position-area's horizontal
axis isn't honored reliably when the anchor lives inside another popover,
so place explicitly with anchor(): left edge at the trigger's right edge. */
position-area: none;
top: anchor(top);
left: anchor(right);
right: auto;
bottom: auto;
position-try-fallbacks: flip-inline;
margin-block-start: 0;
margin-inline-start: 0.35rem;
}
@media (prefers-reduced-motion: reduce) {
.nb-quicknav__link,
.nb-quicknav__caret,
.nb-quicknav__menu { transition: none; }
.nb-quicknav__link:hover { transform: none; }
}
/* On phones the left drawer already exposes navigation; one scrollable row. */
@media screen and (max-width: 44.9375em) {
.nb-quicknav__inner {
flex-wrap: nowrap;
justify-content: flex-start;
overflow-x: auto;
scrollbar-width: none; /* Firefox */
}
.nb-quicknav__inner::-webkit-scrollbar { display: none; } /* WebKit/Blink */
}
.topic-map-dim ul {
margin-top: 0.3rem;
}
.topic-count {
display: inline-block;
margin-left: 0.35rem;
padding: 0 0.45rem;
font-size: 0.68rem;
font-weight: 600;
line-height: 1.4;
border-radius: 10px;
color: var(--md-default-fg-color--light);
background: var(--md-default-fg-color--lightest);
vertical-align: middle;
}
@media screen and (max-width: 76.1875em) {
.topic-map-grid { column-count: 2; }
}
@media screen and (max-width: 44.9375em) {
.topic-map-grid { column-count: 1; }
}
/* ===================================================================
Topic Map: Resource Density Heatmap
A true colour matrix (distinct from the size-based Label cloud). Each
category is a tile whose warmth (.th-1..6) encodes resource density,
grouped by strategic dimension. Generated by v2_optimizer.py.
=================================================================== */
.topic-heatmap {
margin: 1rem 0 2rem;
padding: 1.1rem 1.2rem 1.3rem;
border: 1px solid rgba(38, 50, 56, 0.12);
border-radius: 10px;
background: rgba(38, 50, 56, 0.04);
}
[data-md-color-scheme="slate"] .topic-heatmap {
background: rgba(255, 255, 255, 0.03);
border-color: rgba(255, 255, 255, 0.1);
}
.topic-heatmap__legend {
display: flex;
align-items: center;
gap: 0.3rem;
margin-bottom: 1rem;
font-size: 0.7rem;
font-weight: 600;
letter-spacing: 0.03em;
color: var(--md-default-fg-color--light);
}
.topic-heatmap__legend .topic-heatcell {
width: 26px;
height: 14px;
padding: 0;
border-radius: 3px;
}
.topic-heatmap__cap { text-transform: uppercase; opacity: 0.7; }
.topic-heatmap__row {
display: grid;
grid-template-columns: 190px 1fr;
gap: 0.5rem 1rem;
align-items: start;
padding: 0.6rem 0;
border-top: 1px solid rgba(38, 50, 56, 0.08);
}
[data-md-color-scheme="slate"] .topic-heatmap__row {
border-top-color: rgba(255, 255, 255, 0.07);
}
.topic-heatmap__row:first-of-type { border-top: none; padding-top: 0; }
.topic-heatmap__dim {
font-size: 0.78rem;
font-weight: 700;
line-height: 1.25;
padding-top: 0.25rem;
color: var(--md-default-fg-color);
}
.topic-heatmap__cells {
display: flex;
flex-wrap: wrap;
gap: 0.35rem;
}
.topic-heatcell {
display: inline-flex;
align-items: center;
gap: 0.3em;
padding: 0.28rem 0.5rem;
border-radius: 5px;
font-size: 0.7rem;
font-weight: 600;
line-height: 1.2;
text-decoration: none;
color: #1a2327;
transition: transform 0.12s ease, box-shadow 0.12s ease;
}
.topic-heatcell:hover {
transform: translateY(-2px);
box-shadow: 0 3px 9px rgba(0, 0, 0, 0.18);
}
.topic-heatcell__n {
font-size: 0.62em;
font-weight: 700;
opacity: 0.7;
}
/* Sequential warmth ramp: th-1 = sparsest, th-6 = densest. */
.th-1 { background: #e3f2fd; }
.th-2 { background: #ffe0b2; }
.th-3 { background: #ffcc80; }
.th-4 { background: #ffa726; }
.th-5 { background: #fb8c00; color: #fff; }
.th-6 { background: #e64a19; color: #fff; }
[data-md-color-scheme="slate"] .th-1 { background: #2d4456; color: #d7e3ea; }
[data-md-color-scheme="slate"] .th-2 { background: #6d4c1f; color: #f5e7d3; }
[data-md-color-scheme="slate"] .th-3 { background: #97601f; color: #fff3e0; }
[data-md-color-scheme="slate"] .th-4 { background: #c2701a; color: #fff; }
[data-md-color-scheme="slate"] .th-5 { background: #e2701a; color: #fff; }
[data-md-color-scheme="slate"] .th-6 { background: #ff5722; color: #fff; }
@media screen and (max-width: 44.9375em) {
.topic-heatmap__row { grid-template-columns: 1fr; gap: 0.35rem; }
.topic-heatmap__dim { padding-top: 0; }
}
/* Visible label for each YouTube mosaic category block (was hidden in title=) */
.mosaic-cat-label {
margin: 0 0 0.5rem;
padding-left: 0.55rem;
border-left: 3px solid var(--cat-color, #64748b);
font-size: 0.72rem;
font-weight: 700;
letter-spacing: 0.04em;
text-transform: uppercase;
color: var(--md-default-fg-color--light);
text-align: left;
}
/* Responsive, privacy-friendly video embeds (about page) */
.video-embed-grid {
display: flex;
justify-content: center;
gap: 16px;
flex-wrap: wrap;
margin: 24px 0;
}
.video-embed {
flex: 1 1 420px;
max-width: 480px;
aspect-ratio: 16 / 9;
}
.video-embed iframe {
width: 100%;
height: 100%;
border: 0;
border-radius: 8px;
}