11<template >
2- <div class =" agent-loop" >
3- <span class =" visually-hidden" >The agent loops: plan, execute, observe, iterate.</span >
4- <svg viewBox =" 0 0 320 180" width =" 100%" aria-hidden =" true" >
5- <rect class =" loop-base" x =" 50" y =" 40" width =" 220" height =" 100" rx =" 28" />
6- <rect class =" loop-progress" x =" 50" y =" 40" width =" 220" height =" 100" rx =" 28" />
7- <circle cx =" 160" cy =" 40" r =" 4" />
8- <circle cx =" 270" cy =" 90" r =" 4" />
9- <circle cx =" 160" cy =" 140" r =" 4" />
10- <circle cx =" 50" cy =" 90" r =" 4" />
11- <text x =" 160" y =" 22" text-anchor =" middle" >Plan</text >
12- <text x =" 284" y =" 94" >Execute</text >
13- <text x =" 160" y =" 166" text-anchor =" middle" >Observe</text >
14- <text x =" 36" y =" 94" text-anchor =" end" >Iterate</text >
2+ <div class =" agent-loop" aria-label =" The autonomous agent loop: Plan, Execute, Observe, Iterate" >
3+ <span class =" visually-hidden" >The autonomous loop: Plan, Execute, Observe, Iterate.</span >
4+ <svg viewBox =" 0 0 320 160" width =" 100%" aria-hidden =" true" >
5+ <defs >
6+ <linearGradient id =" loopGradient" x1 =" 0%" y1 =" 0%" x2 =" 100%" y2 =" 100%" >
7+ <stop offset =" 0%" stop-color =" var(--accent)" stop-opacity =" 0.2" />
8+ <stop offset =" 50%" stop-color =" var(--accent)" stop-opacity =" 1" />
9+ <stop offset =" 100%" stop-color =" #38bdf8" stop-opacity =" 0.6" />
10+ </linearGradient >
11+ <filter id =" nodeGlow" x =" -50%" y =" -50%" width =" 200%" height =" 200%" >
12+ <feDropShadow dx =" 0" dy =" 0" stdDeviation =" 3" flood-color =" var(--accent)" flood-opacity =" 0.4" />
13+ </filter >
14+ </defs >
15+
16+ <!-- Base track -->
17+ <rect class =" loop-base" x =" 60" y =" 38" width =" 200" height =" 84" rx =" 24" />
18+
19+ <!-- Animated energy trail -->
20+ <rect class =" loop-progress" x =" 60" y =" 38" width =" 200" height =" 84" rx =" 24" />
21+
22+ <!-- Step Nodes -->
23+ <g class =" loop-node" transform =" translate(160, 38)" >
24+ <circle cx =" 0" cy =" 0" r =" 5.5" class =" node-outer" />
25+ <circle cx =" 0" cy =" 0" r =" 2.5" class =" node-inner" />
26+ </g >
27+ <g class =" loop-node" transform =" translate(260, 80)" >
28+ <circle cx =" 0" cy =" 0" r =" 5.5" class =" node-outer" />
29+ <circle cx =" 0" cy =" 0" r =" 2.5" class =" node-inner" />
30+ </g >
31+ <g class =" loop-node" transform =" translate(160, 122)" >
32+ <circle cx =" 0" cy =" 0" r =" 5.5" class =" node-outer" />
33+ <circle cx =" 0" cy =" 0" r =" 2.5" class =" node-inner" />
34+ </g >
35+ <g class =" loop-node" transform =" translate(60, 80)" >
36+ <circle cx =" 0" cy =" 0" r =" 5.5" class =" node-outer" />
37+ <circle cx =" 0" cy =" 0" r =" 2.5" class =" node-inner" />
38+ </g >
39+
40+ <!-- Step Labels -->
41+ <text x =" 160" y =" 20" text-anchor =" middle" class =" step-label" >Plan</text >
42+ <text x =" 272" y =" 84" class =" step-label" >Execute</text >
43+ <text x =" 160" y =" 150" text-anchor =" middle" class =" step-label" >Observe</text >
44+ <text x =" 48" y =" 84" text-anchor =" end" class =" step-label" >Iterate</text >
1545 </svg >
1646 </div >
1747</template >
1848
1949<style scoped>
2050.agent-loop {
2151 width : 100% ;
22- padding-inline : 12 px ;
52+ padding-inline : 4 px ;
2353}
2454
2555svg {
@@ -32,39 +62,53 @@ rect {
3262}
3363
3464.loop-base {
35- stroke : rgba (17 , 17 , 19 , 0.15 );
36- stroke-width : 1 ;
65+ stroke : rgba (10 , 10 , 12 , 0.1 );
66+ stroke-width : 1.5 ;
3767}
3868
3969.loop-progress {
40- stroke : var (--accent );
41- stroke-dasharray : 40 660 ;
70+ stroke : url (#loopGradient );
71+ stroke-dasharray : 52 568 ;
72+ stroke-width : 2 ;
73+ stroke-linecap : round ;
74+ animation : loop-travel 6s cubic-bezier (0.4 , 0 , 0.2 , 1 ) infinite ;
75+ }
76+
77+ .node-outer {
78+ fill : var (--canvas );
79+ stroke : var (--hairline-strong );
4280 stroke-width : 1.5 ;
43- animation : loop-travel 6s linear infinite ;
4481}
4582
46- circle {
47- fill : #d1d1d5 ;
83+ .node-inner {
84+ fill : var ( --accent ) ;
4885}
4986
50- text {
51- fill : var (--ink-subtle );
52- font-family : ' JetBrains Mono' , ui-monospace , ' SF Mono' , monospace ;
53- font-size : 11 px ;
54- font-weight : 500 ;
55- letter-spacing : 0.6 px ;
87+ .step-label {
88+ fill : var (--ink-muted );
89+ font-family : ' Geist Mono' , ' JetBrains Mono' , ui-monospace , monospace ;
90+ font-size : 10 px ;
91+ font-weight : 600 ;
92+ letter-spacing : 0.07 em ;
5693 text-transform : uppercase ;
94+ transition : fill 200ms ease ;
95+ }
96+
97+ .agent-loop :hover .step-label {
98+ fill : var (--ink );
5799}
58100
59101@keyframes loop-travel {
60102 to {
61- stroke-dashoffset : -700 ;
103+ stroke-dashoffset : -620 ;
62104 }
63105}
64106
65107@media (prefers-reduced-motion: reduce) {
66108 .loop-progress {
67109 animation : none ;
110+ stroke : var (--accent );
111+ stroke-dasharray : none ;
68112 }
69113}
70114 </style >
0 commit comments