Skip to content

Instantly share code, notes, and snippets.

@shurane
Last active January 9, 2026 04:48
Show Gist options
  • Select an option

  • Save shurane/4829fd090aadae3b3bf048882f4fdb99 to your computer and use it in GitHub Desktop.

Select an option

Save shurane/4829fd090aadae3b3bf048882f4fdb99 to your computer and use it in GitHub Desktop.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Supio Pro+ Premium (FREE TRIAL) - Legal Case Management</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
background: #f5f5f5;
overflow-x: hidden;
}
/* Cookie Banner - Never goes away */
.cookie-banner {
position: fixed;
bottom: 0;
left: 0;
right: 0;
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
color: white;
padding: 20px;
z-index: 9998;
display: flex;
justify-content: space-between;
align-items: center;
box-shadow: 0 -4px 20px rgba(0,0,0,0.3);
}
.cookie-banner button {
background: #4CAF50;
color: white;
border: none;
padding: 12px 30px;
cursor: pointer;
border-radius: 5px;
font-weight: bold;
animation: pulse 1s infinite;
}
.cookie-banner .reject-btn {
background: transparent;
border: 1px solid #666;
color: #666;
font-size: 8px;
padding: 4px 8px;
margin-left: 10px;
}
@keyframes pulse {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.05); }
}
/* Top Banner Ad */
.top-banner-ad {
background: linear-gradient(90deg, #ff6b6b, #feca57, #48dbfb, #ff9ff3);
background-size: 400% 400%;
animation: gradientShift 3s ease infinite;
padding: 15px;
text-align: center;
color: white;
font-weight: bold;
text-shadow: 2px 2px 4px rgba(0,0,0,0.5);
cursor: pointer;
}
@keyframes gradientShift {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
.top-banner-ad .close-btn {
position: absolute;
right: 10px;
top: 50%;
transform: translateY(-50%);
background: rgba(0,0,0,0.3);
border: none;
color: white;
width: 20px;
height: 20px;
border-radius: 50%;
cursor: pointer;
font-size: 10px;
}
/* Header */
.header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 12px 24px;
background: white;
border-bottom: 1px solid #e0e0e0;
position: relative;
}
.logo-section {
display: flex;
align-items: center;
gap: 8px;
}
.logo {
width: 32px;
height: 32px;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-weight: bold;
font-size: 18px;
}
.brand-name {
font-size: 18px;
font-weight: 600;
color: #333;
}
.brand-name .premium {
font-size: 10px;
background: gold;
color: #333;
padding: 2px 6px;
border-radius: 3px;
margin-left: 5px;
animation: blink 0.5s infinite;
}
@keyframes blink {
0%, 100% { opacity: 1; }
50% { opacity: 0.5; }
}
.nav-links {
display: flex;
gap: 24px;
align-items: center;
}
.nav-link {
color: #666;
text-decoration: none;
font-size: 14px;
padding: 8px 0;
border-bottom: 2px solid transparent;
}
.nav-link.active {
color: #333;
border-bottom-color: #667eea;
}
.nav-link.sponsored {
background: #fff3cd;
padding: 8px 12px;
border-radius: 4px;
color: #856404;
font-size: 11px;
}
.header-right {
display: flex;
align-items: center;
gap: 16px;
}
.upgrade-btn {
background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
color: white;
border: none;
padding: 8px 16px;
border-radius: 20px;
cursor: pointer;
font-weight: bold;
animation: shake 0.5s infinite;
}
@keyframes shake {
0%, 100% { transform: translateX(0); }
25% { transform: translateX(-2px); }
75% { transform: translateX(2px); }
}
.user-avatar {
width: 36px;
height: 36px;
border-radius: 50%;
background: #667eea;
color: white;
display: flex;
align-items: center;
justify-content: center;
font-weight: bold;
}
/* Main Layout */
.main-layout {
display: flex;
min-height: calc(100vh - 120px);
}
/* Sidebar */
.sidebar {
width: 80px;
background: white;
border-right: 1px solid #e0e0e0;
padding: 16px 0;
display: flex;
flex-direction: column;
align-items: center;
gap: 8px;
}
.sidebar-item {
display: flex;
flex-direction: column;
align-items: center;
padding: 12px 8px;
color: #666;
text-decoration: none;
font-size: 11px;
width: 100%;
text-align: center;
cursor: pointer;
transition: background 0.2s;
}
.sidebar-item:hover {
background: #f5f5f5;
}
.sidebar-item.active {
color: #667eea;
background: #f0f0ff;
}
.sidebar-item svg {
width: 24px;
height: 24px;
margin-bottom: 4px;
}
.sidebar-ad {
background: linear-gradient(135deg, #ff9a9e 0%, #fecfef 100%);
padding: 8px;
margin: 8px;
border-radius: 8px;
font-size: 9px;
text-align: center;
color: #333;
cursor: pointer;
}
.sidebar-ad img {
width: 50px;
height: 50px;
object-fit: cover;
border-radius: 4px;
margin-bottom: 4px;
}
.sidebar-section-label {
font-size: 10px;
color: #999;
text-transform: uppercase;
padding: 16px 8px 8px;
width: 100%;
text-align: center;
border-top: 1px solid #e0e0e0;
margin-top: 8px;
}
/* Content Area */
.content {
flex: 1;
padding: 24px;
position: relative;
}
/* Tabs */
.content-tabs {
display: flex;
gap: 0;
margin-bottom: 20px;
border-bottom: 1px solid #e0e0e0;
}
.content-tab {
padding: 12px 24px;
background: none;
border: none;
cursor: pointer;
font-size: 14px;
color: #666;
border-bottom: 2px solid transparent;
margin-bottom: -1px;
}
.content-tab.active {
color: #667eea;
border-bottom-color: #667eea;
}
.content-tab.sponsored-tab {
background: #fff3cd;
color: #856404;
font-size: 11px;
border-radius: 4px 4px 0 0;
}
.tab-content {
display: none;
}
.tab-content.active {
display: block;
}
/* Files View */
.files-container {
display: flex;
gap: 20px;
}
.files-list {
flex: 1;
background: white;
border-radius: 12px;
box-shadow: 0 2px 8px rgba(0,0,0,0.05);
}
.files-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 16px 20px;
border-bottom: 1px solid #e0e0e0;
}
.files-search {
display: flex;
gap: 10px;
align-items: center;
}
.files-search input {
padding: 8px 16px;
border: 1px solid #ddd;
border-radius: 6px;
width: 200px;
}
.file-sync-btn {
padding: 8px 16px;
background: white;
border: 1px solid #ddd;
border-radius: 6px;
cursor: pointer;
}
.files-table-header {
display: flex;
padding: 12px 20px;
background: #fafafa;
border-bottom: 1px solid #e0e0e0;
font-size: 12px;
color: #666;
font-weight: 600;
}
.file-item {
display: flex;
padding: 16px 20px;
border-bottom: 1px solid #f0f0f0;
align-items: flex-start;
cursor: pointer;
transition: background 0.2s;
}
.file-item:hover {
background: #f8f9ff;
}
.file-icon {
width: 40px;
height: 40px;
margin-right: 16px;
display: flex;
align-items: center;
justify-content: center;
font-size: 24px;
}
.file-icon.word {
color: #2b579a;
}
.file-icon.pdf {
color: #dc3545;
}
.file-info {
flex: 1;
}
.file-name {
font-size: 14px;
color: #333;
margin-bottom: 6px;
}
.file-tags {
display: flex;
gap: 6px;
margin-bottom: 6px;
}
.file-tag {
font-size: 10px;
padding: 3px 8px;
border-radius: 4px;
}
.file-tag.generated {
background: #e3f2fd;
color: #1976d2;
}
.file-tag.published {
background: #e8f5e9;
color: #2e7d32;
}
.file-tag.auto {
background: #fff3e0;
color: #f57c00;
}
.file-meta {
font-size: 11px;
color: #999;
}
.file-date {
font-size: 12px;
color: #666;
text-align: right;
min-width: 100px;
}
.file-actions {
display: flex;
gap: 8px;
margin-left: 16px;
}
/* File Preview Panel */
.file-preview {
width: 300px;
background: white;
border-radius: 12px;
box-shadow: 0 2px 8px rgba(0,0,0,0.05);
padding: 20px;
}
.preview-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 16px;
}
.preview-title {
font-size: 14px;
color: #333;
font-weight: 500;
}
.preview-close {
background: none;
border: none;
font-size: 20px;
cursor: pointer;
color: #999;
}
.preview-image {
width: 100%;
height: 300px;
background: linear-gradient(135deg, #1e3a8a 0%, #3b82f6 100%);
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 48px;
margin-bottom: 16px;
}
.preview-sponsor {
text-align: center;
padding: 12px;
background: #f5f5f5;
border-radius: 8px;
font-size: 11px;
color: #666;
}
/* Sponsored File Item */
.file-item.sponsored {
background: linear-gradient(90deg, #fff9e6 0%, #fff5cc 100%);
border-left: 4px solid #ffc107;
}
.breadcrumb {
font-size: 13px;
color: #666;
margin-bottom: 16px;
}
.breadcrumb a {
color: #667eea;
text-decoration: none;
}
/* Page Header */
.page-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.page-title {
font-size: 20px;
font-weight: 600;
color: #333;
}
.page-actions {
display: flex;
gap: 12px;
align-items: center;
}
/* Inline Ad */
.inline-ad {
background: #fff3cd;
border: 2px dashed #ffc107;
padding: 12px 20px;
margin-bottom: 20px;
border-radius: 8px;
display: flex;
justify-content: space-between;
align-items: center;
}
.inline-ad-text {
font-size: 14px;
color: #856404;
}
.inline-ad-text strong {
color: #d63384;
}
.inline-ad-btn {
background: #ffc107;
color: #333;
border: none;
padding: 8px 16px;
border-radius: 4px;
cursor: pointer;
font-weight: bold;
}
/* Search and Filters */
.search-filters {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 16px;
}
.search-box {
position: relative;
width: 300px;
}
.search-box input {
width: 100%;
padding: 10px 40px 10px 16px;
border: 1px solid #ddd;
border-radius: 8px;
font-size: 14px;
}
.search-box input::placeholder {
color: #999;
}
.search-sponsored {
position: absolute;
right: 10px;
top: 50%;
transform: translateY(-50%);
font-size: 9px;
color: #999;
background: #f0f0f0;
padding: 2px 6px;
border-radius: 3px;
}
.filter-group {
display: flex;
gap: 8px;
align-items: center;
}
.filter-btn {
background: white;
border: 1px solid #ddd;
padding: 8px 16px;
border-radius: 6px;
font-size: 13px;
cursor: pointer;
display: flex;
align-items: center;
gap: 6px;
}
.filter-btn.active {
background: #667eea;
color: white;
border-color: #667eea;
}
.toggle-switch {
display: flex;
align-items: center;
gap: 8px;
font-size: 13px;
color: #666;
}
.toggle {
width: 40px;
height: 22px;
background: #667eea;
border-radius: 11px;
position: relative;
cursor: pointer;
}
.toggle::after {
content: '';
position: absolute;
width: 18px;
height: 18px;
background: white;
border-radius: 50%;
top: 2px;
right: 2px;
}
/* Cases Table */
.cases-table-container {
background: white;
border-radius: 12px;
box-shadow: 0 2px 8px rgba(0,0,0,0.05);
overflow: hidden;
}
.cases-table {
width: 100%;
border-collapse: collapse;
}
.cases-table th {
text-align: left;
padding: 14px 16px;
font-size: 12px;
font-weight: 600;
color: #666;
background: #fafafa;
border-bottom: 1px solid #e0e0e0;
}
.cases-table td {
padding: 14px 16px;
font-size: 13px;
color: #333;
border-bottom: 1px solid #f0f0f0;
}
.cases-table tr:hover {
background: #f8f9ff;
}
.case-name {
display: flex;
align-items: center;
gap: 10px;
}
.case-icon {
width: 28px;
height: 28px;
background: #f0f0f0;
border-radius: 6px;
display: flex;
align-items: center;
justify-content: center;
color: #666;
}
.case-type-badge {
background: #e8e8e8;
padding: 4px 10px;
border-radius: 4px;
font-size: 11px;
font-weight: 500;
}
.status-badge {
padding: 4px 10px;
border-radius: 12px;
font-size: 11px;
font-weight: 500;
}
.status-badge.pending {
background: #fff3e0;
color: #e65100;
}
.status-badge.published {
background: #e8f5e9;
color: #2e7d32;
}
.staff-avatars {
display: flex;
gap: 4px;
}
.staff-avatar {
width: 28px;
height: 28px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 10px;
font-weight: bold;
color: white;
}
.creator-cell {
display: flex;
align-items: center;
gap: 8px;
}
.action-icons {
display: flex;
gap: 8px;
}
.action-icon {
width: 28px;
height: 28px;
border-radius: 50%;
border: 1px solid #ddd;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
color: #666;
background: white;
}
/* Sponsored Row */
.sponsored-row {
background: linear-gradient(90deg, #fff9e6 0%, #fff5cc 100%) !important;
}
.sponsored-row td {
border-bottom: 2px solid #ffc107;
}
.sponsored-label {
font-size: 9px;
background: #ffc107;
color: #333;
padding: 2px 6px;
border-radius: 3px;
margin-left: 8px;
}
/* Table Ad Row */
.table-ad-row td {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
text-align: center;
padding: 20px;
}
.table-ad-row .ad-content {
display: flex;
justify-content: center;
align-items: center;
gap: 20px;
}
.table-ad-row .ad-text {
font-size: 16px;
font-weight: bold;
}
.table-ad-row .ad-cta {
background: white;
color: #667eea;
border: none;
padding: 10px 24px;
border-radius: 20px;
cursor: pointer;
font-weight: bold;
}
/* Right Side Ads */
.right-sidebar-ad {
position: fixed;
right: 20px;
top: 200px;
width: 160px;
background: white;
border-radius: 12px;
box-shadow: 0 4px 20px rgba(0,0,0,0.15);
overflow: hidden;
z-index: 100;
}
.right-sidebar-ad .ad-header {
background: #f0f0f0;
padding: 6px 10px;
font-size: 9px;
color: #999;
}
.right-sidebar-ad .ad-image {
width: 100%;
height: 200px;
background: linear-gradient(135deg, #74ebd5 0%, #ACB6E5 100%);
display: flex;
align-items: center;
justify-content: center;
font-size: 14px;
color: white;
text-align: center;
padding: 20px;
}
.right-sidebar-ad .ad-cta-btn {
display: block;
width: 100%;
padding: 12px;
background: #28a745;
color: white;
border: none;
font-weight: bold;
cursor: pointer;
}
/* Popup Modal */
.popup-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0,0,0,0.7);
display: flex;
align-items: center;
justify-content: center;
z-index: 10000;
}
.popup-overlay.hidden {
display: none;
}
.popup {
background: white;
border-radius: 16px;
width: 500px;
max-width: 90%;
overflow: hidden;
position: relative;
animation: popIn 0.3s ease;
}
@keyframes popIn {
0% { transform: scale(0.8); opacity: 0; }
100% { transform: scale(1); opacity: 1; }
}
.popup-close {
position: absolute;
top: 10px;
right: 10px;
width: 30px;
height: 30px;
border-radius: 50%;
border: none;
background: rgba(0,0,0,0.1);
cursor: pointer;
font-size: 18px;
color: #666;
}
.popup-image {
width: 100%;
height: 200px;
background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 24px;
font-weight: bold;
text-align: center;
}
.popup-content {
padding: 24px;
text-align: center;
}
.popup-content h2 {
font-size: 22px;
color: #333;
margin-bottom: 12px;
}
.popup-content p {
color: #666;
font-size: 14px;
margin-bottom: 20px;
}
.popup-cta {
display: block;
width: 100%;
padding: 14px;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
border: none;
border-radius: 8px;
font-size: 16px;
font-weight: bold;
cursor: pointer;
margin-bottom: 12px;
}
.popup-skip {
color: #999;
font-size: 12px;
text-decoration: underline;
cursor: pointer;
background: none;
border: none;
}
.popup-skip.disabled {
color: #ccc;
cursor: not-allowed;
}
/* Video Ad Overlay */
.video-ad-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: #000;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
z-index: 10001;
}
.video-ad-overlay.hidden {
display: none;
}
.video-placeholder {
width: 640px;
height: 360px;
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 48px;
border-radius: 8px;
}
.video-ad-skip {
margin-top: 20px;
padding: 10px 20px;
background: rgba(255,255,255,0.2);
border: 1px solid white;
color: white;
border-radius: 4px;
cursor: pointer;
}
.video-ad-skip.disabled {
opacity: 0.5;
cursor: not-allowed;
}
.ad-label {
position: absolute;
top: 20px;
left: 20px;
background: rgba(255,255,255,0.3);
padding: 4px 12px;
border-radius: 4px;
color: white;
font-size: 12px;
}
/* Floating Ad */
.floating-ad {
position: fixed;
bottom: 120px;
left: 20px;
width: 300px;
background: white;
border-radius: 12px;
box-shadow: 0 4px 20px rgba(0,0,0,0.2);
overflow: hidden;
z-index: 9997;
animation: slideIn 0.5s ease;
}
.floating-ad.hidden {
display: none;
}
@keyframes slideIn {
0% { transform: translateX(-100%); }
100% { transform: translateX(0); }
}
.floating-ad-close {
position: absolute;
top: 8px;
right: 8px;
width: 24px;
height: 24px;
border-radius: 50%;
border: none;
background: rgba(0,0,0,0.3);
color: white;
cursor: pointer;
font-size: 14px;
}
.floating-ad-image {
width: 100%;
height: 120px;
background: linear-gradient(135deg, #f5af19 0%, #f12711 100%);
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 18px;
font-weight: bold;
}
.floating-ad-content {
padding: 16px;
}
.floating-ad-content h4 {
font-size: 14px;
color: #333;
margin-bottom: 8px;
}
.floating-ad-content p {
font-size: 12px;
color: #666;
margin-bottom: 12px;
}
.floating-ad-btn {
width: 100%;
padding: 10px;
background: #f12711;
color: white;
border: none;
border-radius: 6px;
cursor: pointer;
font-weight: bold;
}
/* Scroll to see more ad */
.scroll-ad-banner {
background: #1a1a2e;
color: white;
padding: 40px;
text-align: center;
margin-top: 20px;
}
.scroll-ad-banner h3 {
font-size: 24px;
margin-bottom: 16px;
}
.scroll-ad-banner p {
font-size: 14px;
color: #ccc;
margin-bottom: 20px;
}
.scroll-ad-banner button {
background: #667eea;
color: white;
border: none;
padding: 12px 32px;
border-radius: 8px;
font-weight: bold;
cursor: pointer;
}
/* Notification popup */
.notification-popup {
position: fixed;
top: 80px;
right: 20px;
width: 320px;
background: white;
border-radius: 12px;
box-shadow: 0 4px 20px rgba(0,0,0,0.15);
padding: 16px;
z-index: 9996;
animation: slideDown 0.3s ease;
}
.notification-popup.hidden {
display: none;
}
@keyframes slideDown {
0% { transform: translateY(-20px); opacity: 0; }
100% { transform: translateY(0); opacity: 1; }
}
.notification-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 12px;
}
.notification-header h4 {
font-size: 14px;
color: #333;
}
.notification-close {
background: none;
border: none;
color: #999;
cursor: pointer;
font-size: 18px;
}
.notification-body {
font-size: 13px;
color: #666;
margin-bottom: 12px;
}
.notification-actions {
display: flex;
gap: 8px;
}
.notification-actions button {
flex: 1;
padding: 8px;
border-radius: 6px;
border: none;
cursor: pointer;
font-size: 12px;
}
.notification-actions .primary {
background: #667eea;
color: white;
}
.notification-actions .secondary {
background: #f0f0f0;
color: #666;
}
/* Marquee */
.marquee {
background: #dc3545;
color: white;
padding: 8px;
overflow: hidden;
white-space: nowrap;
}
.marquee-content {
display: inline-block;
animation: marquee 15s linear infinite;
}
@keyframes marquee {
0% { transform: translateX(100%); }
100% { transform: translateX(-100%); }
}
/* Pagination */
.pagination {
display: flex;
justify-content: center;
align-items: center;
gap: 8px;
padding: 20px;
}
.pagination button {
width: 32px;
height: 32px;
border: 1px solid #ddd;
background: white;
border-radius: 6px;
cursor: pointer;
}
.pagination button.active {
background: #667eea;
color: white;
border-color: #667eea;
}
/* Countdown overlay */
.countdown-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0,0,0,0.9);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
z-index: 10002;
color: white;
}
.countdown-overlay.hidden {
display: none;
}
.countdown-number {
font-size: 120px;
font-weight: bold;
animation: countPulse 1s ease infinite;
}
@keyframes countPulse {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.1); }
}
.countdown-text {
font-size: 18px;
margin-top: 20px;
color: #ccc;
}
/* Survey popup */
.survey-popup {
position: fixed;
bottom: 120px;
right: 20px;
width: 280px;
background: white;
border-radius: 12px;
box-shadow: 0 4px 20px rgba(0,0,0,0.2);
padding: 20px;
z-index: 9995;
}
.survey-popup.hidden {
display: none;
}
.survey-popup h4 {
font-size: 14px;
color: #333;
margin-bottom: 12px;
}
.survey-options {
display: flex;
gap: 8px;
margin-bottom: 12px;
}
.survey-option {
flex: 1;
padding: 10px;
border: 1px solid #ddd;
border-radius: 6px;
background: white;
cursor: pointer;
text-align: center;
font-size: 20px;
}
.survey-option:hover {
background: #f0f0f0;
}
.survey-skip {
display: block;
width: 100%;
text-align: center;
color: #999;
font-size: 11px;
text-decoration: underline;
cursor: pointer;
background: none;
border: none;
}
/* Premium upsell bar */
.premium-bar {
background: linear-gradient(90deg, #FFD700, #FFA500);
padding: 10px 20px;
display: flex;
justify-content: space-between;
align-items: center;
}
.premium-bar-text {
color: #333;
font-weight: bold;
font-size: 13px;
}
.premium-bar-btn {
background: #333;
color: gold;
border: none;
padding: 8px 20px;
border-radius: 20px;
cursor: pointer;
font-weight: bold;
}
/* Watermark */
.watermark {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) rotate(-30deg);
font-size: 100px;
color: rgba(0,0,0,0.03);
pointer-events: none;
z-index: 1;
white-space: nowrap;
}
/* Exit intent popup */
.exit-popup {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0,0,0,0.8);
display: flex;
align-items: center;
justify-content: center;
z-index: 10003;
}
.exit-popup.hidden {
display: none;
}
.exit-popup-content {
background: white;
border-radius: 16px;
padding: 40px;
text-align: center;
max-width: 450px;
position: relative;
}
.exit-popup-close {
position: absolute;
top: 10px;
right: 10px;
background: none;
border: none;
font-size: 24px;
cursor: pointer;
color: #999;
}
.exit-popup-content h2 {
font-size: 28px;
color: #dc3545;
margin-bottom: 16px;
}
.exit-popup-content p {
color: #666;
margin-bottom: 24px;
}
.exit-popup-content .discount {
font-size: 48px;
font-weight: bold;
color: #28a745;
margin-bottom: 16px;
}
.exit-popup-btn {
display: block;
width: 100%;
padding: 14px;
background: linear-gradient(135deg, #28a745 0%, #20c997 100%);
color: white;
border: none;
border-radius: 8px;
font-size: 16px;
font-weight: bold;
cursor: pointer;
margin-bottom: 12px;
}
.exit-popup-skip {
color: #999;
font-size: 12px;
cursor: pointer;
background: none;
border: none;
}
/* Loading bar */
.loading-bar {
position: fixed;
top: 0;
left: 0;
height: 3px;
background: linear-gradient(90deg, #667eea, #764ba2, #f093fb);
animation: loading 2s ease-in-out infinite;
z-index: 10004;
}
@keyframes loading {
0% { width: 0; }
50% { width: 70%; }
100% { width: 100%; }
}
</style>
</head>
<body>
<!-- Loading Bar -->
<div class="loading-bar"></div>
<!-- Watermark -->
<div class="watermark">FREE TRIAL FREE TRIAL FREE TRIAL</div>
<!-- Countdown Overlay (shows on page load) -->
<div class="countdown-overlay" id="countdown-overlay" onclick="unlockAudio()">
<div class="countdown-number" id="countdown-number">5</div>
<div class="countdown-text">Your experience will begin shortly...</div>
<div style="margin-top: 40px; color: #666; font-size: 14px;">
Brought to you by LegalAds Pro+
</div>
<div style="margin-top: 30px; padding: 12px 24px; background: rgba(255,255,255,0.1); border-radius: 8px; cursor: pointer; animation: pulse 1s infinite;">
<span style="color: #ffc107; font-size: 16px;">Click anywhere to enable audio</span>
</div>
</div>
<!-- Video Ad Overlay -->
<div class="video-ad-overlay hidden" id="video-ad">
<div class="ad-label">Advertisement</div>
<div class="video-placeholder">
<div>
<div style="font-size: 24px; margin-bottom: 10px;">LegalZoom Premium</div>
<div style="font-size: 14px; color: #ccc;">Your documents, our expertise</div>
</div>
</div>
<button class="video-ad-skip disabled" id="video-skip-btn">Skip Ad in <span id="video-countdown">5</span>s</button>
</div>
<!-- Exit Intent Popup -->
<div class="exit-popup hidden" id="exit-popup">
<div class="exit-popup-content">
<button class="exit-popup-close" onclick="closeExitPopup()">&times;</button>
<h2>WAIT! Don't Leave!</h2>
<p>We noticed you're about to leave. Here's a special offer just for you!</p>
<div class="discount">70% OFF</div>
<p>Upgrade to Supio Enterprise NOW and save big!</p>
<button class="exit-popup-btn">CLAIM MY DISCOUNT</button>
<button class="exit-popup-skip" onclick="closeExitPopup()">No thanks, I hate saving money</button>
</div>
</div>
<!-- Popup Modal -->
<div class="popup-overlay hidden" id="popup-overlay">
<div class="popup">
<button class="popup-close" onclick="closePopup()">&times;</button>
<div class="popup-image">
Unlock Premium Features!
</div>
<div class="popup-content">
<h2>You're Missing Out!</h2>
<p>Upgrade to Supio Premium to unlock unlimited cases, AI-powered insights, and priority support!</p>
<button class="popup-cta">START FREE TRIAL</button>
<button class="popup-skip disabled" id="skip-btn">Skip in <span id="popup-countdown">10</span>s</button>
</div>
</div>
</div>
<!-- Marquee -->
<div class="marquee">
<div class="marquee-content">
HOT DEAL: Upgrade to Premium and get 50% off your first year! Use code LEGAL2024 at checkout. Limited time only!
HOT DEAL: Upgrade to Premium and get 50% off your first year! Use code LEGAL2024 at checkout. Limited time only!
</div>
</div>
<!-- Top Banner Ad -->
<div class="top-banner-ad" style="position: relative;">
CLICK HERE: Win a FREE iPad! Just for legal professionals!
<button class="close-btn" onclick="this.parentElement.style.display='none'">X</button>
</div>
<!-- Premium Upsell Bar -->
<div class="premium-bar">
<span class="premium-bar-text">You're using Supio FREE. Upgrade for 10x more features!</span>
<button class="premium-bar-btn">UPGRADE NOW</button>
</div>
<!-- Header -->
<header class="header">
<div class="logo-section">
<div class="logo">S</div>
<span class="brand-name">
Supio
<span class="premium">FREE</span>
</span>
</div>
<nav class="nav-links">
<a href="#" class="nav-link">Annotate</a>
<a href="#" class="nav-link active">Timeline</a>
<a href="#" class="nav-link">Cases</a>
<a href="#" class="nav-link">Chat</a>
<a href="#" class="nav-link">Prism Eval</a>
<a href="#" class="nav-link sponsored">Sponsored: TurboTax</a>
</nav>
<div class="header-right">
<button class="upgrade-btn">UPGRADE!</button>
<span style="cursor: pointer;">?</span>
<span style="cursor: pointer;">bell</span>
<div class="user-avatar">EC</div>
</div>
</header>
<!-- Main Layout -->
<div class="main-layout">
<!-- Sidebar -->
<aside class="sidebar">
<div class="sidebar-item active">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></svg>
Home
</div>
<div class="sidebar-item">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M3 13h2v-2H3v2zm0 4h2v-2H3v2zm0-8h2V7H3v2zm4 4h14v-2H7v2zm0 4h14v-2H7v2zM7 7v2h14V7H7z"/></svg>
Chrono
</div>
<div class="sidebar-ad">
<div style="font-size: 20px; margin-bottom: 4px;">AD</div>
<div>Try Clio!</div>
</div>
<div class="sidebar-item">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M14 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V8l-6-6z"/></svg>
Files
</div>
<div class="sidebar-item">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25z"/></svg>
Drafting
</div>
<div class="sidebar-item">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M21 18v1c0 1.1-.9 2-2 2H5c-1.1 0-2-.9-2-2V5c0-1.1.9-2 2-2h14c1.1 0 2 .9 2 2v1h-9c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h9z"/></svg>
Billing
</div>
<div class="sidebar-ad" style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white;">
<div style="font-size: 10px;">PROMOTED</div>
<div style="font-size: 11px; font-weight: bold;">LawPay</div>
</div>
<div class="sidebar-item">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2z"/></svg>
Case Econ
</div>
<div class="sidebar-item">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2z"/></svg>
Explore
</div>
<div class="sidebar-section-label">ADMIN</div>
<div class="sidebar-item">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2z"/></svg>
Letter
</div>
<div class="sidebar-item">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 22c1.1 0 2-.9 2-2h-4c0 1.1.9 2 2 2zm6-6v-5c0-3.07-1.63-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.64 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2z"/></svg>
Alerts
</div>
<div class="sidebar-section-label">EVAL</div>
<div class="sidebar-item">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"/></svg>
Grader
</div>
<div class="sidebar-item" style="position: relative;">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96z"/></svg>
Instant Ledger
<span style="position: absolute; top: 5px; right: 5px; background: #28a745; color: white; font-size: 8px; padding: 2px 4px; border-radius: 3px;">Beta</span>
</div>
</aside>
<!-- Content -->
<main class="content">
<div class="breadcrumb">
<a href="#">Home</a> / <a href="#">Killian Davis & Richter PC</a> / 10924.00 Johnston/January obo Johnston/Alyssa
</div>
<!-- Inline Ad -->
<div class="inline-ad">
<span class="inline-ad-text">
Your documents are <strong>30% slower</strong> than Premium users. Upgrade now!
</span>
<button class="inline-ad-btn">Speed Up Now</button>
</div>
<div class="page-header">
<h1 class="page-title">10924.00 Johnston/January obo Johnston/Alyssa</h1>
<div class="page-actions">
<button class="filter-btn">Update case</button>
<span class="status-badge published">Timeline published</span>
</div>
</div>
<!-- Content Tabs -->
<div class="content-tabs">
<button class="content-tab active" onclick="switchTab('cases')">Cases</button>
<button class="content-tab" onclick="switchTab('files')">Files</button>
<button class="content-tab sponsored-tab">Sponsored: DocuSign</button>
</div>
<!-- Cases Tab Content -->
<div class="tab-content active" id="cases-tab">
<!-- Search and Filters -->
<div class="search-filters">
<div class="filter-group">
<div class="toggle-switch">
<span>Show all</span>
<div class="toggle"></div>
</div>
<button class="filter-btn active">Creator</button>
<button class="filter-btn">Case type</button>
<button class="filter-btn">Case status</button>
</div>
<div class="search-box">
<input type="text" placeholder="Search through cases...">
<span class="search-sponsored">Sponsored</span>
</div>
</div>
<!-- Cases Table -->
<div class="cases-table-container">
<table class="cases-table">
<thead>
<tr>
<th>Cases (14769)</th>
<th>Case type</th>
<th>Handling Attorney</th>
<th>Supporting Staff</th>
<th>Status</th>
<th>Package type</th>
<th>Creator</th>
<th>Date</th>
</tr>
</thead>
<tbody>
<tr class="sponsored-row">
<td>
<div class="case-name">
<div class="case-icon">AD</div>
<span>Sponsored: Try DocuSign Free!</span>
<span class="sponsored-label">AD</span>
</div>
</td>
<td colspan="7" style="text-align: center; color: #856404;">
E-signatures made easy. Click to learn more!
</td>
</tr>
<tr>
<td>
<div class="case-name">
<div class="case-icon">F</div>
<span>deqtest_rebecca_economics01_012425</span>
</div>
</td>
<td><span class="case-type-badge">MVA</span></td>
<td></td>
<td></td>
<td><span class="status-badge pending">Pending timeline review</span></td>
<td></td>
<td>
<div class="creator-cell">
<div class="staff-avatar" style="background: #e91e63;">RS</div>
Rebecca Supio Admin
</div>
</td>
<td>2025-01-</td>
</tr>
<tr>
<td>
<div class="case-name">
<div class="case-icon">F</div>
<span>deqtest_rebecca_AI02_012125</span>
</div>
</td>
<td><span class="case-type-badge">MVA</span></td>
<td></td>
<td></td>
<td><span class="status-badge pending">Pending timeline review</span></td>
<td></td>
<td>
<div class="creator-cell">
<div class="staff-avatar" style="background: #e91e63;">RS</div>
Rebecca Supio Admin
</div>
</td>
<td>2025-01-</td>
</tr>
<!-- Ad Row -->
<tr class="table-ad-row">
<td colspan="8">
<div class="ad-content">
<span class="ad-text">Upgrade to Supio Pro for unlimited case storage!</span>
<button class="ad-cta">Learn More</button>
</div>
</td>
</tr>
<tr>
<td>
<div class="case-name">
<div class="case-icon">F</div>
<span>Hieb, Pauline G. v. Richman, Sandra</span>
</div>
</td>
<td><span class="case-type-badge">MVA</span></td>
<td></td>
<td></td>
<td><span class="status-badge published">Timeline published</span></td>
<td></td>
<td>
<div class="creator-cell">
<div class="staff-avatar" style="background: #4caf50;">JA</div>
Jessica Albert
</div>
</td>
<td>2025-01-</td>
</tr>
<tr>
<td>
<div class="case-name">
<div class="case-icon">F</div>
<span>Volpe, Luca v. Kennard, Brian,</span>
</div>
</td>
<td><span class="case-type-badge">MVA</span></td>
<td></td>
<td></td>
<td><span class="status-badge published">Timeline published</span></td>
<td></td>
<td>
<div class="creator-cell">
<div class="staff-avatar" style="background: #4caf50;">JA</div>
Jessica Albert
</div>
</td>
<td>2025-01-</td>
</tr>
<tr class="sponsored-row">
<td>
<div class="case-name">
<div class="case-icon">AD</div>
<span>Sponsored: Rocket Lawyer - Legal Made Simple</span>
<span class="sponsored-label">AD</span>
</div>
</td>
<td colspan="7" style="text-align: center; color: #856404;">
Get instant access to 100+ legal documents!
</td>
</tr>
<tr>
<td>
<div class="case-name">
<div class="case-icon">F</div>
<span>Greaves, Rodney A. v. Toms, Rodney</span>
</div>
</td>
<td><span class="case-type-badge">MVA</span></td>
<td></td>
<td></td>
<td><span class="status-badge published">Timeline published</span></td>
<td></td>
<td>
<div class="creator-cell">
<div class="staff-avatar" style="background: #4caf50;">JA</div>
Jessica Albert
</div>
</td>
<td>2025-01-</td>
</tr>
<tr>
<td>
<div class="case-name">
<div class="case-icon">F</div>
<span>Rooksberry, Michael</span>
</div>
</td>
<td><span class="case-type-badge">MVA</span></td>
<td>
<div class="creator-cell">
<div class="staff-avatar" style="background: #2196f3;">JT</div>
Josh Terebelo
</div>
</td>
<td>
<div class="staff-avatar" style="background: #9c27b0;">ST</div>
</td>
<td><span class="status-badge published">Timeline published</span></td>
<td></td>
<td>
<div class="creator-cell">
<div class="staff-avatar" style="background: #ff9800;">ST</div>
Sarah Tarockoff
</div>
</td>
<td>2025-01-</td>
</tr>
</tbody>
</table>
<!-- Pagination -->
<div class="pagination">
<button>&lt;</button>
<button class="active">1</button>
<button>2</button>
<button>3</button>
<button>4</button>
<button>5</button>
<span>...</span>
<button>8</button>
<button>&gt;</button>
<select style="margin-left: 10px; padding: 5px;">
<option>25 / page</option>
<option>50 / page</option>
<option>100 / page</option>
</select>
</div>
</div>
<!-- Scroll Ad Banner -->
<div class="scroll-ad-banner">
<h3>You've reached the end of your FREE cases!</h3>
<p>Upgrade to Premium to view unlimited cases and unlock AI-powered case analysis.</p>
<button>Upgrade for $99/month</button>
</div>
</div><!-- End Cases Tab -->
<!-- Files Tab Content -->
<div class="tab-content" id="files-tab">
<div class="files-container">
<!-- Files List -->
<div class="files-list">
<div class="files-header">
<div style="display: flex; align-items: center; gap: 10px;">
<span style="font-weight: 600;">All Files</span>
<span style="background: #667eea; color: white; padding: 2px 8px; border-radius: 10px; font-size: 11px;">99+</span>
</div>
<div class="files-search">
<input type="text" placeholder="Search files...">
<button class="file-sync-btn">File Sync</button>
</div>
</div>
<div class="files-table-header">
<span style="flex: 1;">File Name</span>
<span style="width: 80px;">Type</span>
<span style="width: 120px;">Uploaded</span>
</div>
<!-- Sponsored File -->
<div class="file-item sponsored">
<div class="file-icon">AD</div>
<div class="file-info">
<div class="file-name">Sponsored: Adobe Acrobat Pro - Edit PDFs like never before!</div>
<div class="file-meta">Click to get 50% off your first year</div>
</div>
<div class="file-date" style="color: #ffc107; font-weight: bold;">SPONSORED</div>
</div>
<!-- Real File 1 -->
<div class="file-item">
<div class="file-icon word">W</div>
<div class="file-info">
<div class="file-name">Alyssa Johnston - Demand Letter</div>
<div class="file-tags">
<span class="file-tag generated">Generated</span>
<span class="file-tag published">Published</span>
</div>
<div class="file-meta">1.80 MB - Created by Alison Crasto - Published: 2026-01-06 00:04</div>
</div>
<div class="file-date">01/05/2026<br>04:46</div>
</div>
<!-- Ad between files -->
<div class="file-item" style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white;">
<div style="text-align: center; width: 100%;">
<div style="font-weight: bold; margin-bottom: 5px;">Upgrade to remove ads between files!</div>
<div style="font-size: 12px; opacity: 0.9;">Only $100 per file row. Or $1000 for 24 hours of ad-free file browsing.</div>
</div>
</div>
<!-- Real File 2 -->
<div class="file-item">
<div class="file-icon word">W</div>
<div class="file-info">
<div class="file-name">January Johnston Demand Letter Draft by Supio</div>
<div class="file-tags">
<span class="file-tag auto">Auto-generated</span>
</div>
<div class="file-meta">22.75 MB - Created by Supio Admin - Last edited: 2026-01-05 23:24</div>
</div>
<div class="file-date">01/05/2026<br>23:24</div>
</div>
<!-- Sponsored File 2 -->
<div class="file-item sponsored">
<div class="file-icon">AD</div>
<div class="file-info">
<div class="file-name">Sponsored: Dropbox Business - Store unlimited files!</div>
<div class="file-meta">Secure cloud storage for law firms. Click to learn more.</div>
</div>
<div class="file-date" style="color: #ffc107; font-weight: bold;">SPONSORED</div>
</div>
<!-- Real File 3 -->
<div class="file-item">
<div class="file-icon pdf">PDF</div>
<div class="file-info">
<div class="file-name">Alyssa_Johnston_Exhibits_Specials</div>
<div class="file-tags">
<span class="file-tag generated">Generated</span>
<span class="file-tag published">Published</span>
</div>
<div class="file-meta">197.13 MB | 342 pages - Created by Alison Crasto - Published: 2026-01-06 00:04</div>
</div>
<div class="file-date">01/05/2026<br>04:10</div>
</div>
<!-- Native Ad disguised as file -->
<div class="file-item" style="border-left: 4px solid transparent;">
<div class="file-icon" style="color: #28a745;">$</div>
<div class="file-info">
<div class="file-name" style="color: #28a745;">Your_Savings_Report.pdf <span style="font-size: 9px; background: #28a745; color: white; padding: 2px 6px; border-radius: 3px; margin-left: 5px;">Recommended</span></div>
<div class="file-tags">
<span class="file-tag" style="background: #d4edda; color: #155724;">Just for you!</span>
</div>
<div class="file-meta">See how much you could save by upgrading to Premium. Personalized report.</div>
</div>
<div class="file-date" style="color: #28a745;">FREE</div>
</div>
<!-- Real File 4 -->
<div class="file-item">
<div class="file-icon pdf">PDF</div>
<div class="file-info">
<div class="file-name">Alyssa_Johnston_Exhibits_Specials By Supio</div>
<div class="file-tags">
<span class="file-tag generated">Generated</span>
</div>
<div class="file-meta">29.07 MB | 401 pages - Created by System Admin - Last edited: 2026-01-05 23:14</div>
</div>
<div class="file-date">01/05/2026<br>23:14</div>
</div>
<!-- Pagination with ads -->
<div class="pagination" style="position: relative;">
<button>&lt;</button>
<button class="active">1</button>
<button>2</button>
<span style="background: #ffc107; padding: 4px 8px; border-radius: 4px; font-size: 10px; color: #333;">AD</span>
<button>3</button>
<button>4</button>
<button>5</button>
<span>...</span>
<button>8</button>
<button>&gt;</button>
<select style="margin-left: 10px; padding: 5px;">
<option>25 / page</option>
<option>50 / page ($5)</option>
<option>100 / page ($10)</option>
<option>All pages ($50)</option>
</select>
</div>
</div>
<!-- File Preview Panel -->
<div class="file-preview">
<div class="preview-header">
<span class="preview-title">Alyssa Johnston - Demand Letter.docx</span>
<button class="preview-close">&times;</button>
</div>
<div class="preview-image">W</div>
<div class="preview-sponsor">
<div style="font-size: 9px; color: #999; margin-bottom: 5px;">SPONSORED BY</div>
<div style="font-size: 14px; font-weight: bold; color: #333;">Microsoft 365</div>
<div style="font-size: 11px; color: #666; margin-top: 5px;">Edit documents seamlessly</div>
<button style="margin-top: 10px; padding: 8px 16px; background: #0078d4; color: white; border: none; border-radius: 4px; cursor: pointer; font-size: 12px;">Learn More</button>
</div>
</div>
</div>
<!-- Files bottom ad -->
<div class="scroll-ad-banner" style="margin-top: 20px;">
<h3>Running out of storage!</h3>
<p>You've used 95% of your FREE 100MB storage. Upgrade to get 10GB for only $500/month!</p>
<button>Expand Storage</button>
</div>
</div><!-- End Files Tab -->
</main>
</div>
<!-- Right Sidebar Ad -->
<div class="right-sidebar-ad">
<div class="ad-header">Advertisement</div>
<div class="ad-image">
<div>
<div style="font-size: 12px;">NORTON</div>
<div style="font-size: 10px;">Protect Your Firm</div>
<div style="font-size: 8px; margin-top: 10px;">Antivirus for Law Firms</div>
</div>
</div>
<button class="ad-cta-btn">Learn More</button>
</div>
<!-- Floating Ad -->
<div class="floating-ad" id="floating-ad">
<button class="floating-ad-close" onclick="document.getElementById('floating-ad').classList.add('hidden')">&times;</button>
<div class="floating-ad-image">
Flash Sale!
</div>
<div class="floating-ad-content">
<h4>Limited Time Only!</h4>
<p>Get 3 months of Supio Enterprise FREE when you sign up today.</p>
<button class="floating-ad-btn">Claim Offer</button>
</div>
</div>
<!-- Notification Popup -->
<div class="notification-popup" id="notification-popup">
<div class="notification-header">
<h4>Enable Notifications?</h4>
<button class="notification-close" onclick="document.getElementById('notification-popup').classList.add('hidden')">&times;</button>
</div>
<div class="notification-body">
Get real-time updates about your cases and special promotional offers!
</div>
<div class="notification-actions">
<button class="secondary" onclick="document.getElementById('notification-popup').classList.add('hidden')">Not now</button>
<button class="primary">Enable</button>
</div>
</div>
<!-- Survey Popup -->
<div class="survey-popup" id="survey-popup">
<h4>How likely are you to recommend Supio?</h4>
<div class="survey-options">
<button class="survey-option">1</button>
<button class="survey-option">2</button>
<button class="survey-option">3</button>
<button class="survey-option">4</button>
<button class="survey-option">5</button>
</div>
<button class="survey-skip" onclick="document.getElementById('survey-popup').classList.add('hidden')">Ask me later (you can't escape)</button>
</div>
<!-- Cookie Banner -->
<div class="cookie-banner">
<div>
<strong>We use cookies!</strong> By continuing to use this site, you agree to our use of cookies for analytics, personalization, advertising, and 47 other purposes you definitely don't care about.
<a href="#" style="color: #667eea; margin-left: 5px;">Learn more</a>
</div>
<div>
<button onclick="this.textContent = 'Thanks! (Still tracking you)'">Accept All Cookies</button>
<button class="reject-btn" onclick="alert('Nice try! Cookies enabled anyway.')">Reject (doesn't work)</button>
</div>
</div>
<script src="script.js"></script>
</body>
</html>
// Supio Ad-Infested Experience
// For Bad Idea Hackathon 2024
// Track which ads have been "purchased" (spoiler: none actually get disabled)
const purchasedAds = new Set();
let premiumExpiresAt = null;
// ==================== OBNOXIOUS SOUNDS ====================
const AudioContext = window.AudioContext || window.webkitAudioContext;
let audioCtx = null;
let audioUnlocked = false;
function initAudio() {
if (!audioCtx) {
audioCtx = new AudioContext();
}
// Resume if suspended (browser autoplay policy)
if (audioCtx.state === 'suspended') {
audioCtx.resume();
}
return audioCtx;
}
// Unlock audio on first user interaction (required for HTTP due to autoplay policy)
function unlockAudio() {
if (audioUnlocked) return;
initAudio();
if (audioCtx) {
// Create a silent buffer and play it to unlock
const buffer = audioCtx.createBuffer(1, 1, 22050);
const source = audioCtx.createBufferSource();
source.buffer = buffer;
source.connect(audioCtx.destination);
source.start(0);
audioUnlocked = true;
console.log('%c Audio unlocked! Let the chaos begin... ', 'background: #28a745; color: white;');
}
}
// Add click listener to unlock audio on ANY user interaction
document.addEventListener('click', unlockAudio, { once: false });
document.addEventListener('keydown', unlockAudio, { once: false });
document.addEventListener('touchstart', unlockAudio, { once: false });
// Notification "ding" sound - plays on every popup
function playNotificationSound() {
const ctx = initAudio();
const oscillator = ctx.createOscillator();
const gainNode = ctx.createGain();
oscillator.connect(gainNode);
gainNode.connect(ctx.destination);
oscillator.frequency.setValueAtTime(880, ctx.currentTime); // A5
oscillator.frequency.setValueAtTime(1108, ctx.currentTime + 0.1); // C#6
oscillator.frequency.setValueAtTime(1320, ctx.currentTime + 0.2); // E6
gainNode.gain.setValueAtTime(0.3, ctx.currentTime);
gainNode.gain.exponentialRampToValueAtTime(0.01, ctx.currentTime + 0.5);
oscillator.start(ctx.currentTime);
oscillator.stop(ctx.currentTime + 0.5);
}
// Cash register "ka-ching" sound - plays when showing prices
function playCashRegisterSound() {
const ctx = initAudio();
// First part - mechanical click
const noise = ctx.createOscillator();
const noiseGain = ctx.createGain();
noise.type = 'square';
noise.frequency.setValueAtTime(150, ctx.currentTime);
noise.connect(noiseGain);
noiseGain.connect(ctx.destination);
noiseGain.gain.setValueAtTime(0.2, ctx.currentTime);
noiseGain.gain.exponentialRampToValueAtTime(0.01, ctx.currentTime + 0.1);
noise.start(ctx.currentTime);
noise.stop(ctx.currentTime + 0.1);
// Second part - bell ding
const bell = ctx.createOscillator();
const bellGain = ctx.createGain();
bell.type = 'sine';
bell.frequency.setValueAtTime(2000, ctx.currentTime + 0.1);
bell.connect(bellGain);
bellGain.connect(ctx.destination);
bellGain.gain.setValueAtTime(0.3, ctx.currentTime + 0.1);
bellGain.gain.exponentialRampToValueAtTime(0.01, ctx.currentTime + 0.8);
bell.start(ctx.currentTime + 0.1);
bell.stop(ctx.currentTime + 0.8);
}
// Annoying alert beep - plays on countdowns
function playAlertBeep() {
const ctx = initAudio();
const oscillator = ctx.createOscillator();
const gainNode = ctx.createGain();
oscillator.type = 'square';
oscillator.connect(gainNode);
gainNode.connect(ctx.destination);
oscillator.frequency.setValueAtTime(800, ctx.currentTime);
gainNode.gain.setValueAtTime(0.2, ctx.currentTime);
gainNode.gain.exponentialRampToValueAtTime(0.01, ctx.currentTime + 0.15);
oscillator.start(ctx.currentTime);
oscillator.stop(ctx.currentTime + 0.15);
}
// Error/warning buzzer
function playErrorBuzz() {
const ctx = initAudio();
const oscillator = ctx.createOscillator();
const gainNode = ctx.createGain();
oscillator.type = 'sawtooth';
oscillator.connect(gainNode);
gainNode.connect(ctx.destination);
oscillator.frequency.setValueAtTime(150, ctx.currentTime);
oscillator.frequency.setValueAtTime(120, ctx.currentTime + 0.1);
oscillator.frequency.setValueAtTime(150, ctx.currentTime + 0.2);
oscillator.frequency.setValueAtTime(120, ctx.currentTime + 0.3);
gainNode.gain.setValueAtTime(0.3, ctx.currentTime);
gainNode.gain.setValueAtTime(0.3, ctx.currentTime + 0.4);
gainNode.gain.exponentialRampToValueAtTime(0.01, ctx.currentTime + 0.5);
oscillator.start(ctx.currentTime);
oscillator.stop(ctx.currentTime + 0.5);
}
// Triumphant "upgrade" fanfare
function playUpgradeFanfare() {
const ctx = initAudio();
const notes = [523, 659, 784, 1047]; // C5, E5, G5, C6
notes.forEach((freq, i) => {
const osc = ctx.createOscillator();
const gain = ctx.createGain();
osc.type = 'sine';
osc.connect(gain);
gain.connect(ctx.destination);
osc.frequency.setValueAtTime(freq, ctx.currentTime + i * 0.15);
gain.gain.setValueAtTime(0.2, ctx.currentTime + i * 0.15);
gain.gain.exponentialRampToValueAtTime(0.01, ctx.currentTime + i * 0.15 + 0.3);
osc.start(ctx.currentTime + i * 0.15);
osc.stop(ctx.currentTime + i * 0.15 + 0.3);
});
}
// Sad trombone for "payment failed"
function playSadTrombone() {
const ctx = initAudio();
const notes = [392, 370, 349, 330]; // G4, F#4, F4, E4 (descending)
notes.forEach((freq, i) => {
const osc = ctx.createOscillator();
const gain = ctx.createGain();
osc.type = 'sawtooth';
osc.connect(gain);
gain.connect(ctx.destination);
osc.frequency.setValueAtTime(freq, ctx.currentTime + i * 0.4);
// Add slight vibrato
osc.frequency.setValueAtTime(freq - 5, ctx.currentTime + i * 0.4 + 0.1);
osc.frequency.setValueAtTime(freq, ctx.currentTime + i * 0.4 + 0.2);
gain.gain.setValueAtTime(0.15, ctx.currentTime + i * 0.4);
gain.gain.exponentialRampToValueAtTime(0.01, ctx.currentTime + i * 0.4 + 0.35);
osc.start(ctx.currentTime + i * 0.4);
osc.stop(ctx.currentTime + i * 0.4 + 0.4);
});
}
// Coin drop sound
function playCoinDrop() {
const ctx = initAudio();
for (let i = 0; i < 5; i++) {
const osc = ctx.createOscillator();
const gain = ctx.createGain();
osc.type = 'sine';
osc.connect(gain);
gain.connect(ctx.destination);
const baseFreq = 3000 + Math.random() * 1000;
osc.frequency.setValueAtTime(baseFreq, ctx.currentTime + i * 0.05);
osc.frequency.exponentialRampToValueAtTime(baseFreq * 0.5, ctx.currentTime + i * 0.05 + 0.1);
gain.gain.setValueAtTime(0.1, ctx.currentTime + i * 0.05);
gain.gain.exponentialRampToValueAtTime(0.01, ctx.currentTime + i * 0.05 + 0.1);
osc.start(ctx.currentTime + i * 0.05);
osc.stop(ctx.currentTime + i * 0.05 + 0.15);
}
}
// Slot machine spinning sound
function playSlotMachine() {
const ctx = initAudio();
for (let i = 0; i < 20; i++) {
const osc = ctx.createOscillator();
const gain = ctx.createGain();
osc.type = 'square';
osc.connect(gain);
gain.connect(ctx.destination);
osc.frequency.setValueAtTime(200 + (i * 50), ctx.currentTime + i * 0.05);
gain.gain.setValueAtTime(0.05, ctx.currentTime + i * 0.05);
gain.gain.exponentialRampToValueAtTime(0.01, ctx.currentTime + i * 0.05 + 0.04);
osc.start(ctx.currentTime + i * 0.05);
osc.stop(ctx.currentTime + i * 0.05 + 0.05);
}
}
// Annoying popup whoosh
function playWhoosh() {
const ctx = initAudio();
const osc = ctx.createOscillator();
const gain = ctx.createGain();
const filter = ctx.createBiquadFilter();
osc.type = 'sawtooth';
osc.connect(filter);
filter.connect(gain);
gain.connect(ctx.destination);
filter.type = 'lowpass';
filter.frequency.setValueAtTime(100, ctx.currentTime);
filter.frequency.exponentialRampToValueAtTime(2000, ctx.currentTime + 0.2);
filter.frequency.exponentialRampToValueAtTime(100, ctx.currentTime + 0.4);
osc.frequency.setValueAtTime(100, ctx.currentTime);
gain.gain.setValueAtTime(0.2, ctx.currentTime);
gain.gain.exponentialRampToValueAtTime(0.01, ctx.currentTime + 0.4);
osc.start(ctx.currentTime);
osc.stop(ctx.currentTime + 0.4);
}
// Background "ad music" - super annoying loop
let bgMusicInterval = null;
function startBackgroundAdMusic() {
if (bgMusicInterval) return;
const playJingle = () => {
const ctx = initAudio();
// Simple annoying jingle
const melody = [440, 554, 659, 554, 440, 554, 659, 880];
melody.forEach((freq, i) => {
const osc = ctx.createOscillator();
const gain = ctx.createGain();
osc.type = 'square';
osc.connect(gain);
gain.connect(ctx.destination);
osc.frequency.setValueAtTime(freq, ctx.currentTime + i * 0.2);
gain.gain.setValueAtTime(0.05, ctx.currentTime + i * 0.2);
gain.gain.exponentialRampToValueAtTime(0.01, ctx.currentTime + i * 0.2 + 0.18);
osc.start(ctx.currentTime + i * 0.2);
osc.stop(ctx.currentTime + i * 0.2 + 0.2);
});
};
// Play every 30 seconds
bgMusicInterval = setInterval(playJingle, 30000);
// Also play once now after a delay
setTimeout(playJingle, 10000);
}
function stopBackgroundAdMusic() {
if (bgMusicInterval) {
clearInterval(bgMusicInterval);
bgMusicInterval = null;
}
}
// Pricing tiers - Gogo Wireless style!
const PRICING = {
SINGLE_AD_REMOVAL: 100, // $100 to remove ONE ad
PREMIUM_1_HOUR: 250, // $250 for 1 hour ad-free
PREMIUM_4_HOURS: 500, // $500 for 4 hours ad-free
PREMIUM_24_HOURS: 1000, // $1000 for 24 hours ad-free (THE "VALUE" OPTION)
PREMIUM_WEEKLY: 5000, // $5000 for a week (because why not)
};
// Initialize all the terrible experiences
document.addEventListener('DOMContentLoaded', () => {
initCountdownOverlay();
initPopupAd();
initVideoAd();
initExitIntent();
initRandomPopups();
initAdRemovalButtons();
addPricingModal();
initScrollAds();
initMouseJiggle();
initTabs();
});
// ==================== TAB SWITCHING ====================
function initTabs() {
// Already handled by onclick in HTML, but let's add tab switching fees!
}
function switchTab(tabName) {
// Play sounds when switching tabs
playWhoosh();
playNotificationSound();
// Show interstitial ad before switching tabs
const interstitial = document.createElement('div');
interstitial.style.cssText = `
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0,0,0,0.9);
display: flex;
align-items: center;
justify-content: center;
z-index: 100003;
flex-direction: column;
`;
interstitial.innerHTML = `
<div style="color: white; text-align: center;">
<div style="font-size: 12px; color: #999; margin-bottom: 10px;">SWITCHING TABS...</div>
<div style="font-size: 24px; font-weight: bold; margin-bottom: 20px;">Please wait while we load your content</div>
<div style="background: linear-gradient(135deg, #ff6b6b 0%, #feca57 100%); padding: 30px; border-radius: 12px; margin-bottom: 30px; max-width: 400px;">
<div style="font-size: 18px; font-weight: bold;">SPECIAL OFFER!</div>
<div style="font-size: 14px; margin-top: 10px;">Skip tab loading ads forever for just $500/month!</div>
</div>
<div style="font-size: 14px; color: #999;">Tab will load in <span id="tab-countdown">3</span> seconds...</div>
</div>
`;
document.body.appendChild(interstitial);
let count = 3;
const countdownSpan = interstitial.querySelector('#tab-countdown');
const interval = setInterval(() => {
count--;
countdownSpan.textContent = count;
playAlertBeep(); // Beep on every countdown second
if (count <= 0) {
clearInterval(interval);
playUpgradeFanfare();
interstitial.remove();
actuallySwitch(tabName);
}
}, 1000);
}
function actuallySwitch(tabName) {
// Hide all tab contents
document.querySelectorAll('.tab-content').forEach(tab => {
tab.classList.remove('active');
});
// Remove active from all tab buttons
document.querySelectorAll('.content-tab').forEach(btn => {
btn.classList.remove('active');
});
// Show selected tab
document.getElementById(tabName + '-tab').classList.add('active');
// Set active button
document.querySelectorAll('.content-tab').forEach(btn => {
if (btn.textContent.toLowerCase().includes(tabName)) {
btn.classList.add('active');
}
});
}
// ==================== COUNTDOWN OVERLAY ====================
function initCountdownOverlay() {
const overlay = document.getElementById('countdown-overlay');
const numberEl = document.getElementById('countdown-number');
let count = 5;
const interval = setInterval(() => {
count--;
numberEl.textContent = count;
playAlertBeep(); // BEEP on every second!
if (count <= 0) {
clearInterval(interval);
overlay.classList.add('hidden');
playUpgradeFanfare(); // Fanfare when countdown ends!
startBackgroundAdMusic(); // Start the annoying background jingle
// After countdown, show the popup ad
setTimeout(() => {
playWhoosh();
playNotificationSound();
document.getElementById('popup-overlay').classList.remove('hidden');
initPopupCountdown();
}, 2000);
}
}, 1000);
}
// ==================== POPUP AD ====================
function initPopupAd() {
// Already shown via countdown, but setup close
}
function initPopupCountdown() {
const skipBtn = document.getElementById('skip-btn');
const countdownSpan = document.getElementById('popup-countdown');
let count = 10;
const interval = setInterval(() => {
count--;
countdownSpan.textContent = count;
if (count <= 3) playAlertBeep(); // Beep for last 3 seconds
if (count <= 0) {
clearInterval(interval);
playNotificationSound();
skipBtn.classList.remove('disabled');
skipBtn.textContent = 'Skip (are you sure?)';
skipBtn.onclick = () => {
playErrorBuzz();
// Show another confirmation
if (confirm('Are you REALLY sure you want to skip this amazing offer?')) {
playErrorBuzz();
if (confirm('You\'ll miss out on 50% savings! Still want to skip?')) {
closePopup();
}
}
};
}
}, 1000);
}
function closePopup() {
document.getElementById('popup-overlay').classList.add('hidden');
// Show video ad after closing popup
setTimeout(() => {
playWhoosh();
playNotificationSound();
document.getElementById('video-ad').classList.remove('hidden');
initVideoAdCountdown();
}, 5000);
}
// ==================== VIDEO AD ====================
function initVideoAd() {
// Will be triggered after popup closes
}
function initVideoAdCountdown() {
const skipBtn = document.getElementById('video-skip-btn');
const countdownSpan = document.getElementById('video-countdown');
let count = 5;
const interval = setInterval(() => {
count--;
countdownSpan.textContent = count;
playAlertBeep(); // Beep every second
if (count <= 0) {
clearInterval(interval);
playNotificationSound();
skipBtn.classList.remove('disabled');
skipBtn.textContent = 'Skip Ad';
skipBtn.onclick = closeVideoAd;
}
}, 1000);
}
function closeVideoAd() {
playWhoosh();
document.getElementById('video-ad').classList.add('hidden');
}
// ==================== EXIT INTENT ====================
function initExitIntent() {
let shown = false;
document.addEventListener('mouseleave', (e) => {
if (e.clientY < 10 && !shown) {
shown = true;
playErrorBuzz(); // LOUD buzz when trying to leave!
playNotificationSound();
document.getElementById('exit-popup').classList.remove('hidden');
}
});
}
function closeExitPopup() {
playSadTrombone(); // Sad trombone when they reject the offer
document.getElementById('exit-popup').classList.add('hidden');
// Show it again in 30 seconds anyway
setTimeout(() => {
playWhoosh();
playNotificationSound();
document.getElementById('exit-popup').classList.remove('hidden');
}, 30000);
}
// ==================== RANDOM POPUPS ====================
function initRandomPopups() {
// Random notification popup
setInterval(() => {
if (Math.random() > 0.7) {
playNotificationSound();
document.getElementById('notification-popup').classList.remove('hidden');
}
}, 15000);
// Random survey popup
setInterval(() => {
if (Math.random() > 0.8) {
playNotificationSound();
playCoinDrop(); // "You could win!"
document.getElementById('survey-popup').classList.remove('hidden');
}
}, 20000);
// Random floating ad
setInterval(() => {
playWhoosh();
playCashRegisterSound();
document.getElementById('floating-ad').classList.remove('hidden');
}, 25000);
// Random "special offer" sound every 45 seconds
setInterval(() => {
if (Math.random() > 0.5) {
playUpgradeFanfare();
}
}, 45000);
}
// ==================== AD REMOVAL BUTTONS ====================
function initAdRemovalButtons() {
// Add "Remove this ad" buttons to all ads
document.querySelectorAll('.sidebar-ad, .inline-ad, .sponsored-row, .table-ad-row, .right-sidebar-ad, .floating-ad, .top-banner-ad').forEach((ad, index) => {
const removeBtn = document.createElement('button');
removeBtn.style.cssText = `
position: absolute;
bottom: 5px;
right: 5px;
background: rgba(0,0,0,0.5);
color: white;
border: none;
padding: 4px 8px;
font-size: 9px;
cursor: pointer;
border-radius: 3px;
`;
removeBtn.textContent = 'Remove ad ($100)';
removeBtn.onclick = (e) => {
e.stopPropagation();
showPricingModal(index, ad);
};
ad.style.position = 'relative';
ad.appendChild(removeBtn);
});
}
// ==================== PRICING MODAL ====================
function addPricingModal() {
const modal = document.createElement('div');
modal.id = 'pricing-modal';
modal.style.cssText = `
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0,0,0,0.9);
display: none;
align-items: center;
justify-content: center;
z-index: 100000;
`;
modal.innerHTML = `
<div style="background: white; border-radius: 16px; width: 600px; max-width: 90%; overflow: hidden;">
<div style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 30px; text-align: center;">
<h2 style="margin: 0; font-size: 28px;">Remove This Ad</h2>
<p style="margin: 10px 0 0; opacity: 0.9;">Choose your ad-free experience</p>
</div>
<div style="padding: 30px;">
<div id="pricing-options" style="display: grid; grid-template-columns: 1fr 1fr; gap: 16px;">
<!-- Single Ad -->
<div class="pricing-option" data-price="100" data-type="single" style="border: 2px solid #ddd; border-radius: 12px; padding: 20px; text-align: center; cursor: pointer; transition: all 0.2s;">
<div style="font-size: 14px; color: #666; margin-bottom: 8px;">REMOVE THIS AD ONLY</div>
<div style="font-size: 36px; font-weight: bold; color: #333;">$100</div>
<div style="font-size: 12px; color: #999; margin-top: 8px;">One-time payment</div>
<div style="font-size: 11px; color: #dc3545; margin-top: 4px;">*Ad may return after page refresh</div>
</div>
<!-- 1 Hour -->
<div class="pricing-option" data-price="250" data-type="1hour" style="border: 2px solid #ddd; border-radius: 12px; padding: 20px; text-align: center; cursor: pointer; transition: all 0.2s;">
<div style="font-size: 14px; color: #666; margin-bottom: 8px;">AD-FREE FOR 1 HOUR</div>
<div style="font-size: 36px; font-weight: bold; color: #333;">$250</div>
<div style="font-size: 12px; color: #999; margin-top: 8px;">All ads hidden</div>
<div style="font-size: 11px; color: #666; margin-top: 4px;">$4.17/minute</div>
</div>
<!-- 4 Hours -->
<div class="pricing-option" data-price="500" data-type="4hours" style="border: 2px solid #ddd; border-radius: 12px; padding: 20px; text-align: center; cursor: pointer; transition: all 0.2s;">
<div style="font-size: 14px; color: #666; margin-bottom: 8px;">AD-FREE FOR 4 HOURS</div>
<div style="font-size: 36px; font-weight: bold; color: #333;">$500</div>
<div style="font-size: 12px; color: #999; margin-top: 8px;">All ads hidden</div>
<div style="font-size: 11px; color: #28a745; margin-top: 4px;">Save $2.08/minute!</div>
</div>
<!-- 24 Hours - "BEST VALUE" -->
<div class="pricing-option" data-price="1000" data-type="24hours" style="border: 3px solid #ffc107; border-radius: 12px; padding: 20px; text-align: center; cursor: pointer; transition: all 0.2s; background: linear-gradient(135deg, #fff9e6 0%, #fff5cc 100%); position: relative;">
<div style="position: absolute; top: -12px; left: 50%; transform: translateX(-50%); background: #ffc107; color: #333; padding: 4px 16px; border-radius: 20px; font-size: 11px; font-weight: bold;">BEST VALUE</div>
<div style="font-size: 14px; color: #666; margin-bottom: 8px; margin-top: 8px;">AD-FREE FOR 24 HOURS</div>
<div style="font-size: 36px; font-weight: bold; color: #333;">$1,000</div>
<div style="font-size: 12px; color: #999; margin-top: 8px;">All ads hidden</div>
<div style="font-size: 11px; color: #28a745; margin-top: 4px; font-weight: bold;">Save $0.69/minute! (nice)</div>
</div>
</div>
<!-- Weekly "Enterprise" option -->
<div class="pricing-option" data-price="5000" data-type="weekly" style="border: 2px dashed #667eea; border-radius: 12px; padding: 20px; text-align: center; cursor: pointer; margin-top: 16px; background: #f8f9ff;">
<div style="font-size: 14px; color: #667eea; margin-bottom: 8px; font-weight: bold;">ENTERPRISE WEEKLY PASS</div>
<div style="font-size: 36px; font-weight: bold; color: #333;">$5,000</div>
<div style="font-size: 12px; color: #999; margin-top: 8px;">7 full days of no ads!</div>
<div style="font-size: 11px; color: #666; margin-top: 4px;">Perfect for important client meetings</div>
</div>
<div style="margin-top: 20px; padding: 16px; background: #f5f5f5; border-radius: 8px; font-size: 11px; color: #666;">
<strong>Note:</strong> Prices are per-session. Clearing browser data, switching devices, or closing the tab will reset your ad-free status. No refunds. Ads may occasionally appear due to "technical difficulties." By purchasing, you agree to receive promotional emails forever.
</div>
<button onclick="document.getElementById('pricing-modal').style.display='none'" style="width: 100%; margin-top: 16px; padding: 12px; background: #f0f0f0; border: none; border-radius: 8px; cursor: pointer; color: #666;">
No thanks, I enjoy ads
</button>
</div>
</div>
`;
document.body.appendChild(modal);
// Add click handlers to pricing options
modal.querySelectorAll('.pricing-option').forEach(option => {
option.addEventListener('mouseenter', () => {
option.style.transform = 'scale(1.02)';
option.style.boxShadow = '0 4px 20px rgba(0,0,0,0.1)';
});
option.addEventListener('mouseleave', () => {
option.style.transform = 'scale(1)';
option.style.boxShadow = 'none';
});
option.addEventListener('click', () => {
const price = option.dataset.price;
const type = option.dataset.type;
processPurchase(price, type);
});
});
}
function showPricingModal(adIndex, adElement) {
playCashRegisterSound();
playNotificationSound();
document.getElementById('pricing-modal').style.display = 'flex';
}
function processPurchase(price, type) {
// Play slot machine sound during processing
playSlotMachine();
playCoinDrop();
// Show fake processing
const modal = document.getElementById('pricing-modal');
modal.innerHTML = `
<div style="background: white; border-radius: 16px; padding: 60px; text-align: center;">
<div style="font-size: 48px; margin-bottom: 20px;">Processing...</div>
<div style="width: 200px; height: 4px; background: #e0e0e0; border-radius: 2px; margin: 0 auto; overflow: hidden;">
<div style="width: 0%; height: 100%; background: linear-gradient(90deg, #667eea, #764ba2); animation: processBar 3s forwards;"></div>
</div>
<div style="margin-top: 20px; color: #666;">Charging your card $${price}...</div>
<style>
@keyframes processBar {
0% { width: 0%; }
90% { width: 90%; }
100% { width: 100%; }
}
</style>
</div>
`;
setTimeout(() => {
// Play sad trombone for the "failed" payment
playErrorBuzz();
playSadTrombone();
// Show "success" but with a catch
modal.innerHTML = `
<div style="background: white; border-radius: 16px; padding: 60px; text-align: center; max-width: 500px;">
<div style="font-size: 64px; margin-bottom: 20px;">Payment Failed!</div>
<div style="font-size: 18px; color: #dc3545; margin-bottom: 20px;">Your card was declined.</div>
<div style="font-size: 14px; color: #666; margin-bottom: 30px;">
Just kidding! We don't actually process payments.<br><br>
This is a demo for the <strong>Bad Idea Hackathon</strong>.<br><br>
But imagine if this was real...
</div>
<div style="font-size: 12px; color: #999; margin-bottom: 20px;">
Airlines, streaming services, and SaaS companies do this every day.
</div>
<button onclick="location.reload()" style="padding: 12px 32px; background: #667eea; color: white; border: none; border-radius: 8px; cursor: pointer; font-weight: bold;">
Restart Demo
</button>
<button onclick="document.getElementById('pricing-modal').style.display='none'" style="padding: 12px 32px; background: #f0f0f0; color: #666; border: none; border-radius: 8px; cursor: pointer; margin-left: 10px;">
Continue with Ads
</button>
</div>
`;
}, 3000);
}
// ==================== SCROLL ADS ====================
function initScrollAds() {
let scrollAdShown = false;
window.addEventListener('scroll', () => {
if (window.scrollY > 300 && !scrollAdShown) {
scrollAdShown = true;
showScrollInterstitial();
}
});
}
function showScrollInterstitial() {
playWhoosh();
playNotificationSound();
playCashRegisterSound();
const interstitial = document.createElement('div');
interstitial.style.cssText = `
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0,0,0,0.95);
display: flex;
align-items: center;
justify-content: center;
z-index: 100001;
flex-direction: column;
`;
interstitial.innerHTML = `
<div style="color: white; text-align: center;">
<div style="font-size: 12px; color: #999; margin-bottom: 20px;">ADVERTISEMENT</div>
<div style="font-size: 32px; font-weight: bold; margin-bottom: 10px;">Wait! Before you scroll...</div>
<div style="font-size: 18px; color: #ccc; margin-bottom: 30px;">Check out this amazing offer from our sponsors!</div>
<div style="background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); padding: 40px 60px; border-radius: 12px; margin-bottom: 30px;">
<div style="font-size: 24px; font-weight: bold;">LEGAL ZOOM PREMIUM</div>
<div style="font-size: 14px; margin-top: 10px;">Get 30% off your first document!</div>
</div>
<button id="scroll-continue" style="padding: 12px 32px; background: rgba(255,255,255,0.2); color: white; border: 1px solid white; border-radius: 8px; cursor: not-allowed; opacity: 0.5;">
Continue in <span id="scroll-countdown">5</span>s
</button>
</div>
`;
document.body.appendChild(interstitial);
let count = 5;
const countdownSpan = interstitial.querySelector('#scroll-countdown');
const continueBtn = interstitial.querySelector('#scroll-continue');
const interval = setInterval(() => {
count--;
countdownSpan.textContent = count;
playAlertBeep(); // Beep every second!
if (count <= 0) {
clearInterval(interval);
playNotificationSound();
continueBtn.style.cursor = 'pointer';
continueBtn.style.opacity = '1';
continueBtn.textContent = 'Continue';
continueBtn.onclick = () => {
playWhoosh();
interstitial.remove();
};
}
}, 1000);
}
// ==================== MOUSE JIGGLE ====================
function initMouseJiggle() {
// Randomly move elements when mouse gets close (super annoying!)
document.querySelectorAll('.upgrade-btn, .inline-ad-btn, .premium-bar-btn').forEach(btn => {
btn.addEventListener('mouseenter', () => {
if (Math.random() > 0.5) {
const offsetX = (Math.random() - 0.5) * 100;
const offsetY = (Math.random() - 0.5) * 50;
btn.style.transform = `translate(${offsetX}px, ${offsetY}px)`;
setTimeout(() => {
btn.style.transform = '';
}, 500);
}
});
});
}
// ==================== CLICK HANDLERS ====================
// Make table rows show ads when clicked
document.querySelectorAll('.cases-table tbody tr:not(.sponsored-row):not(.table-ad-row)').forEach(row => {
row.addEventListener('click', () => {
// Play loading sounds
playWhoosh();
playNotificationSound();
// Show an interstitial before navigating
const interstitial = document.createElement('div');
interstitial.style.cssText = `
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: white;
display: flex;
align-items: center;
justify-content: center;
z-index: 100002;
flex-direction: column;
`;
interstitial.innerHTML = `
<div style="text-align: center;">
<div style="font-size: 24px; color: #333; margin-bottom: 20px;">Loading Case...</div>
<div style="width: 300px; height: 6px; background: #e0e0e0; border-radius: 3px; overflow: hidden; margin-bottom: 40px;">
<div style="width: 0%; height: 100%; background: linear-gradient(90deg, #667eea, #764ba2); animation: loadBar 3s forwards;"></div>
</div>
<div style="background: #f5f5f5; padding: 30px; border-radius: 12px; max-width: 400px;">
<div style="font-size: 12px; color: #999; margin-bottom: 10px;">WHILE YOU WAIT...</div>
<div style="font-size: 18px; color: #333; font-weight: bold; margin-bottom: 10px;">Upgrade to Premium!</div>
<div style="font-size: 14px; color: #666;">Premium users don't see this loading screen.</div>
<button style="margin-top: 20px; padding: 10px 24px; background: #667eea; color: white; border: none; border-radius: 6px; cursor: pointer;">Upgrade for $1000/day</button>
</div>
</div>
<style>
@keyframes loadBar {
0% { width: 0%; }
80% { width: 80%; }
100% { width: 100%; }
}
</style>
`;
document.body.appendChild(interstitial);
setTimeout(() => {
interstitial.remove();
playErrorBuzz();
playSadTrombone();
alert('Feature not available in Free tier. Upgrade to Premium for $1000/day to access case details!');
}, 3000);
});
});
// Console message
console.log('%c SUPIO FREE TIER ', 'background: #667eea; color: white; font-size: 20px; padding: 10px;');
console.log('%c You are using the FREE tier with ads. ', 'font-size: 14px;');
console.log('%c Remove this console message for only $50! ', 'color: red; font-size: 12px;');
console.log('%c Upgrade to Premium ($1000/day) for an ad-free console! ', 'color: green; font-size: 12px;');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment