Files

2410 lines
51 KiB
CSS
Raw Permalink 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.
@import "tailwindcss";
@import "fumadocs-ui/css/ocean.css";
@import "fumadocs-ui/css/preset.css";
/* 路由跳转进度条(nprogress 风格),挂在语言布局 body 顶部 */
.route-progress-bar {
position: fixed;
top: 0;
left: 0;
right: 0;
height: 2.5px;
z-index: 90;
transform-origin: 0 50%;
transform: scaleX(0);
opacity: 0;
background: linear-gradient(90deg, var(--color-landing-sky), var(--color-landing-blue));
box-shadow: 0 0 10px rgba(82, 213, 255, 0.5);
pointer-events: none;
transition:
transform 0.12s ease,
opacity 0.22s ease;
}
/* 文档页右下角赞助悬浮卡片入场动画 */
@keyframes sponsor-card-in {
from {
opacity: 0;
transform: translateY(8px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.sponsor-card-in {
animation: sponsor-card-in 0.3s ease-out both;
}
@theme {
--color-landing-bg: #161616;
--color-landing-ink: #ededf0;
--color-landing-muted: #9c9ea3;
--color-landing-blue: #6ea8ff;
--color-landing-sky: #52d5ff;
--color-landing-green: #44d19d;
--color-landing-line: rgba(173, 176, 182, 0.18);
--color-landing-soft: rgba(255, 255, 255, 0.05);
--color-landing-panel: rgba(36, 37, 40, 0.84);
--color-landing-panel-strong: rgba(43, 44, 48, 0.94);
}
:root {
--color-fd-background: #fafafa;
--color-fd-foreground: #0a0a0a;
--color-fd-muted: #f5f5f5;
--color-fd-muted-foreground: #737373;
--color-fd-popover: #fff;
--color-fd-popover-foreground: #272727;
--color-fd-card: #fefefe;
--color-fd-card-foreground: #0a0a0a;
--color-fd-border: #9993;
--color-fd-primary: #171717;
--color-fd-primary-foreground: #fafafa;
--color-fd-secondary: #f5f5f5;
--color-fd-secondary-foreground: #171717;
--color-fd-accent: #f0f0f0;
--color-fd-accent-foreground: #171717;
--color-fd-ring: #a3a3a3;
--dbx-surface: #fefefe;
--dbx-surface-soft: #f7f7f7;
--dbx-line: var(--color-fd-border);
--dbx-blue: #171717;
--dbx-sky: #737373;
--dbx-green: #525252;
--dbx-code-bg: #0a0a0a;
}
/* 深色版整体比亮色版抬一档:底色对齐 landing 的 --color-landing-bg,
其余灰阶按同样的 +17 平移,保持 fumadocs 原有的层级关系。 */
.dark {
--color-fd-background: #161616;
--color-fd-foreground: #fafafa;
--color-fd-muted: #252525;
--color-fd-muted-foreground: #999;
--color-fd-popover: #1b1b1b;
--color-fd-popover-foreground: #fafafa;
--color-fd-card: #1b1b1b;
--color-fd-card-foreground: #fafafa;
--color-fd-border: #80808033;
--color-fd-primary: #fafafa;
--color-fd-primary-foreground: #282828;
--color-fd-secondary: #323232;
--color-fd-secondary-foreground: #fafafa;
--color-fd-accent: #373737;
--color-fd-accent-foreground: #fff;
--color-fd-ring: #595959;
--dbx-surface: #1b1b1b;
--dbx-surface-soft: #252525;
--dbx-line: var(--color-fd-border);
--dbx-blue: #fafafa;
--dbx-sky: #999;
--dbx-green: #d4d4d4;
/* 代码块比底色高一档(原来是 #050505 上的 #0a0a0a),跟着一起抬 */
--dbx-code-bg: #1b1b1b;
}
html {
background: var(--color-fd-background);
color-scheme: light;
overflow-x: clip;
scroll-padding-top: 84px;
}
.dark {
color-scheme: dark;
}
body {
min-height: 100vh;
background: var(--color-fd-background);
overflow-x: clip;
text-rendering: optimizeLegibility;
}
.landing,
.landing :where(h1, h2, h3, h4, p, li, span, strong, em, code) {
-webkit-user-select: text;
user-select: text;
}
a,
button {
-webkit-tap-highlight-color: transparent;
}
.dark body {
background: var(--color-fd-background);
}
/* landing 页面(根容器带 .landing 或 bg-landing-bg)要连 html 画布一起变深,
否则移动端上拉/橡皮筋回弹会露出亮色主题的 #fafafa。
/docs 走 fumadocs 自己的主题,页面里没有这两个容器,不受影响。 */
html:has(:is(.landing, .bg-landing-bg)),
body:has(:is(.landing, .bg-landing-bg)) {
background: var(--color-landing-bg);
}
::selection {
background: color-mix(in srgb, var(--color-fd-primary) 18%, transparent);
}
article {
color: color-mix(in srgb, var(--color-fd-foreground) 92%, var(--color-fd-muted-foreground));
}
article,
article :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, table, th, td, pre, code, span, strong, em) {
-webkit-user-select: text;
user-select: text;
}
article h1 {
letter-spacing: 0;
line-height: 1.08;
}
article h2 {
border-top: 1px solid var(--dbx-line);
margin-top: 2.35rem;
padding-top: 1.35rem;
letter-spacing: 0;
}
article h3 {
letter-spacing: 0;
}
article p,
article li {
line-height: 1.78;
}
article p {
color: color-mix(in srgb, var(--color-fd-foreground) 78%, var(--color-fd-muted-foreground));
}
article a:not([class]) {
color: var(--dbx-blue);
font-weight: 560;
text-decoration-color: color-mix(in srgb, var(--color-fd-primary) 32%, transparent);
text-underline-offset: 3px;
}
article a:not([class]):hover {
text-decoration-color: var(--dbx-blue);
}
article img {
border: 1px solid var(--dbx-line);
border-radius: 10px;
box-shadow: 0 18px 54px color-mix(in srgb, black 12%, transparent);
}
article table {
width: 100%;
overflow: hidden;
border: 1px solid var(--dbx-line);
border-radius: 9px;
border-collapse: separate;
border-spacing: 0;
background: var(--dbx-surface);
font-size: 0.925rem;
}
article thead {
background: var(--dbx-surface-soft);
}
article th {
color: color-mix(in srgb, var(--color-fd-foreground) 86%, var(--color-fd-muted-foreground));
font-weight: 680;
}
article th,
article td {
border-bottom: 1px solid var(--dbx-line);
padding: 0.78rem 0.92rem;
}
article tr:last-child td {
border-bottom: 0;
}
article pre {
border: 1px solid color-mix(in srgb, var(--color-fd-border) 70%, transparent);
border-radius: 10px;
background: var(--dbx-code-bg) !important;
margin: 1rem 0 1.35rem;
padding: 0.9rem 0;
overflow-x: auto;
box-shadow: 0 18px 42px color-mix(in srgb, black 14%, transparent);
}
article pre code {
display: block;
min-width: max-content;
border: 0;
background: transparent !important;
color: #e5e5e5;
font-size: 0.92rem;
line-height: 1.72;
}
article pre code span {
color: var(--shiki-dark, #e5e5e5) !important;
font-style: var(--shiki-dark-font-style, inherit);
}
article pre .line {
padding-left: 1.1rem;
padding-right: 1.1rem;
}
article figure.shiki {
border-color: color-mix(in srgb, var(--color-fd-border) 74%, transparent);
border-radius: 9px;
background: var(--dbx-code-bg) !important;
margin: 0.85rem 0 1.05rem;
box-shadow: 0 12px 28px color-mix(in srgb, black 12%, transparent);
}
article figure.shiki [role="region"] {
padding-top: 0.7rem;
padding-bottom: 0.7rem;
}
article figure.shiki pre {
border: 0;
border-radius: 0;
background: transparent !important;
margin: 0;
padding: 0;
box-shadow: none;
}
article figure.shiki pre code {
line-height: 1.58;
}
article figure.shiki button:hover {
color: #e5e5e5;
}
article :not(pre) > code {
border: 1px solid var(--dbx-line);
border-radius: 6px;
padding: 0.12rem 0.34rem;
background: color-mix(in srgb, var(--color-fd-muted) 72%, transparent);
color: color-mix(in srgb, var(--color-fd-foreground) 88%, var(--dbx-blue));
font-size: 0.88em;
}
article a.block.rounded-xl,
article a.flex.rounded-lg {
border-color: var(--dbx-line);
border-radius: 9px;
background: var(--dbx-surface);
box-shadow: 0 1px 2px color-mix(in srgb, black 4%, transparent);
}
article a.block.rounded-xl:hover,
article a.flex.rounded-lg:hover {
border-color: color-mix(in srgb, var(--color-fd-primary) 28%, var(--dbx-line));
background: color-mix(in srgb, var(--color-fd-accent) 58%, var(--dbx-surface));
box-shadow: 0 10px 28px color-mix(in srgb, black 7%, transparent);
}
article [role="tablist"].not-prose {
border: 0;
border-bottom: 1px solid var(--dbx-line);
border-radius: 0;
background: transparent;
padding: 0 1rem;
}
article [role="tablist"].not-prose [role="tab"] {
border-radius: 0;
font-weight: 620;
}
article [role="tablist"].not-prose [role="tab"][data-state="active"] {
background: transparent;
box-shadow: none;
}
article [role="tabpanel"] {
border-color: var(--dbx-line);
}
article div[class*="border"] {
border-color: var(--dbx-line);
}
aside a[href*="/docs/"][class*="rounded-lg"][data-active="true"],
aside a[href*="/docs/"][class*="rounded-lg"][aria-current="page"] {
background: color-mix(in srgb, var(--color-fd-primary) 5%, var(--color-fd-accent));
color: var(--color-fd-primary);
font-weight: 650;
}
.dbx-docs-sidebar-footer {
padding-top: 0.5rem;
}
#nd-sidebar .dbx-docs-sidebar-footer {
border-top: 1px solid var(--dbx-line);
margin-inline: -1rem;
padding: 0.8rem 1rem 0;
}
.dbx-docs-sidebar-sites {
display: flex;
flex-wrap: wrap;
gap: 0.3rem 0.85rem;
margin-bottom: 0.7rem;
font-size: 0.8125rem;
line-height: 1.5;
}
.dbx-docs-sidebar-sites a {
color: var(--color-fd-muted-foreground);
transition: color 0.15s ease;
}
.dbx-docs-sidebar-sites a:hover {
color: var(--color-fd-foreground);
}
.dbx-docs-sidebar-tools {
display: flex;
align-items: center;
justify-content: space-between;
gap: 0.75rem;
}
.dbx-docs-sidebar-tools a,
.dbx-docs-sidebar-tools button {
outline-offset: 2px;
}
.dbx-docs-theme-switch {
border-color: color-mix(in srgb, var(--color-fd-border) 82%, transparent);
background: color-mix(in srgb, var(--color-fd-secondary) 72%, transparent);
padding: 0.125rem;
box-shadow: 0 1px 2px color-mix(in srgb, black 5%, transparent);
}
.dbx-docs-theme-switch [class*="size-6.5"] {
width: 1.55rem;
height: 1.55rem;
padding: 0.33rem;
}
.dbx-docs-theme-switch [class*="bg-fd-accent"] {
background: var(--color-fd-popover);
box-shadow:
0 1px 2px color-mix(in srgb, black 8%, transparent),
0 0 0 1px color-mix(in srgb, var(--color-fd-border) 64%, transparent);
}
.dark .dbx-docs-theme-switch [class*="bg-fd-accent"] {
background: color-mix(in srgb, var(--color-fd-accent) 72%, var(--color-fd-popover));
}
button,
a {
-webkit-tap-highlight-color: transparent;
}
.landing {
--landing-max: 1180px;
min-height: 100vh;
color: var(--color-landing-ink);
background: var(--color-landing-bg);
overflow: hidden;
position: relative;
/* 建立层叠上下文,使 position:fixed 的负 z-index 星空层被约束在本页背景之上
(而非穿透到 body 之后消失),同时把 nav 等正 z-index 子元素限制在页面内 */
isolation: isolate;
}
.landing::after {
content: "";
position: fixed;
inset: 0;
z-index: 0;
pointer-events: none;
opacity: 0.03;
background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='300'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.75' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
mix-blend-mode: overlay;
}
.landing a {
text-decoration: none;
}
/* Starfield —— 漫游星空装饰层:铺满深色背景,极缓慢漂移,刻意克制不抢焦点。 */
.landing-starfield {
overflow: hidden;
pointer-events: none;
}
/* 固定铺满整个着陆页,沉到内容与 .landing::after 噪点层之下,仅在 .landing 背景之上。
fixed 层不随滚动,形成稳定的深空背景;上下轻微淡出避免硬边 */
.landing-starfield--page {
position: fixed;
inset: 0;
z-index: -1;
mask-image: linear-gradient(180deg, transparent 0%, black 8%, black 92%, transparent 100%);
-webkit-mask-image: linear-gradient(180deg, transparent 0%, black 8%, black 92%, transparent 100%);
}
.landing-starfield-canvas {
display: block;
width: 100%;
height: 100%;
}
/* Reveal animation */
.landing-reveal {
opacity: 1;
transform: none;
transition:
opacity 0.72s ease,
transform 0.72s cubic-bezier(0.16, 1, 0.3, 1);
transition-delay: var(--reveal-delay, 0ms);
}
.landing-reveal.is-visible {
opacity: 1;
transform: none;
}
.landing-reveal [data-stagger] {
opacity: 1;
transform: none;
transition:
opacity 0.58s ease,
transform 0.58s cubic-bezier(0.16, 1, 0.3, 1);
}
.landing-reveal.is-visible [data-stagger] {
opacity: 1;
transform: translateY(0);
}
.landing-reveal.is-visible [data-stagger]:nth-child(2) {
transition-delay: 70ms;
}
.landing-reveal.is-visible [data-stagger]:nth-child(3) {
transition-delay: 120ms;
}
.landing-reveal.is-visible [data-stagger]:nth-child(4) {
transition-delay: 170ms;
}
.landing-reveal.is-visible [data-stagger]:nth-child(8n + 5) {
transition-delay: 210ms;
}
.landing-reveal.is-visible [data-stagger]:nth-child(8n + 6) {
transition-delay: 250ms;
}
.landing-reveal.is-visible [data-stagger]:nth-child(8n + 7) {
transition-delay: 290ms;
}
.landing-reveal.is-visible [data-stagger]:nth-child(8n) {
transition-delay: 330ms;
}
/* Nav */
.landing-nav {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 80;
border-bottom: 1px solid transparent;
background: transparent;
transition:
background 0.3s ease,
border-color 0.3s ease;
}
.landing-nav::before {
content: "";
position: absolute;
inset: 0;
backdrop-filter: blur(18px);
opacity: 0;
transition: opacity 0.3s ease;
z-index: -1;
}
.landing-nav.is-scrolled {
border-bottom-color: var(--color-landing-line);
background: color-mix(in srgb, #1a1b1c 44%, transparent);
}
.landing-nav.is-scrolled::before {
opacity: 1;
}
.landing-nav.is-menu-open {
border-bottom-color: var(--color-landing-line);
background: rgba(23, 24, 24, 0.94);
}
.landing-nav.is-menu-open::before {
opacity: 1;
}
.landing-nav-link {
transition: color 0.16s ease;
}
.landing-nav-link:hover {
background: transparent;
color: var(--color-landing-ink);
}
.landing-mobile-menu {
position: fixed;
inset: 60px 0 0;
pointer-events: none;
visibility: hidden;
}
.landing-mobile-menu[data-open="true"] {
pointer-events: auto;
visibility: visible;
}
.landing-mobile-menu-backdrop {
position: absolute;
inset: 0;
border: 0;
z-index: 0;
background: rgba(3, 4, 6, 0.82);
opacity: 0;
backdrop-filter: blur(8px);
transition: opacity 0.2s ease;
}
.landing-mobile-menu-panel {
position: relative;
display: grid;
gap: 4px;
max-height: calc(100dvh - 76px);
margin: 0 12px;
padding: 10px;
overflow-y: auto;
border: 1px solid var(--color-landing-line);
border-radius: 0 0 16px 16px;
z-index: 1;
background: var(--color-landing-bg);
box-shadow: 0 28px 80px rgba(0, 0, 0, 0.44);
opacity: 0;
transform: translateY(-12px);
transition:
opacity 0.2s ease,
transform 0.2s ease;
}
.landing-mobile-menu[data-open="true"] .landing-mobile-menu-backdrop,
.landing-mobile-menu[data-open="true"] .landing-mobile-menu-panel {
opacity: 1;
}
.landing-mobile-menu[data-open="true"] .landing-mobile-menu-panel {
transform: translateY(0);
}
.landing-mobile-menu-link {
display: flex;
min-height: 48px;
align-items: center;
justify-content: space-between;
gap: 20px;
border-radius: 9px;
padding: 0 14px;
color: var(--color-landing-muted);
font-size: 14px;
font-weight: 620;
}
.landing-mobile-menu-link:hover,
.landing-mobile-menu-link:focus-visible,
.landing-mobile-menu-link[aria-current="page"] {
background: var(--color-landing-soft);
color: var(--color-landing-ink);
outline: none;
}
/* Hero */
.landing-hero {
position: relative;
min-height: calc(100vh - 64px);
padding-top: 148px;
overflow: hidden;
isolation: isolate;
}
.landing-hero::before {
content: "";
position: absolute;
inset: 0;
background:
radial-gradient(ellipse at 50% 34%, rgba(44, 88, 174, 0.16), transparent 52%), radial-gradient(ellipse at 18% 16%, rgba(82, 213, 255, 0.06), transparent 34%), radial-gradient(ellipse at 76% 22%, rgba(68, 209, 157, 0.05), transparent 30%),
linear-gradient(180deg, rgba(22, 22, 22, 0.28) 0%, rgba(27, 28, 30, 0.78) 48%, rgba(22, 22, 22, 0.36) 82%, rgba(22, 22, 22, 0.18) 100%);
z-index: -3;
}
.landing-hero::after {
content: "";
position: absolute;
inset: 134px -12vw -140px;
background-image: linear-gradient(rgba(110, 168, 255, 0.05) 1px, transparent 1px), linear-gradient(90deg, rgba(110, 168, 255, 0.05) 1px, transparent 1px);
background-size: 58px 58px;
mask-image: radial-gradient(ellipse at 50% 56%, black 0%, transparent 64%);
opacity: 0.5;
pointer-events: none;
transform: perspective(1200px) rotateX(60deg) translateY(84px);
transform-origin: center bottom;
animation: landing-grid-drift 15s linear infinite;
z-index: -2;
}
.aceternity-spotlight {
position: absolute;
inset: -210px auto auto 50%;
width: min(980px, 82vw);
height: 720px;
border-radius: 999px;
background: radial-gradient(circle at 50% 28%, rgba(255, 255, 255, 0.1), transparent 12%), radial-gradient(circle at 46% 38%, rgba(82, 213, 255, 0.08), transparent 34%), radial-gradient(circle at 58% 52%, rgba(110, 168, 255, 0.06), transparent 60%);
filter: blur(72px);
mix-blend-mode: screen;
pointer-events: none;
transform: translateX(-50%);
animation: landing-spotlight-enter 1.1s cubic-bezier(0.16, 1, 0.3, 1) both;
z-index: -1;
}
.landing-hero-copy {
animation: landing-rise 0.72s ease-out both;
}
.landing-hero-subtitle {
color: color-mix(in srgb, var(--color-landing-muted) 86%, white);
}
.landing-eyebrow {
border: 1px solid var(--color-landing-line);
background: rgba(255, 255, 255, 0.04);
color: color-mix(in srgb, var(--color-landing-sky) 74%, white);
box-shadow:
0 0 0 1px rgba(82, 213, 255, 0.04) inset,
0 0 28px rgba(82, 213, 255, 0.13);
animation: landing-pulse 3.8s ease-in-out infinite;
}
/* Buttons */
.landing-btn-primary {
background: #f0f1f4;
color: #0a0b0e;
box-shadow:
0 14px 36px rgba(110, 168, 255, 0.18),
0 0 0 1px rgba(255, 255, 255, 0.4) inset;
transition:
opacity 0.16s ease,
transform 0.16s ease,
box-shadow 0.16s ease;
animation: landing-cta-glow 3.4s ease-in-out infinite;
}
.landing-btn-primary:hover {
opacity: 0.88;
transform: translateY(-1px);
box-shadow: 0 18px 42px rgba(110, 168, 255, 0.25);
}
.landing-btn-secondary {
border: 1px solid var(--color-landing-line);
background: var(--color-landing-panel);
color: var(--color-landing-ink);
transition:
border-color 0.16s ease,
background 0.16s ease,
transform 0.16s ease;
}
.landing-btn-secondary:hover {
border-color: rgba(190, 193, 199, 0.34);
background: var(--color-landing-panel-strong);
transform: translateY(-1px);
}
/* Install dropdown */
.landing-install-control::after {
content: "";
position: absolute;
top: 100%;
left: 0;
display: block;
width: 100%;
height: 24px;
}
.landing-install-trigger {
background: linear-gradient(180deg, rgba(255, 255, 255, 0.98), rgba(239, 244, 250, 0.96)), #fff;
color: #070b12;
box-shadow:
0 18px 54px rgba(0, 0, 0, 0.24),
0 0 0 1px rgba(255, 255, 255, 0.72) inset;
transition: box-shadow 0.16s ease;
}
.landing-install-trigger:hover,
.landing-install[data-open="true"] .landing-install-trigger {
box-shadow:
0 24px 68px rgba(0, 0, 0, 0.3),
0 0 0 1px rgba(255, 255, 255, 0.78) inset;
}
.landing-install-primary,
.landing-install-toggle {
color: inherit;
}
.landing-install-primary:focus-visible,
.landing-install-toggle:focus-visible {
outline: 2px solid #2563eb;
outline-offset: -3px;
}
.landing-install-toggle svg {
transition: transform 0.16s ease;
}
.landing-install[data-open="true"] .landing-install-toggle svg {
transform: rotate(180deg);
}
.landing-install-menu {
background: rgba(4, 5, 8, 0.94);
box-shadow:
0 26px 64px rgba(0, 0, 0, 0.34),
0 0 0 1px rgba(255, 255, 255, 0.035) inset;
backdrop-filter: blur(18px);
opacity: 0;
pointer-events: none;
transition:
opacity 0.16s ease,
transform 0.16s ease;
visibility: hidden;
}
.landing-install[data-open="true"] .landing-install-menu {
opacity: 1;
pointer-events: auto;
visibility: visible;
}
.landing-install-option {
color: color-mix(in srgb, var(--color-landing-ink) 88%, var(--color-landing-muted));
transition:
background 0.16s ease,
color 0.16s ease;
}
.landing-install-option:hover {
background: rgba(255, 255, 255, 0.055);
color: var(--color-landing-ink);
}
.landing-install-download-link:focus-visible {
border-radius: 8px;
outline: 2px solid rgba(255, 255, 255, 0.72);
outline-offset: -3px;
}
.landing-install-driver-link {
color: #69c9ff;
text-decoration-color: rgba(105, 201, 255, 0.78);
transition: color 0.16s ease;
}
.landing-install-driver-link:hover,
.landing-install-driver-link:focus-visible {
color: #a7e3ff;
text-decoration-color: currentColor;
}
.landing-install-option svg {
fill: currentColor;
stroke-width: 1.8;
}
/* Product showcase */
.landing-product {
border: 1px solid var(--color-landing-line);
background: #1c1d1e;
box-shadow:
0 38px 110px rgba(0, 0, 0, 0.5),
0 0 80px rgba(82, 213, 255, 0.1),
0 0 0 1px rgba(255, 255, 255, 0.03) inset;
animation: landing-product-enter 0.9s cubic-bezier(0.16, 1, 0.3, 1) 0.18s both;
transform-style: preserve-3d;
transition:
box-shadow 0.24s ease,
transform 0.24s ease;
}
.landing-product::before {
content: "";
position: absolute;
inset: 0;
border-radius: inherit;
padding: 1px;
background: conic-gradient(from 180deg, transparent, rgba(110, 168, 255, 0.04), rgba(82, 213, 255, 0.28), rgba(68, 209, 157, 0.18), rgba(110, 168, 255, 0.04), transparent);
-webkit-mask:
linear-gradient(#000 0 0) content-box,
linear-gradient(#000 0 0);
-webkit-mask-composite: xor;
mask-composite: exclude;
pointer-events: none;
z-index: 4;
}
.landing-product::after {
content: "";
position: absolute;
inset: 34px 0 0;
background: radial-gradient(circle at 72% 18%, rgba(82, 213, 255, 0.1), transparent 18%);
mix-blend-mode: screen;
pointer-events: none;
z-index: 3;
}
.landing-product:hover {
transform: translateY(-4px) scale(1.005);
box-shadow:
0 46px 122px rgba(0, 0, 0, 0.58),
0 0 100px rgba(82, 213, 255, 0.13);
}
.landing-product-slide {
animation: landing-product-slide-enter 0.45s ease both;
}
.landing-product-dots {
border: 1px solid rgba(173, 176, 182, 0.16);
background: rgba(6, 7, 9, 0.66);
backdrop-filter: blur(16px);
}
.landing-product-dot {
position: relative;
background: transparent;
color: transparent;
}
.landing-product-dot::before {
content: "";
position: absolute;
top: 50%;
left: 50%;
width: 9px;
height: 9px;
border-radius: 999px;
background: rgba(226, 232, 240, 0.38);
transform: translate(-50%, -50%);
transition:
width 0.2s ease,
background 0.2s ease,
opacity 0.2s ease;
}
.landing-product-dot[aria-current="true"]::before {
width: 22px;
background: color-mix(in srgb, var(--color-landing-sky) 84%, white);
}
.landing-product-dot:focus-visible {
outline: 2px solid var(--color-landing-sky);
outline-offset: -2px;
}
.landing-product-dots span {
position: absolute;
width: 1px;
height: 1px;
overflow: hidden;
clip: rect(0 0 0 0);
white-space: nowrap;
}
/* Glass cards */
.landing-glass-card {
border: 1px solid rgba(173, 176, 182, 0.14);
background: radial-gradient(circle at 78% 12%, rgba(110, 168, 255, 0.12), transparent 44%), linear-gradient(180deg, rgba(255, 255, 255, 0.045), rgba(255, 255, 255, 0.018)), rgba(29, 30, 31, 0.72);
box-shadow:
0 18px 44px rgba(0, 0, 0, 0.14),
0 0 0 1px rgba(255, 255, 255, 0.02) inset;
}
.landing-glass-card-green {
border: 1px solid rgba(173, 176, 182, 0.14);
background: radial-gradient(circle at 78% 16%, rgba(68, 209, 157, 0.1), transparent 34%), linear-gradient(180deg, rgba(255, 255, 255, 0.045), rgba(255, 255, 255, 0.018)), rgba(29, 30, 31, 0.72);
box-shadow:
0 18px 44px rgba(0, 0, 0, 0.14),
0 0 0 1px rgba(255, 255, 255, 0.02) inset;
}
/* Inline link */
.landing-inline-link {
min-height: 28px;
color: var(--color-landing-blue);
transition: color 0.16s ease;
}
.landing-inline-link:hover {
color: color-mix(in srgb, var(--color-landing-sky) 70%, white);
}
/* Workflow card */
.landing-workflow-grid {
border: 1px solid var(--color-landing-line);
background: var(--color-landing-panel);
}
.landing-workflow-card {
color: var(--color-landing-ink);
transition:
border-color 0.16s ease,
background 0.16s ease,
transform 0.16s ease,
box-shadow 0.16s ease;
}
.landing-workflow-card:hover {
background: var(--color-landing-panel-strong);
border-color: rgba(110, 168, 255, 0.24);
transform: translateY(-3px);
box-shadow: 0 24px 50px rgba(0, 0, 0, 0.18);
}
/* DB card */
.landing-db-card {
border: 1px solid rgba(173, 176, 182, 0.14);
background: radial-gradient(circle at 50% 112%, color-mix(in srgb, var(--db-tone) 20%, transparent), transparent 62%), linear-gradient(180deg, rgba(255, 255, 255, 0.045), rgba(255, 255, 255, 0.018)), rgba(29, 30, 31, 0.74);
box-shadow:
0 18px 44px rgba(0, 0, 0, 0.15),
0 0 0 1px rgba(255, 255, 255, 0.02) inset;
transition:
border-color 0.16s ease,
background 0.16s ease,
transform 0.16s ease;
}
.landing-db-card:hover {
border-color: color-mix(in srgb, var(--db-tone) 42%, rgba(173, 176, 182, 0.18));
background: radial-gradient(circle at 50% 112%, color-mix(in srgb, var(--db-tone) 26%, transparent), transparent 62%), linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.024)), rgba(34, 35, 36, 0.9);
transform: translateY(-3px);
}
.landing-db-icon img {
filter: drop-shadow(0 10px 20px color-mix(in srgb, var(--db-tone) 20%, transparent));
}
.landing-db-icon span {
background: color-mix(in srgb, var(--db-tone) 78%, #202123);
box-shadow: 0 10px 20px color-mix(in srgb, var(--db-tone) 22%, transparent);
}
/* Testimonials */
.landing-testimonial-wall::before,
.landing-testimonial-wall::after {
content: "";
position: absolute;
top: 0;
bottom: 0;
z-index: 2;
width: min(180px, 18vw);
pointer-events: none;
}
.landing-testimonial-wall::before {
left: 0;
background: linear-gradient(90deg, var(--color-landing-bg), color-mix(in srgb, var(--color-landing-bg) 0%, transparent));
}
.landing-testimonial-wall::after {
right: 0;
background: linear-gradient(270deg, var(--color-landing-bg), color-mix(in srgb, var(--color-landing-bg) 0%, transparent));
}
.landing-testimonial-marquee[data-speed="slow"] {
--testimonial-duration: 58s;
}
.landing-testimonial-marquee[data-speed="normal"] {
--testimonial-duration: 42s;
}
.landing-testimonial-track {
animation: landing-testimonial-scroll var(--testimonial-duration, 48s) linear infinite;
animation-play-state: running !important;
}
.landing-testimonial-marquee[data-direction="right"] .landing-testimonial-track {
animation-direction: reverse;
}
.landing-testimonial-card {
border: 1px solid rgba(173, 176, 182, 0.14);
background: linear-gradient(180deg, rgba(255, 255, 255, 0.055), rgba(255, 255, 255, 0.025)), rgba(17, 18, 21, 0.78);
box-shadow:
0 18px 45px rgba(0, 0, 0, 0.18),
0 0 0 1px rgba(255, 255, 255, 0.025) inset;
}
/* Database pill marquee */
.landing-db-wall {
--db-marquee-duration: 72s;
}
.landing-db-marquee {
display: flex;
overflow: hidden;
-webkit-mask-image: linear-gradient(90deg, transparent 0, black 9%, black 91%, transparent 100%);
mask-image: linear-gradient(90deg, transparent 0, black 9%, black 91%, transparent 100%);
}
.landing-db-track {
animation: landing-db-scroll var(--db-marquee-duration, 72s) linear infinite;
}
.landing-db-marquee:hover .landing-db-track {
animation-play-state: paused;
}
.landing-db-marquee[data-direction="right"] .landing-db-track {
animation-direction: reverse;
}
.landing-db-pill {
display: inline-flex;
flex: 0 0 auto;
align-items: center;
gap: 10px;
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 999px;
padding: 9px 16px;
background: rgba(255, 255, 255, 0.05);
color: color-mix(in srgb, var(--color-landing-ink) 84%, var(--color-landing-muted));
font-size: 13px;
font-weight: 560;
white-space: nowrap;
transition:
border-color 0.16s ease,
background 0.16s ease,
color 0.16s ease;
}
.landing-db-pill:hover {
border-color: rgba(255, 255, 255, 0.2);
background: rgba(255, 255, 255, 0.07);
color: var(--color-landing-ink);
}
.landing-db-pill img {
display: block;
width: 20px;
height: 20px;
object-fit: contain;
}
@media (max-width: 760px) {
.landing-db-pill {
gap: 8px;
padding: 8px 13px;
font-size: 12px;
}
.landing-db-pill img {
width: 17px;
height: 17px;
}
}
/* Contributors wall */
.landing-contributor-grid {
display: flex;
flex-wrap: wrap;
gap: 10px;
justify-content: center;
margin-top: 3px;
}
.landing-contributor-row {
display: contents;
}
@media (min-width: 1180px) {
.landing-contributor-grid {
flex-direction: column;
flex-wrap: nowrap;
align-items: center;
}
.landing-contributor-row {
display: flex;
gap: 10px;
justify-content: center;
}
}
.landing-contributor-avatar {
display: block;
position: relative;
width: 58px;
height: 58px;
border-radius: 50%;
border: 1.5px solid rgba(173, 176, 182, 0.16);
background: linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.02)), rgba(29, 30, 31, 0.78);
box-shadow:
0 8px 24px rgba(0, 0, 0, 0.18),
0 0 0 1px rgba(255, 255, 255, 0.03) inset;
transition:
border-color 0.2s ease,
transform 0.2s cubic-bezier(0.16, 1, 0.3, 1),
box-shadow 0.2s ease;
}
.landing-contributor-avatar:hover {
border-color: rgba(110, 168, 255, 0.42);
transform: translateY(-3px) scale(1.08);
box-shadow:
0 14px 36px rgba(110, 168, 255, 0.22),
0 0 0 1px rgba(255, 255, 255, 0.06) inset;
z-index: 2;
overflow: visible;
}
.landing-contributor-avatar img {
border-radius: 50%;
}
.landing-contributor-tooltip {
position: absolute;
bottom: calc(100% + 8px);
left: 50%;
transform: translateX(-50%) translateY(4px);
pointer-events: none;
white-space: nowrap;
padding: 6px 12px;
border-radius: 6px;
background: rgba(21, 22, 25, 0.96);
border: 1px solid rgba(173, 176, 182, 0.22);
box-shadow:
0 8px 24px rgba(0, 0, 0, 0.32),
0 0 0 1px rgba(255, 255, 255, 0.04) inset;
display: flex;
flex-direction: column;
align-items: center;
gap: 2px;
opacity: 0;
transition:
opacity 0.18s ease,
transform 0.18s ease;
}
.landing-contributor-avatar:hover .landing-contributor-tooltip,
.landing-contributor-avatar:focus-visible .landing-contributor-tooltip {
opacity: 1;
transform: translateX(-50%) translateY(0);
}
.landing-contributor-tooltip-name {
font-size: 13px;
font-weight: 650;
color: var(--color-landing-ink);
}
.landing-contributor-tooltip-count {
font-size: 11px;
color: var(--color-landing-muted);
}
/* Capability card */
.landing-capability {
border: 1px solid var(--color-landing-line);
background: var(--color-landing-panel);
transition:
border-color 0.16s ease,
background 0.16s ease,
transform 0.16s ease;
}
.landing-capability:hover {
border-color: rgba(110, 168, 255, 0.24);
background: var(--color-landing-panel-strong);
transform: translateY(-2px);
}
/* Final CTA link */
.landing-final-link {
border: 1px solid var(--color-landing-line);
background: var(--color-landing-panel);
color: var(--color-landing-ink);
transition:
border-color 0.16s ease,
background 0.16s ease,
transform 0.16s ease;
}
.landing-final-link:hover {
border-color: rgba(190, 193, 199, 0.34);
background: var(--color-landing-panel-strong);
transform: translateY(-1px);
}
/* Changelog — three-pane layout */
.changelog-shell {
display: grid;
grid-template-columns: 208px minmax(0, 1fr) 224px;
gap: 44px;
align-items: start;
}
.changelog-sidebar {
position: sticky;
top: 104px;
}
.changelog-sidebar-title {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 14px;
color: var(--color-landing-ink);
font-size: 13.5px;
font-weight: 720;
}
.changelog-version-list {
display: flex;
flex-direction: column;
gap: 2px;
max-height: calc(100vh - 180px);
overflow-y: auto;
overscroll-behavior: contain;
scrollbar-width: thin;
padding-right: 6px;
}
.changelog-version-link {
display: block;
padding: 7px 12px;
border: 1px solid transparent;
border-radius: 8px;
color: var(--color-landing-muted);
font-size: 13.5px;
font-weight: 560;
text-align: left;
white-space: nowrap;
transition:
color 0.15s ease,
background 0.15s ease,
border-color 0.15s ease;
}
.changelog-version-link:hover {
color: var(--color-landing-ink);
background: var(--color-landing-soft);
}
.changelog-version-link.is-active {
color: var(--color-landing-ink);
background: var(--color-landing-panel);
border-color: var(--color-landing-line);
font-weight: 700;
}
.changelog-content {
min-width: 0;
}
.changelog-release-loading {
display: grid;
place-items: center;
min-height: 320px;
color: var(--color-landing-muted);
font-size: 14px;
}
.changelog-toc-title {
margin: 0;
color: #e4e7ea;
font-size: 14px;
font-weight: 720;
}
.changelog-toc-subtitle {
margin: 3px 0 14px;
color: var(--color-landing-muted);
font-size: 12px;
}
.changelog-toc-list {
display: flex;
flex-direction: column;
border-left: 1px solid var(--color-landing-line);
}
.changelog-toc-list a {
display: block;
padding: 5px 0 5px 14px;
color: var(--color-landing-muted);
font-size: 13px;
transition: color 0.15s ease;
}
.changelog-toc-list a:hover {
color: var(--color-landing-ink);
}
/* Release body markdown */
.changelog-markdown {
color: #bcc1c9;
font-size: 15px;
line-height: 1.72;
}
.changelog-markdown h2,
.changelog-markdown h3 {
color: #ededf0;
font-weight: 720;
scroll-margin-top: 112px;
}
.changelog-markdown h2 {
margin: 48px 0 18px;
font-size: 24px;
}
.changelog-markdown h3 {
margin: 44px 0 16px;
font-size: 20px;
}
.changelog-markdown h2:first-child,
.changelog-markdown h3:first-child {
margin-top: 0;
}
.changelog-markdown ul {
display: flex;
flex-direction: column;
gap: 12px;
margin: 0;
padding: 0;
list-style: none;
}
.changelog-markdown li {
position: relative;
padding-left: 19px;
}
.changelog-markdown li::before {
content: "";
position: absolute;
top: 0.66em;
left: 0;
width: 6px;
height: 6px;
border-radius: 50%;
background: #52525b;
}
.changelog-markdown strong {
color: #e4e7ea;
font-weight: 660;
}
.changelog-markdown a {
color: var(--color-landing-blue);
text-decoration: none;
border-bottom: 1px solid rgba(110, 168, 255, 0.35);
transition: border-color 0.15s ease;
}
.changelog-markdown a:hover {
border-bottom-color: rgba(110, 168, 255, 0.75);
}
.changelog-markdown code {
padding: 2px 6px;
border-radius: 5px;
background: rgba(255, 255, 255, 0.07);
color: #e4e7ea;
font-size: 0.88em;
}
.changelog-markdown pre {
margin: 14px 0;
padding: 14px 16px;
border: 1px solid var(--color-landing-line);
border-radius: 10px;
background: rgba(13, 14, 17, 0.9);
overflow-x: auto;
}
.changelog-markdown pre code {
padding: 0;
background: none;
}
.changelog-markdown p {
margin: 12px 0;
}
.changelog-markdown hr {
margin: 28px 0;
border: 0;
border-top: 1px solid var(--color-landing-line);
}
.changelog-markdown table {
width: 100%;
margin: 16px 0;
border-collapse: collapse;
font-size: 14px;
}
.changelog-markdown th,
.changelog-markdown td {
padding: 8px 12px;
border: 1px solid var(--color-landing-line);
text-align: left;
}
.changelog-markdown th {
color: #e4e7ea;
background: rgba(255, 255, 255, 0.03);
}
.changelog-markdown img {
max-width: 100%;
border: 1px solid var(--color-landing-line);
border-radius: 10px;
}
/* Responsive */
@media (max-width: 1040px) {
.landing-hero {
padding-top: 120px;
}
.landing-workflow-card:nth-child(2n) {
border-right: 0;
}
.landing-workflow-card:nth-child(-n + 2) {
border-bottom: 1px solid var(--color-landing-line);
}
.changelog-shell {
grid-template-columns: 200px minmax(0, 1fr);
gap: 32px;
}
.changelog-sidebar-right {
display: none;
}
}
@media (max-width: 760px) {
.landing-install-menu {
position: static;
display: none;
width: min(380px, calc(100vw - 32px));
margin-top: 12px;
translate: none;
transform: none;
}
.landing-install[data-open="true"] .landing-install-menu {
display: grid;
}
.landing-nav-inner {
padding-right: max(14px, env(safe-area-inset-right));
padding-left: max(14px, env(safe-area-inset-left));
}
.landing-hero {
padding-top: 96px;
min-height: 0;
}
.landing-hero::before {
right: 0;
background: radial-gradient(circle at 50% 18%, rgba(82, 213, 255, 0.08), transparent 280px), radial-gradient(circle at 76% 26%, rgba(68, 209, 157, 0.04), transparent 220px), linear-gradient(180deg, #191a1b 0%, #1b1c1e 44%, #191a1b 94%);
}
.landing-hero::after {
inset: 130px -90px 0;
opacity: 0.3;
}
.aceternity-spotlight {
inset: -18% auto auto 50%;
width: min(96vw, 680px);
}
.landing-product:hover {
transform: none;
}
.landing-workflow-card {
border-right: 1px solid var(--color-landing-line);
border-bottom: 1px solid var(--color-landing-line);
}
.landing-workflow-card:nth-child(2n) {
border-right: 0;
}
.landing-workflow-card:nth-last-child(-n + 2) {
border-bottom: 0;
}
.landing-testimonial-wall {
margin-right: -18px;
margin-left: -18px;
}
.landing-testimonial-wall::before,
.landing-testimonial-wall::after {
width: 22px;
}
.landing-testimonial-marquee {
overflow-x: auto;
overscroll-behavior-inline: contain;
scroll-snap-type: inline mandatory;
scrollbar-width: none;
}
.landing-testimonial-marquee::-webkit-scrollbar,
.landing-sponsor-grid::-webkit-scrollbar {
display: none;
}
.landing-testimonial-track {
animation: none;
}
.landing-testimonial-card {
scroll-snap-align: center;
}
.landing-contributor-grid {
display: grid;
grid-template-columns: repeat(auto-fit, 32px);
gap: 5px;
justify-content: center;
}
.landing-contributor-avatar {
width: 32px;
height: 32px;
border-width: 1px;
box-shadow: 0 5px 14px rgba(0, 0, 0, 0.16);
}
.landing-contributor-avatar:nth-child(n + 73),
.landing-database-grid[data-expanded="false"] > :nth-child(n + 25) {
display: none;
}
.landing-contributor-tooltip {
display: none;
}
.landing-sponsor-grid {
display: flex;
gap: 12px;
margin-right: -18px;
margin-left: -18px;
padding-right: 18px;
padding-left: 18px;
overflow-x: auto;
overscroll-behavior-inline: contain;
scroll-padding-inline: 18px;
scroll-snap-type: inline mandatory;
scrollbar-width: none;
}
.landing-sponsor-card {
flex: 0 0 min(84vw, 330px);
scroll-snap-align: center;
}
.landing-final-link {
min-height: 44px;
}
.landing-database-toggle:focus-visible {
outline: 2px solid var(--color-landing-sky);
outline-offset: 2px;
}
.changelog-shell {
display: block;
}
.changelog-sidebar,
.changelog-sidebar-left {
position: static;
}
.changelog-sidebar-title {
display: none;
}
.changelog-version-list {
flex-direction: row;
gap: 8px;
max-height: none;
margin: 0 -18px 6px;
padding: 0 18px 10px;
overflow-x: auto;
overscroll-behavior-inline: contain;
scrollbar-width: none;
}
.changelog-version-list::-webkit-scrollbar {
display: none;
}
.changelog-version-link {
flex: 0 0 auto;
padding: 7px 14px;
border-color: var(--color-landing-line);
border-radius: 999px;
font-size: 13px;
}
.changelog-markdown {
font-size: 14px;
line-height: 1.66;
}
.changelog-markdown h2 {
margin: 34px 0 14px;
font-size: 20px;
}
.changelog-markdown h3 {
margin: 30px 0 13px;
font-size: 17px;
}
.changelog-markdown ul {
gap: 10px;
}
}
@media (max-width: 360px) {
.landing-workflow-card,
.landing-workflow-card:nth-child(2n) {
border-right: 0;
border-bottom: 1px solid var(--color-landing-line);
}
.landing-workflow-card:nth-last-child(-n + 2) {
border-bottom: 1px solid var(--color-landing-line);
}
.landing-workflow-card:last-child {
border-bottom: 0;
}
}
@media (hover: none), (pointer: coarse) {
.landing-nav-link:hover,
.landing-inline-link:hover,
.landing-workflow-card:hover,
.landing-db-card:hover,
.landing-capability:hover,
.landing-final-link:hover,
.landing-contributor-avatar:hover {
transform: none;
}
}
.issue-page {
--issue-ink: var(--color-landing-ink);
--issue-muted: var(--color-landing-muted);
--issue-line: var(--color-landing-line);
--issue-panel: var(--color-landing-panel);
min-height: 100vh;
background: var(--color-landing-bg);
}
.issue-page::before,
.issue-page::after {
display: none;
}
.issue-shell {
width: min(860px, calc(100% - 48px));
min-height: calc(100vh - 80px);
margin: 0 auto;
padding: 96px 0 88px;
}
.issue-success-card h1 {
color: var(--issue-ink);
font-size: 2rem;
font-weight: 800;
letter-spacing: -0.035em;
line-height: 1.1;
}
.issue-layout,
.issue-workbench {
display: grid;
gap: 16px;
}
.issue-public-note,
.issue-panel,
.issue-success-card {
border: 1px solid var(--issue-line);
border-radius: 12px;
background: var(--issue-panel);
}
.issue-public-note {
padding: 13px 15px;
}
.issue-warning-heading {
display: flex;
align-items: center;
gap: 8px;
color: #dfe2e7;
font-size: 12px;
}
.issue-warning-heading svg {
color: #e8b85c;
}
.issue-public-note p {
margin-top: 6px;
color: var(--issue-muted);
font-size: 11px;
line-height: 1.5;
}
.issue-panel {
padding: 24px;
}
.issue-preview-panel {
animation: landing-rise 0.25s ease-out both;
}
.issue-panel-heading {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 22px;
}
.issue-step-number {
display: grid;
width: 28px;
height: 28px;
place-items: center;
border: 1px solid rgba(110, 168, 255, 0.3);
border-radius: 50%;
background: rgba(110, 168, 255, 0.08);
color: #8eb9ff;
font-size: 12px;
font-weight: 700;
}
.issue-panel-heading h1,
.issue-panel-heading h2 {
color: var(--issue-ink);
font-size: 17px;
font-weight: 720;
letter-spacing: -0.015em;
}
.issue-field {
position: relative;
display: grid;
gap: 7px;
}
.issue-field > span,
.issue-upload-block strong {
color: #dfe2e7;
font-size: 13px;
font-weight: 650;
}
.issue-field small,
.issue-upload-block small {
display: block;
color: var(--issue-muted);
font-size: 12px;
line-height: 1.55;
}
.issue-field textarea,
.issue-field input,
.issue-field select {
width: 100%;
border: 1px solid rgba(173, 176, 182, 0.22);
border-radius: 9px;
outline: none;
background: rgba(22, 23, 23, 0.72);
color: var(--issue-ink);
font-size: 14px;
transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.issue-field textarea {
min-height: 150px;
resize: vertical;
padding: 13px 14px 32px;
line-height: 1.7;
}
.issue-field input,
.issue-field select {
height: 42px;
padding: 0 12px;
}
.issue-field select {
cursor: pointer;
color-scheme: dark;
}
.issue-field textarea::placeholder,
.issue-field input::placeholder {
color: #6b7078;
}
.issue-field textarea:focus,
.issue-field input:focus,
.issue-field select:focus {
border-color: rgba(110, 168, 255, 0.72);
box-shadow: 0 0 0 3px rgba(110, 168, 255, 0.1);
}
.issue-field textarea:disabled,
.issue-field input:disabled,
.issue-field select:disabled {
cursor: not-allowed;
opacity: 0.68;
}
.issue-field em {
position: absolute;
right: 12px;
bottom: 9px;
color: #6d727a;
font-size: 10px;
font-style: normal;
}
.issue-upload-block {
display: grid;
gap: 12px;
margin-top: 20px;
border: 1px dashed var(--issue-line);
border-radius: 9px;
padding: 16px;
transition: border-color 0.15s ease, background 0.15s ease;
}
.issue-upload-block.is-dragging {
border-color: rgba(110, 168, 255, 0.72);
background: rgba(110, 168, 255, 0.07);
}
.issue-upload-button {
display: inline-flex;
width: fit-content;
min-height: 38px;
cursor: pointer;
align-items: center;
gap: 7px;
border: 1px solid var(--issue-line);
border-radius: 8px;
padding: 0 13px;
background: rgba(255, 255, 255, 0.035);
color: #d7dbdf;
font-size: 12px;
font-weight: 620;
transition: border-color 0.15s ease, background 0.15s ease;
}
.issue-upload-button:hover {
border-color: rgba(110, 168, 255, 0.48);
background: rgba(110, 168, 255, 0.07);
}
.issue-upload-button input {
position: absolute;
width: 1px;
height: 1px;
opacity: 0;
}
.issue-image-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 10px;
}
.issue-image-preview {
position: relative;
aspect-ratio: 16 / 10;
border: 1px solid var(--issue-line);
border-radius: 8px;
background: #151617;
overflow: hidden;
}
.issue-image-preview img {
width: 100%;
height: 100%;
object-fit: cover;
}
.issue-image-preview button {
position: absolute;
top: 6px;
right: 6px;
display: grid;
width: 27px;
height: 27px;
cursor: pointer;
place-items: center;
border: 1px solid rgba(255, 255, 255, 0.16);
border-radius: 7px;
background: rgba(4, 8, 14, 0.82);
color: white;
}
.issue-image-preview span {
position: absolute;
right: 6px;
bottom: 6px;
border-radius: 4px;
padding: 2px 5px;
background: rgba(4, 8, 14, 0.78);
color: #c5c9cf;
font-size: 9px;
}
.issue-action-row {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 12px;
margin-top: 22px;
}
.issue-primary-button,
.issue-secondary-button,
.issue-submit-button {
display: inline-flex;
min-height: 42px;
cursor: pointer;
align-items: center;
justify-content: center;
gap: 8px;
border-radius: 8px;
padding: 0 16px;
font-size: 13px;
font-weight: 680;
transition: background 0.15s ease, border-color 0.15s ease, opacity 0.15s ease;
}
.issue-primary-button,
.issue-submit-button {
border: 1px solid #f0f1f4;
background: #f0f1f4;
color: #0a0b0e;
}
.issue-primary-button:hover:not(:disabled),
.issue-submit-button:hover:not(:disabled) {
border-color: white;
background: white;
}
.issue-secondary-button {
border: 1px solid var(--issue-line);
background: transparent;
color: #d7dbdf;
}
.issue-secondary-button:hover:not(:disabled) {
border-color: rgba(173, 176, 182, 0.38);
background: rgba(255, 255, 255, 0.035);
}
.issue-primary-button:disabled,
.issue-secondary-button:disabled,
.issue-submit-button:disabled {
cursor: not-allowed;
opacity: 0.42;
}
.issue-ai-summary {
display: flex;
gap: 9px;
margin-bottom: 20px;
border-radius: 8px;
padding: 11px 12px;
background: rgba(110, 168, 255, 0.07);
color: #b9bdc4;
font-size: 12px;
line-height: 1.65;
}
.issue-ai-summary svg {
margin-top: 2px;
flex: none;
color: #8eb9ff;
}
.issue-preview-grid {
display: grid;
grid-template-columns: 170px minmax(0, 1fr);
gap: 12px;
margin-bottom: 18px;
}
.issue-body-editor {
min-height: 360px !important;
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
font-size: 12.5px !important;
}
.issue-confirm-row {
display: grid;
grid-template-columns: 20px 1fr;
column-gap: 10px;
align-items: start;
cursor: pointer;
margin-top: 18px;
border: 1px solid var(--issue-line);
border-radius: 9px;
padding: 13px;
background: rgba(255, 255, 255, 0.025);
}
.issue-confirm-row input {
position: absolute;
opacity: 0;
}
.issue-confirm-row > span {
display: grid;
width: 20px;
height: 20px;
place-items: center;
border: 1px solid rgba(173, 176, 182, 0.4);
border-radius: 5px;
color: transparent;
}
.issue-confirm-row input:focus-visible + span {
outline: 2px solid #8eb9ff;
outline-offset: 2px;
}
.issue-confirm-row input:checked + span {
border-color: #75d6a5;
background: #75d6a5;
color: #07110c;
}
.issue-confirm-row p {
grid-column: 2;
color: #b8bcc2;
font-size: 12px;
line-height: 1.6;
}
.issue-submit-button {
width: 100%;
margin-top: 12px;
}
.issue-error {
display: flex;
align-items: flex-start;
gap: 9px;
border: 1px solid rgba(251, 113, 133, 0.3);
border-radius: 9px;
padding: 12px 14px;
background: rgba(159, 18, 57, 0.12);
color: #fecdd3;
font-size: 12px;
line-height: 1.6;
}
.issue-error svg {
margin-top: 1px;
flex: none;
color: #fb7185;
}
.issue-spinner {
animation: issue-spin 0.8s linear infinite;
}
.issue-success-shell {
display: grid;
place-items: center;
}
.issue-success-card {
width: min(620px, 100%);
padding: 40px;
text-align: center;
}
.issue-success-card h1 {
margin-top: 18px;
}
.issue-success-card > p {
max-width: 500px;
margin: 14px auto 0;
color: var(--issue-muted);
line-height: 1.7;
}
.issue-success-icon {
display: grid;
width: 54px;
height: 54px;
place-items: center;
margin: 0 auto;
border-radius: 50%;
background: rgba(117, 214, 165, 0.1);
color: #75d6a5;
}
.issue-success-actions {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 10px;
margin-top: 26px;
}
@media (max-width: 640px) {
.issue-shell {
width: min(100% - 28px, 860px);
padding: 84px 0 72px;
}
.issue-panel,
.issue-public-note {
padding: 18px;
}
.issue-preview-grid {
grid-template-columns: 1fr;
}
.issue-image-grid {
grid-template-columns: 1fr 1fr;
}
.issue-action-row,
.issue-primary-button {
width: 100%;
}
.issue-action-row {
align-items: stretch;
}
.issue-success-card {
padding: 28px 20px;
}
.issue-success-actions,
.issue-success-actions a,
.issue-success-actions button {
width: 100%;
}
}
@keyframes issue-spin {
to {
transform: rotate(360deg);
}
}
/* Keyframes */
@keyframes landing-rise {
from {
opacity: 0;
transform: translateY(18px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes landing-spotlight-enter {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes landing-product-enter {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes landing-product-slide-enter {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes landing-grid-drift {
from {
background-position: 0 0;
}
to {
background-position: 54px 54px;
}
}
@keyframes landing-pulse {
0%,
100% {
border-color: rgba(173, 176, 182, 0.18);
box-shadow:
0 0 0 1px rgba(82, 213, 255, 0.04) inset,
0 0 28px rgba(82, 213, 255, 0.13);
}
50% {
border-color: rgba(82, 213, 255, 0.34);
box-shadow:
0 0 0 1px rgba(82, 213, 255, 0.12) inset,
0 0 42px rgba(82, 213, 255, 0.22);
}
}
@keyframes landing-cta-glow {
0%,
100% {
box-shadow:
0 14px 36px rgba(110, 168, 255, 0.18),
0 0 0 1px rgba(255, 255, 255, 0.4) inset;
}
50% {
box-shadow:
0 18px 48px rgba(82, 213, 255, 0.32),
0 0 0 1px rgba(255, 255, 255, 0.52) inset;
}
}
@keyframes landing-testimonial-scroll {
from {
transform: translateX(0);
}
to {
transform: translateX(calc(-50% - 7px));
}
}
@keyframes landing-db-scroll {
from {
transform: translateX(0);
}
to {
transform: translateX(calc(-50% - 6px));
}
}
@media (prefers-reduced-motion: reduce) {
.landing *,
.landing *::before,
.landing *::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
scroll-behavior: auto !important;
transition-duration: 0.01ms !important;
}
.landing-reveal,
.landing-reveal [data-stagger] {
opacity: 1 !important;
transform: none !important;
}
.issue-page *,
.issue-page *::before,
.issue-page *::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}