PageSourceSearch

https://ao3dle.vercel.app/daily.html

html ao3dle.vercel.app collected 2026-10-03 06:06:05 UTC 17,533 bytes, 325 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3<head>
4    <!-- Domain Protection - Must be first script -->
5    
5<script>
6        (function() {
7            // Check if we're being embedded in an iframe
8            if (window.self !== window.top) {
9                // We're in an iframe - try to break out
10                try {
11                    var parentHostname = window.top.location.hostname;
12                    // If we can read parent hostname and it's the fake site, break out
13                    if (parentHostname === 'ao3dle.org' || parentHostname === 'www.ao3dle.org') {
14                        window.top.location.replace('https://ao3dle.vercel.app' + window.location.pathname + '?redirected_from_fake=1');
15                    }
16                } catch (e) {
17                    // Cross-origin or sandboxed iframe - we can't break out
18                    // Instead, show a full-page overlay warning the user
19                    console.warn('Site is embedded in an iframe - showing warning overlay');
20
21                    // Set a flag to show the overlay after DOM loads
22                    window.iframeEmbedded = true;
23
24                    try {
25                        window.top.location.replace('https://ao3dle.vercel.app' + window.location.pathname + '?iframe_embedded=1');
26                    } catch (e2) {
27                        // Silently fail - we'll show the overlay instead
28                    }
29                }
30            }
31
32            // Check if the current domain is the unauthorized one (for direct visits)
33            if (window.location.hostname === 'ao3dle.org' || window.location.hostname === 'www.ao3dle.org') {
34                // Handle /game path specifically
35                var path = window.location.pathname;
36                if (path === '/game' || path === '/game/') {
37                    path = '/'; // Redirect /game to the main page
38                }
39                // Redirect to the legitimate site with a warning parameter
40                window.location.replace('https://ao3dle.vercel.app' + path + '?redirected_from_fake=1' + window.location.hash);
41            }
42        })();
43    </script>
43
44
45    <!-- Check if redirected from fake site and show warning -->
46    
46<script>
47        (function() {
48            // Check if user was redirected from the fake site
49            var urlParams = new URLSearchParams(window.location.search);
50            if (urlParams.get('redirected_from_fake') === '1' || urlParams.get('iframe_embedded') === '1') {
51                // Remove the parameter from URL without reloading
52                var cleanUrl = window.location.pathname + window.location.hash;
53                window.history.replaceState({}, document.title, cleanUrl);
54
55                // Show warning popup after page loads
56                window.addEventListener('DOMContentLoaded', function() {
57                    setTimeout(function() {
58                        var warningPopup = document.getElementById('fake-site-warning-popup');
59                        if (warningPopup) {
60                            warningPopup.style.display = 'flex';
61                        }
62                    }, 500);
63                });
64            }
65
66            // If we detected iframe embedding, show overlay 
66immediately
67            if (window.iframeEmbedded) {
68                window.addEventListener('DOMContentLoaded', function() {
69                    // Create and show full-page iframe warning overlay
70                    var overlay = document.createElement('div');
71                    overlay.id = 'iframe-warning-overlay';
72                    overlay.style.cssText = 'position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.95); z-index: 999999; display: flex; align-items: center; justify-content: center;';
73
74                    var content = document.createElement('div');
75                    content.style.cssText = 'background: white; padding: 40px; border-radius: 10px; max-width: 600px; text-align: center; border: 5px solid #ff4444;';
76                    content.innerHTML = '<h1 style="color: #ff4444; margin-bottom: 20px;">⚠️ WARNING: FAKE SITE DETECTED</h1>' +
77                        '<p style="font-size: 18px; margin-bottom: 20px;"><strong>This site is being embedded by an unauthorized fake website!</strong></p>' +
78                        '<p style="margin-bottom: 20px;">You are currently on a fake site that stole AO3dle\'s code.</p>' +
79                        '<p style="margin-bottom: 20px;"><strong style="color: #ff4444;">ao3dle.org is a fake website that\'s stealing my code. Please spread the word!</strong></p>' +
80                        '<p style="margin-bottom: 30px;"><strong>Official Site:</strong> ao3dle.vercel.app</p>' +
81                        '<a href="https://ao3dle.vercel.app" style="display: inline-block; background: #4CAF50; color: white; padding: 15px 30px; text-decoration: none; border-radius: 5px; font-size: 18px; font-weight: bold;" target="_blank">GO TO OFFICIAL SITE</a>' +
82                        '<p style="margin-top: 20px; font-size: 14px; color: #666;">Please bookmark the official site to avoid this in the future.</p>';
83
84                    overlay.appendChild(content);
85                    document.body.appendChild(overlay);
86
87                    // Prevent interaction with the page beneath
88                    document.body.style.overflow = 'hidden';
89                });
90            }
91        })();
92    </script>
92
93    <!-- Google tag (gtag.js) -->
vendor: 68 bytes, lines 93-94
93
94    <script async src="https://www.googletagmanager.com/gtag/js?id=
94G-J306BEEBTF
vendor: 16 bytes, lines 94-95
94"></script>
95    
95<script>
96        
vendor: 152 bytes, lines 96-100
96window.dataLayer = window.dataLayer || [];
97        function gtag(){dataLayer.push(arguments);}
98        gtag('js', new Date());
99
100        gtag('config', '
100G-J306BEEBTF
vendor: 8 bytes, lines 100-101
100');
101    
101</script>
101
102    <meta charset="UTF-8">
103    <meta name="viewport" content="width=device-width, initial-scale=1.0">
104    <title>AO3dle Daily - A Higher or Lower Game</title>
105
106    <!-- Open Graph / Facebook -->
107    <meta property="og:type" content="website">
108    <meta property="og:url" content="https://ao3dle.vercel.app/daily">
109    <meta property="og:title" content="AO3dle Daily - A Higher or Lower Game">
110    <meta property="og:description" content="Play the daily AO3dle challenge - 10 rounds of character and tag guessing">
111    <meta property="og:image" content="https://ao3dle.vercel.app/preview-image.png">
112    <meta property="og:image:width" content="1200">
113    <meta property="og:image:height" content="630">
114
115    <!-- Twitter -->
116    <meta property="twitter:card" content="summary_large_image">
117    <meta property="twitter:url" content="https://ao3dle.vercel.app/daily">
118    <meta property="twitter:title" content="AO3dle Daily - A Higher or Lower Game">
119    <meta property="twitter:description" content="Play the daily AO3dle challenge - 10 rounds of character and tag guessing">
120    <meta property="twitter:image" content="https://ao3dle.vercel.app/preview-image.png">
121
122    <!-- Additional SEO -->
123    <meta name="description" content="Play the daily AO3dle challenge - 10 rounds of character and tag guessing">
124    <meta name="keywords" content="ao3, archive of our own, higher or lower, guessing game, daily challenge, characters, tags">
125    <meta name="author" content="u/DandelionGaming">
126
127    <link rel="stylesheet" href="style.css">
128    <!-- Load cache manager before other scripts -->
129    
129<script src="cache-manager.js"></script>
129
130
131    
131<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-6072039563346885"
132            crossorigin="anonymous"></script>
132
133
134    
134<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-6072039563346885"
135            crossorigin="anonymous"></script>
135
136</head>
137<body class="preload daily">
138    <div class="container">
139        <header>
140            <img src="logo.png" alt="AO3dle" class="logo">
141            <a href="/" class="back-btn">← Back to Main</a>
142            <button id="daily-how-to-play-btn" class="how-to-play-btn">How to Play</button>
143
144            <div class="daily-header">
145                <h2>Daily Challenge (beta)</h2>
146                <div class="daily-stats">
147                    <div class="stat">
148                        <span class="label">Round:</span>
149                        <span id="current-round" class="value">1/10</span>
150                    </div>
151                </div>
152            </div>
153        </header>
154
155        <!-- Loading Screen -->
156        <div id="loading" class="loading">
157            <div class="spinner"></div>
158            <p>Loading daily challenge...</p>
159        </div>
160
161        <!-- Error Message -->
162        <div id="error-message" class="error-message" style="display: none;">
163            <h2>Connection Error</h2>
164            <p>Unable to load character data. Please check your internet connection and try again.</p>
165            <button onclick="location.reload()">Retry</button>
166        </div>
167
168        <!-- Game Content -->
169        <div id="game-content" class="game-content" style="display: none;">
170            <!-- Keep score tracker directly above the game row -->
171            <div class="score-tracker">
172                <div class="score-squares" id="score-squares">
173                    <!-- Score squares will be dynamically generated -->
174                </div>
175            </div>
176
177            <!-- Wrap the left/vs/right into a dedicated row container -->
178            <div class="daily-game-row">
179                <div class="character-container left">
180                    <div class="character-card">
181                        <h2 id="left-character">Character Name</h2>
182                        <div id="left-character-notes" class="character-subtext"></div>
183                        <div id="left-count-container" class="post-count hard-hidden" style="display: none;">
184                            <span id="left-count-display">0</span>
185                            <span class="label">works</span>
186                        </div>
187                        <div class="question-mark left-question-mark">?</div>
188                    </div>
189                </div>
190
191                <div class="vs-section">
192                    <div class="instruction-text">Which has more works?</div>
193                    <div class="vs-text">VS</div>
194                </div>
195
196                <div class="character-container right">
197                    <div class="character-card">
198                        <h2 id="right-character">Character Name</h2>
199                        <div id="right-character-notes" class="character-subtext"></div>
200                        <div id="right-count-container" class="post-count hard-hidden" style="display: none;">
201                            <span id="right-count">0</span>
202                            <span class="label">works</span>
203                        </div>
204                        <div class="question-mark right-question-mark">?</div>
205                    </div>
206                </div>
207            </div>
208        </div>
209
210        <!-- Result Overlay -->
211        <div id="result-overlay" class="result-overlay" style="display: none;">
212            <div class="result-content">
213                <h2 id="result-text" class="result-text">Correct!</h2>
214                <div class="result-buttons">
215                    <button id="next-btn" class="btn primary">Next Round</button>
216                </div>
217            </div>
218        </div>
219
220        <!-- Final Score Popup -->
221        <div id="final-score-popup" class="popup-overlay" style="display: none;">
222            <div class="popup-content">
223                <div class="popup-header">
224                    <h2>Daily Challenge Complete!</h2>
225                </div>
226                <div class="popup-body">
227                    <div class="final-score">
228                        <h3>Your Score: <span id="final-score-text">0/10</span></h3>
229                        <div class="score-breakdown" id="score-breakdown">
230                            <!-- Score squares will be shown here -->
231                        </div>
232                    </div>
233                    <p>Come back tomorrow for a new daily challenge!</p>
234
235                    <!-- Countdown to next daily (UTC) -->
236                    <div class="countdown-container">
237                        <div class="countdown-label">Next Daily in</div>
238                        <div id="next-daily-timer" class="countdown-time">--:--:--</div>
239                        <div class="countdown-sub">rolls over at 00:00 UTC</div>
240                    </div>
241                </div>
242                <div class="popup-footer">
243                    <button id="play-again-btn" class="btn secondary">Play Main Mode</button>
244                    <button id="share-score-btn" class="btn primary">Share Score</button>
245                </div>
246            </div>
247        </div>
248
249        <!-- Daily How to Play Popup -->
250        <div id="daily-how-to-play-popup" class="popup-overlay" style="display: none;">
251            <div class="popup-content">
252                <div class="popup-header">
253                    <h2>How to Play - Daily Challenge</h2>
254                    <button id="close-daily-popup" class="close-popup">×</button>
255                </div>
256                <div class="popup-body">
257                    <p>Welcome to the AO3dle Daily Challenge! Here's how it works:</p>
258                    <ul>
259                        <li><strong>10 Rounds:</strong> You'll play exactly 10 rounds of character/tag comparisons</li>
260                        <li><strong>New characters/tags each round:</strong> Each round features 2 completely new characters or tags (no franchise tags)</li>
261                        <li><strong>Make your choice:</strong> Click on the character/tag you think has MORE works</li>
262                        <li><strong>Track your progress:</strong> Green squares = correct, Red squares = incorrect</li>
263                        <li><strong>Same for everyone:</strong> Everyone gets the same 10 rounds each day</li>
264                        <li><strong>One chance per day:</strong> Come back tomorrow for new challenges!</li>
265                        <li><strong>Note:</strong> Daily challenge might be a bit unstable around midnight UTC!</li>
266                    </ul>
267                    <p>Loading screen ahh tooltip: Click the red/green squares to review the previous rounds!</p>
268                </div>
269                <div class="popup-footer">
270                    <button id="daily-got-it-btn" class="btn primary">Got it!</button>
271                </div>
272            </div>
273        </div>
274    </div>
275
276    <!-- Report Problem Button -->
277    <button id="report-problem-btn" class="report-problem-btn">Report Problem</button>
278
279    <!-- Report Problem Popup -->
280    <div id="report-problem-popup" class="report-popup-overlay" style="display: none;">
281        <div class="report-popup-content">
282            <div class="report-popup-header">
283                <h3>Report a Problem</h3>
284                <button id="close-report-popup" class="close-popup">×</button>
285            </div>
286            <div class="report-subtext">
287                <p>Submit feedback, bugs or incorrect tag information here</p>
288            </div>
289            <form id="report-form" class="report-form">
290                <div class="form-group">
291                    <label for="report-title">Title*</label>
292                    <input type="text" id="report-title" name="title" required maxlength="100" placeholder="Brief description of the issue">
293                </div>
294                <div class="form-group">
295                    <label for="report-contact">Contact Info (optional)</label>
296                    <input type="text" id="report-contact" name="contact" maxlength="100" placeholder="If you want me to get back to you">
297                </div>
298                <div class="form-group">
299                    <label for="report-description">Description*</label>
300                    <textarea id="report-description" name="description" required maxlength="1000" rows="5" placeholder="Please describe the problem in detail..."></textarea>
301                </div>
302                <div class="form-buttons">
303                    <button type="button" id="cancel-report" class="btn secondary">Cancel</button>
304                    <button type="submit" id="submit-report" class="btn primary">Submit Report</button>
305                </div>
306            </form>
307            <div id="report-status" class="report-status" style="display: none;"></div>
308        </div>
309    </div>
310
311    
311<script src="daily.js"></script>
311
312    
312<script>
313        window.va = window.va || function () { (window.vaq = window.vaq || []).push(arguments); };
314    </script>
314
315    
315<script defer src="/_vercel/insights/script.js"></script>
315
316
317    <footer class="footer">
318        <p><strong>AO3dle</strong> - Guess which has more works on Archive of Our Own!</p>
319        <p>Data sourced from <a href="https://archiveofourown.org/" target="_blank">Archive of Our Own</a></p>
320        <p>Created by <a href="https://reddit.com/u/DandelionGaming" target="_blank">u/DandelionGaming</a> / DryIcedMatcha on twitter</p>
321        
321<script type='text/javascript' src='https://storage.ko-fi.com/cdn/widget/Widget_2.js'></script>
321<script type='text/javascript'>kofiwidget2.init('Support me on Ko-fi', '#72a4f2', 'Z8Z11JX1QO');kofiwidget2.draw();</script>
321
322        <p style="font-size: 0.95em; color: #888; margin: 8px 0 0 0;">This project is not affiliated with or endorsed by Archive of Our Own (AO3) or the Organization for Transformative Works (OTW).</p>
323    </footer>
324</body>
325</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.