D
Digmarket. Preview
Navigation
Home Free

OTT Premium Upgrade Sync – Amethyst Cinematic

<div class="fp-streaming-media-premium-subscription-upgrade-ui">
  <div class="fp-streaming-media-premium-subscription-upgrade-ui-stage">
    <div class="fp-streaming-media-premium-subscription-upgrade-ui-ambient"></div>
    <div class="fp-streaming-media-premium-subscription-upgrade-ui-orbit"></div>
    
    <div class="fp-streaming-media-premium-subscription-upgrade-ui-card">
      <div class="fp-streaming-media-premium-subscription-upgrade-ui-canvas-container">
        <canvas class="fp-streaming-media-premium-subscription-upgrade-ui-canvas"></canvas>
      </div>

      <div class="fp-streaming-media-premium-subscription-upgrade-ui-header">
        <div class="fp-streaming-media-premium-subscription-upgrade-ui-icon">4K ULTRA</div>
        <div class="fp-streaming-media-premium-subscription-upgrade-ui-badge">Upgrade</div>
      </div>

      <div class="fp-streaming-media-premium-subscription-upgrade-ui-content">
        <div class="fp-streaming-media-premium-subscription-upgrade-ui-title">Premium Sync</div>
        <div class="fp-streaming-media-premium-subscription-upgrade-ui-subtitle">Unlocking ad-free catalog and high dynamic range streaming...</div>
        <div class="fp-streaming-media-premium-subscription-upgrade-ui-status-text">INITIALIZING...</div>
      </div>

      <div class="fp-streaming-media-premium-subscription-upgrade-ui-footer">
        <div class="fp-streaming-media-premium-subscription-upgrade-ui-progress-track">
          <div class="fp-streaming-media-premium-subscription-upgrade-ui-progress-fill"></div>
        </div>
      </div>
    </div>
  </div>
</div>
.fp-streaming-media-premium-subscription-upgrade-ui {
  --fp-container-width: 100%;
  --fp-max-width: 500px;
  --fp-aspect-ratio: 1 / 1;

  --fp-primary-color: #ffffff;
  --fp-secondary-color: #e2e8f0;
  --fp-muted-color: #64748b;
  --fp-soft-color: #f8fafc;
  --fp-background-color: transparent;

  --fp-info-color: #0f172a;
  --fp-warning-color: #c084fc;
  --fp-danger-color: #4c1d95;
  --fp-accent-color: #7e22ce;

  all: unset;
  display: block;
  width: var(--fp-container-width);
  max-width: var(--fp-max-width);
  margin: 0 auto;
  font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  box-sizing: border-box;
  color: var(--fp-info-color);
}

.fp-streaming-media-premium-subscription-upgrade-ui * {
  box-sizing: border-box;
}

.fp-streaming-media-premium-subscription-upgrade-ui-stage {
  position: relative;
  width: 100%;
  aspect-ratio: var(--fp-aspect-ratio);
  background: var(--fp-primary-color);
  border-radius: 24px;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--fp-secondary-color);
  box-shadow: 0 20px 40px rgba(15, 23, 42, 0.05);
}

.fp-streaming-media-premium-subscription-upgrade-ui-ambient {
  position: absolute;
  inset: -10%;
  background: radial-gradient(circle at center, rgba(126, 34, 206, 0.08) 0%, transparent 70%);
  animation: fp-streaming-media-premium-subscription-upgrade-ui-breathe 5s ease-in-out infinite alternate;
  pointer-events: none;
}

.fp-streaming-media-premium-subscription-upgrade-ui-orbit {
  position: absolute;
  width: 120%;
  height: 120%;
  border-radius: 50%;
  background: conic-gradient(from 0deg, transparent 0deg, rgba(126, 34, 206, 0.05) 90deg, transparent 180deg);
  animation: fp-streaming-media-premium-subscription-upgrade-ui-spin 15s linear infinite;
  pointer-events: none;
}

.fp-streaming-media-premium-subscription-upgrade-ui-card {
  position: relative;
  z-index: 10;
  width: 80%;
  height: 75%;
  background: linear-gradient(135deg, #09090b 0%, #18181b 100%);
  border-radius: 20px;
  box-shadow: 0 24px 48px rgba(0, 0, 0, 0.2), 0 0 0 1px rgba(126, 34, 206, 0.2), inset 0 0 30px rgba(126, 34, 206, 0.1);
  display: flex;
  flex-direction: column;
  overflow: hidden;
  color: var(--fp-primary-color);
}

.fp-streaming-media-premium-subscription-upgrade-ui-card::before {
  content: '';
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 2px;
  background: linear-gradient(90deg, transparent, var(--fp-warning-color), var(--fp-accent-color), transparent);
  opacity: 0.8;
  animation: fp-streaming-media-premium-subscription-upgrade-ui-shimmer-border 3s ease-in-out infinite;
}

.fp-streaming-media-premium-subscription-upgrade-ui-header {
  padding: 24px 24px 16px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  position: relative;
  z-index: 2;
}

.fp-streaming-media-premium-subscription-upgrade-ui-badge {
  font-size: 0.65rem;
  font-weight: 700;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: var(--fp-warning-color);
  background: rgba(126, 34, 206, 0.2);
  padding: 4px 12px;
  border-radius: 12px;
  border: 1px solid rgba(192, 132, 252, 0.3);
}

.fp-streaming-media-premium-subscription-upgrade-ui-icon {
  font-weight: 900;
  font-size: 1.2rem;
  letter-spacing: -0.05em;
  background: linear-gradient(to right, #fff, var(--fp-warning-color));
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
}

.fp-streaming-media-premium-subscription-upgrade-ui-content {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  position: relative;
  z-index: 2;
}

.fp-streaming-media-premium-subscription-upgrade-ui-title {
  font-size: 2rem;
  font-weight: 300;
  letter-spacing: -0.02em;
  margin-bottom: 8px;
  text-shadow: 0 0 20px rgba(192, 132, 252, 0.4);
}

.fp-streaming-media-premium-subscription-upgrade-ui-subtitle {
  font-size: 0.85rem;
  color: rgba(255, 255, 255, 0.6);
  text-align: center;
  max-width: 80%;
  line-height: 1.4;
}

.fp-streaming-media-premium-subscription-upgrade-ui-status-text {
  margin-top: 24px;
  font-size: 0.75rem;
  font-family: ui-monospace, monospace;
  color: var(--fp-warning-color);
  letter-spacing: 0.05em;
}

.fp-streaming-media-premium-subscription-upgrade-ui-canvas-container {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  z-index: 1;
  pointer-events: none;
}

.fp-streaming-media-premium-subscription-upgrade-ui-canvas {
  width: 100%;
  height: 100%;
  display: block;
}

.fp-streaming-media-premium-subscription-upgrade-ui-footer {
  padding: 16px 24px;
  display: flex;
  justify-content: center;
  align-items: center;
  border-top: 1px solid rgba(255, 255, 255, 0.05);
  position: relative;
  z-index: 2;
  background: rgba(0, 0, 0, 0.2);
}

.fp-streaming-media-premium-subscription-upgrade-ui-progress-track {
  width: 100%;
  height: 4px;
  background: rgba(255, 255, 255, 0.1);
  border-radius: 2px;
  overflow: hidden;
  position: relative;
}

.fp-streaming-media-premium-subscription-upgrade-ui-progress-fill {
  position: absolute;
  top: 0; left: 0; bottom: 0;
  width: 0%;
  background: linear-gradient(90deg, var(--fp-accent-color), var(--fp-warning-color));
  box-shadow: 0 0 10px var(--fp-warning-color);
  transition: width 0.1s linear;
}

@keyframes fp-streaming-media-premium-subscription-upgrade-ui-breathe {
  0% { transform: scale(1); opacity: 0.5; }
  100% { transform: scale(1.05); opacity: 1; }
}

@keyframes fp-streaming-media-premium-subscription-upgrade-ui-spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

@keyframes fp-streaming-media-premium-subscription-upgrade-ui-shimmer-border {
  0% { transform: translateX(-100%); }
  100% { transform: translateX(100%); }
}

@media (max-width: 480px) {
  .fp-streaming-media-premium-subscription-upgrade-ui-card {
    width: 90%;
    height: 80%;
  }
  .fp-streaming-media-premium-subscription-upgrade-ui-title {
    font-size: 1.6rem;
  }
}
document.querySelectorAll('.fp-streaming-media-premium-subscription-upgrade-ui').forEach(root => {
  const canvas = root.querySelector('.fp-streaming-media-premium-subscription-upgrade-ui-canvas');
  const progressFill = root.querySelector('.fp-streaming-media-premium-subscription-upgrade-ui-progress-fill');
  const statusText = root.querySelector('.fp-streaming-media-premium-subscription-upgrade-ui-status-text');
  const titleText = root.querySelector('.fp-streaming-media-premium-subscription-upgrade-ui-title');
  
  if (!canvas || !progressFill || !statusText) return;

  const ctx = canvas.getContext('2d');
  let animationFrameId;
  let isVisible = true;
  
  let time = 0;
  let particles = [];
  let progress = 0;
  let syncStage = 0;

  const stages = [
    "INITIALIZING...",
    "ALLOCATING 4K BANDWIDTH...",
    "REMOVING ADVERTISEMENTS...",
    "SECURING AMETHYST LICENSE...",
    "PREMIUM ACTIVE"
  ];

  const colors = {
    amethystLight: 'rgba(192, 132, 252, 0.8)',
    amethystDeep: 'rgba(126, 34, 206, 0.4)',
    whiteGlow: 'rgba(255, 255, 255, 0.9)'
  };

  const resizeCanvas = () => {
    const rect = canvas.parentElement.getBoundingClientRect();
    canvas.width = rect.width * window.devicePixelRatio;
    canvas.height = rect.height * window.devicePixelRatio;
    ctx.scale(window.devicePixelRatio, window.devicePixelRatio);
  };

  const spawnParticle = (width, height, isBurst = false) => {
    return {
      x: isBurst ? width / 2 : Math.random() * width,
      y: isBurst ? height / 2 : Math.random() * height,
      vx: (Math.random() - 0.5) * (isBurst ? 15 : 2),
      vy: (Math.random() - 0.5) * (isBurst ? 15 : 2),
      size: Math.random() * 2 + 0.5,
      life: 1,
      decay: Math.random() * 0.02 + 0.01
    };
  };

  const animate = () => {
    if (!isVisible) return;
    
    time += 0.02;
    const width = canvas.width / window.devicePixelRatio;
    const height = canvas.height / window.devicePixelRatio;
    
    ctx.clearRect(0, 0, width, height);
    
    if (progress < 100) {
      progress += 0.15 + (Math.random() * 0.1);
      if (progress > 100) progress = 100;
      progressFill.style.width = `${progress}%`;

      const newStage = Math.floor((progress / 100) * (stages.length - 1));
      if (newStage !== syncStage && progress < 100) {
        syncStage = newStage;
        statusText.innerText = stages[syncStage];
      }
    } else if (syncStage !== stages.length - 1) {
       syncStage = stages.length - 1;
       statusText.innerText = stages[syncStage];
       statusText.style.color = '#fff';
       titleText.innerText = "Welcome to 4K";
       for(let i=0; i<50; i++) particles.push(spawnParticle(width, height, true));
    } else {
       if (Math.random() < 0.005) {
         progress = 0;
         syncStage = 0;
         statusText.style.color = 'var(--fp-warning-color)';
         titleText.innerText = "Premium Sync";
       }
    }

    const sweepX = (Math.sin(time * 2) * width * 0.8) + (width / 2);
    
    const gradient = ctx.createLinearGradient(sweepX - 100, 0, sweepX + 100, 0);
    gradient.addColorStop(0, 'transparent');
    gradient.addColorStop(0.5, colors.amethystDeep);
    gradient.addColorStop(1, 'transparent');

    ctx.fillStyle = gradient;
    ctx.save();
    ctx.translate(sweepX, height / 2);
    ctx.rotate(Math.PI / 4);
    ctx.fillRect(-200, -height, 100, height * 2);
    ctx.restore();

    if (Math.random() < 0.1 && progress < 100) {
      particles.push(spawnParticle(width, height));
    }

    for (let i = particles.length - 1; i >= 0; i--) {
      let p = particles[i];
      p.x += p.vx;
      p.y += p.vy;
      p.life -= p.decay;

      if (p.life <= 0) {
        particles.splice(i, 1);
        continue;
      }

      ctx.beginPath();
      ctx.arc(p.x, p.y, p.size, 0, Math.PI * 2);
      ctx.fillStyle = `rgba(192, 132, 252, ${p.life})`;
      ctx.shadowBlur = 10;
      ctx.shadowColor = colors.amethystLight;
      ctx.fill();
      ctx.shadowBlur = 0; 
    }

    animationFrameId = requestAnimationFrame(animate);
  };

  const handleVisibilityChange = () => {
    isVisible = document.visibilityState === 'visible';
    if (isVisible) {
      animate();
    } else {
      cancelAnimationFrame(animationFrameId);
    }
  };

  const observer = new MutationObserver(() => {
    if (!document.body.contains(root)) {
      cancelAnimationFrame(animationFrameId);
      window.removeEventListener('resize', resizeCanvas);
      document.removeEventListener('visibilitychange', handleVisibilityChange);
      observer.disconnect();
    }
  });

  window.addEventListener('resize', resizeCanvas);
  document.addEventListener('visibilitychange', handleVisibilityChange);
  observer.observe(document.body, { childList: true, subtree: true });

  resizeCanvas();
  animate();
});
Created by Digital Market Created: Apr 30, 2026 • Updated: Apr 30, 2026

Description

Let us look at the OTT Premium Upgrade Sync Amethyst Cinematic component. This free UI asset offers a modular card system specifically engineered for the high bandwidth streaming media and OTT sector. We built this entirely from scratch to handle active subscription changes and account sync processes without the usual framework bloat. You get a sterile DOM structure that integrates cleanly into your existing billing portal or video player interface.

Streaming platforms process massive amounts of concurrent user data and require absolute reliability during premium upgrade flows. Heavy client side payloads completely ruin conversion rates when viewers expect immediate visual feedback during a secure checkout. This component solves that bottleneck directly. By strictly avoiding external libraries like Tailwind, Bootstrap, or GSAP, it keeps your bundle size minimal. This ensures rapid rendering for developers who need to present active payment states to users on varied smart televisions or mobile cellular networks.

Technical Architecture & Performance

  • Zero dependency codebase: Built strictly with pure HTML, CSS, and Vanilla JavaScript to keep your front end stack incredibly light.

  • Guaranteed performance metrics: Optimized to help your streaming software maintain 90 plus PageSpeed scores and pass Core Web Vitals easily.

  • Safely scoped CSS: All styling is strictly scoped to prevent any class name collisions when you drop these cards into a massive monolithic repository.

  • Sterile DOM markup: Features clean HTML with absolutely no unnecessary wrappers or deep nesting trees to parse.

Design & Aesthetic Impact

The visual direction utilizes rich Royal Amethyst tones to establish a premium and cinematic environment for the end user. This luxurious and highly readable aesthetic ensures visual clarity for subscribers reviewing complex tier benefits and dense billing logs. For the interaction layer, we implemented a custom shimmering light sweep animation. This sophisticated visual transition provides clear feedback for active plan upgrades and secure data syncing without requiring heavy javascript animation scripts. The final result is a clean user interface that looks premium and functions perfectly for strict enterprise streaming platforms.

Enterprise Use Cases

  • Streaming subscription dashboards: Display premium tier benefits and active upgrade status using the card grid so viewers can manage their accounts quickly.

  • OTT billing portals: Build a fast rendering checkout page where platform administrators can organize and review massive datasets of secure subscriber transactions within a lightweight interface.

  • Smart television companion apps: Create a responsive control layout for product teams to track active plan synchronizations and display personalized upgrade offers across multiple device ecosystems.

Technical Details

  • ElementCards
  • IndustryOTT, Streaming Media
  • StyleCinematic Dark (Glow)
  • AnimationShimmering Light Sweep
  • ColorBlack
Report Issue

Highlights & Benefits

Copy-Paste Ready

Drop the code straight into your project without configuration.

Zero Dependencies

Built strictly with pure CSS & Vanilla JS for maximum speed.

ADA & WCAG Ready

Constructed with strict adherence to WCAG accessibility standards for perfect contrast and screen-reader support.

Sterile DOM Structure

Utilizes a highly optimized, clean DOM architecture ensuring lightning-fast render and maximum PageSpeed scores.

You need an active subscription or purchase to leave a review for this premium component.

OTT Premium Upgrade Sync – Amethyst Cinematic

Category:

Description

Let us look at the OTT Premium Upgrade Sync Amethyst Cinematic component. This free UI asset offers a modular card system specifically engineered for the high bandwidth streaming media and OTT sector. We built this entirely from scratch to handle active subscription changes and account sync processes without the usual framework bloat. You get a sterile DOM structure that integrates cleanly into your existing billing portal or video player interface.

Streaming platforms process massive amounts of concurrent user data and require absolute reliability during premium upgrade flows. Heavy client side payloads completely ruin conversion rates when viewers expect immediate visual feedback during a secure checkout. This component solves that bottleneck directly. By strictly avoiding external libraries like Tailwind, Bootstrap, or GSAP, it keeps your bundle size minimal. This ensures rapid rendering for developers who need to present active payment states to users on varied smart televisions or mobile cellular networks.

Technical Architecture & Performance

  • Zero dependency codebase: Built strictly with pure HTML, CSS, and Vanilla JavaScript to keep your front end stack incredibly light.

  • Guaranteed performance metrics: Optimized to help your streaming software maintain 90 plus PageSpeed scores and pass Core Web Vitals easily.

  • Safely scoped CSS: All styling is strictly scoped to prevent any class name collisions when you drop these cards into a massive monolithic repository.

  • Sterile DOM markup: Features clean HTML with absolutely no unnecessary wrappers or deep nesting trees to parse.

Design & Aesthetic Impact

The visual direction utilizes rich Royal Amethyst tones to establish a premium and cinematic environment for the end user. This luxurious and highly readable aesthetic ensures visual clarity for subscribers reviewing complex tier benefits and dense billing logs. For the interaction layer, we implemented a custom shimmering light sweep animation. This sophisticated visual transition provides clear feedback for active plan upgrades and secure data syncing without requiring heavy javascript animation scripts. The final result is a clean user interface that looks premium and functions perfectly for strict enterprise streaming platforms.

Enterprise Use Cases

  • Streaming subscription dashboards: Display premium tier benefits and active upgrade status using the card grid so viewers can manage their accounts quickly.

  • OTT billing portals: Build a fast rendering checkout page where platform administrators can organize and review massive datasets of secure subscriber transactions within a lightweight interface.

  • Smart television companion apps: Create a responsive control layout for product teams to track active plan synchronizations and display personalized upgrade offers across multiple device ecosystems.