Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ to run the **internal** build locally with those sections visible. See
- `npm run build:internal` — production build with internal-only sections
- `npm run start` — serve the production build
- `npm run lint` — eslint (next/core-web-vitals)
- `npm run typecheck` — `tsc --noEmit`
- `npm run typecheck` — generate Next.js route and asset types, then run `tsc --noEmit`
- `npm test` — vitest
- `npm run test:e2e` — playwright end-to-end tests (builds and serves the app first)
- `npm run llms` / `npm run agents` — regenerate the agent index files
Expand All @@ -38,7 +38,7 @@ to run the **internal** build locally with those sections visible. See

`.github/workflows/ci.yml` runs on every pull request and on pushes to `main`:

- **typecheck** — `tsc --noEmit`
- **typecheck** — generate Next.js route and asset types, then run `tsc --noEmit`
- **lint** — eslint
- **test** — vitest. Includes `app/snapshots/networks.contract.test.ts`, which
asserts every expected network stays served by `/api/snapshots`. Nodes sync
Expand Down
39 changes: 39 additions & 0 deletions app/globals.css
Original file line number Diff line number Diff line change
Expand Up @@ -665,6 +665,44 @@ button {
animation: b20-confetti-pop 900ms cubic-bezier(0.16, 1, 0.3, 1) both;
}

/* A light band sweeping across the inclusion badge once, then twice more,
spaced out — enough to draw the eye to the timing claim without looping
forever. The overlay is a gradient on an ::after so the badge's own
background token stays untouched. */
@keyframes inclusion-shimmer {
0% { transform: translateX(-100%); }
18% { transform: translateX(100%); }
100% { transform: translateX(100%); }
}

.inclusion-shimmer {
position: relative;
overflow: hidden;
}

.inclusion-shimmer::after {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(
105deg,
transparent 30%,
rgba(255, 255, 255, 0.7) 50%,
transparent 70%
);
animation: inclusion-shimmer 2.4s ease-out 0.3s 3;
pointer-events: none;
}

[data-theme='dark'] .inclusion-shimmer::after {
background: linear-gradient(
105deg,
transparent 30%,
rgba(115, 162, 255, 0.35) 50%,
transparent 70%
);
}

@media (prefers-reduced-motion: reduce) {
@keyframes fade-in {
from { opacity: 0; }
Expand All @@ -676,6 +714,7 @@ button {
.animate-in-delay-1,
.animate-in-delay-2,
.animate-in-delay-3 { animation-delay: 0ms; }
.inclusion-shimmer::after { animation: none; }
.animate-spin { animation: spin 3s linear infinite; }
/* Suppress continuous/infinite motion for reduced-motion users */
.animate-gentle-ping { animation: none; opacity: 0.75; }
Expand Down
1 change: 1 addition & 0 deletions app/sitemap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ export default function sitemap(): MetadataRoute.Sitemap {
{ path: '/vibenet', priority: 0.8, changeFrequency: 'weekly' },
{ path: '/vibenet/explorer', priority: 0.6, changeFrequency: 'daily' },
{ path: '/vibenet/faucet', priority: 0.5, changeFrequency: 'monthly' },
{ path: '/vibenet/demos/200', priority: 0.5, changeFrequency: 'weekly' },
{ path: '/vibenet/demos/account', priority: 0.5, changeFrequency: 'weekly' },
{ path: '/vibenet/demos/b20', priority: 0.5, changeFrequency: 'weekly' },
{ path: '/vibenet/demos/validity', priority: 0.5, changeFrequency: 'weekly' },
Expand Down
Loading
Loading