From 964377765a33417c8e9d45424a2c55dadeab4166 Mon Sep 17 00:00:00 2001 From: rUv Date: Mon, 12 Oct 2026 20:28:12 -0700 Subject: [PATCH] Improve README SVG spatial motion and typography (#2257) --- assets/readme/cognitum.svg | 20 +++++++++- assets/readme/feature-agents.svg | 20 +++++++++- assets/readme/feature-automation.svg | 20 +++++++++- assets/readme/feature-edge.svg | 20 +++++++++- assets/readme/feature-pose.svg | 20 +++++++++- assets/readme/feature-presence.svg | 20 +++++++++- assets/readme/feature-vitals.svg | 20 +++++++++- assets/readme/header-docs.svg | 20 +++++++++- assets/readme/header-edge.svg | 20 +++++++++- assets/readme/header-evidence.svg | 20 +++++++++- assets/readme/header-features.svg | 20 +++++++++- assets/readme/header-learning.svg | 20 +++++++++- assets/readme/hero.svg | 20 +++++++++- assets/readme/nav-agents.svg | 20 +++++++++- assets/readme/nav-hardware.svg | 20 +++++++++- assets/readme/nav-home.svg | 20 +++++++++- assets/readme/nav-models.svg | 20 +++++++++- assets/readme/nav-seed.svg | 20 +++++++++- assets/readme/nav-start.svg | 20 +++++++++- assets/readme/overview.svg | 20 +++++++++- docs/readme-visual-system.md | 17 ++++++++- scripts/render-readme-visuals.py | 55 ++++++++++++++++++++++++---- 22 files changed, 443 insertions(+), 29 deletions(-) diff --git a/assets/readme/cognitum.svg b/assets/readme/cognitum.svg index c5a7615ae..ac939dbd8 100644 --- a/assets/readme/cognitum.svg +++ b/assets/readme/cognitum.svg @@ -1 +1,19 @@ -Explore Cognitum OneAmbient Intelligence at the edge of the physical world. Open cognitum.one.COGNITUM ONEAmbient Intelligence.At the edge of the physical world.Explore the platform behind the ecosystem.Explore Cognitum +Explore Cognitum OneAmbient Intelligence at the edge of the physical world. Open cognitum.one.COGNITUM ONEAmbient Intelligence.At the edge of the physical world.Explore the platform behind the ecosystem.Explore Cognitum diff --git a/assets/readme/feature-agents.svg b/assets/readme/feature-agents.svg index 7cd6197bc..a1cc7cec7 100644 --- a/assets/readme/feature-agents.svg +++ b/assets/readme/feature-agents.svg @@ -1 +1,19 @@ -A guided AI operatorSource-cited setup and verification. CLI, MCP and agent workflows. Conceptual animation; follow the linked source for capability limits.RUVIEW / 06A guided AI operatorSource-cited setup and verification.CLI, MCP and agent workflows.TOOLKIT GUIDE +A guided AI operatorSource-cited setup and verification. CLI, MCP and agent workflows. Conceptual animation; follow the linked source for capability limits.RUVIEW / 06A guided AI operatorSource-cited setup and verification.CLI, MCP and agent workflows.TOOLKIT GUIDE diff --git a/assets/readme/feature-automation.svg b/assets/readme/feature-automation.svg index 8104d37ab..90599c6d6 100644 --- a/assets/readme/feature-automation.svg +++ b/assets/readme/feature-automation.svg @@ -1 +1,19 @@ -Local automationConnect rooms to your smart home. Home Assistant, MQTT and Matter. Conceptual animation; follow the linked source for capability limits.RUVIEW / 05Local automationConnect rooms to your smart home.Home Assistant, MQTT and Matter.INTEGRATION GUIDE +Local automationConnect rooms to your smart home. Home Assistant, MQTT and Matter. Conceptual animation; follow the linked source for capability limits.RUVIEW / 05Local automationConnect rooms to your smart home.Home Assistant, MQTT and Matter.INTEGRATION GUIDE diff --git a/assets/readme/feature-edge.svg b/assets/readme/feature-edge.svg index d3c589cc1..b0221bfbe 100644 --- a/assets/readme/feature-edge.svg +++ b/assets/readme/feature-edge.svg @@ -1 +1,19 @@ -Edge sensor meshProvision, capture and calibrate. Explore ESP32 firmware and runbooks. Conceptual animation; follow the linked source for capability limits.RUVIEW / 04Edge sensor meshProvision, capture and calibrate.Explore ESP32 firmware and runbooks.HARDWARE GUIDE +Edge sensor meshProvision, capture and calibrate. Explore ESP32 firmware and runbooks. Conceptual animation; follow the linked source for capability limits.RUVIEW / 04Edge sensor meshProvision, capture and calibrate.Explore ESP32 firmware and runbooks.HARDWARE GUIDE diff --git a/assets/readme/feature-pose.svg b/assets/readme/feature-pose.svg index eeaa9cb20..d1c606962 100644 --- a/assets/readme/feature-pose.svg +++ b/assets/readme/feature-pose.svg @@ -1 +1,19 @@ -Pose researchTrain and compare body keypoints. Live accuracy differs from benchmarks. Conceptual animation; follow the linked source for capability limits.RUVIEW / 03Pose researchTrain and compare body keypoints.Live accuracy differs from benchmarks.READ THE EVIDENCE +Pose researchTrain and compare body keypoints. Live accuracy differs from benchmarks. Conceptual animation; follow the linked source for capability limits.RUVIEW / 03Pose researchTrain and compare body keypoints.Live accuracy differs from benchmarks.READ THE EVIDENCE diff --git a/assets/readme/feature-presence.svg b/assets/readme/feature-presence.svg index 910d9d0d8..5d72b0028 100644 --- a/assets/readme/feature-presence.svg +++ b/assets/readme/feature-presence.svg @@ -1 +1,19 @@ -Presence & motionExplore changes in room occupancy. Inspect motion features from CSI. Conceptual animation; follow the linked source for capability limits.RUVIEW / 01Presence & motionExplore changes in room occupancy.Inspect motion features from CSI.SENSING GUIDE +Presence & motionExplore changes in room occupancy. Inspect motion features from CSI. Conceptual animation; follow the linked source for capability limits.RUVIEW / 01Presence & motionExplore changes in room occupancy.Inspect motion features from CSI.SENSING GUIDE diff --git a/assets/readme/feature-vitals.svg b/assets/readme/feature-vitals.svg index c2cb41c03..ff2eab093 100644 --- a/assets/readme/feature-vitals.svg +++ b/assets/readme/feature-vitals.svg @@ -1 +1,19 @@ -Breathing & vital signalsInspect phase-derived signal trends. Validate estimates on your hardware. Conceptual animation; follow the linked source for capability limits.RUVIEW / 02Breathing & vital signalsInspect phase-derived signal trends.Validate estimates on your hardware.SIGNAL PIPELINE +Breathing & vital signalsInspect phase-derived signal trends. Validate estimates on your hardware. Conceptual animation; follow the linked source for capability limits.RUVIEW / 02Breathing & vital signalsInspect phase-derived signal trends.Validate estimates on your hardware.SIGNAL PIPELINE diff --git a/assets/readme/header-docs.svg b/assets/readme/header-docs.svg index 50e9885e7..63d2989cd 100644 --- a/assets/readme/header-docs.svg +++ b/assets/readme/header-docs.svg @@ -1 +1,19 @@ -Choose your next stepAnimated section heading. GUIDES / HARDWARE / INTEGRATIONSChoose your next stepGUIDES / HARDWARE / INTEGRATIONS +Choose your next stepAnimated section heading. GUIDES / HARDWARE / INTEGRATIONSChoose your next stepGUIDES / HARDWARE / INTEGRATIONS diff --git a/assets/readme/header-edge.svg b/assets/readme/header-edge.svg index 1c989c9f9..53e4a07e2 100644 --- a/assets/readme/header-edge.svg +++ b/assets/readme/header-edge.svg @@ -1 +1,19 @@ -Intelligence at the edgeAnimated section heading. SENSORS / FIRMWARE / MODULESIntelligence at the edgeSENSORS / FIRMWARE / MODULES +Intelligence at the edgeAnimated section heading. SENSORS / FIRMWARE / MODULESIntelligence at the edgeSENSORS / FIRMWARE / MODULES diff --git a/assets/readme/header-evidence.svg b/assets/readme/header-evidence.svg index 2b8a102b0..ea4c6fc3b 100644 --- a/assets/readme/header-evidence.svg +++ b/assets/readme/header-evidence.svg @@ -1 +1,19 @@ -Evidence before accuracy claimsAnimated section heading. BENCHMARKS / REPRODUCERS / LIMITSEvidence before accuracy claimsBENCHMARKS / REPRODUCERS / LIMITS +Evidence before accuracy claimsAnimated section heading. BENCHMARKS / REPRODUCERS / LIMITSEvidence before accuracy claimsBENCHMARKS / REPRODUCERS / LIMITS diff --git a/assets/readme/header-features.svg b/assets/readme/header-features.svg index 8eb839430..f2b26dc39 100644 --- a/assets/readme/header-features.svg +++ b/assets/readme/header-features.svg @@ -1 +1,19 @@ -Explore the capabilitiesAnimated section heading. SENSING / MODELS / AUTOMATIONExplore the capabilitiesSENSING / MODELS / AUTOMATION +Explore the capabilitiesAnimated section heading. SENSING / MODELS / AUTOMATIONExplore the capabilitiesSENSING / MODELS / AUTOMATION diff --git a/assets/readme/header-learning.svg b/assets/readme/header-learning.svg index ee40ae04e..6e87da6d8 100644 --- a/assets/readme/header-learning.svg +++ b/assets/readme/header-learning.svg @@ -1 +1,19 @@ -From recordings to modelsAnimated section heading. CAPTURE / TRAIN / EVALUATEFrom recordings to modelsCAPTURE / TRAIN / EVALUATE +From recordings to modelsAnimated section heading. CAPTURE / TRAIN / EVALUATEFrom recordings to modelsCAPTURE / TRAIN / EVALUATE diff --git a/assets/readme/hero.svg b/assets/readme/hero.svg index 51e0d1d44..22e95393e 100644 --- a/assets/readme/hero.svg +++ b/assets/readme/hero.svg @@ -1 +1,19 @@ -RuView: spaces become signalsAnimated conceptual RF field and room geometry. Explore the RuView user guide. This illustration is not a sensor measurement.RUVIEW / COGNITUM ECOSYSTEMRuViewSpaces become signals.Signals become understanding.Explore RF sensing, edge inference and local automation.Explore the guideRF SENSING / EDGE MODELS / LOCAL ACTIONCONCEPTUAL RF FIELD +RuView: spaces become signalsAnimated conceptual RF field and room geometry. Explore the RuView user guide. This illustration is not a sensor measurement.RUVIEW / COGNITUM ECOSYSTEMRuViewSpaces become signals.Signals become understanding.Explore RF sensing, edge inference and local automation.Explore the guideRF SENSING / EDGE MODELS / LOCAL ACTIONCONCEPTUAL RF FIELD diff --git a/assets/readme/nav-agents.svg b/assets/readme/nav-agents.svg index 5b427af96..baee746a7 100644 --- a/assets/readme/nav-agents.svg +++ b/assets/readme/nav-agents.svg @@ -1 +1,19 @@ -AI toolkitOpen AI toolkit. Animated navigation icon.AI toolkit +AI toolkitOpen AI toolkit. Animated navigation icon.AI toolkit diff --git a/assets/readme/nav-hardware.svg b/assets/readme/nav-hardware.svg index ab83aa8ad..3dba35673 100644 --- a/assets/readme/nav-hardware.svg +++ b/assets/readme/nav-hardware.svg @@ -1 +1,19 @@ -HardwareOpen Hardware. Animated navigation icon.Hardware +HardwareOpen Hardware. Animated navigation icon.Hardware diff --git a/assets/readme/nav-home.svg b/assets/readme/nav-home.svg index 1ef980672..92d79328c 100644 --- a/assets/readme/nav-home.svg +++ b/assets/readme/nav-home.svg @@ -1 +1,19 @@ -Smart homeOpen Smart home. Animated navigation icon.Smart home +Smart homeOpen Smart home. Animated navigation icon.Smart home diff --git a/assets/readme/nav-models.svg b/assets/readme/nav-models.svg index 41f538a74..bfd2e3f63 100644 --- a/assets/readme/nav-models.svg +++ b/assets/readme/nav-models.svg @@ -1 +1,19 @@ -ModelsOpen Models. Animated navigation icon.Models +ModelsOpen Models. Animated navigation icon.Models diff --git a/assets/readme/nav-seed.svg b/assets/readme/nav-seed.svg index 0788f4381..4e665f0bc 100644 --- a/assets/readme/nav-seed.svg +++ b/assets/readme/nav-seed.svg @@ -1 +1,19 @@ -CognitumOpen Cognitum. Animated navigation icon.Cognitum +CognitumOpen Cognitum. Animated navigation icon.Cognitum diff --git a/assets/readme/nav-start.svg b/assets/readme/nav-start.svg index 2e911f115..ae9588436 100644 --- a/assets/readme/nav-start.svg +++ b/assets/readme/nav-start.svg @@ -1 +1,19 @@ -Start hereOpen Start here. Animated navigation icon.Start here +Start hereOpen Start here. Animated navigation icon.Start here diff --git a/assets/readme/overview.svg b/assets/readme/overview.svg index 27d98d2b8..b5957733f 100644 --- a/assets/readme/overview.svg +++ b/assets/readme/overview.svg @@ -1 +1,19 @@ -RuView sensing overviewConceptual sequence: capture RF, extract context, act locally. Links to architecture and user documentation.SIGNAL TO CONTEXTA sensing loop you can inspect.01Capture RFCSI from supported hardwareProvision and calibrate02Extract contextSignal processing and modelsCompare against real data03Act locallyEvents, APIs and integrationsApply rules and review outputsCONCEPTUAL PIPELINE / HARDWARE AND ENVIRONMENT VALIDATION MATTER +RuView sensing overviewConceptual sequence: capture RF, extract context, act locally. Links to architecture and user documentation.SIGNAL TO CONTEXTA sensing loop you can inspect.01Capture RFCSI from supported hardwareProvision and calibrate02Extract contextSignal processing and modelsCompare against real data03Act locallyEvents, APIs and integrationsApply rules and review outputsCONCEPTUAL PIPELINE / HARDWARE AND ENVIRONMENT VALIDATION MATTER diff --git a/docs/readme-visual-system.md b/docs/readme-visual-system.md index ad6fcd740..5a6c2f16c 100644 --- a/docs/readme-visual-system.md +++ b/docs/readme-visual-system.md @@ -1,6 +1,12 @@ # RuView README visual system -The README uses a Cognitum-inspired palette: midnight backgrounds, cyan gradients, wireframe geometry and restrained signal motion. It includes a hero, six feature cards, six navigation icons, an overview, five chapter headings and a Cognitum destination banner. +The README uses a Cognitum-inspired palette: midnight backgrounds, cyan gradients, +layered isometric geometry, moving scan planes, orbital markers and floating +icons. It includes a hero, six feature cards, six navigation icons, an overview, +five chapter headings and a Cognitum destination banner. Headlines use a heavier +Avenir Next / Segoe UI / Helvetica stack, with tighter spacing and a dedicated +system monospace stack for labels. Fonts remain local fallbacks so the images +also render without a network connection. ## Rebuild and check @@ -27,7 +33,14 @@ The committed SVGs are the deployment artifacts. The manifest in GitHub renders SVGs as images, so image-internal links are not used. Each SVG has an outer Markdown or HTML link in the README. Each card and navigation icon also has a plain text link for narrow screens and assistive technology. Source headings remain intact so existing README anchors still work. -Animation uses CSS only. All copy and essential geometry are visible without animation, JavaScript, remote fonts or remote images. `prefers-reduced-motion` disables decorative movement. The original GIF remains available in an expandable demo section; the existing ruOS promotion remains linked. +Animation uses CSS only. Depth is projected directly into SVG geometry rather +than relying on a WebGL canvas or CSS perspective. Translation is applied to +inner groups so it cannot overwrite the outer icon placement. Orbital motion +uses an explicit transform origin; scan planes sweep the wireframe volumes. +All copy and essential geometry are visible without animation, JavaScript, +remote fonts or remote images. `prefers-reduced-motion` disables decorative +movement. The original GIF remains at the top; the existing ruOS promotion +remains linked. Existing asset dimensions and README links are preserved. ## Content boundaries diff --git a/scripts/render-readme-visuals.py b/scripts/render-readme-visuals.py index e37a9c58b..16ae8b12f 100644 --- a/scripts/render-readme-visuals.py +++ b/scripts/render-readme-visuals.py @@ -7,7 +7,8 @@ from readme_visuals_xml import parse_svg ROOT=Path(__file__).resolve().parents[1];OUT=ROOT/'assets/readme';OUT.mkdir(parents=True,exist_ok=True) C='#72eee0';BLUE='#70b6ff';INK='#041117';WHITE='#ecfafb';MUTED='#9abac5' def text(x,y,value,size=16,color=MUTED,anchor='start',extra=''): - return f'{escape(value)}' + weight='font-weight="650" letter-spacing="-0.6"' if size>=25 else 'font-weight="500"' + return f'{escape(value)}' def path(d,color=C,width=1.5,extra=''): return f'' def circle(x,y,r,color=C,extra=''): @@ -42,9 +43,45 @@ def icon(kind,x,y,scale=1): s+=path('M-15 1L-5 11L17 -12',BLUE,2,extra='class="trace"') else: for j in range(3):s+=path(f'M-38 {j*14-20}L0 {j*14-38}L38 {j*14-20}L0 {j*14-2}Z',extra='class="breathe"') + base='' + base+=path('M-43 48L0 27L43 48L0 69Z','#285c68',1) + return f'{base}{s}' + +def spatial(x,y,scale=1): + """Projected geometry gives depth without scripts or CSS 3D dependencies.""" + s='' + s+='' + s+='' + for px,py in [(-40,6),(0,-15),(40,6),(-20,30),(20,30),(0,49)]: + s+=circle(px,py,2,BLUE,extra='fill="#70b6ff" class="spark"') + s+='' return f'{s}' -def frame(w,h,title,desc,body): +def _frame(w,h,title,desc,body): return f'''{escape(title)}{escape(desc)}{body}''' +MOTION='''''' + +def frame(w,h,title,desc,body): + value=_frame(w,h,title,desc,body) + return value[:value.index('')+8:] + manifest=[] def save(name,w,h,title,desc,body,target): s=frame(w,h,title,desc,body);raw=(s+'\n').encode('utf-8');parse_svg(raw);(OUT/(name+'.svg')).write_bytes(raw);manifest.append({'file':'assets/readme/'+name+'.svg','title':title,'target':target,'width':w,'height':h}) @@ -55,7 +92,11 @@ s+=text(49,419,'RF SENSING / EDGE MODELS / LOCAL ACTION',11,MUTED,extra='cla s+='' for i in range(9):s+=path(f'M{750+i*40} 282L{610+i*80} 443','#12343d',1) for y in [306,336,372,418]:s+=path(f'M680 {y}H1168','#12343d',1) -s+=path('M803 157L1008 106L1137 177L930 236ZM803 157V314L930 391L1137 324V177M930 236V391M1008 106V268L803 314M1008 268L1137 324','#4b9ba4',1.5) +s+=''+path('M803 157L1008 106L1137 177L930 236ZM803 157V314L930 391L1137 324V177M930 236V391M1008 106V268L803 314M1008 268L1137 324','#4b9ba4',1.5)+'' +s+='' +s+='' +for i in range(24): + s+=circle(849+(i%6)*44,198+(i//6)*35,1.7,BLUE,extra=f'fill="#70b6ff" class="spark" style="animation-delay:-{i%7/2}s"') s+=icon('presence',976,265,1.35)+icon('edge',780,349,.7) for i in range(4):s+=path(f'M{794+i*12} {333-i*9}Q{830+i*25} {245-i*24} {896+i*29} {207-i*3}',C,1.4,extra=f'class="flow" style="animation-delay:-{i}s" opacity="{.8-i*.12}"') for x,y in [(803,157),(1008,106),(1137,177),(930,236),(930,391),(803,314),(1137,324)]:s+=circle(x,y,3,extra='fill="#72eee0" class="breathe"') @@ -68,14 +109,14 @@ for k,label,target in nav:save('nav-'+k,180,116,label,'Open '+label+'. Animated cards=[('presence','01','Presence & motion','Explore changes in room occupancy.','Inspect motion features from CSI.','SENSING GUIDE','docs/user-guide.md'),('vitals','02','Breathing & vital signals','Inspect phase-derived signal trends.','Validate estimates on your hardware.','SIGNAL PIPELINE','v2/crates/wifi-densepose-signal/README.md'),('pose','03','Pose research','Train and compare body keypoints.','Live accuracy differs from benchmarks.','READ THE EVIDENCE','docs/benchmarks/pose-estimation-cog.md'),('edge','04','Edge sensor mesh','Provision, capture and calibrate.','Explore ESP32 firmware and runbooks.','HARDWARE GUIDE','firmware/esp32-csi-node/README.md'),('automation','05','Local automation','Connect rooms to your smart home.','Home Assistant, MQTT and Matter.','INTEGRATION GUIDE','docs/integrations/home-assistant.md'),('agents','06','A guided AI operator','Source-cited setup and verification.','CLI, MCP and agent workflows.','TOOLKIT GUIDE','harness/ruview/README.md')] for k,num,title,l1,l2,cta,target in cards: s=text(30,39,'RUVIEW / '+num,11,C,extra='class="mono"')+text(30,94,title,29,WHITE)+text(30,136,l1,16)+text(30,164,l2,16) - s+=''+icon(k,474,168,.83)+path('M30 204H550','#245360',1)+path('M30 204H550',C,1,extra='class="flow" opacity=".5"') + s+=''+spatial(480,161,.53)+icon(k,474,155,.68)+path('M30 204H550','#245360',1)+path('M30 204H550',C,1,extra='class="flow" opacity=".5"') s+=text(30,245,cta,12,C,extra='class="mono"')+path('M510 239H540M532 231L540 239L532 247',C,1.5) save('feature-'+k,580,276,title,l1+' '+l2+' Conceptual animation; follow the linked source for capability limits.',s,target) # Overview uses three clearly labelled stages rather than fabricated telemetry. s=text(36,44,'SIGNAL TO CONTEXT',12,C,extra='class="mono"')+text(36,89,'A sensing loop you can inspect.',34,WHITE) for i,(label,sub,kind,tail) in enumerate([('Capture RF','CSI from supported hardware','signal','Provision and calibrate'),('Extract context','Signal processing and models','models','Compare against real data'),('Act locally','Events, APIs and integrations','automation','Apply rules and review outputs')]): x=36+i*396;s+=f'' - s+=text(x+24,153,f'0{i+1}',12,C)+text(x+24,188,label,26,WHITE)+text(x+24,216,sub,15)+icon(kind,x+269,281,.62)+text(x+24,311,tail,13) + s+=text(x+24,153,f'0{i+1}',12,C)+text(x+24,188,label,26,WHITE)+text(x+24,216,sub,15)+spatial(x+269,278,.35)+icon(kind,x+269,270,.5)+text(x+24,311,tail,13) if i<2:s+=path(f'M{x+344} 229H{x+384}M{x+376} 221L{x+384} 229L{x+376} 237',C,2,extra='class="flow"') s+=text(36,373,'CONCEPTUAL PIPELINE / HARDWARE AND ENVIRONMENT VALIDATION MATTER',11,MUTED,extra='class="mono"') save('overview',1200,396,'RuView sensing overview','Conceptual sequence: capture RF, extract context, act locally. Links to architecture and user documentation.',s,'docs/user-guide.md') @@ -83,13 +124,13 @@ save('overview',1200,396,'RuView sensing overview','Conceptual sequence: capture headers=[('features','Explore the capabilities','SENSING / MODELS / AUTOMATION','presence','docs/user-guide.md'),('edge','Intelligence at the edge','SENSORS / FIRMWARE / MODULES','edge','firmware/esp32-csi-node/README.md'),('learning','From recordings to models','CAPTURE / TRAIN / EVALUATE','models','docs/user-guide.md'),('evidence','Evidence before accuracy claims','BENCHMARKS / REPRODUCERS / LIMITS','evidence','docs/benchmarks/pose-estimation-cog.md'),('docs','Choose your next step','GUIDES / HARDWARE / INTEGRATIONS','agents','docs/user-guide.md')] for k,title,sub,kind,target in headers: s=icon(kind,76,75,.75)+text(140,63,title,34,WHITE)+text(142,99,sub,12,C,extra='class="mono"') - for i in range(4):s+=path(f'M865 {44+i*17}Q960 {10+i*28} 1124 {52+i*17}',C,1,extra=f'class="flow" opacity="{.65-i*.1}"') + s+=spatial(1012,84,.55) s+=path('M1140 70H1160M1152 62L1160 70L1152 78',C,2) save('header-'+k,1200,148,title,'Animated section heading. '+sub,s,target) # Brand destination; original ruOS promotion remains in the README. s=text(44,42,'COGNITUM ONE',12,C,extra='class="mono"')+text(44,99,'Ambient Intelligence.',42,WHITE)+text(44,147,'At the edge of the physical world.',25,C)+text(44,190,'Explore the platform behind the ecosystem.',16) s+=''+text(65,254,'Explore Cognitum',18,INK)+path('M263 247H284M277 240L284 247L277 254',INK,2) -s+=''+icon('seed',945,150,2.4) +s+=''+spatial(945,173,1.55)+icon('seed',945,145,1.65) for j in range(3):s+=f'' save('cognitum',1200,304,'Explore Cognitum One','Ambient Intelligence at the edge of the physical world. Open cognitum.one.',s,'https://cognitum.one') (OUT/'manifest.json').write_bytes((json.dumps({'schema_version':1,'style':'Cognitum cyan on midnight','motion':'Decorative CSS; prefers-reduced-motion supported; no script or remote dependencies','assets':manifest},indent=2)+'\n').encode('utf-8'))