Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 0 additions & 38 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -60,44 +60,6 @@ <h1 class="site-title glow-text">AI DEATH CLOCK</h1>
</div>
</header>

<!-- ── Doomsday Clock Strip (PRD 1) ──────────────────────── -->
<div id="doomsday-strip" class="doomsday-strip" aria-label="Doomsday Clock — proximity to final AI threshold">
<div class="doomsday-clock-wrap" aria-hidden="true">
<svg id="doomClockSvg" class="doom-clock-svg" viewBox="0 0 100 100">
<circle cx="50" cy="50" r="46" class="doom-clock-face"/>
<!-- Hour ticks -->
<line x1="50" y1="6" x2="50" y2="13" class="doom-tick doom-tick-major"/>
<line x1="50" y1="87" x2="50" y2="94" class="doom-tick"/>
<line x1="6" y1="50" x2="13" y2="50" class="doom-tick"/>
<line x1="87" y1="50" x2="94" y2="50" class="doom-tick"/>
<line x1="18.2" y1="18.2" x2="23.2" y2="23.2" class="doom-tick"/>
<line x1="76.8" y1="18.2" x2="71.8" y2="23.2" class="doom-tick"/>
<line x1="18.2" y1="81.8" x2="23.2" y2="76.8" class="doom-tick"/>
<line x1="81.8" y1="81.8" x2="76.8" y2="76.8" class="doom-tick"/>
<line x1="27" y1="11.5" x2="29.5" y2="16" class="doom-tick doom-tick-sm"/>
<line x1="11.5" y1="27" x2="16" y2="29.5" class="doom-tick doom-tick-sm"/>
<line x1="73" y1="11.5" x2="70.5" y2="16" class="doom-tick doom-tick-sm doom-tick-warn"/>
<line x1="88.5" y1="27" x2="84" y2="29.5" class="doom-tick doom-tick-sm"/>
<!-- Minute hand — rotated by JS -->
<line id="doomMinHand" x1="50" y1="50" x2="50" y2="14" class="doom-clock-hand" transform="rotate(330, 50, 50)"/>
<!-- Center dot -->
<circle cx="50" cy="50" r="3.5" class="doom-clock-dot"/>
</svg>
</div>
<div class="doomsday-text-wrap">
<div class="doomsday-sub">
<span id="doomTokenPct">0.0%</span> of the way to the final threshold
</div>
</div>
<div class="doomsday-bar-wrap" aria-hidden="true">
<div class="doomsday-bar-track">
<div class="doomsday-bar-fill" id="doomBarFill" style="width:0%"></div>
</div>
<div class="doomsday-bar-labels">
<span>SAFE</span><span>MIDNIGHT</span>
</div>
</div>
</div>

<!-- ── Tab Navigation ────────────────────────────────────── -->
<nav class="tab-bar" role="tablist" aria-label="Page sections">
Expand Down
3 changes: 0 additions & 3 deletions src/js/02-counter.js
Original file line number Diff line number Diff line change
Expand Up @@ -124,9 +124,6 @@
});
}

// Update doomsday clock (PRD 1)
updateDoomsdayClock(tokens);

// Update milestone progress bars
const triggered = getTriggeredMilestones(tokens, MILESTONES);
MILESTONES.forEach((m, idx) => {
Expand Down
29 changes: 2 additions & 27 deletions src/js/18-scary-features.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,34 +2,10 @@
// SCARY & SATIRICAL FEATURES — PRDs 1–7
// ============================================================

// ── PRD 1: Doomsday Clock ────────────────────────────────────
// ── PRD 1: Emergency Broadcast Overlay ──────────────────────

const shownEmergencyBroadcasts = new Set();

// Cache milestone doom thresholds (static — computed once at init)
const DOOM_FIRST_THRESHOLD = MILESTONES.length ? MILESTONES[0].tokens : 1e15;
const DOOM_LAST_THRESHOLD = MILESTONES.length ? MILESTONES[MILESTONES.length - 1].tokens : 1e18;
const DOOM_RANGE = DOOM_LAST_THRESHOLD - DOOM_FIRST_THRESHOLD;

function updateDoomsdayClock(tokens) {
const doomPercent = Math.min(1, Math.max(0,
(tokens - DOOM_FIRST_THRESHOLD) / DOOM_RANGE
));

// Rotate minute hand from 330° (11 o'clock, 5 min before midnight) to 360°/0° (midnight)
const angle = 330 + doomPercent * 30;
const hand = document.getElementById('doomMinHand');
if (hand) hand.setAttribute('transform', `rotate(${angle}, 50, 50)`);

// Percentage text
const pctEl = document.getElementById('doomTokenPct');
if (pctEl) pctEl.textContent = (doomPercent * 100).toFixed(1) + '%';

// Progress bar
const barFill = document.getElementById('doomBarFill');
if (barFill) barFill.style.width = (doomPercent * 100).toFixed(2) + '%';
}

function showEmergencyBroadcast(milestone) {
const el = document.getElementById('emergency-broadcast');
const msgEl = document.getElementById('ebMsg');
Expand All @@ -45,8 +21,7 @@
el._dismissTimer = setTimeout(() => { el.hidden = true; }, 6000);
}

function initDoomsdayClock() {
updateDoomsdayClock(getCurrentTokens());
function initEmergencyBroadcast() {
const dismissBtn = document.getElementById('ebDismissBtn');
if (dismissBtn) {
dismissBtn.addEventListener('click', () => {
Expand Down
2 changes: 1 addition & 1 deletion src/js/21-boot.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
initPresenceStrip();
initEventLog();
// Scary & satirical features (PRDs 1–7)
initDoomsdayClock();
initEmergencyBroadcast();
initSessionTabStrip();
initApologies();
initShame();
Expand Down
118 changes: 0 additions & 118 deletions styles/scary-features.css
Original file line number Diff line number Diff line change
Expand Up @@ -2,119 +2,6 @@
SCARY & SATIRICAL FEATURES — PRDs 1–7
============================================================= */

/* ── PRD 1: Doomsday Clock Strip ──────────────────────────── */

.doomsday-strip {
background: #0d0000;
border-bottom: 2px solid var(--accent);
display: flex;
align-items: center;
gap: 1.25rem;
padding: 0.65rem 1.5rem;
flex-wrap: wrap;
position: sticky;
top: 0;
z-index: 850;
box-shadow: 0 2px 20px rgba(255,51,51,0.25);
}

:root[data-theme="light"] .doomsday-strip {
background: #1a0000;
}

.doomsday-clock-wrap {
flex-shrink: 0;
}

.doom-clock-svg {
width: 56px;
height: 56px;
overflow: visible;
}

.doom-clock-face {
fill: #0d0000;
stroke: var(--accent);
stroke-width: 2;
}

.doom-tick {
stroke: rgba(255, 51, 51, 0.5);
stroke-width: 1.5;
stroke-linecap: round;
}

.doom-tick-major {
stroke: var(--accent);
stroke-width: 2.5;
}

.doom-tick-sm {
stroke-width: 1;
}

.doom-tick-warn {
stroke: var(--accent);
stroke-width: 2;
}

.doom-clock-hand {
stroke: var(--accent);
stroke-width: 3;
stroke-linecap: round;
filter: drop-shadow(0 0 4px var(--accent));
transition: none;
}

.doom-clock-dot {
fill: #fff;
filter: drop-shadow(0 0 3px var(--accent));
}

.doomsday-text-wrap {
flex: 1;
min-width: 160px;
}

.doomsday-sub {
font-size: 0.68rem;
color: rgba(255,255,255,0.45);
margin-top: 0.2rem;
letter-spacing: 0.04em;
}

.doomsday-bar-wrap {
flex: 1;
min-width: 120px;
max-width: 260px;
}

.doomsday-bar-track {
height: 8px;
background: rgba(255,51,51,0.12);
border-radius: 4px;
overflow: hidden;
border: 1px solid rgba(255,51,51,0.25);
}

.doomsday-bar-fill {
height: 100%;
background: linear-gradient(90deg, #330000, var(--accent));
border-radius: 4px;
transition: width 1s linear;
box-shadow: 0 0 6px var(--accent-glow);
}

.doomsday-bar-labels {
display: flex;
justify-content: space-between;
font-size: 0.58rem;
color: rgba(255,255,255,0.3);
letter-spacing: 0.08em;
margin-top: 0.2rem;
text-transform: uppercase;
}

/* ── PRD 1: Emergency Broadcast Overlay ───────────────────── */

.emergency-broadcast {
Expand Down Expand Up @@ -777,9 +664,6 @@
/* ── Responsive ──────────────────────────────────────────── */

@media (max-width: 600px) {
.doomsday-strip { padding: 0.5rem 1rem; gap: 0.75rem; }
.doomsday-bar-wrap { display: none; }
.doom-clock-svg { width: 44px; height: 44px; }
.session-tab-items { grid-template-columns: 1fr 1fr; }
.villain-table .villain-rank-cell { display: none; }
}
Expand All @@ -790,8 +674,6 @@
.apology-quote { animation: none; }
.shame-entry { animation: none; }
.villain-congratulations { animation: none; }
.doomsday-bar-fill { transition: none; }
.doom-clock-hand { transition: none; }
.intervention-overlay, .intervention-card { animation: none; }
}

Expand Down
Loading