Files
hyperframes/docs/custom.css
T
ukimsanov bbe625f9b7 docs: remove the black band around the hero film
The wrapper measured 609px tall against a 545px film - the theme's prose styles
apply a 2em margin to media, which rendered as a 64px black band above and below
it. Zeroed the margin inside the hero wrapper.
2026-07-29 15:34:26 -07:00

702 lines
18 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.
/* HyperFrames Design System — Mintlify Theme Overrides */
@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&display=swap');
/* ── TT Norms Pro (matches hyperframes.heygen.com) ── */
@font-face {
font-family: 'TT Norms Pro';
src: url('https://www-static-assets.heygen.com/fonts/tt-norms/TT_Norms_Pro_Normal.woff2') format('woff2');
font-weight: 400;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'TT Norms Pro';
src: url('https://www-static-assets.heygen.com/fonts/tt-norms/TT_Norms_Pro_Medium.woff2') format('woff2');
font-weight: 500;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'TT Norms Pro';
src: url('https://www-static-assets.heygen.com/fonts/tt-norms/TT_Norms_Pro_DemiBold.woff2') format('woff2');
font-weight: 600;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'TT Norms Pro';
src: url('https://www-static-assets.heygen.com/fonts/tt-norms/TT_Norms_Pro_Bold.woff2') format('woff2');
font-weight: 700;
font-style: normal;
font-display: swap;
}
/* ── Light mode (default) ── */
/*
* NOTE: All custom variables are namespaced with `--hf-` to avoid
* colliding with Mintlify's Tailwind color system, which owns names
* like `--background-light` / `--background-dark` and uses them via
* `rgb(var(--background-light)/<alpha>)`. Overriding those with hex
* values breaks the rgb() call and makes surfaces transparent (e.g.
* the "Copy page" dropdown panel in light mode).
*/
:root {
--hf-background: #f6f5f1;
--hf-background-light: #ffffff;
--hf-surface2: #eeedea;
--hf-border-color: #e0dfdb;
--hf-border-color-light: #d0cfcb;
--hf-text: #1a1a1a;
--hf-text-secondary: #6b6b6b;
--hf-text-tertiary: #999999;
--hf-heading: #0a0a0a;
--hf-code-bg: #ffffff;
--hf-ui-border: #eeeeee;
--hf-sidebar-rail: #eeeeee;
--hf-sidebar-text: #707070;
--hf-floating-input-shadow: 0 8px 28px rgba(10, 10, 10, 0.08), 0 1px 4px rgba(10, 10, 10, 0.08);
--mintlify-slot-header-height: 3.5rem;
--hf-accent-green: #1a7a0a;
--hf-accent-green-light: rgba(26, 122, 10, 0.07);
--hf-accent-green-border: rgba(26, 122, 10, 0.25);
--hf-accent-blue: #2563eb;
--hf-accent-blue-light: rgba(37, 99, 235, 0.06);
--hf-accent-blue-border: rgba(37, 99, 235, 0.2);
--hf-accent-purple: #7c3aed;
--hf-accent-purple-light: rgba(124, 58, 237, 0.06);
--hf-accent-purple-border: rgba(124, 58, 237, 0.2);
--hf-selection-bg: rgba(128, 128, 128, 0.2);
}
/* ── Dark mode ── */
.dark,
[data-theme="dark"] {
--hf-background: #0a0a0a;
--hf-background-light: #141414;
--hf-surface2: #1a1a1a;
--hf-border-color: #2a2a2a;
--hf-border-color-light: #3a3a3a;
--hf-text: #e5e5e5;
--hf-text-secondary: #a0a0a0;
--hf-text-tertiary: #666666;
--hf-heading: #f5f5f5;
--hf-code-bg: #141414;
--hf-ui-border: #2a2a2a;
--hf-sidebar-rail: #2a2a2a;
--hf-sidebar-text: #a0a0a0;
--hf-floating-input-shadow: 0 8px 28px rgba(0, 0, 0, 0.4), 0 1px 4px rgba(0, 0, 0, 0.4);
--hf-accent-green: #22c55e;
--hf-accent-green-light: rgba(34, 197, 94, 0.1);
--hf-accent-green-border: rgba(34, 197, 94, 0.3);
--hf-accent-blue: #3b82f6;
--hf-accent-blue-light: rgba(59, 130, 246, 0.1);
--hf-accent-blue-border: rgba(59, 130, 246, 0.3);
--hf-accent-purple: #a78bfa;
--hf-accent-purple-light: rgba(167, 139, 250, 0.1);
--hf-accent-purple-border: rgba(167, 139, 250, 0.3);
--hf-selection-bg: rgba(255, 255, 255, 0.15);
}
/* ── Typography ── */
body {
font-family: 'TT Norms Pro', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
}
h1, h2, h3, h4, h5, h6 {
font-family: 'TT Norms Pro', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
}
h1, h2 {
letter-spacing: -0.02em;
}
h3 {
letter-spacing: -0.01em;
}
/* ── Content width ──
*
* The theme caps the article shell at max-w-6xl (72rem) and reserves 28rem of
* every wide viewport for the table of contents, which left the actual reading
* column at ~664px on a 1600px screen. That is too narrow for a product whose
* pages carry 16:9 video: a full-width clip rendered smaller than a phone held
* sideways. These raise the shell and hand ~9rem back from the TOC gutter,
* taking the column to roughly 950px.
*
* ID selectors deliberately: they outrank the theme's utility classes without
* needing !important, so the cascade stays debuggable. */
@media (min-width: 1280px) {
/* The binding constraint. The left sidebar sits inside #body-content, so its
* max-w-8xl (1472px) cap was the real limit: 1432 inner − 287 sidebar = 1144,
* then −128 shell padding = 1016, then −352 for the contents rail and gap,
* which is exactly the 664px column we measured. */
#body-content {
max-width: 110rem;
}
/* Let the shell use what #body-content now offers, and reclaim some of the
* generous left padding. Setting a width on #content-area itself does
* nothing — it is a flex item with grow, so it simply fills what is left. */
#content-container {
max-width: none;
padding-left: 2.5rem;
}
/* The contents rail only ever renders ~256px of text. */
#content-side-layout {
max-width: 16rem;
}
}
/* No paragraph measure cap. It was tried and removed: these pages are built
* almost entirely from lists, tables, cards, and code blocks — a whole guide
* carries about three <p> elements — so capping paragraph width changed nothing
* measurable while adding a rule that looked meaningful. If long lines ever do
* become a problem, cap the structural containers rather than <p>. */
/* Media that should escape any inherited measure. Use on a Frame or a bare
* video/image wrapper when the visual is the point of the section. */
.hf-wide {
width: 100%;
max-width: none;
}
/* ── Hero media ──
*
* For the one visual on a page that is the argument, not an illustration.
* Reaches into the shell's horizontal padding so the frame reads as edge to
* edge rather than as a figure inside an article. Deliberately not 100vw: this
* column is not centred in the viewport (the sidebar is a flex sibling), so
* the usual `margin-left: calc(50% - 50vw)` trick would push it off-centre. */
.hf-hero {
margin: 0 -1.25rem 0.75rem;
overflow: hidden;
border-radius: 12px;
background: #000;
line-height: 0;
}
.hf-hero video,
.hf-hero img {
display: block;
width: 100%;
height: auto;
/* The theme's prose styles put a 2em margin on media, which showed up as a
* 64px black band above and below the film inside this wrapper. */
margin: 0;
}
@media (min-width: 1280px) {
.hf-hero {
margin-left: -2.5rem;
margin-right: -2.5rem;
border-radius: 14px;
}
}
/* Caption for a hero: quiet, and it sits with the media rather than boxed. */
.hf-hero-caption {
margin: 0 0 2rem;
font-size: 0.875rem;
color: var(--hf-text-muted, #8b8b8b);
}
/* Code font — IBM Plex Mono (loaded via Google Fonts above).
*
* Deliberately scoped to real code elements. The previous rule also matched
* [class*="code"] / [class*="Code"], which caught any element whose class
* merely contained that substring — including every Accordion, whose wrapper
* carries the Tailwind utility `dark:bg-codeblock`. That set the whole
* accordion (and, by inheritance, its title and prose) in monospace, so plain
* sentences rendered like terminal output. Syntax tokens inside `pre` inherit
* from `pre`, so they do not need a selector of their own. */
code, pre, pre code, kbd, samp {
font-family: 'IBM Plex Mono', 'SF Mono', 'Fira Code', monospace;
}
/* ── Code blocks ── */
pre {
background: var(--hf-code-bg) !important;
border: 1px solid var(--hf-border-color) !important;
border-radius: 8px !important;
}
/* ── Selection ── */
::selection {
background: var(--hf-selection-bg);
}
/* ── Links ── */
a:not([class]) {
color: var(--hf-accent-blue);
}
a:not([class]):hover {
opacity: 0.85;
}
/* ── Documentation navigation ── */
/*
* Keep Aspen's full-width header, but place its desktop controls on one row:
* logo → section tabs → search → actions. Mobile keeps Mintlify's layout.
*/
@media (min-width: 1024px) {
#navbar {
height: 3.5rem;
}
#navbar > div:has(.nav-tabs) {
display: grid;
grid-template-columns: max-content max-content minmax(10.25rem, 1fr) max-content;
column-gap: 1rem;
align-items: center;
height: 3.5rem;
}
#navbar > div:has(.nav-tabs) > .relative,
#navbar > div:has(.nav-tabs) > .relative > div:first-child,
#navbar > div:has(.nav-tabs) > .relative > div:first-child > div:first-child {
display: contents;
}
#navbar > div:has(.nav-tabs) > .relative > div:first-child > div:first-child > div:first-child {
grid-column: 1;
grid-row: 1;
}
#navbar div:has(> .nav-tabs) {
grid-column: 2;
grid-row: 1;
height: 3.5rem;
padding: 0;
}
#navbar .nav-tabs {
align-items: center;
height: 3.5rem;
}
#navbar div:has(> #search-bar-entry) {
grid-column: 3;
grid-row: 1;
min-width: 0;
}
#navbar .topbar-right-container {
grid-column: 4;
grid-row: 1;
}
#sidebar-content {
top: 3.5rem !important;
height: calc(100vh - 3.5rem) !important;
}
/* Keep the repository compact, but retain its useful live star count. */
#navbar a[title="heygen-com/hyperframes"] {
width: 7.5rem;
min-width: 7.5rem;
height: 2.25rem;
padding: 0 0.75rem;
justify-content: center;
}
#navbar a[title="heygen-com/hyperframes"] > span.truncate {
display: none;
}
#navbar a[title="heygen-com/hyperframes"] > span:not(.truncate) {
display: flex !important;
color: var(--hf-heading);
font-variant-numeric: tabular-nums;
}
/*
* Mintlify removes the live count for roughly one animation frame during
* client-side navigation. Keep the last known value in its place so the
* control neither collapses nor flashes empty.
*/
#navbar a[title="heygen-com/hyperframes"]:not(:has(> span:not(.truncate)))::after {
color: var(--hf-heading);
content: "★ 38,440";
font-variant-numeric: tabular-nums;
}
}
/* Preserve a useful search field on smaller desktop widths. */
@media (min-width: 1024px) and (max-width: 1199px) {
#navbar #assistant-entry {
display: none;
}
}
/* Use main's quieter structural border color across Aspen surfaces. */
#body-content [class*="border-gray-200"],
#body-content [class*="border-gray-100"] {
border-color: var(--hf-ui-border) !important;
}
/* Keep the floating agent input noticeable against the page background. */
#body-content .chat-assistant-floating-input > div > div {
border-color: var(--hf-border-color-light) !important;
background-color: var(--hf-background-light) !important;
box-shadow: var(--hf-floating-input-shadow);
}
/*
* Match the navigation rhythm and active-page rail used on the main docs.
* Each link owns one rail segment, so the current page can highlight only
* its segment. These rules are visual only; groups remain non-collapsible.
*/
#navigation-items .sidebar-group-header {
color: var(--hf-text);
font-size: 0.875rem;
font-weight: 500;
line-height: 1.25rem;
}
#navigation-items .sidebar-group {
padding-left: 0;
}
#navigation-items .sidebar-group::before {
content: none;
}
#navigation-items .sidebar-group > li {
margin-bottom: 0;
}
#navigation-items .sidebar-group > li + li {
margin-top: 0 !important;
}
#navigation-items .sidebar-group > li > a {
width: calc(100% - 1rem);
margin-left: 1rem;
padding: 0.375rem 0.75rem 0.375rem 1rem;
border-left: 1px solid var(--hf-sidebar-rail);
border-radius: 0;
background: transparent !important;
color: var(--hf-sidebar-text);
}
#navigation-items .sidebar-group > li > a:hover {
background: transparent !important;
color: var(--hf-heading);
}
#navigation-items .sidebar-group > li[data-active='true'] > a,
#navigation-items .sidebar-group > li[data-active-nav-item='true'] > a,
#navigation-items .sidebar-group > li > a[aria-current='page'] {
border-left-color: currentColor;
color: var(--hf-heading);
}
/* Aspen inserts horizontal separators; main uses the same space without a rule. */
#navigation-items div:has(> .sidebar-group) + div {
height: 2rem;
padding: 0;
}
#navigation-items div:has(> .sidebar-group) + div > * {
display: none;
}
/*
* Aspen assumes a 96px header and fades scrolled navigation before it reaches
* that boundary. Our header is 56px; align the sticky sidebar to it and let
* links clip exactly at the header instead of disappearing early.
*/
#navigation-items,
#navigation-items [data-id] {
-webkit-mask-image: none !important;
mask-image: none !important;
}
/* Catalog texture examples */
.hf-texture-preview-panel {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 12px;
margin: 24px 0 40px;
}
.hf-texture-preview-card {
min-width: 0;
border: 1px solid rgba(127, 127, 127, 0.22);
border-radius: 8px;
padding: 16px;
background: #101010;
}
.hf-texture-preview-label {
margin-bottom: 12px;
color: rgba(255, 255, 255, 0.6);
font-size: 12px;
line-height: 1.2;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.hf-texture-preview-shadow {
filter: drop-shadow(1px 2px 1px rgba(0, 0, 0, 0.48));
}
.hf-texture-preview-word {
color: #fff;
font-family: Impact, 'Arial Black', sans-serif;
font-size: 42px;
line-height: 0.9;
letter-spacing: 0;
text-align: center;
text-transform: uppercase;
white-space: nowrap;
-webkit-mask-image: var(--mask-url);
mask-image: var(--mask-url);
-webkit-mask-size: cover;
mask-size: cover;
-webkit-mask-position: center;
mask-position: center;
-webkit-mask-mode: luminance;
mask-mode: luminance;
}
.hf-texture-animate-demo {
border: 1px solid rgba(127, 127, 127, 0.22);
border-radius: 8px;
padding: 22px;
margin: 20px 0 24px;
background:
linear-gradient(90deg, rgba(255, 255, 255, 0.54) 1px, transparent 1px),
#f1f1f1;
background-size: 44px 100%;
}
.hf-texture-animate-meta {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
margin-bottom: 18px;
}
.hf-texture-animate-label {
min-width: 0;
color: rgba(24, 24, 24, 0.62);
font-size: 13px;
line-height: 1.2;
}
.hf-texture-animate-class {
max-width: 62%;
padding: 2px 6px;
border: 1px solid rgba(24, 24, 24, 0.12);
border-radius: 6px;
background: rgba(255, 255, 255, 0.5);
color: rgba(24, 24, 24, 0.78);
font-size: 11px;
line-height: 1.3;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.hf-texture-animate-shadow {
filter: drop-shadow(1px 2px 1px rgba(0, 0, 0, 0.48));
}
.hf-texture-animate-word {
color: #181818;
font-family: Impact, 'Arial Black', sans-serif;
font-size: 92px;
line-height: 0.9;
letter-spacing: 0;
text-align: center;
text-transform: uppercase;
white-space: nowrap;
-webkit-mask-image: var(--mask-url);
mask-image: var(--mask-url);
-webkit-mask-size: 180% 180%;
mask-size: 180% 180%;
-webkit-mask-position: 0% 50%;
mask-position: 0% 50%;
-webkit-mask-mode: luminance;
mask-mode: luminance;
animation: hf-texture-mask-pan 2.1s ease-in-out infinite alternate;
}
@keyframes hf-texture-mask-pan {
from {
-webkit-mask-position: 0% 50%;
mask-position: 0% 50%;
}
to {
-webkit-mask-position: 100% 50%;
mask-position: 100% 50%;
}
}
.hf-texture-example-groups {
display: grid;
gap: 32px;
margin: 20px 0 40px;
}
.hf-texture-example-title {
margin: 0 0 10px;
font-size: 14px;
font-weight: 600;
}
.hf-texture-example-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(min(100%, 320px), 1fr));
gap: 16px;
}
.hf-texture-example-card {
border: 1px solid rgba(127, 127, 127, 0.22);
border-radius: 8px;
padding: 20px;
background: #f1f1f1;
}
.hf-texture-example-meta {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
margin-bottom: 14px;
}
.hf-texture-example-label {
min-width: 0;
color: rgba(24, 24, 24, 0.62);
font-size: 13px;
line-height: 1.2;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.hf-texture-example-class {
max-width: 62%;
padding: 2px 6px;
border: 1px solid rgba(24, 24, 24, 0.12);
border-radius: 6px;
background: rgba(255, 255, 255, 0.5);
color: rgba(24, 24, 24, 0.78);
font-size: 11px;
line-height: 1.3;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.hf-texture-example-shadow {
filter: drop-shadow(1px 2px 1px rgba(0, 0, 0, 0.48));
}
.hf-texture-example-word {
color: #181818;
font-family: Impact, 'Arial Black', sans-serif;
font-size: 54px;
line-height: 0.9;
letter-spacing: 0;
text-align: center;
text-transform: uppercase;
white-space: nowrap;
-webkit-mask-image: var(--mask-url);
mask-image: var(--mask-url);
-webkit-mask-size: cover;
mask-size: cover;
-webkit-mask-position: center;
mask-position: center;
-webkit-mask-mode: luminance;
mask-mode: luminance;
}
.hf-texture-example-usage {
display: flex;
align-items: flex-start;
gap: 6px;
min-width: 0;
margin-top: 14px;
padding-top: 12px;
border-top: 1px solid rgba(24, 24, 24, 0.1);
color: rgba(24, 24, 24, 0.56);
font-size: 12px;
line-height: 1.3;
}
.hf-texture-example-usage code {
min-width: 0;
color: rgba(24, 24, 24, 0.82);
font-size: 11px;
line-height: 1.3;
white-space: normal;
overflow-wrap: anywhere;
}
@media (max-width: 860px) {
.hf-texture-preview-panel {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media (max-width: 520px) {
.hf-texture-preview-panel {
grid-template-columns: 1fr;
}
.hf-texture-preview-word {
font-size: 40px;
}
.hf-texture-animate-meta {
align-items: flex-start;
flex-direction: column;
}
.hf-texture-animate-class {
max-width: 100%;
}
.hf-texture-animate-word {
font-size: 56px;
}
}
@media (prefers-reduced-motion: reduce) {
.hf-texture-animate-word {
animation: none;
}
}
/* Hide the section/group label ("Start here", etc.) that the theme renders
* above every page title. It repeats the sidebar grouping and adds noise on
* every page; each page leads with its own H1 instead. */
.eyebrow {
display: none;
}