Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| start [2026/06/11 07:50] – jumpstartadmin | start [2026/06/11 08:33] (current) – jumpstartadmin | ||
|---|---|---|---|
| Line 4: | Line 4: | ||
| @font-face { font-family: | @font-face { font-family: | ||
| - | .js-wrap { position: fixed; top: 50px; left: 0; width: 100vw; height: | + | /* Grid fills full viewport — navbar floats over it */ |
| + | .js-wrap { | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | } | ||
| + | |||
| + | /* Scanline overlay */ | ||
| + | .js-wrap:: | ||
| + | content: ''; | ||
| + | position: absolute; | ||
| + | inset: 0; | ||
| + | z-index: 100; | ||
| + | pointer-events: | ||
| + | background: repeating-linear-gradient( | ||
| + | to bottom, | ||
| + | rgba(0, | ||
| + | rgba(0, | ||
| + | transparent 1px, | ||
| + | transparent 3px | ||
| + | ); | ||
| + | } | ||
| + | |||
| + | /* Edge vignette */ | ||
| + | .js-wrap:: | ||
| + | content: ''; | ||
| + | position: absolute; | ||
| + | inset: 0; | ||
| + | z-index: 101; | ||
| + | pointer-events: | ||
| + | background: | ||
| + | linear-gradient(to right, rgba(10, | ||
| + | linear-gradient(to bottom, rgba(10, | ||
| + | } | ||
| .js-card { position: relative; display: block; overflow: hidden; text-decoration: | .js-card { position: relative; display: block; overflow: hidden; text-decoration: | ||
| Line 20: | Line 61: | ||
| .js-card: | .js-card: | ||
| - | /* Title — fixed dead center | + | /* Dark vignette behind title */ |
| + | .js-title-bg { | ||
| + | position: | ||
| + | top: 50%; | ||
| + | left: 50%; | ||
| + | transform: translate(-50%, | ||
| + | width: 600px; | ||
| + | height: 300px; | ||
| + | z-index: 1000; | ||
| + | pointer-events: | ||
| + | background: radial-gradient(ellipse at center, rgba(10, | ||
| + | animation: fadeIn 0.8s ease 0.2s both; | ||
| + | } | ||
| + | |||
| + | /* Title — centered in full viewport | ||
| .js-title { | .js-title { | ||
| position: fixed; | position: fixed; | ||
| - | top: 50px; | + | top: 0; |
| left: 0; | left: 0; | ||
| width: 100vw; | width: 100vw; | ||
| - | height: | + | height: 100vh; |
| - | z-index: | + | z-index: |
| pointer-events: | pointer-events: | ||
| display: flex; | display: flex; | ||
| Line 33: | Line 88: | ||
| align-items: | align-items: | ||
| justify-content: | justify-content: | ||
| - | gap: 6px; | + | gap: 4px; |
| + | animation: floatY 4s ease-in-out infinite; | ||
| } | } | ||
| - | /* Clip reveal container */ | + | @keyframes floatY |
| - | .js-title-top-wrap | + | |
| - | | + | |
| - | | + | |
| } | } | ||
| - | .js-title-bottom-wrap | + | .js-title-sub { font-family: ' |
| - | overflow: hidden; | + | |
| - | padding: 2px 0; | + | |
| - | } | + | |
| - | /* JUMPSTART */ | + | .js-title-main { font-family: |
| - | .js-title-top { | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | display: block; | + | |
| - | } | + | |
| - | /* MOVEMENT WIKI */ | + | .js-title-divider |
| - | .js-title-bottom | + | .js-title-divider-line { height: 1px; width: 100px; background: linear-gradient(to right, transparent, |
| - | font-family: ' | + | .js-title-divider-diamond { width: 5px; height: 5px; background: rgba(184,173,219, |
| - | font-weight: normal; | + | |
| - | font-size: 0.9em; | + | |
| - | | + | |
| - | text-transform: uppercase; | + | |
| - | color: rgba(184, | + | |
| - | text-shadow: 0 2px 10px rgba(0,0,0,0.9); | + | |
| - | animation: revealUp 0.9s cubic-bezier(0.16, 1, 0.3, 1) 0.55s both; | + | |
| - | display: block; | + | |
| - | } | + | |
| - | /* Horizontal line that sweeps in */ | + | /* Particle canvas — full viewport |
| - | .js-title-line-wrap | + | #js-particles |
| - | display: flex; | + | |
| - | align-items: center; | + | |
| - | gap: 14px; | + | |
| - | animation: fadeIn 0.6s ease 0.9s both; | + | |
| - | } | + | |
| - | + | ||
| - | .js-title-line { | + | |
| - | height: 1px; | + | |
| - | background: linear-gradient(to right, transparent, | + | |
| - | animation: expandLine 1s cubic-bezier(0.16, | + | |
| - | | + | |
| - | } | + | |
| - | + | ||
| - | .js-title-diamond { | + | |
| - | width: 5px; | + | |
| - | | + | |
| - | background: rgba(184, | + | |
| - | transform: rotate(45deg); | + | |
| - | animation: fadeIn 0.4s ease 1.3s both; | + | |
| - | } | + | |
| - | + | ||
| - | @keyframes revealUp { | + | |
| - | from { opacity: 0; transform: translateY(30px) skewY(2deg); | + | |
| - | to { opacity: 1; transform: translateY(0) skewY(0deg); | + | |
| - | } | + | |
| - | + | ||
| - | @keyframes expandLine { | + | |
| - | from { width: 0; } | + | |
| - | to { width: 120px; } | + | |
| - | } | + | |
| - | + | ||
| - | @keyframes fadeIn { | + | |
| - | from { opacity: 0; } | + | |
| - | to { opacity: 1; } | + | |
| - | } | + | |
| + | @keyframes revealUp { from { opacity: 0; transform: translateY(20px); | ||
| + | @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } | ||
| @keyframes glowPulse { | @keyframes glowPulse { | ||
| - | 0%, 100% { text-shadow: | + | 0%, 100% { text-shadow: |
| - | 50% { text-shadow: | + | 50% { text-shadow: |
| } | } | ||
| - | |||
| @keyframes fadeUp { from { opacity: 0; transform: translateY(24px); | @keyframes fadeUp { from { opacity: 0; transform: translateY(24px); | ||
| Line 123: | Line 121: | ||
| .js-card: | .js-card: | ||
| </ | </ | ||
| + | |||
| + | <div class=" | ||
| <div class=" | <div class=" | ||
| - | <div class=" | + | <div class=" |
| - | <div class=" | + | <div class=" |
| - | <div class=" | + | <div class=" |
| - | <div class=" | + | <div class=" |
| - | </div> | + | <div class=" |
| - | <div class=" | + | <div class=" |
| - | < | + | |
| - | | + | |
| - | <div class=" | + | |
| - | | + | |
| - | </ | + | |
| - | | + | |
| - | <div class=" | + | |
| - | <div class=" | + | |
| - | <div class=" | + | |
| </ | </ | ||
| </ | </ | ||
| + | |||
| + | <canvas id=" | ||
| <div class=" | <div class=" | ||
| Line 178: | Line 171: | ||
| </ | </ | ||
| + | |||
| + | < | ||
| + | const canvas = document.getElementById(' | ||
| + | const ctx = canvas.getContext(' | ||
| + | canvas.width = window.innerWidth; | ||
| + | canvas.height = window.innerHeight; | ||
| + | |||
| + | const cx = canvas.width / 2; | ||
| + | const cy = canvas.height / 2; | ||
| + | const particles = []; | ||
| + | |||
| + | function randomRange(a, | ||
| + | |||
| + | for (let i = 0; i < 60; i++) { | ||
| + | particles.push({ | ||
| + | x: cx + randomRange(-180, | ||
| + | y: cy + randomRange(-80, | ||
| + | vx: randomRange(-0.3, | ||
| + | vy: randomRange(-0.8, | ||
| + | size: randomRange(1, | ||
| + | alpha: randomRange(0.4, | ||
| + | fade: randomRange(0.003, | ||
| + | color: Math.random() > 0.5 ? ' | ||
| + | }); | ||
| + | } | ||
| + | |||
| + | function resetParticle(p) { | ||
| + | p.x = cx + randomRange(-180, | ||
| + | p.y = cy + randomRange(-80, | ||
| + | p.vx = randomRange(-0.3, | ||
| + | p.vy = randomRange(-0.8, | ||
| + | p.alpha = randomRange(0.4, | ||
| + | p.size = randomRange(1, | ||
| + | p.fade = randomRange(0.003, | ||
| + | } | ||
| + | |||
| + | function draw() { | ||
| + | ctx.clearRect(0, | ||
| + | particles.forEach(p => { | ||
| + | p.x += p.vx; | ||
| + | p.y += p.vy; | ||
| + | p.alpha -= p.fade; | ||
| + | if (p.alpha <= 0) resetParticle(p); | ||
| + | ctx.beginPath(); | ||
| + | ctx.arc(p.x, | ||
| + | ctx.fillStyle = `rgba(${p.color}, | ||
| + | ctx.fill(); | ||
| + | }); | ||
| + | requestAnimationFrame(draw); | ||
| + | } | ||
| + | |||
| + | draw(); | ||
| + | |||
| + | window.addEventListener(' | ||
| + | canvas.width = window.innerWidth; | ||
| + | canvas.height = window.innerHeight; | ||
| + | }); | ||
| + | </ | ||
| </ | </ | ||