145 lines
7.2 KiB
HTML
145 lines
7.2 KiB
HTML
<!doctype html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<meta name="theme-color" content="#f7efe6">
|
||
<title>Fancy Wordle</title>
|
||
<link rel="stylesheet" href="CSS/styles.css">
|
||
<script src="https://cdn.jsdelivr.net/npm/@tsparticles/confetti@3.0.3/tsparticles.confetti.bundle.min.js"></script>
|
||
<script src="https://cdn.jsdelivr.net/npm/@supabase/supabase-js@2"></script>
|
||
<script src="word-data.js?v=5" defer></script>
|
||
<script src="supabase-config.js?v=1" defer></script>
|
||
<script src="script.js?v=7" defer></script>
|
||
</head>
|
||
<body>
|
||
<div class="app-shell">
|
||
<header class="topbar" aria-label="Game controls">
|
||
<a class="brand" href="#" aria-label="Restart Fancy Wordle">
|
||
<span class="brand-mark">W</span>
|
||
<span>
|
||
<strong>Fancy Wordle</strong>
|
||
<small>One word every hour</small>
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="actions" aria-label="Quick actions">
|
||
<button class="icon-button" type="button" id="theme-button" aria-label="Toggle dark mode" title="Toggle theme">
|
||
<span aria-hidden="true">◐</span>
|
||
</button>
|
||
<button class="icon-button" type="button" id="Stats-button" aria-label="Open stats and share" title="Stats and share">
|
||
<span aria-hidden="true">↗</span>
|
||
</button>
|
||
<button class="icon-button" type="button" id="leaderboard-button" aria-label="Open hourly leaderboard" title="Hourly leaderboard">
|
||
<span aria-hidden="true">♛</span>
|
||
</button>
|
||
<button class="auth-button" type="button" id="auth-button" aria-label="Sign in to sync stats">Sign in</button>
|
||
<a class="icon-button" href="https://www.youtube.com/watch?v=UkOKCWDJ4iA" target="_blank" rel="noopener noreferrer" aria-label="Open the original love note" title="Original love note">
|
||
<span aria-hidden="true">♡</span>
|
||
</a>
|
||
</nav>
|
||
</header>
|
||
|
||
<main class="game-card">
|
||
<section class="hero-panel" aria-labelledby="game-title">
|
||
<p class="eyebrow">Hourly challenge</p>
|
||
<h1 id="game-title">Guess the word in six tries.</h1>
|
||
<p class="deck">Play one five-letter word per hour. Valid words reveal with smooth flips, warm feedback, confetti, sound, and a definition at the end.</p>
|
||
</section>
|
||
|
||
<section class="board-panel" aria-label="Wordle game board">
|
||
<div class="status-row">
|
||
<span id="round-status">Loading word lists…</span>
|
||
<span class="pill" id="tries-status">0 / 6</span>
|
||
</div>
|
||
|
||
<div class="alert-container" data-alert-container aria-live="polite" aria-atomic="true"></div>
|
||
<div data-guess-grid class="guess-grid" aria-label="Guess grid"></div>
|
||
<div data-keyboard class="keyboard" aria-label="Keyboard"></div>
|
||
</section>
|
||
</main>
|
||
</div>
|
||
|
||
<dialog class="stats-modal" id="stats-modal" aria-labelledby="stats-title">
|
||
<form method="dialog" class="stats-card">
|
||
<div class="modal-head">
|
||
<div>
|
||
<p class="eyebrow">Progress</p>
|
||
<h2 id="stats-title">Game stats</h2>
|
||
</div>
|
||
<button class="icon-button close-button" type="submit" aria-label="Close stats">×</button>
|
||
</div>
|
||
<div class="stats-grid" id="stats-grid"></div>
|
||
<div class="stats-note" id="stats-note"></div>
|
||
<div class="guess-bars" id="guess-bars" aria-label="Guess distribution"></div>
|
||
<div class="definition-panel" id="stats-definition-panel">
|
||
<h3>Word reveal</h3>
|
||
<div class="stats-definition" id="stats-definition"></div>
|
||
</div>
|
||
<menu class="modal-actions">
|
||
<button type="button" class="button secondary" id="reset-stats">Reset stats</button>
|
||
<button type="button" class="button primary" id="share-results">Share result</button>
|
||
</menu>
|
||
</form>
|
||
</dialog>
|
||
|
||
<dialog class="stats-modal" id="leaderboard-modal" aria-labelledby="leaderboard-title">
|
||
<form method="dialog" class="stats-card leaderboard-card">
|
||
<div class="modal-head">
|
||
<div>
|
||
<p class="eyebrow">This hour</p>
|
||
<h2 id="leaderboard-title">Leaderboard</h2>
|
||
</div>
|
||
<button class="icon-button close-button" type="submit" aria-label="Close leaderboard">×</button>
|
||
</div>
|
||
<div class="leaderboard-tabs" role="tablist" aria-label="Leaderboard scope">
|
||
<button type="button" class="leaderboard-tab active" data-leaderboard-scope="hour">This Hour</button>
|
||
<button type="button" class="leaderboard-tab" data-leaderboard-scope="today">Today</button>
|
||
<button type="button" class="leaderboard-tab" data-leaderboard-scope="all">All Time</button>
|
||
</div>
|
||
<div class="leaderboard-result" id="leaderboard-result" hidden></div>
|
||
<p class="leaderboard-countdown" id="leaderboard-countdown">Next word unlocks soon.</p>
|
||
<div class="leaderboard-list" id="leaderboard-list" aria-live="polite"></div>
|
||
</form>
|
||
</dialog>
|
||
|
||
<dialog class="stats-modal auth-modal" id="auth-modal" aria-labelledby="auth-title">
|
||
<form method="dialog" class="stats-card auth-card">
|
||
<div class="modal-head">
|
||
<div>
|
||
<p class="eyebrow">Account</p>
|
||
<h2 id="auth-title">Sign in</h2>
|
||
</div>
|
||
<button class="icon-button close-button" type="submit" aria-label="Close account">×</button>
|
||
</div>
|
||
<p class="auth-status" id="auth-status">Sign in with your email and password. If we cannot find your account, you can create one here.</p>
|
||
<div class="account-summary" id="account-summary" hidden></div>
|
||
<div id="auth-form" class="auth-form">
|
||
<label for="auth-email">Email address</label>
|
||
<input type="email" id="auth-email" autocomplete="email" placeholder="you@example.com">
|
||
<label for="auth-password">Password</label>
|
||
<input type="password" id="auth-password" autocomplete="current-password" placeholder="At least 6 characters" minlength="6">
|
||
<div class="auth-create-fields" id="auth-create-fields" hidden>
|
||
<label for="auth-username">Username</label>
|
||
<input type="text" id="auth-username" autocomplete="username" placeholder="wordsmith" maxlength="24">
|
||
</div>
|
||
<div class="auth-button-row">
|
||
<button type="button" class="button primary" id="auth-sign-in">Sign in</button>
|
||
<button type="button" class="button secondary" id="auth-sign-up" hidden>Create account</button>
|
||
</div>
|
||
<button type="button" class="link-button" id="auth-forgot-password">Forgot password?</button>
|
||
<div class="auth-reset-fields" id="auth-reset-fields" hidden>
|
||
<label for="auth-new-password">New password</label>
|
||
<input type="password" id="auth-new-password" autocomplete="new-password" placeholder="New password" minlength="6">
|
||
<button type="button" class="button secondary full-width" id="auth-update-password">Update password</button>
|
||
</div>
|
||
</div>
|
||
<menu class="modal-actions auth-actions">
|
||
<button type="button" class="button secondary" id="auth-guest">Continue as guest</button>
|
||
<button type="button" class="button secondary" id="auth-sign-out" hidden>Sign out</button>
|
||
</menu>
|
||
</form>
|
||
</dialog>
|
||
</body>
|
||
</html>
|