Diff of /web/style.css.new [000000] .. [8c4ad8]

Switch to side-by-side view

--- a
+++ b/web/style.css.new
@@ -0,0 +1,70 @@
+/* DNA Helix Animation */
+.dna-helix {
+    position: relative;
+    width: 200px;
+    height: 400px;
+    margin: 0 auto;
+    perspective: 1200px;
+    transform-style: preserve-3d;
+}
+
+.base-pair {
+    position: absolute;
+    width: 100%;
+    height: 20px;
+    animation: rotate 8s linear infinite;
+    transform-style: preserve-3d;
+}
+
+.base {
+    position: absolute;
+    width: 25px;
+    height: 25px;
+    border-radius: 50%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    font-weight: bold;
+    color: white;
+    text-shadow: 0 0 3px rgba(0,0,0,0.5);
+    box-shadow: 0 0 15px rgba(0,0,0,0.2);
+}
+
+.left-base {
+    left: 35px;
+    background: #FF0066;
+    animation: pulse 3s ease-in-out infinite;
+    filter: brightness(1.1);
+}
+
+.right-base {
+    right: 35px;
+    background: #00B7FF;
+    animation: pulse 3s ease-in-out infinite;
+    filter: brightness(1.1);
+}
+
+.base-connector {
+    position: absolute;
+    left: 50%;
+    width: 90px;
+    height: 3px;
+    background: linear-gradient(90deg, 
+        rgba(255, 0, 102, 0.8), 
+        rgba(255, 255, 255, 0.3) 50%,
+        rgba(0, 183, 255, 0.8)
+    );
+    transform: translateX(-50%);
+    box-shadow: 0 0 8px rgba(0,0,0,0.15);
+}
+
+@keyframes rotate {
+    0% { transform: rotateY(0deg) translateZ(20px); }
+    100% { transform: rotateY(360deg) translateZ(20px); }
+}
+
+@keyframes pulse {
+    0% { transform: scale(1); opacity: 0.9; filter: brightness(1.1); }
+    50% { transform: scale(1.15); opacity: 1; filter: brightness(1.3); }
+    100% { transform: scale(1); opacity: 0.9; filter: brightness(1.1); }
+}