feat(docs): redesign portal with shared UI system

This commit is contained in:
2026-07-19 22:43:29 +05:30
parent bb37d148e6
commit b190bbf41c
120 changed files with 20198 additions and 242 deletions
+884
View File
@@ -1046,6 +1046,816 @@ footer a {
}
}
/* Documentation design system v2 -------------------------------------------------
A focused application layer over the semantic WRNexus theme and @wrnexus/ui.
Components keep their own internal spacing; page rhythm belongs to this site. */
:root {
--docs-content: 78rem;
--docs-reading: 48rem;
--docs-header: 4.5rem;
--docs-radius: 1.25rem;
--docs-shadow: 0 1px 2px rgb(15 23 42 / 0.04), 0 18px 48px rgb(15 23 42 / 0.07);
--docs-grid: color-mix(in srgb, var(--border) 38%, transparent);
}
body {
background-color: var(--bg);
background-image:
radial-gradient(
circle at 10% -10%,
color-mix(in srgb, var(--brand) 11%, transparent),
transparent 28rem
),
radial-gradient(
circle at 95% 12%,
color-mix(in srgb, #a855f7 8%, transparent),
transparent 30rem
);
background-attachment: fixed;
}
.docs-shell {
overflow: clip;
}
.docs-skip-link {
position: fixed;
z-index: 100;
top: 0.6rem;
left: 0.6rem;
transform: translateY(-180%);
transition: transform 160ms ease;
}
.docs-skip-link:focus-within {
transform: translateY(0);
}
.docs-skip-link > a {
display: inline-flex;
min-height: 2.75rem;
align-items: center;
border-radius: 0.7rem;
padding: 0.65rem 1rem;
color: white;
background: var(--brand-strong);
box-shadow: 0 12px 30px color-mix(in srgb, var(--brand) 30%, transparent);
font-size: 0.85rem;
font-weight: 750;
text-decoration: none;
}
.docs-skip-link > button {
display: none !important;
}
.docs-shell::before,
.docs-shell::after {
display: none;
}
.topbar {
grid-template-columns: minmax(13rem, 1fr) auto minmax(13rem, 1fr);
height: var(--docs-header);
padding-inline: clamp(1rem, 3vw, 3rem);
border-bottom-color: color-mix(in srgb, var(--border) 72%, transparent);
background: color-mix(in srgb, var(--bg) 88%, transparent);
box-shadow: 0 1px 0 rgb(255 255 255 / 0.04);
}
.brand {
gap: 0.75rem;
font-size: 1rem;
}
.brand span {
width: 2.25rem;
height: 2.25rem;
border: 1px solid rgb(255 255 255 / 0.18);
border-radius: 0.8rem;
background: linear-gradient(145deg, var(--brand), #8b5cf6 58%, #c026d3);
box-shadow: 0 8px 24px color-mix(in srgb, var(--brand) 28%, transparent);
}
.topbar nav {
gap: 0.25rem;
padding: 0.3rem;
border: 1px solid color-mix(in srgb, var(--border) 72%, transparent);
border-radius: 0.9rem;
background: color-mix(in srgb, var(--surface) 72%, transparent);
}
.topbar nav a {
padding: 0.55rem 0.8rem;
border-radius: 0.65rem;
font-size: 0.82rem;
transition:
color 180ms ease,
background 180ms ease,
transform 180ms ease;
}
.topbar nav a::after {
display: none;
}
.topbar nav a:hover {
background: var(--surface-soft);
transform: translateY(-1px);
}
.preview-pill {
min-height: 2.25rem;
padding-inline: 0.8rem;
border-color: color-mix(in srgb, var(--brand) 28%, var(--border));
background: color-mix(in srgb, var(--brand) 8%, var(--surface));
}
.theme-button {
border-radius: 0.75rem;
background: color-mix(in srgb, var(--surface) 86%, transparent);
}
.theme-button:hover {
border-color: color-mix(in srgb, var(--brand) 50%, var(--border));
color: var(--brand-strong);
transform: translateY(-1px) rotate(6deg);
box-shadow: 0 8px 22px color-mix(in srgb, var(--brand) 12%, transparent);
}
.mobile-doc-nav,
.marketing-mobile-nav {
position: sticky;
top: var(--docs-header);
z-index: 19;
border-bottom-color: var(--border);
background: color-mix(in srgb, var(--bg) 94%, transparent);
backdrop-filter: blur(18px);
}
.mobile-doc-nav details,
.marketing-mobile-nav details {
width: min(var(--docs-content), 100%);
margin-inline: auto;
}
.mobile-doc-nav summary,
.marketing-mobile-nav summary {
list-style: none;
}
.mobile-doc-nav summary::after,
.marketing-mobile-nav summary::after {
float: right;
content: "+";
color: var(--brand-strong);
}
.mobile-doc-nav details[open] summary::after,
.marketing-mobile-nav details[open] summary::after {
content: "";
}
.portal-main,
.marketing-main,
.page {
width: min(var(--docs-content), 100%);
margin-inline: auto;
padding-inline: clamp(1rem, 4vw, 3.5rem);
}
.breadcrumbs {
gap: 0.6rem;
padding-block: 1.25rem;
font-size: 0.75rem;
font-weight: 650;
}
.breadcrumbs a:hover {
color: var(--brand-strong);
}
.documentation.standalone {
position: relative;
max-width: var(--docs-reading);
margin: clamp(1rem, 4vw, 3rem) auto clamp(4rem, 8vw, 7rem);
padding: clamp(1.4rem, 4vw, 3.5rem);
border: 1px solid color-mix(in srgb, var(--border) 86%, transparent);
border-radius: clamp(1.25rem, 3vw, 2rem);
background: color-mix(in srgb, var(--surface) 92%, transparent);
box-shadow: var(--docs-shadow);
backdrop-filter: blur(18px);
}
.documentation.standalone::before {
position: absolute;
top: 0;
left: clamp(1.4rem, 4vw, 3.5rem);
width: 5rem;
height: 3px;
border-radius: 999px;
background: linear-gradient(90deg, var(--brand), #a855f7);
content: "";
}
.documentation h1,
.hero h1,
.marketing-hero h1 {
text-wrap: balance;
}
.documentation.standalone > h1 {
max-width: 13ch;
margin-top: 1.25rem;
font-size: clamp(2.25rem, 6vw, 4.5rem);
line-height: 0.98;
letter-spacing: -0.06em;
}
.documentation.standalone > p:first-of-type {
max-width: 42rem;
font-size: clamp(1.05rem, 2vw, 1.2rem);
line-height: 1.75;
}
.prose h2 {
margin-top: 3.5rem;
padding-top: 1rem;
border-top: 1px solid color-mix(in srgb, var(--border) 75%, transparent);
font-size: clamp(1.45rem, 3vw, 2rem);
letter-spacing: -0.035em;
scroll-margin-top: calc(var(--docs-header) + 1.5rem);
}
.prose h3 {
margin-top: 2.5rem;
font-size: 1.25rem;
}
.prose p,
.prose li {
color: var(--muted);
line-height: 1.82;
}
.prose strong,
.prose h2,
.prose h3,
.prose h4 {
color: var(--text);
}
.prose a,
.documentation a {
text-decoration-color: color-mix(in srgb, var(--brand) 45%, transparent);
text-underline-offset: 0.22em;
}
.prose a:hover,
.documentation a:hover {
color: var(--brand-strong);
text-decoration-color: currentColor;
}
pre {
border-color: color-mix(in srgb, #334155 86%, transparent) !important;
border-radius: 1rem !important;
background: #070a12 !important;
box-shadow: 0 18px 46px rgb(2 6 23 / 0.22);
}
pre code {
color: #dbeafe;
font-size: 0.86rem;
line-height: 1.75;
}
:not(pre) > code {
border: 1px solid color-mix(in srgb, var(--brand) 15%, var(--border));
border-radius: 0.42rem;
padding: 0.12em 0.4em;
color: color-mix(in srgb, var(--brand-strong) 86%, var(--text));
background: color-mix(in srgb, var(--brand) 7%, var(--surface-soft));
font-size: 0.88em;
}
.prose blockquote,
.access-callout {
border: 1px solid color-mix(in srgb, var(--brand) 28%, var(--border));
border-left: 3px solid var(--brand);
border-radius: 0 1rem 1rem 0;
background: color-mix(in srgb, var(--brand) 6%, var(--surface));
box-shadow: none;
}
.table-wrap {
margin-block: 1.5rem;
border: 1px solid var(--border);
border-radius: 1rem;
background: color-mix(in srgb, var(--surface) 90%, transparent);
box-shadow: 0 10px 32px rgb(15 23 42 / 0.05);
}
table {
margin: 0 !important;
}
th {
background: color-mix(in srgb, var(--surface-soft) 88%, transparent);
font-size: 0.72rem;
letter-spacing: 0.06em;
text-transform: uppercase;
}
tbody tr {
transition: background 160ms ease;
}
tbody tr:hover {
background: color-mix(in srgb, var(--brand) 4%, transparent);
}
.local-toc,
.on-this-page {
border: 1px solid var(--border);
border-radius: 1rem;
padding: 1rem;
background: color-mix(in srgb, var(--surface-soft) 72%, transparent);
}
.local-toc a,
.on-this-page a {
border-radius: 0.5rem;
padding: 0.45rem 0.6rem;
text-decoration: none;
transition:
color 160ms ease,
background 160ms ease;
}
.local-toc a:hover,
.on-this-page a:hover {
background: color-mix(in srgb, var(--brand) 10%, transparent);
}
.page > .hero.compact {
position: relative;
overflow: hidden;
margin-top: clamp(1.5rem, 5vw, 4rem);
border: 1px solid var(--border);
border-radius: clamp(1.5rem, 4vw, 2.5rem);
padding: clamp(2rem, 6vw, 5rem);
background:
linear-gradient(
145deg,
color-mix(in srgb, var(--surface) 94%, transparent),
color-mix(in srgb, var(--brand) 7%, var(--surface))
),
var(--surface);
box-shadow: var(--docs-shadow);
}
.page > .hero.compact::after {
position: absolute;
top: -9rem;
right: -8rem;
width: 24rem;
height: 24rem;
border-radius: 999px;
background: color-mix(in srgb, var(--brand) 12%, transparent);
content: "";
filter: blur(1px);
}
.hero.compact > * {
position: relative;
z-index: 1;
}
.hero.compact h1 {
max-width: 12ch;
font-size: clamp(2.5rem, 7vw, 5.5rem);
line-height: 0.95;
letter-spacing: -0.065em;
}
.search {
min-height: 3.35rem;
border-radius: 0.9rem;
background: color-mix(in srgb, var(--surface) 92%, transparent);
box-shadow: 0 8px 28px rgb(15 23 42 / 0.08);
}
.category-filter {
position: sticky;
top: calc(var(--docs-header) + 0.75rem);
z-index: 10;
margin-block: 1.5rem;
border: 1px solid color-mix(in srgb, var(--border) 80%, transparent);
border-radius: 1.15rem;
padding: 0.8rem;
background: color-mix(in srgb, var(--bg) 88%, transparent);
box-shadow: 0 12px 34px rgb(15 23 42 / 0.07);
backdrop-filter: blur(18px);
}
.category-row button {
border-radius: 0.65rem;
transition:
transform 160ms ease,
border-color 160ms ease,
color 160ms ease,
background 160ms ease;
}
.category-row button:hover {
border-color: color-mix(in srgb, var(--brand) 48%, var(--border));
color: var(--brand-strong);
transform: translateY(-1px);
}
.package-grid {
gap: 1rem;
padding-bottom: clamp(4rem, 8vw, 7rem);
}
.package-card {
position: relative;
min-height: 13rem;
overflow: hidden;
border-radius: 1.15rem;
background: color-mix(in srgb, var(--surface) 94%, transparent);
box-shadow: 0 1px 2px rgb(15 23 42 / 0.04);
}
.package-card::before {
position: absolute;
inset: 0 auto 0 0;
width: 3px;
background: linear-gradient(180deg, var(--brand), #a855f7);
content: "";
opacity: 0;
transition: opacity 200ms ease;
}
.package-card:hover {
border-color: color-mix(in srgb, var(--brand) 34%, var(--border));
box-shadow: 0 18px 44px color-mix(in srgb, var(--brand) 10%, transparent);
}
.package-card:hover::before {
opacity: 1;
}
.package-card .card-link {
margin-top: auto;
color: var(--brand-strong);
font-size: 0.82rem;
font-weight: 750;
}
.package-page {
display: grid;
grid-template-columns: minmax(12rem, 15rem) minmax(0, 1fr);
gap: clamp(2rem, 5vw, 5rem);
align-items: start;
padding-top: clamp(2rem, 5vw, 4rem);
padding-bottom: clamp(4rem, 8vw, 7rem);
}
.sidebar {
top: calc(var(--docs-header) + 1.5rem);
border: 1px solid var(--border);
border-radius: 1.15rem;
padding: 1.1rem;
background: color-mix(in srgb, var(--surface) 88%, transparent);
box-shadow: 0 12px 34px rgb(15 23 42 / 0.06);
backdrop-filter: blur(16px);
}
.sidebar nav {
gap: 0.25rem;
}
.sidebar nav a {
border-radius: 0.6rem;
padding: 0.55rem 0.65rem;
transition:
color 160ms ease,
background 160ms ease,
transform 160ms ease;
}
.sidebar nav a:hover {
color: var(--brand-strong);
background: color-mix(in srgb, var(--brand) 8%, transparent);
transform: translateX(2px);
}
.package-page > .documentation {
min-width: 0;
max-width: 57rem;
}
.doc-intro {
margin-bottom: 2.5rem;
padding: clamp(1.5rem, 4vw, 3rem);
border: 1px solid var(--border);
border-radius: 1.5rem;
background: color-mix(in srgb, var(--surface) 92%, transparent);
box-shadow: var(--docs-shadow);
}
.doc-intro h1 {
font-size: clamp(2.25rem, 6vw, 4.5rem);
letter-spacing: -0.06em;
}
.example-card {
border-radius: 1rem;
background: color-mix(in srgb, var(--surface) 92%, transparent);
box-shadow: 0 10px 28px rgb(15 23 42 / 0.05);
}
.marketing-main {
padding-bottom: 2rem;
}
.marketing-main .marketing-hero {
position: relative;
min-height: min(48rem, calc(100vh - var(--docs-header)));
display: grid;
align-content: center;
overflow: hidden;
border-bottom: 0;
}
.marketing-hero::before {
position: absolute;
z-index: -1;
top: 8%;
right: -15%;
width: min(42rem, 70vw);
aspect-ratio: 1;
border: 1px solid color-mix(in srgb, var(--brand) 18%, transparent);
border-radius: 38% 62% 62% 38% / 46% 42% 58% 54%;
background:
linear-gradient(var(--docs-grid) 1px, transparent 1px),
linear-gradient(90deg, var(--docs-grid) 1px, transparent 1px),
radial-gradient(circle, color-mix(in srgb, var(--brand) 17%, transparent), transparent 65%);
background-size:
2rem 2rem,
2rem 2rem,
auto;
content: "";
transform: rotate(-9deg);
}
.marketing-hero h1 {
max-width: 10ch;
font-size: clamp(3rem, 8vw, 7rem);
line-height: 0.88;
letter-spacing: -0.075em;
}
.marketing-hero h1 em {
color: transparent;
background: linear-gradient(90deg, var(--brand), #a855f7 55%, #ec4899);
background-clip: text;
font-style: normal;
}
.marketing-hero > p:not(.eyebrow):not(.access-note) {
max-width: 48rem;
font-size: clamp(1.05rem, 2vw, 1.25rem);
line-height: 1.7;
}
.actions a {
min-height: 2.85rem;
border-radius: 0.75rem;
transition:
transform 180ms ease,
border-color 180ms ease,
box-shadow 180ms ease,
background 180ms ease;
}
.actions a:hover {
transform: translateY(-2px);
box-shadow: 0 12px 28px color-mix(in srgb, var(--brand) 13%, transparent);
}
.marketing-main > section:not(.marketing-hero) {
margin-block: 1.25rem;
border: 1px solid color-mix(in srgb, var(--border) 82%, transparent);
border-radius: clamp(1.25rem, 3vw, 2rem);
padding: clamp(2rem, 6vw, 5rem);
background: color-mix(in srgb, var(--surface) 88%, transparent);
box-shadow: 0 14px 44px rgb(15 23 42 / 0.05);
backdrop-filter: blur(14px);
}
.marketing-main .feature-grid article {
min-height: 12rem;
border: 1px solid var(--border);
border-radius: 1rem;
padding: 1.25rem;
background: color-mix(in srgb, var(--surface-soft) 66%, transparent);
transition:
transform 220ms ease,
border-color 220ms ease,
box-shadow 220ms ease;
}
.marketing-main .feature-grid article:hover {
border-color: color-mix(in srgb, var(--brand) 35%, var(--border));
transform: translateY(-3px);
box-shadow: 0 16px 34px color-mix(in srgb, var(--brand) 8%, transparent);
}
.lifecycle li {
border-radius: 1rem;
background: color-mix(in srgb, var(--surface-soft) 72%, transparent);
}
footer {
display: grid;
grid-template-columns: minmax(16rem, 1fr) auto;
gap: 2rem;
align-items: center;
width: min(var(--docs-content), calc(100% - 2rem));
margin: 2rem auto 1rem;
border: 1px solid var(--border);
border-radius: 1.5rem;
padding: clamp(1.4rem, 4vw, 2.5rem);
background: color-mix(in srgb, var(--surface) 88%, transparent);
box-shadow: var(--docs-shadow);
backdrop-filter: blur(18px);
}
.footer-brand {
display: flex;
align-items: center;
gap: 0.9rem;
}
.footer-mark {
display: grid;
place-items: center;
width: 2.8rem;
height: 2.8rem;
border-radius: 0.9rem;
color: white;
background: linear-gradient(145deg, var(--brand), #8b5cf6, #c026d3);
font-weight: 850;
box-shadow: 0 10px 25px color-mix(in srgb, var(--brand) 22%, transparent);
}
.footer-brand p {
display: grid;
gap: 0.2rem;
margin: 0;
}
.footer-brand p span,
.footer-meta {
color: var(--muted);
font-size: 0.78rem;
}
footer nav {
justify-content: end;
}
.footer-meta {
grid-column: 1 / -1;
margin: 0;
padding-top: 1rem;
border-top: 1px solid var(--border);
}
[data-component="BackToTop"] {
z-index: 70;
}
@media (max-width: 900px) {
.topbar {
grid-template-columns: 1fr auto;
}
.portal-main,
.marketing-main,
.page {
padding-inline: 1rem;
}
.package-page {
grid-template-columns: 1fr;
}
.sidebar {
position: relative;
top: auto;
}
.sidebar nav {
display: flex;
flex-wrap: wrap;
}
.category-filter {
top: calc(var(--docs-header) + 3.5rem);
}
footer {
grid-template-columns: 1fr;
}
footer nav {
justify-content: start;
}
}
@media (max-width: 600px) {
:root {
--docs-header: 4rem;
}
.topbar {
padding-inline: 1rem;
}
.brand span {
width: 2rem;
height: 2rem;
}
.preview-pill {
display: none;
}
.documentation.standalone {
margin-top: 0.5rem;
padding: 1.4rem;
border-radius: 1.25rem;
}
.documentation.standalone > h1,
.doc-intro h1 {
font-size: clamp(2.15rem, 13vw, 3.4rem);
}
.page > .hero.compact,
.marketing-main > section:not(.marketing-hero),
.doc-intro {
padding: 1.4rem;
}
.marketing-main .marketing-hero {
min-height: 42rem;
}
.marketing-hero h1 {
font-size: clamp(3rem, 16vw, 4.4rem);
}
.marketing-hero::before {
top: 3%;
right: -45%;
opacity: 0.7;
}
.category-filter {
position: relative;
top: auto;
}
.package-grid {
grid-template-columns: 1fr;
}
.package-card {
min-height: 11rem;
}
footer {
width: calc(100% - 2rem);
margin-top: 1rem;
border-radius: 1.15rem;
}
}
@media (prefers-reduced-motion: reduce) {
.marketing-hero::before,
.package-card,
.marketing-main .feature-grid article,
.actions a,
.topbar nav a {
transition: none;
}
}
/* Marketing shell restored from the visual system at 5eea460. */
.marketing-shell {
background:
@@ -1275,3 +2085,77 @@ footer a {
grid-template-columns: 1fr;
}
}
/* Keep the v2 marketing composition last in the cascade. */
.marketing-main {
width: min(var(--docs-content), 100%);
padding-inline: clamp(1rem, 4vw, 3.5rem);
padding-bottom: 2rem;
}
.marketing-main .marketing-hero {
min-height: min(48rem, calc(100vh - var(--docs-header)));
width: 100%;
max-width: 100%;
margin-inline: 0;
padding-inline: 0;
text-align: left;
}
.marketing-hero h1,
.marketing-hero > p,
.marketing-hero .actions,
.marketing-hero .access-note {
margin-inline: 0;
}
.marketing-hero h1 {
max-width: 10ch;
font-size: clamp(3rem, 8vw, 7rem);
line-height: 0.88;
letter-spacing: -0.075em;
}
.marketing-hero > p:not(.eyebrow):not(.access-note) {
max-width: 48rem;
}
.marketing-hero .actions {
justify-content: flex-start;
}
.marketing-main > section:not(.marketing-hero) {
width: 100%;
margin: 1.25rem 0;
border: 1px solid color-mix(in srgb, var(--border) 82%, transparent);
border-radius: clamp(1.25rem, 3vw, 2rem);
padding: clamp(2rem, 6vw, 5rem);
background: color-mix(in srgb, var(--surface) 88%, transparent);
box-shadow: 0 14px 44px rgb(15 23 42 / 0.05);
}
.marketing-main .feature-grid article {
padding: 1.25rem;
}
@media (max-width: 600px) {
.marketing-main {
padding-inline: 1rem;
}
.marketing-main .marketing-hero {
min-height: 42rem;
width: 100%;
padding-block: 4rem;
}
.marketing-hero h1,
.marketing-hero > p,
.marketing-hero .actions,
.marketing-hero .access-note,
.marketing-hero .code-window {
width: 100%;
max-width: 100%;
overflow-wrap: anywhere;
}
.marketing-hero h1 {
font-size: clamp(3rem, 16vw, 4.4rem);
}
.marketing-hero .actions {
justify-content: flex-start;
}
.marketing-main > section:not(.marketing-hero) {
width: 100%;
padding: 1.4rem;
}
}