aboutsummaryrefslogtreecommitdiffstats
path: root/startpage/index.php
diff options
context:
space:
mode:
authorsillylaird <sillyfanboy@gmail.com>2026-09-03 00:33:59 +0000
committersillylaird <sillyfanboy@gmail.com>2026-09-03 00:33:59 +0000
commit898b52edcb47bcb3e9d6106e74ca73e74ea01e70 (patch)
tree85c6ee5ad58b860144551184d4cf86b560c62b91 /startpage/index.php
downloadwww-main.tar.gz
www-main.zip
import live www.sillylaird.ca webrootHEADmain
Diffstat (limited to '')
-rw-r--r--startpage/index.php454
1 files changed, 454 insertions, 0 deletions
diff --git a/startpage/index.php b/startpage/index.php
new file mode 100644
index 0000000..a3791f2
--- /dev/null
+++ b/startpage/index.php
@@ -0,0 +1,454 @@
+<?php
+header('Cache-Control: no-cache, no-store, must-revalidate');
+require_once __DIR__ . '/../partials/i18n.php';
+$lang = 'en';
+?>
+<!DOCTYPE html>
+<html lang="en" dir="ltr">
+
+<head>
+ <meta charset="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <title><?= htmlspecialchars(t('startpage.title'), ENT_QUOTES, 'UTF-8') ?></title>
+
+ <meta name="color-scheme" content="dark light" />
+<?php
+ // The card names this page, not the homepage: og/twitter title + og:url and
+ // the hreflang alternates all point at /startpage/, matching the canonical.
+ $meta = [
+ 'lang' => 'en',
+ 'title' => t('startpage.title'),
+ 'desc' => t('startpage.desc'),
+ 'base' => 'index',
+ 'self_url' => 'https://www.sillylaird.ca/startpage/',
+ 'og_url' => 'https://www.sillylaird.ca/startpage/',
+ 'en_url' => 'https://www.sillylaird.ca/startpage/',
+ 'x_default' => 'https://www.sillylaird.ca/startpage/',
+ 'ja_url' => 'https://www.sillylaird.ca/startpage/',
+ 'zh_url' => 'https://www.sillylaird.ca/startpage/',
+ ];
+ include __DIR__ . '/../partials/head_meta.php';
+?>
+ <link rel="stylesheet" href="/assets/css/fonts.css?v=<?= @filemtime(__DIR__ . '/../assets/css/fonts.css') ?: time() ?>" />
+ <link rel="stylesheet" href="/assets/css/site.css?v=<?= @filemtime(__DIR__ . '/../assets/css/site.css') ?: time() ?>" />
+ <link rel="stylesheet" href="/assets/css/skeleton.css?v=<?= @filemtime(__DIR__ . '/../assets/css/skeleton.css') ?: time() ?>" />
+
+ <link rel="stylesheet" href="startpage.css?v=<?= @filemtime(__DIR__ . '/startpage.css') ?: time() ?>" />
+<?php
+ // Boot banner OpenBSD version: tools/update_openbsd_version.sh (cron) writes
+ // openbsd_version.txt from openbsd.org; JS falls back to a date formula if missing.
+ $openbsd_release = '';
+ $openbsd_ver_file = __DIR__ . '/openbsd_version.txt';
+ if (is_readable($openbsd_ver_file)) {
+ $v = trim((string) @file_get_contents($openbsd_ver_file));
+ if (preg_match('/^\d+\.\d+$/', $v)) {
+ $openbsd_release = $v;
+ }
+ }
+?>
+ <script>window.OPENBSD_RELEASE=<?= json_encode($openbsd_release, JSON_UNESCAPED_SLASHES) ?>;</script>
+ <script defer src="startpage.js?v=<?= @filemtime(__DIR__ . '/startpage.js') ?: time() ?>"></script>
+ <noscript><style>.boot-overlay{display:none!important}</style></noscript>
+</head>
+
+<body class="startpage-booting startpage-comfort comfort-spacing">
+ <a class="skip-link" href="#main">Skip to content</a>
+ <div id="boot-overlay" class="boot-overlay" aria-hidden="true">
+ <div class="boot-log" id="boot-log"></div>
+ </div>
+ <div class="crt-overlay" aria-hidden="true"></div>
+ <?php include '../partials/header.php'; ?>
+
+ <?php
+ $lastfm_initial = '';
+ $lastfm_cache_file = sys_get_temp_dir() . '/sillylaird_lastfm/recent.json';
+ if (is_file($lastfm_cache_file)) {
+ $lastfm_raw = @file_get_contents($lastfm_cache_file);
+ $lastfm_tracks = $lastfm_raw !== false ? json_decode($lastfm_raw, true) : null;
+ if (is_array($lastfm_tracks)) {
+ $pick = null;
+ foreach ($lastfm_tracks as $t) {
+ if (!empty($t['nowplaying'])) { $pick = $t; break; }
+ }
+ if (!$pick) {
+ foreach ($lastfm_tracks as $t) {
+ if (!empty($t['name'])) { $pick = $t; break; }
+ }
+ }
+ if ($pick && !empty($pick['name']) && !empty($pick['artist'])) {
+ $prefix = !empty($pick['nowplaying']) ? 'Now playing: ' : 'Last played: ';
+ $lastfm_initial = $prefix . $pick['name'] . ' — ' . $pick['artist'];
+ }
+ }
+ }
+ ?>
+ <div id="lastfm-widget" class="lastfm-widget">
+ <span class="lastfm-label">♫</span>
+ <span id="lastfm-status"><?= htmlspecialchars($lastfm_initial, ENT_QUOTES, 'UTF-8') ?></span>
+ <a href="https://www.last.fm/user/SillyLaird" class="lastfm-profile" target="_blank" rel="noopener noreferrer">Last.fm Profile</a>
+ </div>
+
+ <section id="konaste-status" class="konaste-status" aria-label="Konaste / BEMANI PC maintenance status">
+ <div class="konaste-head">
+ <h3 class="konaste-title">Konaste / BEMANI PC Status</h3>
+ <small class="konaste-clock">Computer time:
+ <span id="konaste-clock" class="konaste-clock-time"><span data-clock="h">--</span><span class="konaste-clock-colon">:</span><span data-clock="m">--</span><span class="konaste-clock-colon">:</span><span data-clock="s">--</span> <span data-clock="ap" class="konaste-clock-ap"></span></span>
+ <span data-clock="tz" class="konaste-clock-tz"></span>
+ </small>
+ </div>
+
+ <div class="konaste-game" data-game="both">
+ <span class="konaste-dot" data-role="dot"></span>
+ <span class="konaste-names">
+ <a class="konaste-name" href="https://p.eagate.573.jp/game/eacpopn/lively/" target="_blank" rel="noopener noreferrer">pop'n music Lively</a>
+ <span class="konaste-name-sep">•</span>
+ <a class="konaste-name" href="https://p.eagate.573.jp/game/eacgitadora/index.html" target="_blank" rel="noopener noreferrer">GITADORA Konaste</a>
+ <span class="konaste-name-sep">•</span>
+ <a class="konaste-name" href="https://p.eagate.573.jp/game/infinitas/2/index.html" target="_blank" rel="noopener noreferrer">beatmania IIDX INFINITAS</a>
+ </span>
+ <span class="konaste-text" data-role="text">Checking…</span>
+ <span class="konaste-countdown" data-role="countdown"></span>
+ </div>
+
+ <small class="konaste-note">Maintenance times are converted from the server schedule to the connected computer's local time. Unexpected outages can still happen. Schedule via <a href="https://iidx.org/eamuse_maint" target="_blank" rel="noopener noreferrer">iidx.org/eamuse_maint</a>.</small>
+ </section>
+
+
+ <main id="main">
+ <section class="search-section">
+ <div class="top-left-links">
+ <a href="https://grok.com/" target="_blank" rel="noopener noreferrer" class="search-link chatllm-link">Grok</a>
+ <a href="https://www.heyaoi.net/" target="_blank" rel="noopener noreferrer" class="search-link">Heyaoi</a>
+ <a href="https://micro.heyaoi.online/" target="_blank" rel="noopener noreferrer" class="search-link">Heyaoi Online</a>
+ <a href="https://www.sportsmediawatch.com/sports-on-tv-today-games-time-channel/" target="_blank" rel="noopener noreferrer" class="search-link">SportsMediaWatch</a>
+ <nav class="ctx-menu">
+ <ul class="ctx-root">
+ <li class="ctx-parent">
+ <span class="search-link ctx-trigger">Sports <span class="ctx-arrow"></span></span>
+ <ul class="ctx-flyout">
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Watch</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.sportsmediawatch.com/sports-on-tv-today-games-time-channel/" target="_blank" rel="noopener noreferrer" class="ctx-item">SportsMediaWatch</a></li>
+ <li><a href="https://www.espn.com/watch/" target="_blank" rel="noopener noreferrer" class="ctx-item">ESPN WATCH</a></li>
+ <li><a href="https://www.sportsnet.ca/" target="_blank" rel="noopener noreferrer" class="ctx-item">SportsNet</a></li>
+ <li><a href="https://www.tsn.ca/live/" target="_blank" rel="noopener noreferrer" class="ctx-item">TSN</a></li>
+ <li><a href="https://www.flosports.tv/" target="_blank" rel="noopener noreferrer" class="ctx-item">FloSports</a></li>
+ <li><a href="https://www.hometeamlive.com/" target="_blank" rel="noopener noreferrer" class="ctx-item">HomeTeamLive</a></li>
+ <li><a href="https://www.dazn.com/" target="_blank" rel="noopener noreferrer" class="ctx-item">DAZN</a></li>
+ </ul>
+ </li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Lacrosse</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.tsn.ca/lacrosse/article/nll-lacrosse-on-tsn-broadcast-schedule-2/" target="_blank" rel="noopener noreferrer" class="ctx-item">TSN NLL Schedule</a></li>
+ <li><a href="https://premierlacrosseleague.com/schedule" target="_blank" rel="noopener noreferrer" class="ctx-item">PLL Schedule</a></li>
+ <li><a href="https://www.ncaa.com/scoreboard/lacrosse-men/d1" target="_blank" rel="noopener noreferrer" class="ctx-item">NCAA Lacrosse (M)</a></li>
+ </ul>
+ </li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Football</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.cfl.ca/plus" target="_blank" rel="noopener noreferrer" class="ctx-item">CFL+</a></li>
+ <li><a href="https://www.nfl.com/schedules/" target="_blank" rel="noopener noreferrer" class="ctx-item">NFL Schedule</a></li>
+ <li><a href="https://www.ncaa.com/scoreboard/football/fbs" target="_blank" rel="noopener noreferrer" class="ctx-item">NCAA Football</a></li>
+ <li><a href="https://www.flofootball.com/" target="_blank" rel="noopener noreferrer" class="ctx-item">FloFootball</a></li>
+ </ul>
+ </li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Basketball</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.nba.com/schedule" target="_blank" rel="noopener noreferrer" class="ctx-item">NBA Schedule</a></li>
+ <li><a href="https://www.cebl.ca/games" target="_blank" rel="noopener noreferrer" class="ctx-item">CEBL Schedule</a></li>
+ <li><a href="https://www.ncaa.com/scoreboard/basketball-men/d1" target="_blank" rel="noopener noreferrer" class="ctx-item">NCAA Basketball (M)</a></li>
+ <li><a href="https://www.ncaa.com/scoreboard/basketball-women/d1" target="_blank" rel="noopener noreferrer" class="ctx-item">NCAA Basketball (W)</a></li>
+ <li><a href="https://www.flohoops.com/" target="_blank" rel="noopener noreferrer" class="ctx-item">FloHoops</a></li>
+ </ul>
+ </li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Rugby</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.nrl.com/watch/live/" target="_blank" rel="noopener noreferrer" class="ctx-item">NRL Schedule</a></li>
+ <li><a href="https://www.sixnationsrugby.com/en/m6n/fixtures/" target="_blank" rel="noopener noreferrer" class="ctx-item">Six Nations</a></li>
+ <li><a href="https://www.florugby.com/" target="_blank" rel="noopener noreferrer" class="ctx-item">FloRugby</a></li>
+ </ul>
+ </li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Hockey</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.nhl.com/schedule" target="_blank" rel="noopener noreferrer" class="ctx-item">NHL Schedule</a></li>
+ <li><a href="https://theahl.com/schedule" target="_blank" rel="noopener noreferrer" class="ctx-item">AHL Schedule</a></li>
+ <li><a href="https://echl.com/schedule" target="_blank" rel="noopener noreferrer" class="ctx-item">ECHL Schedule</a></li>
+ <li><a href="https://chl.ca/" target="_blank" rel="noopener noreferrer" class="ctx-item">CHL Schedule</a></li>
+ <li><a href="https://chl.ca/ohl/schedule/" target="_blank" rel="noopener noreferrer" class="ctx-item">OHL Schedule</a></li>
+ <li><a href="https://chl.ca/whl/schedule/" target="_blank" rel="noopener noreferrer" class="ctx-item">WHL Schedule</a></li>
+ <li><a href="https://chl.ca/lhjmq/schedule/" target="_blank" rel="noopener noreferrer" class="ctx-item">QMJHL Schedule</a></li>
+ <li><a href="https://www.ncaa.com/scoreboard/icehockey-men/d1" target="_blank" rel="noopener noreferrer" class="ctx-item">NCAA Hockey (M)</a></li>
+ <li><a href="https://www.ncaa.com/scoreboard/icehockey-women/d1" target="_blank" rel="noopener noreferrer" class="ctx-item">NCAA Hockey (W)</a></li>
+ <li><a href="https://www.flohockey.tv/" target="_blank" rel="noopener noreferrer" class="ctx-item">FloHockey</a></li>
+ </ul>
+ </li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Wrestling</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.ncaa.com/sports/wrestling-men/d1" target="_blank" rel="noopener noreferrer" class="ctx-item">NCAA Wrestling</a></li>
+ <li><a href="https://www.flowrestling.org/" target="_blank" rel="noopener noreferrer" class="ctx-item">FloWrestling</a></li>
+ </ul>
+ </li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Grappling</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.flograppling.com/" target="_blank" rel="noopener noreferrer" class="ctx-item">FloGrappling</a></li>
+ </ul>
+ </li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Combat</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.flocombat.com/" target="_blank" rel="noopener noreferrer" class="ctx-item">FloCombat</a></li>
+ </ul>
+ </li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Racing</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.formula1.com/en/racing/2026" target="_blank" rel="noopener noreferrer" class="ctx-item">F1 Calendar</a></li>
+ <li><a href="https://www.floracing.com/" target="_blank" rel="noopener noreferrer" class="ctx-item">FloRacing</a></li>
+ </ul>
+ </li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Track</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.flotrack.org/" target="_blank" rel="noopener noreferrer" class="ctx-item">FloTrack</a></li>
+ </ul>
+ </li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Soccer</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.ncaa.com/scoreboard/soccer-men/d1" target="_blank" rel="noopener noreferrer" class="ctx-item">NCAA Soccer</a></li>
+ <li><a href="https://www.premierleague.com/fixtures" target="_blank" rel="noopener noreferrer" class="ctx-item">EPL Fixtures</a></li>
+ <li><a href="https://www.uefa.com/uefachampionsleague/fixtures-results/" target="_blank" rel="noopener noreferrer" class="ctx-item">UEFA Champions League</a></li>
+ <li><a href="https://www.mlssoccer.com/schedule/" target="_blank" rel="noopener noreferrer" class="ctx-item">MLS Schedule</a></li>
+ <li><a href="https://www.flofc.com/" target="_blank" rel="noopener noreferrer" class="ctx-item">FloFC</a></li>
+ </ul>
+ </li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Baseball</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.mlb.com/schedule" target="_blank" rel="noopener noreferrer" class="ctx-item">MLB Schedule</a></li>
+ <li><a href="https://www.ncaa.com/scoreboard/baseball/d1" target="_blank" rel="noopener noreferrer" class="ctx-item">NCAA Baseball</a></li>
+ <li><a href="https://www.flobaseball.tv/" target="_blank" rel="noopener noreferrer" class="ctx-item">FloBaseball</a></li>
+ </ul>
+ </li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Softball</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.ncaa.com/scoreboard/softball/d1" target="_blank" rel="noopener noreferrer" class="ctx-item">NCAA Softball</a></li>
+ <li><a href="https://www.flosoftball.com/" target="_blank" rel="noopener noreferrer" class="ctx-item">FloSoftball</a></li>
+ </ul>
+ </li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Volleyball</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.ncaa.com/scoreboard/volleyball-women/d1" target="_blank" rel="noopener noreferrer" class="ctx-item">NCAA Volleyball (W)</a></li>
+ <li><a href="https://www.flovolleyball.tv/" target="_blank" rel="noopener noreferrer" class="ctx-item">FloVolleyball</a></li>
+ </ul>
+ </li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Swimming</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.floswimming.com/" target="_blank" rel="noopener noreferrer" class="ctx-item">FloSwimming</a></li>
+ </ul>
+ </li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Gymnastics</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.flogymnastics.com/" target="_blank" rel="noopener noreferrer" class="ctx-item">FloGymnastics</a></li>
+ </ul>
+ </li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Cheer</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.flocheer.com/" target="_blank" rel="noopener noreferrer" class="ctx-item">FloCheer</a></li>
+ </ul>
+ </li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Dance</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.flodance.com/" target="_blank" rel="noopener noreferrer" class="ctx-item">FloDance</a></li>
+ </ul>
+ </li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Bowling</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.flobowling.com/" target="_blank" rel="noopener noreferrer" class="ctx-item">FloBowling</a></li>
+ </ul>
+ </li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Rodeo</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.florodeo.com/" target="_blank" rel="noopener noreferrer" class="ctx-item">FloRodeo</a></li>
+ </ul>
+ </li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Marching</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.flomarching.com/" target="_blank" rel="noopener noreferrer" class="ctx-item">FloMarching</a></li>
+ </ul>
+ </li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Cycling</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.flobikes.com/" target="_blank" rel="noopener noreferrer" class="ctx-item">FloBikes</a></li>
+ </ul>
+ </li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Elite</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.floelite.com/" target="_blank" rel="noopener noreferrer" class="ctx-item">FloElite</a></li>
+ </ul>
+ </li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Cricket</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.icc-cricket.com/fixtures-results" target="_blank" rel="noopener noreferrer" class="ctx-item">ICC Fixtures</a></li>
+ <li><a href="https://www.iplt20.com/matches/schedule" target="_blank" rel="noopener noreferrer" class="ctx-item">IPL Schedule</a></li>
+ </ul>
+ </li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Tennis</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.atptour.com/en/tournaments" target="_blank" rel="noopener noreferrer" class="ctx-item">ATP Tour</a></li>
+ <li><a href="https://www.wtatennis.com/tournaments" target="_blank" rel="noopener noreferrer" class="ctx-item">WTA Tour</a></li>
+ </ul>
+ </li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Golf</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.pgatour.com/schedule" target="_blank" rel="noopener noreferrer" class="ctx-item">PGA Tour Schedule</a></li>
+ </ul>
+ </li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Aussie Rules</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.afl.com.au/fixture" target="_blank" rel="noopener noreferrer" class="ctx-item">AFL Fixture</a></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </nav>
+ <a href="https://downloads.khinsider.com/" target="_blank" rel="noopener noreferrer" class="search-link khinsider-link">KHInsider</a>
+ <a href="https://animethemes.moe/" target="_blank" rel="noopener noreferrer" class="search-link">AnimeThemes</a>
+ <a href="https://squid.wtf/" target="_blank" rel="noopener noreferrer" class="search-link squid-link">Squid</a>
+ <a href="https://strmfree.link/" target="_blank" rel="noopener noreferrer" class="search-link">StrmFree</a>
+ <a href="https://anikototv.to/home" target="_blank" rel="noopener noreferrer" class="search-link">AnikotoTV</a>
+ <a href="https://www.wco.tv/" target="_blank" rel="noopener noreferrer" class="search-link">WCO</a>
+ <a href="https://fmhy.net/" target="_blank" rel="noopener noreferrer" class="search-link">FMHY</a>
+ </div>
+ <div class="top-right-links">
+ <a href="https://mail.sillylaird.ca/" target="_blank" rel="noopener noreferrer" class="search-link">Mail</a>
+ <a href="https://mail.google.com/" target="_blank" rel="noopener noreferrer" class="search-link">Gmail</a>
+ <nav class="ctx-menu">
+ <ul class="ctx-root">
+ <li class="ctx-parent">
+ <span class="search-link ctx-trigger"><span class="ctx-arrow"></span> Links</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.google.com/" target="_blank" rel="noopener noreferrer" class="ctx-item">Google</a></li>
+ <li><a href="https://mail.sillylaird.ca/" target="_blank" rel="noopener noreferrer" class="ctx-item">Mail</a></li>
+ <li><a href="https://mail.google.com/" target="_blank" rel="noopener noreferrer" class="ctx-item">Gmail</a></li>
+ <li><a href="https://blog.sillylaird.ca/" target="_blank" rel="noopener noreferrer" class="ctx-item">Blog</a></li>
+ <li><a href="https://kick.com/" target="_blank" rel="noopener noreferrer" class="ctx-item">Kick</a></li>
+ <li><a href="https://www.nicovideo.jp/" target="_blank" rel="noopener noreferrer" class="ctx-item">Nicovideo</a></li>
+ <li><a href="https://www.bilibili.com/" target="_blank" rel="noopener noreferrer" class="ctx-item">Bilibili</a></li>
+ <li><a href="https://www.youtube.com/" target="_blank" rel="noopener noreferrer" class="ctx-item">YouTube</a></li>
+ <li class="ctx-parent">
+ <span class="ctx-item ctx-has-sub">Radio's</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://radio.garden/listen/gotanno-89-2/9sBfGBXL" target="_blank" rel="noopener noreferrer" class="ctx-item">Radio.Garden</a></li>
+ <li><a href="https://radio.sillylaird.ca/" target="_blank" rel="noopener noreferrer" class="ctx-item">Radio</a></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </nav>
+ <nav class="ctx-menu">
+ <ul class="ctx-root">
+ <li class="ctx-parent">
+ <span class="search-link ctx-trigger"><span class="ctx-arrow"></span> Private Servers</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://2004.lostcity.rs/title" target="_blank" rel="noopener noreferrer" class="ctx-item">2004Scape</a></li>
+ <li><a href="https://2005.rs/" target="_blank" rel="noopener noreferrer" class="ctx-item">2005Scape</a></li>
+ </ul>
+ </li>
+ </ul>
+ </nav>
+ <nav class="ctx-menu">
+ <ul class="ctx-root">
+ <li class="ctx-parent">
+ <span class="search-link ctx-trigger"><span class="ctx-arrow"></span> Rhythm Games</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://p.eagate.573.jp/game/eacpopn/lively/" target="_blank" rel="noopener noreferrer" class="ctx-item">Pop'n Music Lively</a></li>
+ <li><a href="https://p.eagate.573.jp/game/eacgitadora/index.html" target="_blank" rel="noopener noreferrer" class="ctx-item">Gitadora</a></li>
+ </ul>
+ </li>
+ </ul>
+ </nav>
+ <nav class="ctx-menu">
+ <ul class="ctx-root">
+ <li class="ctx-parent">
+ <span class="search-link ctx-trigger"><span class="ctx-arrow"></span> Shopping</span>
+ <ul class="ctx-flyout">
+ <li><a href="https://www.ebay.ca/" target="_blank" rel="noopener noreferrer" class="ctx-item">eBay</a></li>
+ <li><a href="https://www.dhgate.com/" target="_blank" rel="noopener noreferrer" class="ctx-item">DHgate</a></li>
+ </ul>
+ </li>
+ </ul>
+ </nav>
+ <a href="http://9p.sillylaird.ca" target="_blank" rel="noopener noreferrer" class="search-link">9P/9F</a>
+ <a href="http://xp.sillylaird.ca" target="_blank" rel="noopener noreferrer" class="search-link">XP</a>
+ <a href="https://os.sillylaird.ca/" target="_blank" rel="noopener noreferrer" class="search-link">LainOS</a>
+ <a href="https://www.openbsd.org/" target="_blank" rel="noopener noreferrer" class="search-link">OpenBSD</a>
+ <a href="https://9p.io/plan9/" target="_blank" rel="noopener noreferrer" class="search-link">Plan 9</a>
+ <a href="http://9front.org/" target="_blank" rel="noopener noreferrer" class="search-link">9front</a>
+ </div>
+ <h2 class="quick-search-title"><a href="https://4get.sillylaird.ca" target="_blank" rel="noopener noreferrer">4get..</a></h2>
+ <h2 class="quick-search-title"><a href="https://www.youtube.com/" target="_blank" rel="noopener noreferrer">Youtube..</a></h2>
+ <h2 class="quick-search-title"><a href="https://kick.com/" target="_blank" rel="noopener noreferrer">Kick..</a></h2>
+ <h2 class="quick-search-title"><a href="https://rumble.com/" target="_blank" rel="noopener noreferrer">Rumble..</a></h2>
+ <h2 id="unified-search-title"><a href="https://4get.sillylaird.ca" target="_blank" rel="noopener noreferrer">4get Search..</a></h2>
+ <form id="unified-search-form" action="https://4get.sillylaird.ca/web" method="get" target="_blank" rel="noopener noreferrer">
+ <div class="unified-search">
+ <div class="search-engine-picker">
+ <button type="button" id="search-engine-toggle" class="search-engine-toggle" title="Click to switch search engine" aria-label="Switch search engine" aria-haspopup="listbox" aria-expanded="false">4G <span class="search-engine-caret">▾</span></button>
+ <ul id="search-engine-menu" class="search-engine-menu" role="listbox" hidden></ul>
+ </div>
+ <input type="search" id="unified-search-input" name="s" class="search-box unified-search-input" placeholder="Search 4get..." autocomplete="off" />
+ <div class="search-engine-spacer">
+ <button type="button" id="unified-search-clear" class="search-clear" aria-label="Clear search" title="Clear search" hidden><svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="#ff5555" stroke-width="3" stroke-linecap="round" aria-hidden="true"><line x1="6" y1="6" x2="18" y2="18"/><line x1="18" y1="6" x2="6" y2="18"/></svg></button>
+ </div>
+ </div>
+ </form>
+ <div class="card-filter-wrap">
+ <input type="search" id="card-filter" class="search-box card-filter" placeholder="Filter cards & links (type to search)..." autocomplete="off" />
+ <span id="card-filter-count" class="filter-count" aria-live="polite"></span>
+ </div>
+
+ <div class="clock-container">
+ <div id="realtime-date"></div>
+ <div id="realtime-clock" class="clock-time"></div>
+ </div>
+ </section>
+
+ <section class="grid" id="cards-grid">
+ <?php include __DIR__ . "/render_cards.php"; ?>
+ </section>
+ </main>
+
+ <?php
+ // Shared site footer (colophon, counter, badges). Comfort spacing lives in the header.
+ include __DIR__ . '/../partials/footer.php';
+ ?>
+
+</body>
+
+</html>