@rizom/site-rizom-ai 0.2.0-alpha.180 → 0.2.0-alpha.181
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +4 -4
- package/src/brain-screens.tsx +9 -0
- package/src/layout.tsx +31 -32
- package/src/shared.tsx +16 -9
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rizom/site-rizom-ai",
|
|
3
|
-
"version": "0.2.0-alpha.
|
|
3
|
+
"version": "0.2.0-alpha.181",
|
|
4
4
|
"description": "Rizom AI site package for hosted Rover deployments",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
"prepack": "publish-manifest prepare"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@rizom/site": "0.2.0-alpha.
|
|
22
|
-
"@rizom/site-rizom": "0.2.0-alpha.
|
|
23
|
-
"@rizom/site-sections": "0.2.0-alpha.
|
|
21
|
+
"@rizom/site": "0.2.0-alpha.181",
|
|
22
|
+
"@rizom/site-rizom": "0.2.0-alpha.181",
|
|
23
|
+
"@rizom/site-sections": "0.2.0-alpha.181",
|
|
24
24
|
"preact": "^10.27.2"
|
|
25
25
|
},
|
|
26
26
|
"publishConfig": {
|
package/src/brain-screens.tsx
CHANGED
|
@@ -97,6 +97,15 @@ export const SCREEN_STYLES = `
|
|
|
97
97
|
@keyframes brainScreenFlicker { 0%, 100% { opacity: .75; } 50% { opacity: 1; } }
|
|
98
98
|
@media (prefers-reduced-motion: reduce) { .brain-screen .ifc-status i { animation: none; } }
|
|
99
99
|
@media (max-width: 900px) { .brain-screen .dash-canvas { grid-template-columns: 1fr; } .brain-screen .dash-canvas .ifc-card { grid-column: auto !important; } }
|
|
100
|
+
@media (max-width: 640px) {
|
|
101
|
+
.brain-screen .ifc-strip { flex-wrap: wrap; row-gap: 6px; }
|
|
102
|
+
.brain-screen .ifc-tabs { overflow-x: auto; }
|
|
103
|
+
/* The studio's library pane becomes a horizontal file strip above the
|
|
104
|
+
manuscript instead of a crushed side column. */
|
|
105
|
+
.brain-screen .cms-cols { grid-template-columns: 1fr; }
|
|
106
|
+
.brain-screen .cms-list { display: flex; gap: 2px; overflow-x: auto; padding: 8px 10px; border-right: 0; border-bottom: 1px solid rgba(241,234,221,.09); }
|
|
107
|
+
.brain-screen .cms-item { flex: none; gap: 6px; padding: 5px 10px; border-left: 0; border-radius: 6px; }
|
|
108
|
+
}
|
|
100
109
|
`;
|
|
101
110
|
|
|
102
111
|
/** Emitted once per page; scopes all screen styles under `.brain-screen`. */
|
package/src/layout.tsx
CHANGED
|
@@ -67,13 +67,14 @@ const FACE_CHROME: Record<FaceKey, FaceChrome> = {
|
|
|
67
67
|
},
|
|
68
68
|
};
|
|
69
69
|
|
|
70
|
-
// The umbrella page's own chrome: the plain wordmark,
|
|
71
|
-
//
|
|
70
|
+
// The umbrella page's own chrome: the plain wordmark, the org-level indexes
|
|
71
|
+
// (everything published, everyone in the network — the strip above already
|
|
72
|
+
// offers the faces), and a get-started CTA that points at the product room.
|
|
72
73
|
const HOME_CHROME: FaceChrome = {
|
|
73
74
|
nameplate: null,
|
|
74
75
|
links: [
|
|
75
|
-
{ label: "
|
|
76
|
-
{ label: "
|
|
76
|
+
{ label: "Writing", href: "/writing" },
|
|
77
|
+
{ label: "Network", href: "/network" },
|
|
77
78
|
],
|
|
78
79
|
cta: { label: "Get Started", href: "/brain" },
|
|
79
80
|
};
|
|
@@ -94,8 +95,9 @@ function activeFace(path: string): FaceKey {
|
|
|
94
95
|
}
|
|
95
96
|
|
|
96
97
|
// The org-level indexes: cross-room aggregations (everything published,
|
|
97
|
-
// everyone in the network) that belong to no single face. They live
|
|
98
|
-
//
|
|
98
|
+
// everyone in the network) that belong to no single face. They live in the
|
|
99
|
+
// home nav and the footer; the strip only needs their paths so no face
|
|
100
|
+
// claims the current page there.
|
|
99
101
|
const ORG_INDEXES: { label: string; href: string }[] = [
|
|
100
102
|
{ label: "Writing", href: "/writing" },
|
|
101
103
|
{ label: "Network", href: "/network" },
|
|
@@ -113,7 +115,7 @@ function FacesStrip({ path }: { path: string }): JSX.Element {
|
|
|
113
115
|
const activeIndex = orgIndexActive(path);
|
|
114
116
|
const home = isHome(path);
|
|
115
117
|
return (
|
|
116
|
-
<div className="relative z-[2] flex items-baseline gap-
|
|
118
|
+
<div className="relative z-[2] flex flex-wrap items-baseline gap-x-4 gap-y-1.5 border-b border-theme-light px-4 py-3 font-label text-label-xs uppercase tracking-[0.12em] sm:gap-x-6 sm:px-6 sm:tracking-[0.14em] md:px-10 xl:px-20">
|
|
117
119
|
<span className="text-theme-muted">rizom</span>
|
|
118
120
|
{FACES.map((item) =>
|
|
119
121
|
// No face is current on the umbrella home, nor on a cross-room index.
|
|
@@ -121,7 +123,7 @@ function FacesStrip({ path }: { path: string }): JSX.Element {
|
|
|
121
123
|
<a
|
|
122
124
|
key={item.key}
|
|
123
125
|
href={item.href}
|
|
124
|
-
className="text-accent"
|
|
126
|
+
className="-my-2 inline-block py-2 text-accent"
|
|
125
127
|
aria-current="page"
|
|
126
128
|
>
|
|
127
129
|
{item.label}
|
|
@@ -130,28 +132,23 @@ function FacesStrip({ path }: { path: string }): JSX.Element {
|
|
|
130
132
|
<a
|
|
131
133
|
key={item.key}
|
|
132
134
|
href={item.href}
|
|
133
|
-
className="text-theme-light transition-colors hover:text-theme"
|
|
135
|
+
className="-my-2 inline-block py-2 text-theme-light transition-colors hover:text-theme"
|
|
134
136
|
>
|
|
135
137
|
{item.label}
|
|
136
138
|
</a>
|
|
137
139
|
),
|
|
138
140
|
)}
|
|
139
|
-
<div className="ml-auto flex items-baseline
|
|
140
|
-
{
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
>
|
|
151
|
-
{index.label}
|
|
152
|
-
</a>
|
|
153
|
-
);
|
|
154
|
-
})}
|
|
141
|
+
<div className="ml-auto flex items-baseline">
|
|
142
|
+
{/* boot.js binds by id and syncs the label; window.toggleTheme
|
|
143
|
+
(injected by site-engine) flips data-theme + persists it. */}
|
|
144
|
+
<button
|
|
145
|
+
id="themeToggle"
|
|
146
|
+
type="button"
|
|
147
|
+
aria-label="Toggle color theme"
|
|
148
|
+
className="-my-2 inline-block cursor-pointer py-2 uppercase text-theme-light transition-colors hover:text-theme"
|
|
149
|
+
>
|
|
150
|
+
☀ Light
|
|
151
|
+
</button>
|
|
155
152
|
</div>
|
|
156
153
|
</div>
|
|
157
154
|
);
|
|
@@ -161,13 +158,13 @@ function Wordmark({ nameplate }: { nameplate: string | null }): JSX.Element {
|
|
|
161
158
|
return (
|
|
162
159
|
<a
|
|
163
160
|
href="/"
|
|
164
|
-
className="font-display text-[26px] font-semibold tracking-[-0.01em] [font-variation-settings:'SOFT'_100]"
|
|
161
|
+
className="font-display text-[clamp(22px,5.5vw,26px)] font-semibold tracking-[-0.01em] [font-variation-settings:'SOFT'_100]"
|
|
165
162
|
aria-label="Rizom home"
|
|
166
163
|
>
|
|
167
164
|
<span className="text-theme">rizom</span>
|
|
168
165
|
<span className="text-accent">.</span>
|
|
169
166
|
{nameplate && (
|
|
170
|
-
<span className="text-[20px] font-normal text-theme-muted">
|
|
167
|
+
<span className="text-[clamp(17px,4.3vw,20px)] font-normal text-theme-muted">
|
|
171
168
|
{nameplate}
|
|
172
169
|
</span>
|
|
173
170
|
)}
|
|
@@ -189,9 +186,11 @@ function FaceNav({
|
|
|
189
186
|
const links: FaceLink[] = chrome.links;
|
|
190
187
|
|
|
191
188
|
return (
|
|
192
|
-
<nav className="relative z-[2] flex items-baseline gap-
|
|
189
|
+
<nav className="relative z-[2] flex items-baseline gap-4 px-4 py-5 sm:gap-8 sm:px-6 md:px-10 xl:px-20">
|
|
193
190
|
<Wordmark nameplate={chrome.nameplate} />
|
|
194
|
-
|
|
191
|
+
{/* Below sm the footer carries every chrome link; the row keeps
|
|
192
|
+
just the wordmark and the CTA so nothing overflows. */}
|
|
193
|
+
<div className="hidden items-baseline gap-7 sm:flex">
|
|
195
194
|
{links.map((link) => (
|
|
196
195
|
<a
|
|
197
196
|
key={`${link.href}-${link.label}`}
|
|
@@ -205,7 +204,7 @@ function FaceNav({
|
|
|
205
204
|
<div className="flex-1" />
|
|
206
205
|
<a
|
|
207
206
|
href={chrome.cta.href}
|
|
208
|
-
className="self-center rounded-[3px] bg-accent px-
|
|
207
|
+
className="self-center whitespace-nowrap rounded-[3px] bg-accent px-3.5 py-2 font-body text-[15px] font-medium text-theme-inverse transition-[filter,transform] hover:brightness-110 hover:-translate-y-px sm:px-[18px] sm:py-[9px] sm:text-[16px]"
|
|
209
208
|
>
|
|
210
209
|
{chrome.cta.label}
|
|
211
210
|
</a>
|
|
@@ -265,7 +264,7 @@ function SiteFooter({
|
|
|
265
264
|
siteInfo: RizomLayoutProps["siteInfo"];
|
|
266
265
|
}): JSX.Element {
|
|
267
266
|
return (
|
|
268
|
-
<footer className="relative z-[1] grid gap-10 border-t border-theme px-
|
|
267
|
+
<footer className="relative z-[1] grid gap-10 border-t border-theme px-4 pt-11 pb-[38px] sm:grid-cols-2 sm:px-6 md:px-10 lg:grid-cols-[1.3fr_1fr_1fr_1fr] xl:px-20">
|
|
269
268
|
<div>
|
|
270
269
|
<a
|
|
271
270
|
href="/"
|
|
@@ -287,7 +286,7 @@ function SiteFooter({
|
|
|
287
286
|
<a
|
|
288
287
|
key={link.href + link.label}
|
|
289
288
|
href={link.href}
|
|
290
|
-
className="block py-
|
|
289
|
+
className="block py-1.5 font-body text-[15.5px] text-theme-light no-underline transition-colors hover:text-theme"
|
|
291
290
|
>
|
|
292
291
|
{link.label}
|
|
293
292
|
</a>
|
package/src/shared.tsx
CHANGED
|
@@ -44,11 +44,15 @@ export function SectCap({
|
|
|
44
44
|
<p
|
|
45
45
|
className={`reveal flex flex-wrap items-baseline gap-3.5 font-label text-label-xs uppercase tracking-[0.2em] ${className}`}
|
|
46
46
|
>
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
47
|
+
{/* Tick and lead wrap as one unit — a long trail may drop to its
|
|
48
|
+
own line, but the tick never orphans away from the lead. */}
|
|
49
|
+
<span className="flex items-baseline gap-3.5">
|
|
50
|
+
<span
|
|
51
|
+
aria-hidden="true"
|
|
52
|
+
className="h-px w-[26px] self-center bg-accent opacity-80"
|
|
53
|
+
/>
|
|
54
|
+
<span className="font-medium text-accent">{lead}</span>
|
|
55
|
+
</span>
|
|
52
56
|
{trail && (
|
|
53
57
|
<span className="normal-case tracking-[0.1em] text-theme-light">
|
|
54
58
|
{trail}
|
|
@@ -133,7 +137,10 @@ export function IndexRow({
|
|
|
133
137
|
<span className="font-label text-label-xs uppercase tracking-[0.1em] text-theme-light">
|
|
134
138
|
{row.kicker}
|
|
135
139
|
</span>
|
|
136
|
-
|
|
140
|
+
{/* Below md the two-column grid is folio|kicker on the first row;
|
|
141
|
+
title and meta take full-width rows of their own instead of
|
|
142
|
+
falling into the 44px folio column. */}
|
|
143
|
+
<span className="col-span-2 block md:col-span-1">
|
|
137
144
|
<span className="block font-display text-[26px] font-[470] tracking-[-0.01em] text-theme transition-colors group-hover:text-accent [font-variation-settings:'SOFT'_75,'opsz'_60]">
|
|
138
145
|
{row.title}
|
|
139
146
|
</span>
|
|
@@ -141,7 +148,7 @@ export function IndexRow({
|
|
|
141
148
|
{row.text}
|
|
142
149
|
</span>
|
|
143
150
|
</span>
|
|
144
|
-
<span className="text-right font-label text-[12px] text-theme-light">
|
|
151
|
+
<span className="col-span-2 text-right font-label text-[12px] text-theme-light md:col-span-1">
|
|
145
152
|
{row.meta ?? "→"}
|
|
146
153
|
{row.metaSub && (
|
|
147
154
|
<small className="block text-theme-light opacity-70">
|
|
@@ -152,7 +159,7 @@ export function IndexRow({
|
|
|
152
159
|
</>
|
|
153
160
|
);
|
|
154
161
|
|
|
155
|
-
const rowClass = `reveal ${delayClass} group grid max-w-[1040px] grid-cols-[44px_1fr] items-baseline gap-6 border-t border-theme-light py-6 no-underline md:grid-cols-[64px_176px_1fr_auto]`;
|
|
162
|
+
const rowClass = `reveal ${delayClass} group grid max-w-[1040px] grid-cols-[44px_1fr] items-baseline gap-x-6 gap-y-2 border-t border-theme-light py-6 no-underline md:grid-cols-[64px_176px_1fr_auto] md:gap-6`;
|
|
156
163
|
|
|
157
164
|
return row.href ? (
|
|
158
165
|
<a href={row.href} className={rowClass}>
|
|
@@ -181,7 +188,7 @@ export function AliveLine({
|
|
|
181
188
|
<a
|
|
182
189
|
key={link.href + link.label}
|
|
183
190
|
href={link.href}
|
|
184
|
-
className={`reveal ${i > 0 ? "reveal-delay-1" : ""} border-b border-theme-light font-label text-[12px] text-theme-light no-underline transition-colors hover:text-accent-bright`}
|
|
191
|
+
className={`reveal ${i > 0 ? "reveal-delay-1" : ""} -mt-2 inline-block border-b border-theme-light pt-2 font-label text-[12px] text-theme-light no-underline transition-colors hover:text-accent-bright`}
|
|
185
192
|
>
|
|
186
193
|
{link.label}
|
|
187
194
|
</a>
|