svg posting

Originally published on Greengale

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400" width="400" height="400">
  <title>Rotating 3D Wireframe Cube - Pure SVG/SMIL Animation</title>
  
  <!-- 
    3D Wireframe Cube with SMIL Animation
    
    Mathematical basis:
    - 8 vertices at (±1, ±1, ±1) scaled by 80
    - Initial tilt: 30° around X-axis
    - Animation: 360° rotation around Y-axis
    - Perspective projection with focal distance d=4
    
    Rotation matrices applied:
    Rx(30°): y' = y*cos(30°) - z*sin(30°), z' = y*sin(30°) + z*cos(30°)
    Ry(θ):   x' = x*cos(θ) + z*sin(θ), z' = -x*sin(θ) + z*cos(θ)
    
    Perspective projection:
    screen_x = cx + x * scale * d/(z+d)
    screen_y = cy - y * scale * d/(z+d)
    
    9 keyframes at 0°, 45°, 90°, 135°, 180°, 225°, 270°, 315°, 360°
  -->
  
  <defs>
    <style>
      .edge { 
        stroke: #00ffaa; 
        stroke-width: 2.5; 
        stroke-linecap: round; 
        fill: none;
        filter: url(#glow);
      }
    </style>
    <filter id="glow" x="-50%" y="-50%" width="200%" height="200%">
      <feGaussianBlur stdDeviation="3" result="coloredBlur"/>
      <feMerge>
        <feMergeNode in="coloredBlur"/>
        <feMergeNode in="SourceGraphic"/>
      </feMerge>
    </filter>
    <radialGradient id="bgGradient" cx="50%" cy="50%" r="70%">
      <stop offset="0%" style="stop-color:#0a1a14"/>
      <stop offset="100%" style="stop-color:#000804"/>
    </radialGradient>
  </defs>
  
  <!-- Background -->
  <rect width="400" height="400" fill="url(#bgGradient)"/>
  
  <!-- Edge 0: v0-v1 (bottom back) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="78.5;56.9;112.6;185.4;259.6;325.7;345.7;235.6;78.5"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="244.5;231.3;223.4;220.6;221.8;227.5;239.0;250.3;244.5"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="321.5;164.4;54.3;74.3;140.4;214.6;287.4;343.1;321.5"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="244.5;250.3;239.0;227.5;221.8;220.6;223.4;231.3;244.5"/>
  </line>
  
  <!-- Edge 1: v1-v2 (bottom right) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="321.5;164.4;54.3;74.3;140.4;214.6;287.4;343.1;321.5"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="244.5;250.3;239.0;227.5;221.8;220.6;223.4;231.3;244.5"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="273.3;287.0;239.0;152.7;111.9;130.5;176.6;228.9;273.3"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="300.1;323.1;345.7;344.1;320.3;298.3;287.4;288.0;300.1"/>
  </line>
  
  <!-- Edge 2: v2-v3 (bottom front) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="273.3;287.0;239.0;152.7;111.9;130.5;176.6;228.9;273.3"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="300.1;323.1;345.7;344.1;320.3;298.3;287.4;288.0;300.1"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="126.7;171.1;223.4;269.5;288.1;247.3;161.0;113.0;126.7"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="300.1;288.0;287.4;298.3;320.3;344.1;345.7;323.1;300.1"/>
  </line>
  
  <!-- Edge 3: v3-v0 (bottom left) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="126.7;171.1;223.4;269.5;288.1;247.3;161.0;113.0;126.7"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="300.1;288.0;287.4;298.3;320.3;344.1;345.7;323.1;300.1"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="78.5;56.9;112.6;185.4;259.6;325.7;345.7;235.6;78.5"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="244.5;231.3;223.4;220.6;221.8;227.5;239.0;250.3;244.5"/>
  </line>
  
  <!-- Edge 4: v4-v5 (top back) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="111.9;130.5;176.6;228.9;273.3;287.0;239.0;152.7;111.9"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="79.7;101.7;112.6;112.0;99.9;76.9;54.3;55.9;79.7"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="288.1;247.3;161.0;113.0;126.7;171.1;223.4;269.5;288.1"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="79.7;55.9;54.3;76.9;99.9;112.0;112.6;101.7;79.7"/>
  </line>
  
  <!-- Edge 5: v5-v6 (top right) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="288.1;247.3;161.0;113.0;126.7;171.1;223.4;269.5;288.1"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="79.7;55.9;54.3;76.9;99.9;112.0;112.6;101.7;79.7"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="259.6;325.7;345.7;235.6;78.5;56.9;112.6;185.4;259.6"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="178.2;172.5;161.0;149.7;155.5;168.7;176.6;179.4;178.2"/>
  </line>
  
  <!-- Edge 6: v6-v7 (top front) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="259.6;325.7;345.7;235.6;78.5;56.9;112.6;185.4;259.6"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="178.2;172.5;161.0;149.7;155.5;168.7;176.6;179.4;178.2"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="140.4;214.6;287.4;343.1;321.5;164.4;54.3;74.3;140.4"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="178.2;179.4;176.6;168.7;155.5;149.7;161.0;172.5;178.2"/>
  </line>
  
  <!-- Edge 7: v7-v4 (top left) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="140.4;214.6;287.4;343.1;321.5;164.4;54.3;74.3;140.4"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="178.2;179.4;176.6;168.7;155.5;149.7;161.0;172.5;178.2"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="111.9;130.5;176.6;228.9;273.3;287.0;239.0;152.7;111.9"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="79.7;101.7;112.6;112.0;99.9;76.9;54.3;55.9;79.7"/>
  </line>
  
  <!-- Edge 8: v0-v4 (back left vertical) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="78.5;56.9;112.6;185.4;259.6;325.7;345.7;235.6;78.5"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="244.5;231.3;223.4;220.6;221.8;227.5;239.0;250.3;244.5"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="111.9;130.5;176.6;228.9;273.3;287.0;239.0;152.7;111.9"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="79.7;101.7;112.6;112.0;99.9;76.9;54.3;55.9;79.7"/>
  </line>
  
  <!-- Edge 9: v1-v5 (back right vertical) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="321.5;164.4;54.3;74.3;140.4;214.6;287.4;343.1;321.5"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="244.5;250.3;239.0;227.5;221.8;220.6;223.4;231.3;244.5"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="288.1;247.3;161.0;113.0;126.7;171.1;223.4;269.5;288.1"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="79.7;55.9;54.3;76.9;99.9;112.0;112.6;101.7;79.7"/>
  </line>
  
  <!-- Edge 10: v2-v6 (front right vertical) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="273.3;287.0;239.0;152.7;111.9;130.5;176.6;228.9;273.3"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="300.1;323.1;345.7;344.1;320.3;298.3;287.4;288.0;300.1"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="259.6;325.7;345.7;235.6;78.5;56.9;112.6;185.4;259.6"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="178.2;172.5;161.0;149.7;155.5;168.7;176.6;179.4;178.2"/>
  </line>
  
  <!-- Edge 11: v3-v7 (front left vertical) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="126.7;171.1;223.4;269.5;288.1;247.3;161.0;113.0;126.7"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="300.1;288.0;287.4;298.3;320.3;344.1;345.7;323.1;300.1"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="140.4;214.6;287.4;343.1;321.5;164.4;54.3;74.3;140.4"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="178.2;179.4;176.6;168.7;155.5;149.7;161.0;172.5;178.2"/>
  </line>
  
</svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400" width="400" height="400">
  <title>Rotating 3D Wireframe Cube - Diagonal Axis (Magenta)</title>
  
  <!-- 
    3D Wireframe Cube - Diagonal Axis Rotation
    
    Mathematical basis:
    - 8 vertices at (±1, ±1, ±1) scaled by 80
    - Rotation around normalized diagonal axis [1,1,1]/√3
    - Using Rodrigues' rotation formula for arbitrary axis rotation
    - Perspective projection with focal distance d=4.5
    
    Rodrigues' formula: v' = v*cos(θ) + (k×v)*sin(θ) + k*(k·v)*(1-cos(θ))
    where k is the unit rotation axis
    
    9 keyframes at 0°, 45°, 90°, 135°, 180°, 225°, 270°, 315°, 360°
  -->
  
  <defs>
    <style>
      .edge { 
        stroke: url(#magentaGradient); 
        stroke-width: 2.5; 
        stroke-linecap: round; 
        fill: none;
        filter: url(#glow);
      }
    </style>
    <linearGradient id="magentaGradient" x1="0%" y1="0%" x2="100%" y2="100%">
      <stop offset="0%" style="stop-color:#ff00ff"/>
      <stop offset="50%" style="stop-color:#ff1493"/>
      <stop offset="100%" style="stop-color:#da70d6"/>
    </linearGradient>
    <filter id="glow" x="-50%" y="-50%" width="200%" height="200%">
      <feGaussianBlur stdDeviation="3" result="coloredBlur"/>
      <feMerge>
        <feMergeNode in="coloredBlur"/>
        <feMergeNode in="SourceGraphic"/>
      </feMerge>
    </filter>
    <radialGradient id="bgGradient" cx="50%" cy="50%" r="70%">
      <stop offset="0%" style="stop-color:#1a0a1a"/>
      <stop offset="100%" style="stop-color:#080008"/>
    </radialGradient>
  </defs>
  
  <!-- Background -->
  <rect width="400" height="400" fill="url(#bgGradient)"/>
  
  <!-- Edge 0: v0-v1 (bottom back) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="97.1;97.1;97.1;97.1;97.1;97.1;97.1;97.1;97.1"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="302.9;302.9;302.9;302.9;302.9;302.9;302.9;302.9;302.9"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="302.9;276.2;160.2;79.8;75.9;115.8;177.4;248.6;302.9"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="302.9;198.5;101.8;110.1;175.2;244.8;300.7;329.4;302.9"/>
  </line>
  
  <!-- Edge 1: v1-v2 (bottom right) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="302.9;276.2;160.2;79.8;75.9;115.8;177.4;248.6;302.9"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="302.9;198.5;101.8;110.1;175.2;244.8;300.7;329.4;302.9"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="265.5;330.0;345.6;268.9;171.2;133.6;150.6;199.3;265.5"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="265.5;248.9;167.4;70.4;56.0;111.3;180.0;235.8;265.5"/>
  </line>
  
  <!-- Edge 2: v2-v3 (bottom front) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="265.5;330.0;345.6;268.9;171.2;133.6;150.6;199.3;265.5"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="265.5;248.9;167.4;70.4;56.0;111.3;180.0;235.8;265.5"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="134.5;200.8;271.0;306.6;242.4;124.2;71.4;85.8;134.5"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="265.5;314.2;328.6;275.8;157.6;93.4;129.0;199.2;265.5"/>
  </line>
  
  <!-- Edge 3: v3-v0 (bottom left) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="134.5;200.8;271.0;306.6;242.4;124.2;71.4;85.8;134.5"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="265.5;314.2;328.6;275.8;157.6;93.4;129.0;199.2;265.5"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="97.1;97.1;97.1;97.1;97.1;97.1;97.1;97.1;97.1"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="302.9;302.9;302.9;302.9;302.9;302.9;302.9;302.9;302.9"/>
  </line>
  
  <!-- Edge 4: v4-v5 (top back) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="97.1;70.6;99.3;155.2;224.8;289.9;298.2;201.5;97.1"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="97.1;151.4;222.6;284.2;324.1;320.2;239.8;123.8;97.1"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="302.9;198.9;138.8;140.5;180.5;242.3;310.8;350.0;302.9"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="97.1;50.0;89.2;157.7;219.5;259.5;261.2;201.1;97.1"/>
  </line>
  
  <!-- Edge 5: v5-v6 (top right) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="302.9;198.9;138.8;140.5;180.5;242.3;310.8;350.0;302.9"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="97.1;50.0;89.2;157.7;219.5;259.5;261.2;201.1;97.1"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="265.5;265.5;265.5;265.5;265.5;265.5;265.5;265.5;265.5"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="134.5;134.5;134.5;134.5;134.5;134.5;134.5;134.5;134.5"/>
  </line>
  
  <!-- Edge 6: v6-v7 (top front) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="265.5;265.5;265.5;265.5;265.5;265.5;265.5;265.5;265.5"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="134.5;134.5;134.5;134.5;134.5;134.5;134.5;134.5;134.5"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="134.5;164.2;220.0;288.7;344.0;329.6;232.6;151.1;134.5"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="134.5;200.7;249.4;266.4;228.8;131.1;54.4;70.0;134.5"/>
  </line>
  
  <!-- Edge 7: v7-v4 (top left) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="134.5;164.2;220.0;288.7;344.0;329.6;232.6;151.1;134.5"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="134.5;200.7;249.4;266.4;228.8;131.1;54.4;70.0;134.5"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="97.1;70.6;99.3;155.2;224.8;289.9;298.2;201.5;97.1"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="97.1;151.4;222.6;284.2;324.1;320.2;239.8;123.8;97.1"/>
  </line>
  
  <!-- Edge 8: v0-v4 (back left vertical) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="97.1;97.1;97.1;97.1;97.1;97.1;97.1;97.1;97.1"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="302.9;302.9;302.9;302.9;302.9;302.9;302.9;302.9;302.9"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="97.1;70.6;99.3;155.2;224.8;289.9;298.2;201.5;97.1"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="97.1;151.4;222.6;284.2;324.1;320.2;239.8;123.8;97.1"/>
  </line>
  
  <!-- Edge 9: v1-v5 (back right vertical) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="302.9;276.2;160.2;79.8;75.9;115.8;177.4;248.6;302.9"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="302.9;198.5;101.8;110.1;175.2;244.8;300.7;329.4;302.9"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="302.9;198.9;138.8;140.5;180.5;242.3;310.8;350.0;302.9"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="97.1;50.0;89.2;157.7;219.5;259.5;261.2;201.1;97.1"/>
  </line>
  
  <!-- Edge 10: v2-v6 (front right vertical) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="265.5;330.0;345.6;268.9;171.2;133.6;150.6;199.3;265.5"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="265.5;248.9;167.4;70.4;56.0;111.3;180.0;235.8;265.5"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="265.5;265.5;265.5;265.5;265.5;265.5;265.5;265.5;265.5"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="134.5;134.5;134.5;134.5;134.5;134.5;134.5;134.5;134.5"/>
  </line>
  
  <!-- Edge 11: v3-v7 (front left vertical) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="134.5;200.8;271.0;306.6;242.4;124.2;71.4;85.8;134.5"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="265.5;314.2;328.6;275.8;157.6;93.4;129.0;199.2;265.5"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="134.5;164.2;220.0;288.7;344.0;329.6;232.6;151.1;134.5"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="134.5;200.7;249.4;266.4;228.8;131.1;54.4;70.0;134.5"/>
  </line>
  
</svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400" width="400" height="400">
  <title>Rotating 3D Wireframe Cube - Vertical Tumble (Blue)</title>
  
  <!-- 
    3D Wireframe Cube - Vertical (X-axis) Rotation
    
    Mathematical basis:
    - 8 vertices at (±1, ±1, ±1) scaled by 80
    - 20° tilt around Y-axis for viewing angle
    - Animation: 360° rotation around X-axis (vertical tumble)
    - Perspective projection with focal distance d=4
    
    This creates a forward/backward tumbling motion rather than
    a side-to-side spin.
    
    9 keyframes at 0°, 45°, 90°, 135°, 180°, 225°, 270°, 315°, 360°
  -->
  
  <defs>
    <style>
      .edge { 
        stroke: url(#blueGradient); 
        stroke-width: 2.5; 
        stroke-linecap: round; 
        fill: none;
        filter: url(#glow);
      }
    </style>
    <linearGradient id="blueGradient" x1="0%" y1="0%" x2="100%" y2="100%">
      <stop offset="0%" style="stop-color:#00bfff"/>
      <stop offset="100%" style="stop-color:#4169e1"/>
    </linearGradient>
    <filter id="glow" x="-50%" y="-50%" width="200%" height="200%">
      <feGaussianBlur stdDeviation="3" result="coloredBlur"/>
      <feMerge>
        <feMergeNode in="coloredBlur"/>
        <feMergeNode in="SourceGraphic"/>
      </feMerge>
    </filter>
    <radialGradient id="bgGradient" cx="50%" cy="50%" r="70%">
      <stop offset="0%" style="stop-color:#0a1628"/>
      <stop offset="100%" style="stop-color:#000408"/>
    </radialGradient>
  </defs>
  
  <!-- Background -->
  <rect width="400" height="400" fill="url(#bgGradient)"/>
  
  <!-- Edge 0: v0-v1 (bottom back) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="79.5;57.1;63.3;89.6;110.8;120.0;118.0;104.3;79.5"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="294.1;231.7;136.2;102.7;130.4;182.3;238.3;284.4;294.1"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="270.4;280.1;263.8;245.5;236.2;234.1;238.3;250.3;270.4"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="317.7;173.3;63.3;77.0;139.4;211.4;282.0;335.8;317.7"/>
  </line>
  
  <!-- Edge 1: v1-v2 (bottom right) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="270.4;280.1;263.8;245.5;236.2;234.1;238.3;250.3;270.4"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="317.7;173.3;63.3;77.0;139.4;211.4;282.0;335.8;317.7"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="289.2;310.4;336.7;342.9;320.5;295.7;282.0;280.0;289.2"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="269.6;297.3;263.8;168.3;105.9;115.6;161.7;217.7;269.6"/>
  </line>
  
  <!-- Edge 2: v2-v3 (bottom front) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="289.2;310.4;336.7;342.9;320.5;295.7;282.0;280.0;289.2"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="269.6;297.3;263.8;168.3;105.9;115.6;161.7;217.7;269.6"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="163.8;154.5;136.2;119.9;129.6;149.7;161.7;165.9;163.8"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="260.6;323.0;336.7;226.7;82.3;64.2;118.0;188.6;260.6"/>
  </line>
  
  <!-- Edge 3: v3-v0 (bottom left) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="163.8;154.5;136.2;119.9;129.6;149.7;161.7;165.9;163.8"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="260.6;323.0;336.7;226.7;82.3;64.2;118.0;188.6;260.6"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="79.5;57.1;63.3;89.6;110.8;120.0;118.0;104.3;79.5"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="294.1;231.7;136.2;102.7;130.4;182.3;238.3;284.4;294.1"/>
  </line>
  
  <!-- Edge 4: v4-v5 (top back) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="79.5;104.3;118.0;120.0;110.8;89.6;63.3;57.1;79.5"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="105.9;115.6;161.7;217.7;269.6;297.3;263.8;168.3;105.9"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="270.4;250.3;238.3;234.1;236.2;245.5;263.8;280.1;270.4"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="82.3;64.2;118.0;188.6;260.6;323.0;336.7;226.7;82.3"/>
  </line>
  
  <!-- Edge 5: v5-v6 (top right) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="270.4;250.3;238.3;234.1;236.2;245.5;263.8;280.1;270.4"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="82.3;64.2;118.0;188.6;260.6;323.0;336.7;226.7;82.3"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="289.2;280.0;282.0;295.7;320.5;342.9;336.7;310.4;289.2"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="130.4;182.3;238.3;284.4;294.1;231.7;136.2;102.7;130.4"/>
  </line>
  
  <!-- Edge 6: v6-v7 (top front) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="289.2;280.0;282.0;295.7;320.5;342.9;336.7;310.4;289.2"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="130.4;182.3;238.3;284.4;294.1;231.7;136.2;102.7;130.4"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="163.8;165.9;161.7;149.7;129.6;119.9;136.2;154.5;163.8"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="139.4;211.4;282.0;335.8;317.7;173.3;63.3;77.0;139.4"/>
  </line>
  
  <!-- Edge 7: v7-v4 (top left) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="163.8;165.9;161.7;149.7;129.6;119.9;136.2;154.5;163.8"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="139.4;211.4;282.0;335.8;317.7;173.3;63.3;77.0;139.4"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="79.5;104.3;118.0;120.0;110.8;89.6;63.3;57.1;79.5"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="105.9;115.6;161.7;217.7;269.6;297.3;263.8;168.3;105.9"/>
  </line>
  
  <!-- Edge 8: v0-v4 (left vertical) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="79.5;57.1;63.3;89.6;110.8;120.0;118.0;104.3;79.5"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="294.1;231.7;136.2;102.7;130.4;182.3;238.3;284.4;294.1"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="79.5;104.3;118.0;120.0;110.8;89.6;63.3;57.1;79.5"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="105.9;115.6;161.7;217.7;269.6;297.3;263.8;168.3;105.9"/>
  </line>
  
  <!-- Edge 9: v1-v5 (right back vertical) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="270.4;280.1;263.8;245.5;236.2;234.1;238.3;250.3;270.4"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="317.7;173.3;63.3;77.0;139.4;211.4;282.0;335.8;317.7"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="270.4;250.3;238.3;234.1;236.2;245.5;263.8;280.1;270.4"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="82.3;64.2;118.0;188.6;260.6;323.0;336.7;226.7;82.3"/>
  </line>
  
  <!-- Edge 10: v2-v6 (right front vertical) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="289.2;310.4;336.7;342.9;320.5;295.7;282.0;280.0;289.2"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="269.6;297.3;263.8;168.3;105.9;115.6;161.7;217.7;269.6"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="289.2;280.0;282.0;295.7;320.5;342.9;336.7;310.4;289.2"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="130.4;182.3;238.3;284.4;294.1;231.7;136.2;102.7;130.4"/>
  </line>
  
  <!-- Edge 11: v3-v7 (left front vertical) -->
  <line class="edge">
    <animate attributeName="x1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="163.8;154.5;136.2;119.9;129.6;149.7;161.7;165.9;163.8"/>
    <animate attributeName="y1" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="260.6;323.0;336.7;226.7;82.3;64.2;118.0;188.6;260.6"/>
    <animate attributeName="x2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="163.8;165.9;161.7;149.7;129.6;119.9;136.2;154.5;163.8"/>
    <animate attributeName="y2" dur="4s" repeatCount="indefinite" calcMode="linear"
      values="139.4;211.4;282.0;335.8;317.7;173.3;63.3;77.0;139.4"/>
  </line>
  
</svg>

SVGs can now use internal fragment references (previously url was sanitized out) and have block-scoped namespaces applied automatically (so these don't overwrite each others' styling). Stay tuned for more shapes 💠