Mesh Gradient Dark Blue Clean
Use When
- The whole page should feel futuristic, premium, clean, and infrastructural.
- A dark-blue mesh gradient should power the composition, not sit behind it as a generic backdrop.
- The interface needs a central hero shell, restrained navigation, floating network hints, framed sections, and slow technical motion.
Direction
Build on a near-black foundation with a deep navy or steel-blue undertone. Place a shader-like mesh gradient, CPPN-style field, abstract WebGL veil, or canvas light field inside the main hero shell. Keep the surrounding system disciplined: crisp typography, thin rails, corner markers, tiny status dots, quiet frames, and sparse node callouts.
This is not an airy blue page. This is not generic glassmorphism. The mesh is the visual engine inside a minimal system shell.
System Recipe
- Foundation: near-black navy, not flat black.
- Hero shell: large rounded container with a subtle white-to-transparent gradient border and darker inner fill.
- Mesh field: blue-led procedural canvas or WebGL layer inside the shell.
- Typography: white headlines, gray-blue support copy, restrained accents.
- Navigation: compact dark translucent pill with light edge gradient.
- Nodes: a few floating glass pills, active dots, tiny labels, and connector lines.
- Structure: thin vertical rails, corner squares, numeric markers, and framed lower sections.
- CTAs: one bright solid capsule plus one ghost or glass capsule with a faint border gradient.
- Motion: slow mesh drift, subtle scan streaks, masked text reveal, or tiny node shimmer.
Color Tokens
:root {
--mesh-bg: #030712;
--mesh-bg-blue: #07111f;
--mesh-shell: rgba(7, 13, 25, 0.82);
--mesh-shell-inner: rgba(4, 9, 18, 0.72);
--mesh-line: rgba(191, 219, 254, 0.14);
--mesh-line-strong: rgba(226, 232, 240, 0.28);
--mesh-text: #f8fafc;
--mesh-copy: #9fb2ca;
--mesh-muted: #64748b;
--mesh-accent: #dbeafe;
--mesh-cobalt: #1d4ed8;
--mesh-indigo: #312e81;
--mesh-steel: #385a7c;
}
Page Foundation
.mesh-page {
min-height: 100vh;
color: var(--mesh-text);
background:
radial-gradient(circle at 50% 0%, rgba(29, 78, 216, 0.18), transparent 34rem),
linear-gradient(180deg, var(--mesh-bg-blue), var(--mesh-bg) 48%, #01030a);
}
.mesh-page::selection {
color: #020617;
background: var(--mesh-accent);
}
Hero Shell
Use a border-gradient wrapper and a darker content surface. The mesh canvas sits behind the content inside the shell.
.mesh-shell {
position: relative;
overflow: hidden;
border: 1px solid transparent;
border-radius: 32px;
background:
linear-gradient(var(--mesh-shell), var(--mesh-shell)) padding-box,
linear-gradient(145deg, rgba(255, 255, 255, 0.46), rgba(147, 197, 253, 0.18), rgba(255, 255, 255, 0.04)) border-box;
box-shadow:
0 40px 100px rgba(0, 0, 0, 0.42),
inset 0 1px 0 rgba(255, 255, 255, 0.10);
}
.mesh-shell__field {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
opacity: 0.78;
pointer-events: none;
}
.mesh-shell__content {
position: relative;
z-index: 2;
min-height: clamp(560px, 72vh, 820px);
padding: clamp(28px, 6vw, 84px);
background:
linear-gradient(180deg, rgba(4, 9, 18, 0.22), rgba(4, 9, 18, 0.62)),
var(--mesh-shell-inner);
}
<section class="mesh-shell">
<canvas class="mesh-shell__field" data-dark-blue-mesh></canvas>
<div class="mesh-shell__content">
<nav class="mesh-nav">...</nav>
<h1>Infrastructure for intelligent interfaces.</h1>
<p>...</p>
</div>
</section>
Canvas Mesh Field
Use WebGL or Three.js for the final build when available. This 2D canvas pattern is a good fallback for warped gradients, soft mesh movement, and smoky blue highlights.
function initDarkBlueMesh(canvas) {
const ctx = canvas.getContext("2d");
const reduceMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
let width = 0;
let height = 0;
let frame = 0;
let rafId = 0;
const points = [
{ x: 0.18, y: 0.30, r: 0.45, color: "rgba(29, 78, 216, 0.55)" },
{ x: 0.68, y: 0.22, r: 0.38, color: "rgba(49, 46, 129, 0.58)" },
{ x: 0.78, y: 0.72, r: 0.52, color: "rgba(56, 90, 124, 0.48)" },
{ x: 0.42, y: 0.58, r: 0.34, color: "rgba(219, 234, 254, 0.18)" },
];
function resize() {
const rect = canvas.getBoundingClientRect();
const dpr = Math.min(window.devicePixelRatio || 1, 1.5);
width = Math.max(1, rect.width);
height = Math.max(1, rect.height);
canvas.width = Math.floor(width * dpr);
canvas.height = Math.floor(height * dpr);
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
}
function draw(time = 0) {
ctx.clearRect(0, 0, width, height);
ctx.fillStyle = "#030712";
ctx.fillRect(0, 0, width, height);
ctx.globalCompositeOperation = "screen";
points.forEach((point, index) => {
const drift = reduceMotion ? 0 : Math.sin(time * 0.00018 + index) * 24;
const x = point.x * width + drift;
const y = point.y * height + Math.cos(time * 0.00016 + index) * 18;
const radius = Math.max(width, height) * point.r;
const gradient = ctx.createRadialGradient(x, y, 0, x, y, radius);
gradient.addColorStop(0, point.color);
gradient.addColorStop(1, "rgba(3, 7, 18, 0)");
ctx.fillStyle = gradient;
ctx.fillRect(0, 0, width, height);
});
ctx.globalCompositeOperation = "source-over";
ctx.fillStyle = "rgba(255, 255, 255, 0.035)";
for (let y = (frame % 28); y < height; y += 28) {
ctx.fillRect(0, y, width, 1);
}
frame += 1;
if (!reduceMotion) rafId = requestAnimationFrame(draw);
}
function handleResize() {
cancelAnimationFrame(rafId);
resize();
draw();
}
resize();
draw();
window.addEventListener("resize", handleResize);
return () => {
cancelAnimationFrame(rafId);
window.removeEventListener("resize", handleResize);
};
}
Navigation
.mesh-nav {
display: flex;
align-items: center;
gap: 6px;
width: fit-content;
padding: 6px;
border: 1px solid transparent;
border-radius: 999px;
background:
linear-gradient(rgba(5, 12, 24, 0.76), rgba(5, 12, 24, 0.76)) padding-box,
linear-gradient(120deg, rgba(255, 255, 255, 0.28), rgba(96, 165, 250, 0.16), rgba(255, 255, 255, 0.04)) border-box;
backdrop-filter: blur(18px);
}
.mesh-nav a {
color: var(--mesh-copy);
border-radius: 999px;
padding: 9px 14px;
text-decoration: none;
}
.mesh-nav a:hover,
.mesh-nav a[aria-current="page"] {
color: var(--mesh-text);
background: rgba(255, 255, 255, 0.08);
}
Nodes And Rails
.mesh-node {
position: absolute;
display: inline-flex;
align-items: center;
gap: 8px;
border: 1px solid rgba(191, 219, 254, 0.18);
border-radius: 999px;
padding: 7px 10px;
color: var(--mesh-copy);
background: rgba(5, 12, 24, 0.58);
backdrop-filter: blur(14px);
font-size: 12px;
}
.mesh-node::before {
content: "";
width: 6px;
height: 6px;
border-radius: 50%;
background: #bfdbfe;
box-shadow: 0 0 18px rgba(147, 197, 253, 0.72);
}
.mesh-rail {
position: absolute;
top: 0;
bottom: 0;
width: 1px;
background: linear-gradient(180deg, transparent, var(--mesh-line), transparent);
}
.mesh-corner {
position: absolute;
width: 6px;
height: 6px;
background: var(--mesh-line-strong);
}
CTA Pair
.mesh-cta-primary {
color: #020617;
background: #f8fafc;
box-shadow: 0 16px 36px rgba(219, 234, 254, 0.18);
}
.mesh-cta-secondary {
color: var(--mesh-text);
border: 1px solid transparent;
background:
linear-gradient(rgba(5, 12, 24, 0.62), rgba(5, 12, 24, 0.62)) padding-box,
linear-gradient(135deg, rgba(255, 255, 255, 0.28), rgba(96, 165, 250, 0.12), rgba(255, 255, 255, 0.04)) border-box;
}
Motion Defaults
- Mesh drift: very slow, 12s to 28s loops, no sharp easing.
- Scan streaks: sparse vertical drops or horizontal lines, low opacity.
- Text: masked reveal on hero headline and section labels only.
- Nodes: shimmer or pulse at low intensity, not constant blinking.
- Reduced motion: freeze mesh, remove shimmer, keep layout and contrast intact.
Tuning Knobs
- Mesh visibility: increase opacity only until mood is legible; copy stays primary.
- Blue hue: shift between indigo, navy, cobalt, and steel blue while preserving the dark base.
- Shell contrast: tune outer border, inner fill, and canvas opacity until layers feel crisp.
- Network density: add fewer nodes for luxury, more markers for technical infrastructure.
- Motion intensity: slow and atmospheric, never game-like.
Avoid
- Flat CSS gradients with no mesh-like depth or procedural character.
- Bright cyan overload or electric-blue glow everywhere.
- Crowded dashboards, excessive floating widgets, or competing cards.
- Generic translucent blobs with no rails, frames, markers, or system structure.
- Overbuilt shader effects that reduce readability.
- Airy light-blue sections that break the dark premium atmosphere.
Quick Checks
- The mesh is visible inside the hero shell and feels dimensional.
- The foundation reads near-black navy, not flat black or bright blue.
- The shell has a crisp border-gradient edge and darker inner surface.
- Typography remains bright, sharp, and readable over the field.
- Nodes, rails, markers, and scan lines are sparse and aligned.
- CTAs have clear contrast: solid primary, glass secondary.
1---2name: mengto-mesh-gradient-dark-blue-clean3description: Create a futuristic, premium, clean dark-blue mesh-gradient design system across background rendering, hero shell, navigation, floating nodes, framed sections, CTAs, and motion. Use when the interface needs a near-black navy foundation, procedural blue mesh atmosphere, disciplined minimal structure, and infrastructural or planetary depth.4---56# Mesh Gradient Dark Blue Clean78## Use When9- The whole page should feel futuristic, premium, clean, and infrastructural.10- A dark-blue mesh gradient should power the composition, not sit behind it as a generic backdrop.11- The interface needs a central hero shell, restrained navigation, floating network hints, framed sections, and slow technical motion.1213## Direction14Build on a near-black foundation with a deep navy or steel-blue undertone. Place a shader-like mesh gradient, CPPN-style field, abstract WebGL veil, or canvas light field inside the main hero shell. Keep the surrounding system disciplined: crisp typography, thin rails, corner markers, tiny status dots, quiet frames, and sparse node callouts.1516This is not an airy blue page. This is not generic glassmorphism. The mesh is the visual engine inside a minimal system shell.1718## System Recipe191. Foundation: near-black navy, not flat black.202. Hero shell: large rounded container with a subtle white-to-transparent gradient border and darker inner fill.213. Mesh field: blue-led procedural canvas or WebGL layer inside the shell.224. Typography: white headlines, gray-blue support copy, restrained accents.235. Navigation: compact dark translucent pill with light edge gradient.246. Nodes: a few floating glass pills, active dots, tiny labels, and connector lines.257. Structure: thin vertical rails, corner squares, numeric markers, and framed lower sections.268. CTAs: one bright solid capsule plus one ghost or glass capsule with a faint border gradient.279. Motion: slow mesh drift, subtle scan streaks, masked text reveal, or tiny node shimmer.2829## Color Tokens3031```css32:root {33 --mesh-bg: #030712;34 --mesh-bg-blue: #07111f;35 --mesh-shell: rgba(7, 13, 25, 0.82);36 --mesh-shell-inner: rgba(4, 9, 18, 0.72);37 --mesh-line: rgba(191, 219, 254, 0.14);38 --mesh-line-strong: rgba(226, 232, 240, 0.28);39 --mesh-text: #f8fafc;40 --mesh-copy: #9fb2ca;41 --mesh-muted: #64748b;42 --mesh-accent: #dbeafe;43 --mesh-cobalt: #1d4ed8;44 --mesh-indigo: #312e81;45 --mesh-steel: #385a7c;46}47```4849## Page Foundation5051```css52.mesh-page {53 min-height: 100vh;54 color: var(--mesh-text);55 background:56 radial-gradient(circle at 50% 0%, rgba(29, 78, 216, 0.18), transparent 34rem),57 linear-gradient(180deg, var(--mesh-bg-blue), var(--mesh-bg) 48%, #01030a);58}5960.mesh-page::selection {61 color: #020617;62 background: var(--mesh-accent);63}64```6566## Hero Shell67Use a border-gradient wrapper and a darker content surface. The mesh canvas sits behind the content inside the shell.6869```css70.mesh-shell {71 position: relative;72 overflow: hidden;73 border: 1px solid transparent;74 border-radius: 32px;75 background:76 linear-gradient(var(--mesh-shell), var(--mesh-shell)) padding-box,77 linear-gradient(145deg, rgba(255, 255, 255, 0.46), rgba(147, 197, 253, 0.18), rgba(255, 255, 255, 0.04)) border-box;78 box-shadow:79 0 40px 100px rgba(0, 0, 0, 0.42),80 inset 0 1px 0 rgba(255, 255, 255, 0.10);81}8283.mesh-shell__field {84 position: absolute;85 inset: 0;86 width: 100%;87 height: 100%;88 opacity: 0.78;89 pointer-events: none;90}9192.mesh-shell__content {93 position: relative;94 z-index: 2;95 min-height: clamp(560px, 72vh, 820px);96 padding: clamp(28px, 6vw, 84px);97 background:98 linear-gradient(180deg, rgba(4, 9, 18, 0.22), rgba(4, 9, 18, 0.62)),99 var(--mesh-shell-inner);100}101```102103```html104<section class="mesh-shell">105 <canvas class="mesh-shell__field" data-dark-blue-mesh></canvas>106 <div class="mesh-shell__content">107 <nav class="mesh-nav">...</nav>108 <h1>Infrastructure for intelligent interfaces.</h1>109 <p>...</p>110 </div>111</section>112```113114## Canvas Mesh Field115Use WebGL or Three.js for the final build when available. This 2D canvas pattern is a good fallback for warped gradients, soft mesh movement, and smoky blue highlights.116117```js118function initDarkBlueMesh(canvas) {119 const ctx = canvas.getContext("2d");120 const reduceMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;121 let width = 0;122 let height = 0;123 let frame = 0;124 let rafId = 0;125126 const points = [127 { x: 0.18, y: 0.30, r: 0.45, color: "rgba(29, 78, 216, 0.55)" },128 { x: 0.68, y: 0.22, r: 0.38, color: "rgba(49, 46, 129, 0.58)" },129 { x: 0.78, y: 0.72, r: 0.52, color: "rgba(56, 90, 124, 0.48)" },130 { x: 0.42, y: 0.58, r: 0.34, color: "rgba(219, 234, 254, 0.18)" },131 ];132133 function resize() {134 const rect = canvas.getBoundingClientRect();135 const dpr = Math.min(window.devicePixelRatio || 1, 1.5);136 width = Math.max(1, rect.width);137 height = Math.max(1, rect.height);138 canvas.width = Math.floor(width * dpr);139 canvas.height = Math.floor(height * dpr);140 ctx.setTransform(dpr, 0, 0, dpr, 0, 0);141 }142143 function draw(time = 0) {144 ctx.clearRect(0, 0, width, height);145 ctx.fillStyle = "#030712";146 ctx.fillRect(0, 0, width, height);147 ctx.globalCompositeOperation = "screen";148149 points.forEach((point, index) => {150 const drift = reduceMotion ? 0 : Math.sin(time * 0.00018 + index) * 24;151 const x = point.x * width + drift;152 const y = point.y * height + Math.cos(time * 0.00016 + index) * 18;153 const radius = Math.max(width, height) * point.r;154 const gradient = ctx.createRadialGradient(x, y, 0, x, y, radius);155 gradient.addColorStop(0, point.color);156 gradient.addColorStop(1, "rgba(3, 7, 18, 0)");157 ctx.fillStyle = gradient;158 ctx.fillRect(0, 0, width, height);159 });160161 ctx.globalCompositeOperation = "source-over";162 ctx.fillStyle = "rgba(255, 255, 255, 0.035)";163 for (let y = (frame % 28); y < height; y += 28) {164 ctx.fillRect(0, y, width, 1);165 }166167 frame += 1;168 if (!reduceMotion) rafId = requestAnimationFrame(draw);169 }170171 function handleResize() {172 cancelAnimationFrame(rafId);173 resize();174 draw();175 }176177 resize();178 draw();179 window.addEventListener("resize", handleResize);180181 return () => {182 cancelAnimationFrame(rafId);183 window.removeEventListener("resize", handleResize);184 };185}186```187188## Navigation189190```css191.mesh-nav {192 display: flex;193 align-items: center;194 gap: 6px;195 width: fit-content;196 padding: 6px;197 border: 1px solid transparent;198 border-radius: 999px;199 background:200 linear-gradient(rgba(5, 12, 24, 0.76), rgba(5, 12, 24, 0.76)) padding-box,201 linear-gradient(120deg, rgba(255, 255, 255, 0.28), rgba(96, 165, 250, 0.16), rgba(255, 255, 255, 0.04)) border-box;202 backdrop-filter: blur(18px);203}204205.mesh-nav a {206 color: var(--mesh-copy);207 border-radius: 999px;208 padding: 9px 14px;209 text-decoration: none;210}211212.mesh-nav a:hover,213.mesh-nav a[aria-current="page"] {214 color: var(--mesh-text);215 background: rgba(255, 255, 255, 0.08);216}217```218219## Nodes And Rails220221```css222.mesh-node {223 position: absolute;224 display: inline-flex;225 align-items: center;226 gap: 8px;227 border: 1px solid rgba(191, 219, 254, 0.18);228 border-radius: 999px;229 padding: 7px 10px;230 color: var(--mesh-copy);231 background: rgba(5, 12, 24, 0.58);232 backdrop-filter: blur(14px);233 font-size: 12px;234}235236.mesh-node::before {237 content: "";238 width: 6px;239 height: 6px;240 border-radius: 50%;241 background: #bfdbfe;242 box-shadow: 0 0 18px rgba(147, 197, 253, 0.72);243}244245.mesh-rail {246 position: absolute;247 top: 0;248 bottom: 0;249 width: 1px;250 background: linear-gradient(180deg, transparent, var(--mesh-line), transparent);251}252253.mesh-corner {254 position: absolute;255 width: 6px;256 height: 6px;257 background: var(--mesh-line-strong);258}259```260261## CTA Pair262263```css264.mesh-cta-primary {265 color: #020617;266 background: #f8fafc;267 box-shadow: 0 16px 36px rgba(219, 234, 254, 0.18);268}269270.mesh-cta-secondary {271 color: var(--mesh-text);272 border: 1px solid transparent;273 background:274 linear-gradient(rgba(5, 12, 24, 0.62), rgba(5, 12, 24, 0.62)) padding-box,275 linear-gradient(135deg, rgba(255, 255, 255, 0.28), rgba(96, 165, 250, 0.12), rgba(255, 255, 255, 0.04)) border-box;276}277```278279## Motion Defaults280- Mesh drift: very slow, 12s to 28s loops, no sharp easing.281- Scan streaks: sparse vertical drops or horizontal lines, low opacity.282- Text: masked reveal on hero headline and section labels only.283- Nodes: shimmer or pulse at low intensity, not constant blinking.284- Reduced motion: freeze mesh, remove shimmer, keep layout and contrast intact.285286## Tuning Knobs287- Mesh visibility: increase opacity only until mood is legible; copy stays primary.288- Blue hue: shift between indigo, navy, cobalt, and steel blue while preserving the dark base.289- Shell contrast: tune outer border, inner fill, and canvas opacity until layers feel crisp.290- Network density: add fewer nodes for luxury, more markers for technical infrastructure.291- Motion intensity: slow and atmospheric, never game-like.292293## Avoid294- Flat CSS gradients with no mesh-like depth or procedural character.295- Bright cyan overload or electric-blue glow everywhere.296- Crowded dashboards, excessive floating widgets, or competing cards.297- Generic translucent blobs with no rails, frames, markers, or system structure.298- Overbuilt shader effects that reduce readability.299- Airy light-blue sections that break the dark premium atmosphere.300301## Quick Checks302- The mesh is visible inside the hero shell and feels dimensional.303- The foundation reads near-black navy, not flat black or bright blue.304- The shell has a crisp border-gradient edge and darker inner surface.305- Typography remains bright, sharp, and readable over the field.306- Nodes, rails, markers, and scan lines are sparse and aligned.307- CTAs have clear contrast: solid primary, glass secondary.