|
22 | 22 | --bg-alt: #f9fafb; |
23 | 23 | --border: #e5e7eb; |
24 | 24 | --accent: #8b5cf6; |
| 25 | + --header-grad-start: #2563eb; |
| 26 | + --header-grad-end: #8b5cf6; |
| 27 | + --glow: 0 10px 30px rgba(37, 99, 235, 0.25); |
| 28 | + --glass-bg: rgba(255,255,255,0.7); |
| 29 | + --glass-border: rgba(255,255,255,0.35); |
25 | 30 | } |
26 | 31 |
|
27 | 32 | body { |
|
39 | 44 |
|
40 | 45 | /* Header */ |
41 | 46 | header { |
42 | | - background: linear-gradient(135deg, var(--primary) 0%, var(--accent) 100%); |
| 47 | + background: radial-gradient(1200px 500px at 20% -10%, rgba(255,255,255,0.15), transparent 60%), |
| 48 | + linear-gradient(135deg, var(--header-grad-start) 0%, var(--header-grad-end) 100%); |
43 | 49 | color: white; |
44 | 50 | padding: 4rem 0 5rem; |
45 | 51 | position: relative; |
|
69 | 75 | letter-spacing: -0.025em; |
70 | 76 | } |
71 | 77 |
|
| 78 | + /* Gradient animated logo text */ |
| 79 | + .logo-gradient { |
| 80 | + background: linear-gradient(90deg, #fff, #e5e7eb, #fff); |
| 81 | + -webkit-background-clip: text; |
| 82 | + background-clip: text; |
| 83 | + color: transparent; |
| 84 | + background-size: 200% auto; |
| 85 | + animation: shimmer 6s linear infinite; |
| 86 | + text-shadow: 0 1px 2px rgba(0,0,0,0.2); |
| 87 | + } |
| 88 | + |
| 89 | + @keyframes shimmer { |
| 90 | + 0% { background-position: 0% 50%; } |
| 91 | + 100% { background-position: 200% 50%; } |
| 92 | + } |
| 93 | + |
72 | 94 | .tagline { |
73 | 95 | font-size: 1.5rem; |
74 | 96 | font-weight: 300; |
|
108 | 130 | } |
109 | 131 |
|
110 | 132 | .concept-box { |
111 | | - background: white; |
| 133 | + background: var(--glass-bg); |
112 | 134 | border-radius: 1rem; |
113 | 135 | padding: 3rem; |
114 | | - box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05), 0 10px 15px rgba(0, 0, 0, 0.05); |
115 | | - max-width: 900px; |
| 136 | + border: 1px solid var(--glass-border); |
| 137 | + box-shadow: 0 8px 30px rgba(0,0,0,0.08), var(--glow); |
| 138 | + backdrop-filter: saturate(140%) blur(12px); |
| 139 | + -webkit-backdrop-filter: saturate(140%) blur(12px); |
| 140 | + max-width: 1000px; |
116 | 141 | margin: 0 auto; |
117 | 142 | } |
118 | 143 |
|
|
148 | 173 | /* Concept Cards */ |
149 | 174 | .concept-cards { |
150 | 175 | display: grid; |
151 | | - grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); |
| 176 | + grid-template-columns: repeat(2, minmax(0, 1fr)); |
152 | 177 | gap: 1.5rem; |
153 | 178 | margin: 2rem 0; |
154 | 179 | } |
|
159 | 184 | border-radius: 1rem; |
160 | 185 | padding: 1.75rem; |
161 | 186 | transition: all 0.3s ease; |
| 187 | + position: relative; |
| 188 | + overflow: hidden; |
162 | 189 | } |
163 | 190 |
|
164 | 191 | .concept-card:hover { |
165 | 192 | border-color: var(--accent); |
166 | | - box-shadow: 0 8px 20px rgba(139, 92, 246, 0.1); |
167 | | - transform: translateY(-3px); |
| 193 | + box-shadow: 0 18px 35px rgba(139, 92, 246, 0.18); |
| 194 | + transform: translateY(-4px); |
| 195 | + } |
| 196 | + |
| 197 | + .concept-card::after { |
| 198 | + content: ''; |
| 199 | + position: absolute; |
| 200 | + inset: 0; |
| 201 | + background: linear-gradient(135deg, rgba(139,92,246,0.08), transparent 60%); |
| 202 | + pointer-events: none; |
168 | 203 | } |
169 | 204 |
|
170 | 205 | .concept-icon { |
|
209 | 244 | } |
210 | 245 |
|
211 | 246 | .benefit-card { |
212 | | - background: white; |
213 | | - border: 2px solid var(--border); |
| 247 | + background: var(--glass-bg); |
| 248 | + border: 1px solid var(--glass-border); |
214 | 249 | border-radius: 1rem; |
215 | 250 | padding: 2rem; |
216 | 251 | transition: all 0.3s ease; |
| 252 | + backdrop-filter: saturate(140%) blur(10px); |
| 253 | + -webkit-backdrop-filter: saturate(140%) blur(10px); |
217 | 254 | } |
218 | 255 |
|
219 | 256 | .benefit-card:hover { |
|
260 | 297 | text-decoration: none; |
261 | 298 | color: var(--text); |
262 | 299 | display: block; |
| 300 | + position: relative; |
| 301 | + overflow: hidden; |
263 | 302 | } |
264 | 303 |
|
265 | 304 | .doc-card:hover { |
266 | 305 | border-color: var(--secondary); |
267 | | - box-shadow: 0 8px 20px rgba(16, 185, 129, 0.15); |
268 | | - transform: translateY(-2px); |
| 306 | + box-shadow: 0 16px 30px rgba(16, 185, 129, 0.2); |
| 307 | + transform: translateY(-3px); |
| 308 | + } |
| 309 | + |
| 310 | + .doc-card::after { |
| 311 | + content: ''; |
| 312 | + position: absolute; |
| 313 | + top: -20%; |
| 314 | + right: -20%; |
| 315 | + width: 60%; |
| 316 | + height: 140%; |
| 317 | + background: radial-gradient(closest-side, rgba(16,185,129,0.12), transparent 70%); |
| 318 | + transform: rotate(25deg); |
269 | 319 | } |
270 | 320 |
|
271 | 321 | .doc-card-header { |
|
305 | 355 | .cta { |
306 | 356 | padding: 4rem 0; |
307 | 357 | text-align: center; |
| 358 | + background: linear-gradient(0deg, rgba(37, 99, 235, 0.05), transparent 40%); |
308 | 359 | } |
309 | 360 |
|
310 | 361 | .cta-buttons { |
|
329 | 380 | .btn-primary { |
330 | 381 | background: var(--primary); |
331 | 382 | color: white; |
| 383 | + box-shadow: var(--glow); |
332 | 384 | } |
333 | 385 |
|
334 | 386 | .btn-primary:hover { |
|
341 | 393 | background: white; |
342 | 394 | color: var(--primary); |
343 | 395 | border-color: var(--primary); |
| 396 | + box-shadow: 0 8px 20px rgba(37, 99, 235, 0.08); |
344 | 397 | } |
345 | 398 |
|
346 | 399 | .btn-secondary:hover { |
|
357 | 410 | padding: 2rem 0; |
358 | 411 | text-align: center; |
359 | 412 | } |
| 413 | + /* Scroll reveal animation */ |
| 414 | + .reveal { opacity: 0; transform: translateY(16px); transition: opacity .6s ease, transform .6s ease; } |
| 415 | + .reveal.in-view { opacity: 1; transform: none; } |
| 416 | + |
| 417 | + /* Decorative header blobs */ |
| 418 | + .header-blob { |
| 419 | + position: absolute; |
| 420 | + filter: blur(40px); |
| 421 | + opacity: 0.35; |
| 422 | + z-index: 0; |
| 423 | + pointer-events: none; |
| 424 | + } |
| 425 | + .header-blob.b1 { width: 320px; height: 320px; background: #60a5fa; top: -60px; left: -40px; border-radius: 50%; } |
| 426 | + .header-blob.b2 { width: 420px; height: 420px; background: #a78bfa; top: -80px; right: -80px; border-radius: 50%; } |
| 427 | + |
| 428 | + /* Section title accent underline */ |
| 429 | + .section-title { position: relative; } |
| 430 | + .section-title::after { |
| 431 | + content: ''; |
| 432 | + position: absolute; |
| 433 | + left: 50%; |
| 434 | + transform: translateX(-50%); |
| 435 | + bottom: -12px; |
| 436 | + width: 120px; |
| 437 | + height: 4px; |
| 438 | + border-radius: 999px; |
| 439 | + background: linear-gradient(90deg, var(--primary), var(--accent)); |
| 440 | + opacity: 0.6; |
| 441 | + } |
| 442 | + |
| 443 | + /* Respect users who prefer reduced motion */ |
| 444 | + @media (prefers-reduced-motion: reduce) { |
| 445 | + .logo-gradient { animation: none; } |
| 446 | + .reveal { opacity: 1 !important; transform: none !important; } |
| 447 | + .concept-card:hover, .doc-card:hover, .benefit-card:hover { transform: none; } |
| 448 | + } |
360 | 449 |
|
361 | 450 | footer a { |
362 | 451 | color: var(--secondary); |
|
388 | 477 | .doc-grid { |
389 | 478 | grid-template-columns: 1fr; |
390 | 479 | } |
| 480 | + .concept-cards { |
| 481 | + grid-template-columns: 1fr; |
| 482 | + } |
391 | 483 | } |
392 | 484 | </style> |
393 | 485 | </head> |
394 | 486 | <body> |
395 | 487 | <header> |
| 488 | + <div class="header-blob b1"></div> |
| 489 | + <div class="header-blob b2"></div> |
396 | 490 | <div class="container"> |
397 | | - <h1>⚡ SpecOps</h1> |
| 491 | + <h1 class="logo-gradient">⚡ SpecOps</h1> |
398 | 492 | <p class="tagline">Specification-Driven Legacy System Modernization</p> |
399 | 493 | <p class="hero-description"> |
400 | 494 | SpecOps uses AI not just to transform legacy code, but to preserve institutional knowledge and create verified software specifications—reducing risk, speeding modernization efforts, and future-proofing your mission critical systems. |
@@ -456,10 +550,10 @@ <h4>GitOps Thinking</h4> |
456 | 550 | <div class="highlight-box" style="margin-top: 2rem;"> |
457 | 551 | <strong>How it works:</strong> |
458 | 552 | <ul style="margin-top: 0.75rem; margin-bottom: 0;"> |
459 | | - <li style="margin-bottom: 0.5rem;">AI analyzes legacy systems and generates specifications in plain language</li> |
| 553 | + <li style="margin-bottom: 0.5rem;">AI analyzes legacy systems and generates comprehensive software specifications in plain language</li> |
460 | 554 | <li style="margin-bottom: 0.5rem;">Domain experts—policy makers, program administrators, business stakeholders—verify these specifications before any modern code is written</li> |
461 | | - <li style="margin-bottom: 0.5rem;">Once verified, the specification becomes the source of truth that guides implementation and future changes</li> |
462 | | - <li>All changes flow through the specification first, ensuring proper review and approval</li> |
| 555 | + <li style="margin-bottom: 0.5rem;">Once verified, the specification becomes the source of truth that guides AI-assisted implementation and future changes</li> |
| 556 | + <li>All changes to the system flow through the specification document first, ensuring proper review and approval</li> |
463 | 557 | </ul> |
464 | 558 | </div> |
465 | 559 |
|
@@ -652,5 +746,26 @@ <h2 class="section-title">Get Started</h2> |
652 | 746 | </p> |
653 | 747 | </div> |
654 | 748 | </footer> |
| 749 | + <script> |
| 750 | + // Lightweight scroll reveal for key elements (no text changes) |
| 751 | + (function() { |
| 752 | + var els = document.querySelectorAll('.concept-card, .benefit-card, .doc-card, .section-title, .concept-box, .hero-description'); |
| 753 | + els.forEach(function(el){ el.classList.add('reveal'); }); |
| 754 | + if ('IntersectionObserver' in window) { |
| 755 | + var observer = new IntersectionObserver(function(entries){ |
| 756 | + entries.forEach(function(entry){ |
| 757 | + if (entry.isIntersecting) { |
| 758 | + entry.target.classList.add('in-view'); |
| 759 | + observer.unobserve(entry.target); |
| 760 | + } |
| 761 | + }); |
| 762 | + }, { threshold: 0.15 }); |
| 763 | + els.forEach(function(el){ observer.observe(el); }); |
| 764 | + } else { |
| 765 | + // Fallback: show all |
| 766 | + els.forEach(function(el){ el.classList.add('in-view'); }); |
| 767 | + } |
| 768 | + })(); |
| 769 | + </script> |
655 | 770 | </body> |
656 | 771 | </html> |
0 commit comments