diff --git a/d2renderers/d2svg/d2svg.go b/d2renderers/d2svg/d2svg.go
index 8643768b7..9d2cb1bd1 100644
--- a/d2renderers/d2svg/d2svg.go
+++ b/d2renderers/d2svg/d2svg.go
@@ -511,10 +511,10 @@ func defineShadowFilter(writer io.Writer) {
func render3dRect(targetShape d2target.Shape) string {
moveTo := func(p d2target.Point) string {
- return fmt.Sprintf("M%d,%d ", p.X+targetShape.Pos.X, p.Y+targetShape.Pos.Y)
+ return fmt.Sprintf("M%d,%d", p.X+targetShape.Pos.X, p.Y+targetShape.Pos.Y)
}
lineTo := func(p d2target.Point) string {
- return fmt.Sprintf("L%d,%d ", p.X+targetShape.Pos.X, p.Y+targetShape.Pos.Y)
+ return fmt.Sprintf("L%d,%d", p.X+targetShape.Pos.X, p.Y+targetShape.Pos.Y)
}
// draw border all in one path to prevent overlapping sections
@@ -545,7 +545,7 @@ func render3dRect(targetShape d2target.Shape) string {
border.Fill = "none"
borderStyle := shapeStyle(border)
renderedBorder := fmt.Sprintf(``,
- strings.Join(borderSegments, ""), borderStyle)
+ strings.Join(borderSegments, " "), borderStyle)
// create mask from border stroke, to cut away from the shape fills
maskID := fmt.Sprintf("border-mask-%v", escapeText(targetShape.ID))
diff --git a/e2etests/testdata/stable/square_3d/dagre/sketch.exp.svg b/e2etests/testdata/stable/square_3d/dagre/sketch.exp.svg
index 550462a61..bdec94d45 100644
--- a/e2etests/testdata/stable/square_3d/dagre/sketch.exp.svg
+++ b/e2etests/testdata/stable/square_3d/dagre/sketch.exp.svg
@@ -16,9 +16,9 @@ width="371" height="580" viewBox="-100 -100 371 580">
-rectangle
+rectangle
-square
-rectangle
+rectangle
-square
-cube
-cube