diff --git a/.gitignore b/.gitignore index 9883f9c..519c1a2 100644 --- a/.gitignore +++ b/.gitignore @@ -56,6 +56,9 @@ outputs/ *.mp4 !docs/assets/*.png !benchmark/assets/*.png +!website/assets/**/*.png +!website/assets/**/*.jpg +!website/assets/**/*.jpeg # local development scratch dirs (experiment outputs, reports, ad-hoc scripts) /_scratch/ diff --git a/website/assets/gallery/g-bear.jpg b/website/assets/gallery/g-bear.jpg new file mode 100644 index 0000000..cd825f0 Binary files /dev/null and b/website/assets/gallery/g-bear.jpg differ diff --git a/website/assets/gallery/g-car.jpg b/website/assets/gallery/g-car.jpg new file mode 100644 index 0000000..847c9f7 Binary files /dev/null and b/website/assets/gallery/g-car.jpg differ diff --git a/website/assets/gallery/g-dog.jpg b/website/assets/gallery/g-dog.jpg new file mode 100644 index 0000000..a3c5600 Binary files /dev/null and b/website/assets/gallery/g-dog.jpg differ diff --git a/website/assets/gallery/g-elemouse.jpg b/website/assets/gallery/g-elemouse.jpg new file mode 100644 index 0000000..6217da2 Binary files /dev/null and b/website/assets/gallery/g-elemouse.jpg differ diff --git a/website/assets/gallery/g-elephant.jpg b/website/assets/gallery/g-elephant.jpg new file mode 100644 index 0000000..6a19b4b Binary files /dev/null and b/website/assets/gallery/g-elephant.jpg differ diff --git a/website/assets/gallery/g-king.jpg b/website/assets/gallery/g-king.jpg new file mode 100644 index 0000000..0455da3 Binary files /dev/null and b/website/assets/gallery/g-king.jpg differ diff --git a/website/assets/gallery/g-mouse.jpg b/website/assets/gallery/g-mouse.jpg new file mode 100644 index 0000000..1358d30 Binary files /dev/null and b/website/assets/gallery/g-mouse.jpg differ diff --git a/website/assets/gallery/g-owl.jpg b/website/assets/gallery/g-owl.jpg new file mode 100644 index 0000000..d022c3f Binary files /dev/null and b/website/assets/gallery/g-owl.jpg differ diff --git a/website/assets/gallery/g-spider.jpg b/website/assets/gallery/g-spider.jpg new file mode 100644 index 0000000..dd96b62 Binary files /dev/null and b/website/assets/gallery/g-spider.jpg differ diff --git a/website/assets/gallery/hero.jpg b/website/assets/gallery/hero.jpg new file mode 100644 index 0000000..eb775d9 Binary files /dev/null and b/website/assets/gallery/hero.jpg differ diff --git a/website/index.html b/website/index.html index 031a276..a8f7dc5 100644 --- a/website/index.html +++ b/website/index.html @@ -1,5 +1,5 @@ - + @@ -8,7 +8,7 @@ name="description" content="edge-dit.cpp is a lightweight C/C++ inference engine for efficient Diffusion Transformer inference on local and resource-constrained devices." /> - + + @@ -30,29 +42,73 @@
- edge-dit.cpp logo + + edge-dit.cpp
-
+

Native DiT runtime

-

edge-dit.cpp

+

edge-dit.cpp

A lightweight C/C++ inference engine for efficient Diffusion Transformer - inference on local and resource-constrained devices. + inference on local and resource-constrained devices. No Python, no PyTorch + at runtime — just ggml.

+
+
+ + + + shell + +
+
# build (CUDA, NCCL + MPI on by default)
+$ git clone --recursive https://github.com/THU-MIG/edge-dit.cpp
+$ bash ./scripts/build_cuda.sh
+
+# generate an image
+$ ed-cli --diffusion-model flux1-dev -p "a spartan warrior" -o out.png
+
+ -
+ +
@@ -471,5 +599,60 @@

Jump into the repo without hunting around

Static, local-first, and ready for GitHub Pages when you want it.

+ + diff --git a/website/styles.css b/website/styles.css index 7622727..f804689 100644 --- a/website/styles.css +++ b/website/styles.css @@ -1,22 +1,75 @@ :root { + /* Brand accents — shared across themes (from favicon.svg / logo.png) */ + --violet: #7e14ff; + --violet-bright: #863bff; + --cyan: #47bfff; + --accent-grad: linear-gradient(120deg, #7e14ff 0%, #6d3bff 45%, #47bfff 100%); + + --radius: 12px; + --radius-sm: 8px; + --shell: min(1180px, calc(100% - 2rem)); + + --mono: + ui-monospace, "JetBrains Mono", "SFMono-Regular", "SF Mono", Menlo, Monaco, + Consolas, "Liberation Mono", monospace; + --sans: + Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", + sans-serif; +} + +/* ------------------------------------------------------------------ * + * Dark theme (default) + * ------------------------------------------------------------------ */ +:root, +[data-theme="dark"] { + color-scheme: dark; + --bg: #0e0e11; + --bg-2: #121218; + --surface: rgba(255, 255, 255, 0.028); + --surface-strong: #16161d; + --surface-hover: rgba(255, 255, 255, 0.06); + --line: rgba(255, 255, 255, 0.09); + --line-strong: rgba(255, 255, 255, 0.16); + --text: #ececef; + --heading: #ffffff; + --muted: #9a9aa6; + --muted-strong: #c4c4cf; + --accent: #a06bff; + --accent-hover: #b48bff; + --grid-line: rgba(255, 255, 255, 0.028); + --shadow: 0 18px 50px rgba(0, 0, 0, 0.5); + --shadow-soft: 0 8px 24px rgba(0, 0, 0, 0.35); + --code-bg: #08080b; + --code-text: #e7e7ea; + --topbar-bg: rgba(12, 12, 15, 0.72); + --on-accent: #ffffff; +} + +/* ------------------------------------------------------------------ * + * Light theme + * ------------------------------------------------------------------ */ +[data-theme="light"] { color-scheme: light; --bg: #f4f7fb; - --bg-alt: #eef4ff; + --bg-2: #eef4ff; --surface: rgba(255, 255, 255, 0.94); --surface-strong: #ffffff; + --surface-hover: #ffffff; --line: #d9e1ec; --line-strong: #c6d1df; - --text: #0f172a; + --text: #24303f; + --heading: #0f172a; --muted: #526173; --muted-strong: #334155; - --blue: #2457ff; - --teal: #0f766e; - --green: #15803d; - --amber: #b45309; + --accent: #6415d6; + --accent-hover: #7e14ff; + --grid-line: rgba(15, 23, 42, 0.03); --shadow: 0 10px 30px rgba(15, 23, 42, 0.08); --shadow-soft: 0 4px 16px rgba(15, 23, 42, 0.05); - --radius: 8px; - --shell: min(1180px, calc(100% - 2rem)); + --code-bg: #0e0e14; + --code-text: #e7e7ea; + --topbar-bg: rgba(244, 247, 251, 0.82); + --on-accent: #ffffff; } *, @@ -31,36 +84,66 @@ html { body { margin: 0; - font-family: - Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", - sans-serif; + font-family: var(--sans); color: var(--text); - background: - linear-gradient(180deg, #f8fbff 0%, var(--bg) 15%, #f7fafc 100%); + background: var(--bg); + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + transition: background-color 0.3s ease, color 0.3s ease; } body::before { content: ""; position: fixed; inset: 0; + z-index: -1; pointer-events: none; background-image: - linear-gradient(rgba(15, 23, 42, 0.03) 1px, transparent 1px), - linear-gradient(90deg, rgba(15, 23, 42, 0.03) 1px, transparent 1px); - background-size: 120px 120px; - -webkit-mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.65), transparent 85%); - mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.65), transparent 85%); + linear-gradient(var(--grid-line) 1px, transparent 1px), + linear-gradient(90deg, var(--grid-line) 1px, transparent 1px); + background-size: 96px 96px; + -webkit-mask-image: radial-gradient(120% 90% at 70% 0%, #000 0%, transparent 72%); + mask-image: radial-gradient(120% 90% at 70% 0%, #000 0%, transparent 72%); +} + +/* soft accent glow behind the hero, dark theme only */ +body::after { + content: ""; + position: fixed; + top: -18rem; + right: -12rem; + width: 46rem; + height: 46rem; + z-index: -1; + pointer-events: none; + background: radial-gradient(circle, rgba(126, 20, 255, 0.16), transparent 62%); + filter: blur(20px); + opacity: 1; +} + +[data-theme="light"] body::after { + opacity: 0.5; } a { - color: inherit; + color: var(--accent); + text-decoration: none; +} + +a:hover, +a:focus-visible { + color: var(--accent-hover); } code { - font-family: - "SFMono-Regular", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, - "Liberation Mono", monospace; - font-size: 0.94em; + font-family: var(--mono); + font-size: 0.92em; +} + +:focus-visible { + outline: 2px solid var(--accent); + outline-offset: 2px; + border-radius: 4px; } .skip-link { @@ -68,12 +151,13 @@ code { left: 1rem; top: 1rem; padding: 0.7rem 0.9rem; - border-radius: var(--radius); + border-radius: var(--radius-sm); background: var(--surface-strong); border: 1px solid var(--line); + color: var(--text); transform: translateY(-180%); transition: transform 0.18s ease; - z-index: 20; + z-index: 30; } .skip-link:focus { @@ -85,17 +169,21 @@ code { margin: 0 auto; } +/* ------------------------------------------------------------------ * + * Top bar + * ------------------------------------------------------------------ */ .topbar { position: sticky; top: 0; - z-index: 15; - backdrop-filter: blur(12px); - background: rgba(244, 247, 251, 0.84); - border-bottom: 1px solid rgba(201, 213, 227, 0.85); + z-index: 20; + backdrop-filter: blur(14px); + -webkit-backdrop-filter: blur(14px); + background: var(--topbar-bg); + border-bottom: 1px solid var(--line); } .topbar-inner { - min-height: 4.5rem; + min-height: 4rem; display: flex; align-items: center; justify-content: space-between; @@ -105,60 +193,100 @@ code { .brand { display: inline-flex; align-items: center; + gap: 0.6rem; min-width: 0; text-decoration: none; + color: var(--heading); } .brand img { display: block; - width: min(18rem, 100%); - height: auto; + width: 2rem; + height: 2rem; + object-fit: contain; +} + +.brand .wordmark { + font-family: var(--mono); + font-size: 1.16rem; + font-weight: 700; + letter-spacing: -0.01em; + color: var(--heading); +} + +.wordmark .dot { + color: var(--accent); } .topnav { display: flex; flex-wrap: wrap; + align-items: center; justify-content: flex-end; - gap: 1rem; + gap: 1.35rem; } .topnav a { - text-decoration: none; color: var(--muted-strong); - font-size: 0.95rem; + font-size: 0.92rem; font-weight: 600; } .topnav a:hover, .topnav a:focus-visible { - color: var(--blue); + color: var(--accent); } -.section-band { - padding: 2rem 0; +.theme-toggle { + display: inline-flex; + align-items: center; + justify-content: center; + width: 2.4rem; + height: 2.4rem; + padding: 0; + border: 1px solid var(--line-strong); + border-radius: 999px; + background: var(--surface); + color: var(--muted-strong); + cursor: pointer; + transition: border-color 0.15s ease, color 0.15s ease, background 0.15s ease; } -.hero { - padding-top: 2.4rem; +.theme-toggle:hover, +.theme-toggle:focus-visible { + border-color: var(--accent); + color: var(--accent); } -.hero-grid { - display: grid; - grid-template-columns: minmax(0, 1.08fr) minmax(320px, 0.92fr); - gap: 1.4rem; - align-items: start; +.theme-toggle svg { + width: 1.15rem; + height: 1.15rem; } -.hero-copy { - padding-top: 0.45rem; +.theme-toggle .icon-sun { + display: none; +} +.theme-toggle .icon-moon { + display: block; +} +[data-theme="light"] .theme-toggle .icon-sun { + display: block; +} +[data-theme="light"] .theme-toggle .icon-moon { + display: none; } -.eyebrow { - margin: 0 0 0.5rem; - color: var(--teal); - font-size: 0.82rem; - font-weight: 700; - text-transform: uppercase; +/* ------------------------------------------------------------------ * + * Sections / headings + * ------------------------------------------------------------------ */ +.section-band { + padding: 3.4rem 0; + border-top: 1px solid var(--line); +} + +.hero { + padding: 4rem 0 3.6rem; + border-top: none; } h1, @@ -168,100 +296,223 @@ p { margin-top: 0; } +h1, +h2, +h3 { + color: var(--heading); +} + +.eyebrow { + margin: 0 0 0.7rem; + font-family: var(--mono); + color: var(--accent); + font-size: 0.78rem; + font-weight: 600; + letter-spacing: 0.14em; + text-transform: uppercase; +} + +.hero-grid { + display: grid; + grid-template-columns: minmax(0, 1.05fr) minmax(320px, 0.95fr); + gap: 2.6rem; + align-items: center; +} + h1 { - margin-bottom: 1rem; - font-size: clamp(3rem, 5vw, 5.4rem); - line-height: 0.95; - letter-spacing: 0; + margin-bottom: 1.1rem; + font-family: var(--mono); + font-size: clamp(2.6rem, 5.5vw, 4.4rem); + line-height: 1; + letter-spacing: -0.03em; + font-weight: 700; +} + +h1 .dot { + color: var(--accent); } .lede { - max-width: 60ch; - margin-bottom: 1.4rem; + max-width: 54ch; + margin-bottom: 1.6rem; color: var(--muted); - font-size: 1.07rem; - line-height: 1.75; + font-size: 1.09rem; + line-height: 1.7; +} + +/* ------------------------------------------------------------------ * + * Command block (copy-paste) + * ------------------------------------------------------------------ */ +.command { + margin: 0 0 1.5rem; + border: 1px solid var(--line-strong); + border-radius: var(--radius); + background: var(--code-bg); + box-shadow: var(--shadow-soft); + overflow: hidden; } +.command-head { + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.6rem 0.85rem; + border-bottom: 1px solid rgba(255, 255, 255, 0.08); +} + +.command-dot { + width: 0.62rem; + height: 0.62rem; + border-radius: 50%; + background: #ff5f56; +} +.command-dot:nth-child(2) { + background: #ffbd2e; +} +.command-dot:nth-child(3) { + background: #27c93f; +} + +.command-label { + margin-left: 0.4rem; + font-family: var(--mono); + font-size: 0.74rem; + color: #8a8a97; +} + +.command-copy { + margin-left: auto; + display: inline-flex; + align-items: center; + gap: 0.35rem; + padding: 0.3rem 0.6rem; + border: 1px solid rgba(255, 255, 255, 0.14); + border-radius: 6px; + background: transparent; + color: #c4c4cf; + font-family: var(--mono); + font-size: 0.74rem; + cursor: pointer; + transition: border-color 0.15s ease, color 0.15s ease; +} + +.command-copy:hover, +.command-copy:focus-visible { + border-color: var(--cyan); + color: var(--cyan); +} + +.command-copy.copied { + border-color: #27c93f; + color: #27c93f; +} + +.command pre { + margin: 0; + padding: 1rem 1.1rem; + overflow-x: auto; + font-family: var(--mono); + font-size: 0.86rem; + line-height: 1.7; + color: var(--code-text); +} + +.command .prompt { + color: var(--cyan); + user-select: none; +} + +.command .comment { + color: #6b6b78; +} + +/* ------------------------------------------------------------------ * + * Buttons + * ------------------------------------------------------------------ */ .cta-row { display: flex; flex-wrap: wrap; - gap: 0.75rem; - margin-bottom: 1.2rem; + gap: 0.7rem; + margin-bottom: 1.8rem; } .button { display: inline-flex; align-items: center; - gap: 0.55rem; - min-height: 2.8rem; - padding: 0.72rem 1rem; - border-radius: var(--radius); + gap: 0.5rem; + min-height: 2.7rem; + padding: 0.68rem 1.1rem; + border-radius: var(--radius-sm); border: 1px solid var(--line-strong); - background: rgba(255, 255, 255, 0.96); + background: var(--surface); color: var(--text); - text-decoration: none; - font-size: 0.95rem; - font-weight: 700; - box-shadow: var(--shadow-soft); - transition: - transform 0.15s ease, - border-color 0.15s ease, - box-shadow 0.15s ease; + font-size: 0.94rem; + font-weight: 600; + transition: transform 0.15s ease, border-color 0.15s ease, background 0.15s ease; } .button:hover, .button:focus-visible { - border-color: #9fb6d9; + border-color: var(--accent); + background: var(--surface-hover); + color: var(--text); transform: translateY(-1px); - box-shadow: 0 8px 20px rgba(15, 23, 42, 0.08); } .button-primary { - background: linear-gradient(180deg, #1430a5 0%, #0b1e71 100%); - border-color: #0b1e71; - color: #ffffff; + border-color: transparent; + background: var(--accent-grad); + color: #fff; + box-shadow: 0 8px 22px rgba(126, 20, 255, 0.32); } .button-primary:hover, .button-primary:focus-visible { - border-color: #08194f; + color: #fff; + filter: brightness(1.06); } +/* ------------------------------------------------------------------ * + * Stat chips + * ------------------------------------------------------------------ */ .stats { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); - gap: 0.75rem; + gap: 0.7rem; margin: 0; } .stat { - padding: 0.85rem 0.95rem; + padding: 0.85rem 0.9rem; border: 1px solid var(--line); - border-radius: var(--radius); + border-radius: var(--radius-sm); background: var(--surface); - box-shadow: var(--shadow-soft); } .stat dt { - margin-bottom: 0.35rem; + margin-bottom: 0.3rem; + font-family: var(--mono); color: var(--muted); - font-size: 0.74rem; - font-weight: 700; + font-size: 0.68rem; + font-weight: 600; + letter-spacing: 0.06em; text-transform: uppercase; } .stat dd { margin: 0; - color: var(--text); - font-size: 0.97rem; - font-weight: 700; + color: var(--heading); + font-size: 0.94rem; + font-weight: 600; line-height: 1.35; } +/* ------------------------------------------------------------------ * + * Hero visual + * ------------------------------------------------------------------ */ .hero-visual { display: grid; - gap: 0.85rem; + gap: 1rem; } .panel { @@ -271,56 +522,139 @@ h1 { box-shadow: var(--shadow); } -.panel-visual { - padding: 0.95rem; +.hero-figure { + position: relative; + margin: 0; + padding: 0.6rem; + border: 1px solid var(--line-strong); + border-radius: var(--radius); + background: var(--surface-strong); + box-shadow: var(--shadow); } -.panel-visual img { +.hero-figure img { display: block; width: 100%; height: auto; + border-radius: calc(var(--radius) - 4px); +} + +.hero-figure figcaption { + position: absolute; + left: 1rem; + bottom: 1rem; + padding: 0.3rem 0.7rem; + border-radius: 999px; + background: rgba(8, 8, 11, 0.72); + backdrop-filter: blur(6px); + color: #eaeaf0; + font-family: var(--mono); + font-size: 0.72rem; } .pill-row { display: flex; flex-wrap: wrap; - gap: 0.45rem; + gap: 0.4rem; } .pill { display: inline-flex; align-items: center; - min-height: 2rem; - padding: 0.38rem 0.65rem; + min-height: 1.9rem; + padding: 0.32rem 0.7rem; border: 1px solid var(--line); border-radius: 999px; - background: rgba(255, 255, 255, 0.9); + background: var(--surface); color: var(--muted-strong); - font-size: 0.86rem; - font-weight: 600; + font-family: var(--mono); + font-size: 0.78rem; + font-weight: 500; } +/* ------------------------------------------------------------------ * + * Section head + * ------------------------------------------------------------------ */ .section-head { display: flex; justify-content: space-between; align-items: flex-end; - gap: 1rem; - margin-bottom: 1rem; + gap: 1.5rem; + margin-bottom: 1.8rem; } .section-head h2 { margin-bottom: 0; - font-size: 1.55rem; - line-height: 1.2; + font-size: clamp(1.5rem, 2.4vw, 2rem); + line-height: 1.15; + letter-spacing: -0.02em; } .section-head p { - max-width: 64ch; + max-width: 56ch; margin-bottom: 0; color: var(--muted); line-height: 1.65; } +/* ------------------------------------------------------------------ * + * Gallery + * ------------------------------------------------------------------ */ +.gallery-grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 1rem; +} + +.shot { + position: relative; + margin: 0; + border: 1px solid var(--line); + border-radius: var(--radius); + overflow: hidden; + background: var(--surface-strong); + box-shadow: var(--shadow-soft); + transition: transform 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease; +} + +.shot:hover { + transform: translateY(-3px); + border-color: var(--line-strong); + box-shadow: var(--shadow); +} + +.shot img { + display: block; + width: 100%; + aspect-ratio: 1 / 1; + object-fit: cover; +} + +.shot-tag { + position: absolute; + top: 0.7rem; + right: 0.7rem; + padding: 0.22rem 0.6rem; + border-radius: 999px; + background: rgba(8, 8, 11, 0.72); + backdrop-filter: blur(6px); + color: #eaeaf0; + font-family: var(--mono); + font-size: 0.68rem; + letter-spacing: 0.02em; +} + +.shot figcaption { + padding: 0.75rem 0.9rem; + border-top: 1px solid var(--line); + color: var(--muted-strong); + font-size: 0.86rem; + line-height: 1.5; +} + +/* ------------------------------------------------------------------ * + * Timeline + * ------------------------------------------------------------------ */ .timeline { display: grid; gap: 0.75rem; @@ -328,18 +662,19 @@ h1 { .timeline-item { display: grid; - grid-template-columns: 108px minmax(0, 1fr); + grid-template-columns: 116px minmax(0, 1fr); gap: 1rem; - padding: 0.9rem 1rem; + padding: 0.9rem 1.1rem; border: 1px solid var(--line); - border-radius: var(--radius); + border-radius: var(--radius-sm); background: var(--surface); - box-shadow: var(--shadow-soft); } .timeline-item time { - color: var(--blue); - font-weight: 800; + font-family: var(--mono); + color: var(--accent); + font-size: 0.86rem; + font-weight: 600; } .timeline-item p { @@ -348,80 +683,99 @@ h1 { line-height: 1.6; } +/* ------------------------------------------------------------------ * + * Snapshot + * ------------------------------------------------------------------ */ .snapshot-grid, .performance-grid { display: grid; - grid-template-columns: minmax(0, 1.02fr) minmax(280px, 0.98fr); - gap: 1rem; + grid-template-columns: minmax(0, 1fr) minmax(280px, 0.95fr); + gap: 1.2rem; } .screenshot { - padding: 0.9rem; + margin: 0; + padding: 0.8rem; } .screenshot img { display: block; width: 100%; height: auto; - border-radius: calc(var(--radius) - 1px); + border-radius: var(--radius-sm); + border: 1px solid var(--line); } .screenshot figcaption { - margin-top: 0.7rem; + margin-top: 0.75rem; color: var(--muted); - font-size: 0.92rem; + font-size: 0.9rem; line-height: 1.55; } .notes-panel { - padding: 1rem; + padding: 1.4rem; } .notes-panel h3 { - margin-bottom: 0.75rem; - font-size: 1.08rem; + margin-bottom: 0.9rem; + font-size: 1.1rem; } .notes-panel ul { margin: 0; padding-left: 1.1rem; display: grid; - gap: 0.65rem; + gap: 0.7rem; color: var(--muted-strong); line-height: 1.6; } +.notes-panel li::marker { + color: var(--accent); +} + +/* ------------------------------------------------------------------ * + * Feature grid + * ------------------------------------------------------------------ */ .feature-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); - gap: 0.9rem; + gap: 1rem; } .feature { - padding: 1rem; + padding: 1.3rem; border: 1px solid var(--line); border-radius: var(--radius); background: var(--surface); - box-shadow: var(--shadow-soft); + transition: border-color 0.2s ease, transform 0.2s ease; +} + +.feature:hover { + border-color: var(--line-strong); + transform: translateY(-2px); } .feature h3 { margin-bottom: 0.55rem; - font-size: 1rem; + font-size: 1.02rem; } .feature p { margin-bottom: 0; color: var(--muted-strong); - line-height: 1.65; + line-height: 1.6; } +/* ------------------------------------------------------------------ * + * Tables + * ------------------------------------------------------------------ */ .table-shell { overflow-x: auto; border: 1px solid var(--line); border-radius: var(--radius); background: var(--surface); - box-shadow: var(--shadow); } .table-shell.compact table { @@ -430,23 +784,25 @@ h1 { table { width: 100%; - min-width: 760px; + min-width: 640px; border-collapse: collapse; } th, td { - padding: 0.9rem 1rem; + padding: 0.85rem 1.1rem; border-bottom: 1px solid var(--line); text-align: left; vertical-align: top; } th { - background: #f8fafc; + background: var(--bg-2); color: var(--muted); - font-size: 0.74rem; - font-weight: 800; + font-family: var(--mono); + font-size: 0.72rem; + font-weight: 600; + letter-spacing: 0.05em; text-transform: uppercase; } @@ -454,21 +810,41 @@ tbody tr:last-child td { border-bottom: none; } +tbody tr:hover td { + background: var(--surface-hover); +} + tbody td { color: var(--muted-strong); line-height: 1.55; } .panel-subtitle { - margin-bottom: 0.85rem; + margin-bottom: 0.9rem; color: var(--muted); line-height: 1.6; } +.performance-grid .panel { + padding: 1.3rem; +} + +.performance-grid .panel h3 { + margin-bottom: 0.4rem; + font-size: 1.1rem; +} + +.performance-grid .table-shell { + margin-top: 0.5rem; +} + +/* ------------------------------------------------------------------ * + * Docs link grid + * ------------------------------------------------------------------ */ .link-grid { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); - gap: 0.9rem; + gap: 1rem; } .link-card { @@ -476,51 +852,52 @@ tbody td { flex-direction: column; justify-content: space-between; min-height: 9rem; - padding: 1rem; + padding: 1.2rem; border: 1px solid var(--line); border-radius: var(--radius); background: var(--surface); - box-shadow: var(--shadow-soft); - text-decoration: none; - transition: - transform 0.15s ease, - border-color 0.15s ease, - box-shadow 0.15s ease; + color: var(--text); + transition: transform 0.15s ease, border-color 0.15s ease, background 0.15s ease; } .link-card:hover, .link-card:focus-visible { - border-color: #9fb6d9; - transform: translateY(-1px); - box-shadow: 0 8px 20px rgba(15, 23, 42, 0.08); + border-color: var(--accent); + background: var(--surface-hover); + color: var(--text); + transform: translateY(-2px); } .link-card strong { - margin-bottom: 0.55rem; + margin-bottom: 0.5rem; font-size: 1.02rem; + color: var(--heading); } .link-card span { - color: var(--muted-strong); - line-height: 1.55; + color: var(--muted); + line-height: 1.5; + font-size: 0.9rem; } .link-arrow { - margin-top: 0.8rem; - color: var(--blue); + margin-top: 0.9rem; + color: var(--accent); font-size: 1.1rem; - font-weight: 800; + font-weight: 700; } +/* ------------------------------------------------------------------ * + * Footer + * ------------------------------------------------------------------ */ .footer { - padding: 1.5rem 0 2.6rem; + padding: 2.4rem 0 3rem; + border-top: 1px solid var(--line); } .footer-inner { - padding-top: 0.5rem; - border-top: 1px solid rgba(201, 213, 227, 0.9); color: var(--muted); - font-size: 0.94rem; + font-size: 0.92rem; line-height: 1.6; } @@ -528,16 +905,9 @@ tbody td { margin-bottom: 0.35rem; } -.footer a { - color: var(--blue); - text-decoration: none; -} - -.footer a:hover, -.footer a:focus-visible { - text-decoration: underline; -} - +/* ------------------------------------------------------------------ * + * Responsive + * ------------------------------------------------------------------ */ @media (max-width: 1120px) { .hero-grid, .snapshot-grid, @@ -545,42 +915,39 @@ tbody td { grid-template-columns: 1fr; } + .hero { + padding-top: 2.6rem; + } + .feature-grid, .link-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } - .stats { + .gallery-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } } @media (max-width: 760px) { .page-shell { - width: min(100% - 1rem, 1180px); + width: min(100% - 1.5rem, 1180px); } - .topbar-inner { - align-items: start; - padding: 0.7rem 0 0.8rem; - flex-direction: column; + .section-band { + padding: 2.6rem 0; } - .brand img { - width: min(14rem, 100%); + .topbar-inner { + min-height: 3.6rem; } .topnav { - justify-content: flex-start; - gap: 0.75rem; + gap: 0.9rem; } - .hero { - padding-top: 1.4rem; - } - - h1 { - font-size: clamp(2.45rem, 12vw, 3.4rem); + .topnav a:not(.nav-cta) { + display: none; } .section-head { @@ -590,17 +957,30 @@ tbody td { .feature-grid, .link-grid, - .stats { + .stats, + .gallery-grid { grid-template-columns: 1fr; } + .stats { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + .timeline-item { grid-template-columns: 1fr; - gap: 0.35rem; + gap: 0.3rem; } .button { - width: 100%; + flex: 1 1 auto; justify-content: center; } } + +@media (prefers-reduced-motion: reduce) { + * { + scroll-behavior: auto !important; + transition-duration: 0.001ms !important; + animation-duration: 0.001ms !important; + } +}