diff options
| author | sillylaird <sillyfanboy@gmail.com> | 2026-09-03 00:33:59 +0000 |
|---|---|---|
| committer | sillylaird <sillyfanboy@gmail.com> | 2026-09-03 00:33:59 +0000 |
| commit | 898b52edcb47bcb3e9d6106e74ca73e74ea01e70 (patch) | |
| tree | 85c6ee5ad58b860144551184d4cf86b560c62b91 /startpage/index.php | |
| download | www-main.tar.gz www-main.zip | |
Diffstat (limited to '')
| -rw-r--r-- | startpage/index.php | 454 |
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> |
