Showing source for: https://www.kongregate.com/en/accounts/katherinetaylor8
Duration: 0.271257s
Server: nginx
<!DOCTYPE html>
<html lang="en" class="scroll-smooth dark">
<head>
<title>katherinetaylor8's profile on Kongregate</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Kongregate is a portal for free online games that features user-created content, chat, badges, and player achievements.">
<link rel="canonical" href="https://www.kongregate.com/en/accounts/katherinetaylor8">
<!-- Hreflang links for multilingual SEO -->
<link rel="alternate" hreflang="en" href="https://www.kongregate.com/en/accounts/katherinetaylor8" />
<link rel="alternate" hreflang="es" href="https://www.kongregate.com/es/accounts/katherinetaylor8" />
<link rel="alternate" hreflang="de" href="https://www.kongregate.com/de/accounts/katherinetaylor8" />
<link rel="alternate" hreflang="fr" href="https://www.kongregate.com/fr/accounts/katherinetaylor8" />
<link rel="alternate" hreflang="id" href="https://www.kongregate.com/id/accounts/katherinetaylor8" />
<link rel="alternate" hreflang="it" href="https://www.kongregate.com/it/accounts/katherinetaylor8" />
<link rel="alternate" hreflang="ja" href="https://www.kongregate.com/ja/accounts/katherinetaylor8" />
<link rel="alternate" hreflang="ko" href="https://www.kongregate.com/ko/accounts/katherinetaylor8" />
<link rel="alternate" hreflang="tl" href="https://www.kongregate.com/tl/accounts/katherinetaylor8" />
<link rel="alternate" hreflang="ms" href="https://www.kongregate.com/ms/accounts/katherinetaylor8" />
<link rel="alternate" hreflang="pl" href="https://www.kongregate.com/pl/accounts/katherinetaylor8" />
<link rel="alternate" hreflang="pt" href="https://www.kongregate.com/pt/accounts/katherinetaylor8" />
<link rel="alternate" hreflang="th" href="https://www.kongregate.com/th/accounts/katherinetaylor8" />
<link rel="alternate" hreflang="tr" href="https://www.kongregate.com/tr/accounts/katherinetaylor8" />
<link rel="alternate" hreflang="zh-cn" href="https://www.kongregate.com/zh-cn/accounts/katherinetaylor8" />
<link rel="alternate" hreflang="zh-tw" href="https://www.kongregate.com/zh-tw/accounts/katherinetaylor8" />
<link rel="alternate" hreflang="zh-hk" href="https://www.kongregate.com/zh-hk/accounts/katherinetaylor8" />
<link rel="alternate" hreflang="x-default" href="https://www.kongregate.com/en/accounts/katherinetaylor8" />
<!-- Favicon and PWA -->
<link rel="icon" href="/favicon.ico" sizes="32x32">
<link rel="icon" href="/icon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<link rel="manifest" href="/site.webmanifest">
<meta name="theme-color" content="#1a1625">
<!-- Capture PWA install prompt early, before Stimulus loads -->
<script>
window.deferredPwaPrompt = null;
window.addEventListener('beforeinstallprompt', function(e) {
e.preventDefault();
window.deferredPwaPrompt = e;
});
</script>
<link rel="preconnect" href="https://www.google.com" crossorigin>
<link rel="preconnect" href="https://www.gstatic.com" crossorigin>
<link rel="preconnect" href="https://cdn4.kongcdn.com" crossorigin>
<meta name="csrf-param" content="authenticity_token" />
<meta name="csrf-token" content="j0-qcWOdHuyKe6e1rCUI97HE1xyIlZ4Zx-Qni5oDa1rRX1EuC_kOxlb-VZ1GdOx5b0jhJVubMF9z4XuTBfYiRg" />
<meta name="user-authenticated" content="false">
<meta name="user-id" content="">
<meta name="svid" content="">
<!-- Google Tag Manager -->
<script>
// Initialize dataLayer with ui_version and user login status before GTM loads
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'ui_version': 'preview_ui',
'is_signed_in': false,
'likely_bot': true
});
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl+ '>m_auth=PTv0C-TWRC_LC4qezSAJBw>m_preview=env-1>m_cookies_win=x';f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-589V58Z');
</script>
<!-- End Google Tag Manager -->
<link rel="stylesheet" href="https://drxfab1qw1oer.cloudfront.net/compiled-assets/application.tailwind-51c2b678227be1f2567d145dde1986dc74c7c1222a6272d270c184f06779c15b.css" data-turbo-track="reload" />
<script src="https://drxfab1qw1oer.cloudfront.net/compiled-assets/application-213cec649d1a91269ada173e218e028305c68d0d3866a3b447a4729b22c2030f.js" data-turbo-track="reload"></script>
<link rel="stylesheet" href="https://drxfab1qw1oer.cloudfront.net/compiled-assets/preview-d2527a6c8eed311717841bb46eb39f4820a8dabe29699f5fd687dd360e8c35e5.css" data-turbo-track="reload" />
<script>
// Apply saved theme before render to prevent flash of wrong theme
(function() {
var theme = localStorage.getItem('kong_theme');
if (theme === 'light') {
document.documentElement.classList.remove('dark');
document.documentElement.classList.add('light');
}
})();
</script>
<script src="https://securepubads.g.doubleclick.net/tag/js/gpt.js" crossorigin="anonymous" async="async"></script>
<script src="https://analytics.ahrefs.com/analytics.js" data-key="b2q7SvwYy/tzbmkr3tb0zQ" async></script>
</head>
<body class="flex flex-col min-h-screen dark preview-layout"
style="background-color: hsl(var(--background)); color: hsl(var(--foreground));"
data-controller="metric-tracker active-user"
data-metric-tracker-analytics-code-value="GTM-589V58Z"
data-metric-tracker-max-event-time-value="60000"
data-active-user-domain-value="kongregate.com"
data-active-user-single-cdn-domain-value="cdn1.kongcdn.com"
data-active-user-trusted-domain-value="internal.kongregate.com"
data-active-user-game-page-value="false"
data-active-user-user-data-value="{"username":"Guest","id":0,"chat_username":"Guest_233827db559d391ba7cdc9fb1184f62c","chat_password":"995062f817492dce9bf57cb06e0a4c95","mobile_user_agent":false,"generated_at":1792313799000,"version":1,"country_code":null,"in_eu_consent_country":false,"age_of_consent":13,"gameplays_count":0,"ratings_count":0,"level":null,"last_levelup_at":null,"first_visit_date":null,"kong_source":null,"split_treatments":{"feature_roll":{}},"kred_buyer_type":"non-buyer","current_locale":"en","current_locale_is_default":true,"current_preffered_locale":"en","underage":null,"hide_rate_this_game_tab":false,"botd_badge_id":3326,"botd_name":"Light Creator","botd_description":"Create 500 Light","botd_icon_uri":"/badge_icons/0000/6651/Ale.png","botd_game_uri":"http://www.kongregate.com/en/games/Ryu82/idling-to-become-god","botd_game_name":"Idling to Rule the Gods","botd_reward_points":5,"user_agent":{"browser":"Safari","version":"","platform":"KHTML, like Gecko"}}">
<!-- -->
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-589V58Z>m_auth=PTv0C-TWRC_LC4qezSAJBw>m_preview=env-1>m_cookies_win=x"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
<!-- -->
<!-- Admin Links - Only visible to admins/moderators -->
<!-- Header - Exact match with React app -->
<!-- Header component based on Figma design with responsive layout for desktop, tablet, and mobile -->
<header
class="fixed top-0 left-0 right-0 z-50 transition-all duration-300 text-white h-[52px]
bg-[linear-gradient(to_right,#F04438_0%,#F04438_52px,#6f3d67_120px)]
lg:bg-[linear-gradient(to_right,#F04438_0%,#F04438_152px,#6f3d67_320px)]"
data-controller="previews--navbar"
>
<div class="w-full flex items-center justify-between h-full pr-2">
<div class="flex-1 flex items-center justify-between">
<!-- Logo section with SVG images -->
<a href="/" class="flex-shrink-0 my-auto" aria-label="Kongregate Home">
<div class="hidden lg:block pl-2">
<!-- Full Kongregate logo for desktop/tablet -->
<img src="https://drxfab1qw1oer.cloudfront.net/compiled-assets/logos/kongregate-logo-36fb64eb85f7b359a067eb8e1d989b10633a2e322d8b052c1cde7c4a01745754.svg" fetchpriority="high" alt="Kongregate" class="h-4 md:h-5 w-auto">
</div>
<!-- K icon logo for mobile -->
<svg xmlns="http://www.w3.org/2000/svg" class="h-[52px] w-auto block lg:hidden" viewBox="0 0 90 90" alt="Kong Icon" part="base">
<rect width="90" height="90" fill="#F04438"/>
<path d="M21 20H31V40H51V50H31V70H21V20ZM51 50H57.2918C59.5644 50 61.642 51.284 62.6584 53.3167L66 60H71V70H61L51 50ZM51 40L61 20H71V30H66L62.6584 36.6833C61.642 38.716 59.5644 40 57.2918 40H51Z" fill="white"/>
</svg>
</a>
<!-- Desktop Search Bar (centered, hidden on mobile) -->
<div class="hidden sm:flex justify-center flex-grow max-w-md mx-4 relative" data-controller="previews--search-bar">
<form class="flex items-center h-10 w-full bg-[#222222] rounded-full" data-previews--search-bar-target="searchForm" data-action="submit->previews--search-bar#handleSubmit" data-turbo-frame="_top" action="/search" accept-charset="UTF-8" method="get">
<!-- Search Input -->
<input placeholder="Search games..." class="flex-1 px-4 py-2 bg-[#262626] !text-white placeholder-gray-400 focus:outline-none transition-colors duration-200 rounded-l-full" data-previews--search-bar-target="searchInput" data-action="input->previews--search-bar#handleInput keydown->previews--search-bar#handleKeydown" autocomplete="off" type="text" name="q" id="q" />
<!-- Search Submit Button -->
<button type="submit"
class="px-3 py-2 bg-[#262626] !text-white hover:text-gray-100 transition-colors duration-200 rounded-r-full"
aria-label="Submit search">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z" />
</svg>
</button>
</form>
<!-- Autocomplete Results Dropdown -->
<div data-previews--search-bar-target="results"
class="hidden absolute top-full left-0 right-0 mt-1 bg-gray-800 rounded-lg shadow-xl border border-gray-700 max-h-80 overflow-y-auto z-50"
style="scrollbar-width: thin; scrollbar-color: #4b5563 #1f2937;">
</div>
</div>
<div class="flex items-center gap-2">
<!-- PWA Install Button (Android/Chrome - hidden until beforeinstallprompt fires) -->
<div data-controller="previews--pwa-install" data-previews--pwa-install-enabled-value="true">
<div class="sm:hidden">
<div data-previews--pwa-install-target="container" class="hidden">
<button
data-previews--pwa-install-target="button"
data-action="click->previews--pwa-install#install"
class="flex items-center gap-1 px-2 py-1 bg-white/20 hover:bg-white/30 rounded-full text-xs font-medium transition-colors"
aria-label="Install App"
>
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4" />
</svg>
<span>Install</span>
</button>
</div>
</div>
<!-- iOS Safari Install Banner (shown for iOS Safari users) -->
<div data-previews--pwa-install-target="iosContainer" class="hidden fixed top-[52px] left-0 right-0 z-40 sm:hidden">
<div class="bg-gradient-to-r from-purple-900 to-purple-800 px-4 py-3 shadow-lg">
<div class="flex items-start gap-3">
<div class="flex-shrink-0 mt-0.5">
<svg class="w-6 h-6 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4" />
</svg>
</div>
<div class="flex-1 min-w-0">
<p class="text-sm font-medium text-white">
Install Kongregate
</p>
<p class="text-xs text-purple-200 mt-1">
Tap the Share button
<svg class="inline-block w-4 h-4 mx-1 align-text-bottom" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.684 13.342C8.886 12.938 9 12.482 9 12c0-.482-.114-.938-.316-1.342m0 2.684a3 3 0 110-2.684m0 2.684l6.632 3.316m-6.632-6l6.632-3.316m0 0a3 3 0 105.367-2.684 3 3 0 00-5.367 2.684zm0 9.316a3 3 0 105.368 2.684 3 3 0 00-5.368-2.684z" />
</svg>
then "Add to Home Screen"
</p>
</div>
<button
data-action="click->previews--pwa-install#dismissIosBanner"
class="flex-shrink-0 p-1 text-purple-300 hover:text-white transition-colors"
aria-label="Dismiss"
>
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
</svg>
</button>
</div>
</div>
</div>
</div>
<!-- Theme Toggle -->
<div data-controller="previews--theme-toggle" class="flex items-center">
<button data-action="click->previews--theme-toggle#toggle"
class="p-1.5 rounded-full hover:bg-white/10 transition-colors duration-200"
aria-label="Toggle light/dark mode">
<svg data-previews--theme-toggle-target="icon" class="w-5 h-5 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 3v2.25m6.364.386l-1.591 1.591M21 12h-2.25m-.386 6.364l-1.591-1.591M12 18.75V21m-4.773-4.227l-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0z" />
</svg>
</button>
</div>
<!-- Auth State using Turbo Frame for dynamic updates -->
<turbo-frame id="header_auth_state">
<!-- Not Logged In State -->
<div class="flex items-center gap-4">
<!-- Mobile-only Search Icon -->
<button type="button"
class="sm:hidden relative px-2 py-1.5 rounded-full cursor-pointer transition-all duration-200
hover:scale-[1.03] active:scale-[0.98]"
onclick="
// Show mobile modal
const modal = document.getElementById('mobile-search-modal');
const input = modal.querySelector('input');
modal.classList.remove('hidden');
document.body.style.overflow = 'hidden';
// Multiple focus attempts for better mobile compatibility
setTimeout(() => {
input.focus();
if (document.activeElement !== input) {
input.focus({ preventScroll: false });
}
}, 50);
setTimeout(() => {
if (document.activeElement !== input) {
input.focus();
}
}, 200);
"
aria-label="Search">
<svg class="w-6 h-6 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z" />
</svg>
</button>
<!-- Sign In Button -->
<button
class="text-white px-6 py-2 text-md leading-5 font-medium flex items-center cursor-pointer
bg-transparent border-2 border-white rounded-full
transition-all duration-200
hover:bg-white hover:text-[#F04438] hover:scale-[1.03] active:scale-[0.98]"
data-action="click->previews--navbar#login"
data-controller="previews--login-button"
data-previews--login-button-origin-value="navbar"
id="login-button"
>
<span>Sign In</span>
</button>
<div class="ml-3">
<!-- Language selector dropdown -->
<div class="relative " data-controller="previews--dropdown" id="language-dropdown-guest">
<div class="flex items-center rounded-full cursor-pointer transition-all duration-200
hover:scale-[1.03] active:scale-[0.98]"
data-action="click->previews--dropdown#toggle"
id="language-dropdown-guest-button"
title="Select Language">
<span class="text-2xl leading-none">
๐บ๐ธ
</span>
</div>
<!-- Language dropdown menu -->
<div class="hidden absolute top-full right-0 mt-1 w-48 rounded-md shadow-lg py-1 z-20"
style="background-color: hsl(var(--secondary)); color: hsl(var(--secondary-foreground));"
data-previews--dropdown-target="menu"
id="language-dropdown-guest-menu">
<a href="/en/accounts/katherinetaylor8?set_locale=true&username=katherinetaylor8"
class="w-full text-left px-4 py-2 text-sm flex items-center gap-2 block transition-colors duration-200
font-semibold"
style="background-color: hsl(var(--secondary-foreground) / 0.1); color: hsl(var(--primary-foreground)) !important;"
onmouseover="this.style.backgroundColor = 'hsl(var(--secondary-foreground) / 0.1)'; this.style.color = 'hsl(var(--primary-foreground)) !important';"
onmouseout="this.style.backgroundColor = 'hsl(var(--secondary-foreground) / 0.1)'; this.style.color = 'hsl(var(--primary-foreground)) !important;';"
data-action="click->previews--dropdown#hide"
onclick="window.location.href = this.href; return false;">
<span class="text-lg leading-none">๐บ๐ธ</span>
<span>English</span>
</a>
<a href="/es/accounts/katherinetaylor8?set_locale=true&username=katherinetaylor8"
class="w-full text-left px-4 py-2 text-sm flex items-center gap-2 block transition-colors duration-200
"
style="color: hsl(var(--secondary-foreground)) !important;"
onmouseover="this.style.backgroundColor = 'hsl(var(--secondary-foreground) / 0.1)'; this.style.color = 'hsl(var(--primary-foreground)) !important';"
onmouseout="this.style.backgroundColor = 'transparent'; this.style.color = 'hsl(var(--secondary-foreground)) !important';"
data-action="click->previews--dropdown#hide"
onclick="window.location.href = this.href; return false;">
<span class="text-lg leading-none">๐ช๐ธ</span>
<span>Spanish</span>
</a>
<a href="/de/accounts/katherinetaylor8?set_locale=true&username=katherinetaylor8"
class="w-full text-left px-4 py-2 text-sm flex items-center gap-2 block transition-colors duration-200
"
style="color: hsl(var(--secondary-foreground)) !important;"
onmouseover="this.style.backgroundColor = 'hsl(var(--secondary-foreground) / 0.1)'; this.style.color = 'hsl(var(--primary-foreground)) !important';"
onmouseout="this.style.backgroundColor = 'transparent'; this.style.color = 'hsl(var(--secondary-foreground)) !important';"
data-action="click->previews--dropdown#hide"
onclick="window.location.href = this.href; return false;">
<span class="text-lg leading-none">๐ฉ๐ช</span>
<span>German</span>
</a>
<a href="/fr/accounts/katherinetaylor8?set_locale=true&username=katherinetaylor8"
class="w-full text-left px-4 py-2 text-sm flex items-center gap-2 block transition-colors duration-200
"
style="color: hsl(var(--secondary-foreground)) !important;"
onmouseover="this.style.backgroundColor = 'hsl(var(--secondary-foreground) / 0.1)'; this.style.color = 'hsl(var(--primary-foreground)) !important';"
onmouseout="this.style.backgroundColor = 'transparent'; this.style.color = 'hsl(var(--secondary-foreground)) !important';"
data-action="click->previews--dropdown#hide"
onclick="window.location.href = this.href; return false;">
<span class="text-lg leading-none">๐ซ๐ท</span>
<span>French</span>
</a>
<a href="/id/accounts/katherinetaylor8?set_locale=true&username=katherinetaylor8"
class="w-full text-left px-4 py-2 text-sm flex items-center gap-2 block transition-colors duration-200
"
style="color: hsl(var(--secondary-foreground)) !important;"
onmouseover="this.style.backgroundColor = 'hsl(var(--secondary-foreground) / 0.1)'; this.style.color = 'hsl(var(--primary-foreground)) !important';"
onmouseout="this.style.backgroundColor = 'transparent'; this.style.color = 'hsl(var(--secondary-foreground)) !important';"
data-action="click->previews--dropdown#hide"
onclick="window.location.href = this.href; return false;">
<span class="text-lg leading-none">๐ฎ๐ฉ</span>
<span>Indonesian</span>
</a>
<a href="/it/accounts/katherinetaylor8?set_locale=true&username=katherinetaylor8"
class="w-full text-left px-4 py-2 text-sm flex items-center gap-2 block transition-colors duration-200
"
style="color: hsl(var(--secondary-foreground)) !important;"
onmouseover="this.style.backgroundColor = 'hsl(var(--secondary-foreground) / 0.1)'; this.style.color = 'hsl(var(--primary-foreground)) !important';"
onmouseout="this.style.backgroundColor = 'transparent'; this.style.color = 'hsl(var(--secondary-foreground)) !important';"
data-action="click->previews--dropdown#hide"
onclick="window.location.href = this.href; return false;">
<span class="text-lg leading-none">๐ฎ๐น</span>
<span>Italian</span>
</a>
<a href="/ja/accounts/katherinetaylor8?set_locale=true&username=katherinetaylor8"
class="w-full text-left px-4 py-2 text-sm flex items-center gap-2 block transition-colors duration-200
"
style="color: hsl(var(--secondary-foreground)) !important;"
onmouseover="this.style.backgroundColor = 'hsl(var(--secondary-foreground) / 0.1)'; this.style.color = 'hsl(var(--primary-foreground)) !important';"
onmouseout="this.style.backgroundColor = 'transparent'; this.style.color = 'hsl(var(--secondary-foreground)) !important';"
data-action="click->previews--dropdown#hide"
onclick="window.location.href = this.href; return false;">
<span class="text-lg leading-none">๐ฏ๐ต</span>
<span>Japanese</span>
</a>
<a href="/tl/accounts/katherinetaylor8?set_locale=true&username=katherinetaylor8"
class="w-full text-left px-4 py-2 text-sm flex items-center gap-2 block transition-colors duration-200
"
style="color: hsl(var(--secondary-foreground)) !important;"
onmouseover="this.style.backgroundColor = 'hsl(var(--secondary-foreground) / 0.1)'; this.style.color = 'hsl(var(--primary-foreground)) !important';"
onmouseout="this.style.backgroundColor = 'transparent'; this.style.color = 'hsl(var(--secondary-foreground)) !important';"
data-action="click->previews--dropdown#hide"
onclick="window.location.href = this.href; return false;">
<span class="text-lg leading-none">๐ต๐ญ</span>
<span>Filipino</span>
</a>
<a href="/ms/accounts/katherinetaylor8?set_locale=true&username=katherinetaylor8"
class="w-full text-left px-4 py-2 text-sm flex items-center gap-2 block transition-colors duration-200
"
style="color: hsl(var(--secondary-foreground)) !important;"
onmouseover="this.style.backgroundColor = 'hsl(var(--secondary-foreground) / 0.1)'; this.style.color = 'hsl(var(--primary-foreground)) !important';"
onmouseout="this.style.backgroundColor = 'transparent'; this.style.color = 'hsl(var(--secondary-foreground)) !important';"
data-action="click->previews--dropdown#hide"
onclick="window.location.href = this.href; return false;">
<span class="text-lg leading-none">๐ฒ๐พ</span>
<span>Malay</span>
</a>
<a href="/pl/accounts/katherinetaylor8?set_locale=true&username=katherinetaylor8"
class="w-full text-left px-4 py-2 text-sm flex items-center gap-2 block transition-colors duration-200
"
style="color: hsl(var(--secondary-foreground)) !important;"
onmouseover="this.style.backgroundColor = 'hsl(var(--secondary-foreground) / 0.1)'; this.style.color = 'hsl(var(--primary-foreground)) !important';"
onmouseout="this.style.backgroundColor = 'transparent'; this.style.color = 'hsl(var(--secondary-foreground)) !important';"
data-action="click->previews--dropdown#hide"
onclick="window.location.href = this.href; return false;">
<span class="text-lg leading-none">๐ต๐ฑ</span>
<span>Polish</span>
</a>
<a href="/pt/accounts/katherinetaylor8?set_locale=true&username=katherinetaylor8"
class="w-full text-left px-4 py-2 text-sm flex items-center gap-2 block transition-colors duration-200
"
style="color: hsl(var(--secondary-foreground)) !important;"
onmouseover="this.style.backgroundColor = 'hsl(var(--secondary-foreground) / 0.1)'; this.style.color = 'hsl(var(--primary-foreground)) !important';"
onmouseout="this.style.backgroundColor = 'transparent'; this.style.color = 'hsl(var(--secondary-foreground)) !important';"
data-action="click->previews--dropdown#hide"
onclick="window.location.href = this.href; return false;">
<span class="text-lg leading-none">๐ต๐น</span>
<span>Portuguese</span>
</a>
<a href="/th/accounts/katherinetaylor8?set_locale=true&username=katherinetaylor8"
class="w-full text-left px-4 py-2 text-sm flex items-center gap-2 block transition-colors duration-200
"
style="color: hsl(var(--secondary-foreground)) !important;"
onmouseover="this.style.backgroundColor = 'hsl(var(--secondary-foreground) / 0.1)'; this.style.color = 'hsl(var(--primary-foreground)) !important';"
onmouseout="this.style.backgroundColor = 'transparent'; this.style.color = 'hsl(var(--secondary-foreground)) !important';"
data-action="click->previews--dropdown#hide"
onclick="window.location.href = this.href; return false;">
<span class="text-lg leading-none">๐น๐ญ</span>
<span>Thai</span>
</a>
<a href="/tr/accounts/katherinetaylor8?set_locale=true&username=katherinetaylor8"
class="w-full text-left px-4 py-2 text-sm flex items-center gap-2 block transition-colors duration-200
"
style="color: hsl(var(--secondary-foreground)) !important;"
onmouseover="this.style.backgroundColor = 'hsl(var(--secondary-foreground) / 0.1)'; this.style.color = 'hsl(var(--primary-foreground)) !important';"
onmouseout="this.style.backgroundColor = 'transparent'; this.style.color = 'hsl(var(--secondary-foreground)) !important';"
data-action="click->previews--dropdown#hide"
onclick="window.location.href = this.href; return false;">
<span class="text-lg leading-none">๐น๐ท</span>
<span>Turkish</span>
</a>
<a href="/ko/accounts/katherinetaylor8?set_locale=true&username=katherinetaylor8"
class="w-full text-left px-4 py-2 text-sm flex items-center gap-2 block transition-colors duration-200
"
style="color: hsl(var(--secondary-foreground)) !important;"
onmouseover="this.style.backgroundColor = 'hsl(var(--secondary-foreground) / 0.1)'; this.style.color = 'hsl(var(--primary-foreground)) !important';"
onmouseout="this.style.backgroundColor = 'transparent'; this.style.color = 'hsl(var(--secondary-foreground)) !important';"
data-action="click->previews--dropdown#hide"
onclick="window.location.href = this.href; return false;">
<span class="text-lg leading-none">๐ฐ๐ท</span>
<span>Korean</span>
</a>
<a href="/zh-cn/accounts/katherinetaylor8?set_locale=true&username=katherinetaylor8"
class="w-full text-left px-4 py-2 text-sm flex items-center gap-2 block transition-colors duration-200
"
style="color: hsl(var(--secondary-foreground)) !important;"
onmouseover="this.style.backgroundColor = 'hsl(var(--secondary-foreground) / 0.1)'; this.style.color = 'hsl(var(--primary-foreground)) !important';"
onmouseout="this.style.backgroundColor = 'transparent'; this.style.color = 'hsl(var(--secondary-foreground)) !important';"
data-action="click->previews--dropdown#hide"
onclick="window.location.href = this.href; return false;">
<span class="text-lg leading-none">๐จ๐ณ</span>
<span>Chinese (Simplified)</span>
</a>
<a href="/zh-tw/accounts/katherinetaylor8?set_locale=true&username=katherinetaylor8"
class="w-full text-left px-4 py-2 text-sm flex items-center gap-2 block transition-colors duration-200
"
style="color: hsl(var(--secondary-foreground)) !important;"
onmouseover="this.style.backgroundColor = 'hsl(var(--secondary-foreground) / 0.1)'; this.style.color = 'hsl(var(--primary-foreground)) !important';"
onmouseout="this.style.backgroundColor = 'transparent'; this.style.color = 'hsl(var(--secondary-foreground)) !important';"
data-action="click->previews--dropdown#hide"
onclick="window.location.href = this.href; return false;">
<span class="text-lg leading-none">๐น๐ผ</span>
<span>Chinese (Traditional)</span>
</a>
<a href="/zh-hk/accounts/katherinetaylor8?set_locale=true&username=katherinetaylor8"
class="w-full text-left px-4 py-2 text-sm flex items-center gap-2 block transition-colors duration-200
"
style="color: hsl(var(--secondary-foreground)) !important;"
onmouseover="this.style.backgroundColor = 'hsl(var(--secondary-foreground) / 0.1)'; this.style.color = 'hsl(var(--primary-foreground)) !important';"
onmouseout="this.style.backgroundColor = 'transparent'; this.style.color = 'hsl(var(--secondary-foreground)) !important';"
data-action="click->previews--dropdown#hide"
onclick="window.location.href = this.href; return false;">
<span class="text-lg leading-none">๐ญ๐ฐ</span>
<span>Chinese (Hong Kong)</span>
</a>
</div>
</div>
</div>
</div>
<!-- Mobile Search Modal (Full Screen) -->
<div id="mobile-search-modal" class="hidden fixed inset-0 z-50 bg-black bg-opacity-90 backdrop-blur-sm">
<div class="flex flex-col h-full" data-controller="previews--search-bar">
<!-- Header with close button -->
<div class="flex items-center justify-between p-4 border-b border-gray-700">
<h2 class="text-lg font-medium text-white">
Search Games
</h2>
<button type="button"
class="p-2 text-gray-300 hover:text-white transition-colors duration-200 rounded-full hover:bg-gray-800"
onclick="
const modal = document.getElementById('mobile-search-modal');
modal.classList.add('hidden');
document.body.style.overflow = '';
">
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
</svg>
</button>
</div>
<!-- Search Form -->
<div class="p-4">
<form class="w-full" data-previews--search-bar-target="searchForm" data-turbo-frame="_top" action="/search" accept-charset="UTF-8" method="get">
<div class="relative">
<input placeholder="Search games..." class="w-full px-6 py-4 text-lg bg-gray-800 text-white placeholder-gray-400 rounded-full border border-gray-600 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all duration-200" autocomplete="off" data-previews--search-bar-target="searchInput" onkeydown="
if (event.key === 'Escape') {
const modal = document.getElementById('mobile-search-modal');
modal.classList.add('hidden');
document.body.style.overflow = '';
}
" type="text" name="q" id="q" />
<!-- Search Button -->
<button type="submit"
class="absolute right-2 top-1/2 -translate-y-1/2 p-3 bg-blue-600 hover:bg-blue-700 text-white rounded-full transition-colors duration-200">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z" />
</svg>
</button>
</div>
</form> </div>
<!-- Autocomplete Results (inline, not dropdown) -->
<div data-previews--search-bar-target="results"
class="hidden flex-1 overflow-y-auto px-4"
style="scrollbar-width: thin; scrollbar-color: #4b5563 #1f2937;">
</div>
<!-- Search hint (shown when no results) -->
<div id="mobile-search-hint" class="flex-1 flex items-start justify-center pt-8 text-gray-400">
<p class="text-sm">
Search for your favorite games...
</p>
</div>
<!-- Bottom padding for safe area -->
<div class="h-8"></div>
</div>
</div>
</turbo-frame>
</div>
</div>
</div>
</header>
<!-- Spacer to prevent content from being hidden under the fixed header -->
<div class="h-[52px]"></div>
<!-- Flash Messages -->
<!-- Main Content - Full width to allow pages to control their own max-width -->
<!-- Add left padding to account for sidebar: 64px on lg (collapsed), 192px on 1920px+ (full width) -->
<main class="flex-1 w-full pt-4 pb-2" style="min-height: calc(100vh - 16rem);">
<div class="animate-fade-in">
<!-- Page Content Wrapper -->
<div class="w-full lg:max-w-5xl lg:mx-auto overflow-x-hidden account-page-content">
<!--============ #feature ============-->
<div id="feature">
<!-- To be restored some day, if desired. Currently not functional due to sweeping UI updates.
-->
<!-- avatar change error reporting -->
<div id="main" class="line">
<!-- Profile Header Start -->
<div id="profile_masthead" class="bg-gray-800 rounded-xl border border-gray-700 p-6 mb-6 overflow-visible">
<div class="flex flex-col lg:flex-row gap-6">
<!-- User's Avatar -->
<div class="flex-shrink-0 w-full lg:w-auto">
<!-- errors are reported above masthead -->
<div id="user_avatar" class="large_avatar relative" style="max-width: 300px;">
<img class="user_avatar avatar_hideable_element w-32 h-32 rounded-lg border-2 border-gray-600" title="katherinetaylor8" alt="avatar for katherinetaylor8" src="https://cdn4.kongcdn.com/assets/avatars/defaults/ant.png?i10c=img.resize(width:140)" />
</div>
<script>
//<![CDATA[
document.addEventListener('DOMContentLoaded', function() {
var avatarContainer = document.getElementById('user_avatar');
if (avatarContainer) {
var avatarImage = avatarContainer.querySelector('img');
if (avatarImage) {
avatarImage.addEventListener('load', function() {
var imageSize = avatarImage.getBoundingClientRect();
if (imageSize) {
var width = imageSize.width,
height = imageSize.height;
if (width < 140 && height < 140) {
avatarImage.classList.add('small_avatar');
} else if (width > height) {
avatarImage.style.width = '140px';
avatarImage.style.marginRight = 'auto';
avatarImage.style.marginLeft = 'auto';
} else {
avatarImage.style.height = '140px';
avatarImage.style.marginRight = 'auto';
avatarImage.style.marginLeft = 'auto';
}
}
});
}
}
});
//]]>
</script>
</div>
<!-- Profile Content -->
<div class="flex-1 min-w-0 w-full lg:w-auto">
<!-- Profile Heading -->
<div class="flex flex-col lg:flex-row gap-6">
<!-- Main Profile Info -->
<div class="flex-1 w-full">
<div id="profile_heading">
<div id="profile_hgroup" class="mb-4">
<div class="flex items-center gap-3 mb-2">
<h1 class="text-2xl font-bold text-white break-words"><span class="spritesite levelbug level_1"><span class="">katherinetaylor8</span></span></h1>
<a href="#" onclick="lightbox.prototype.initializePremiumMembershipPurchase('username_icon', 'icon_tab'); return false;"><span id="premium_icon"></span></a>
</div>
<div class="bg-gray-900 rounded-lg p-4">
<div class="flex justify-start text-sm mb-2">
<span class="text-gray-400">Points needed for next level:</span>
<span class="text-white font-semibold pl-1">20</span>
</div>
<div class="flex items-center gap-3">
<div class="flex-1 bg-gray-700 rounded-full h-2">
<div class="bg-blue-500 rounded-full h-2 transition-all duration-300"
style="width:60.0%;"></div>
</div>
<div class="flex items-center gap-1 text-sm text-gray-300">
<span>Level 2</span>
</div>
</div>
</div>
<!-- Profile Actions -->
<div id="profile_account_actions" class="border-t border-gray-700 pt-4 mt-4">
<div class="flex flex-wrap gap-3">
<script>
// Friend toggle with manual AJAX submission
document.addEventListener('DOMContentLoaded', function() {
document.addEventListener('click', function(event) {
if (event.target.matches('.friend-toggle-form button[type="submit"]')) {
event.preventDefault();
const form = event.target.closest('form');
const button = event.target;
button.innerHTML = 'Loading...';
button.disabled = true;
const formData = new FormData(form);
fetch(form.action, {
method: 'POST',
body: formData,
headers: {
'X-Requested-With': 'XMLHttpRequest'
}
})
.then(response => {
if (response.ok || response.status === 204) {
window.location.reload();
} else {
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
}
})
.catch(error => {
button.disabled = false;
button.innerHTML = button.innerHTML.includes('Unfriend') ? 'Unfriend' : 'Friend';
alert('There was an error processing your request. Please try again.');
});
}
});
});
</script>
<div id="toggle_users-47575612_as_friend_1">
<form style="display: inline;" class="friend-toggle-form" action="/en/accounts/Guest/friends/katherinetaylor8?friend_from=new_profile&masthead=true" accept-charset="UTF-8" data-remote="true" method="post"><input type="hidden" name="_method" value="put" autocomplete="off" /><input type="hidden" name="authenticity_token" value="j0-qcWOdHuyKe6e1rCUI97HE1xyIlZ4Zx-Qni5oDa1rRX1EuC_kOxlb-VZ1GdOx5b0jhJVubMF9z4XuTBfYiRg" />
<button name="button" type="submit" class="inline-flex items-center gap-2 bg-green-600 hover:bg-green-700 text-white px-4 py-2 rounded-lg text-sm font-medium transition-colors duration-200" style="color: white !important; border: none; cursor: pointer;">Friend</button>
</form></div>
<div>
<a class="inline-flex items-center gap-2 bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg text-sm font-medium transition-colors duration-200" style="color: white !important;" title="Send katherinetaylor8 a private message" href="#" onclick="active_user.activateInlineLogin({}, true); return false;">Private Message</a>
</div>
</div>
<!-- Container for abuse report/mod thanks forms (populated via AJAX) -->
<div id="new_abuse_report" class="mt-4"></div>
<style>
/* Style the injected abuse report form to match dark theme */
#new_abuse_report .cntrBasic,
#new_abuse_report #abuse_form_internal {
background-color: rgb(31 41 55); /* bg-gray-800 */
border-radius: 0.5rem;
padding: 1rem;
}
#new_abuse_report label {
color: rgb(209 213 219); /* text-gray-300 */
font-size: 0.875rem;
display: block;
margin-bottom: 0.5rem;
}
#new_abuse_report textarea {
width: 100%;
background-color: rgb(17 24 39); /* bg-gray-900 */
border: 1px solid rgb(75 85 99); /* border-gray-600 */
border-radius: 0.5rem;
padding: 0.75rem;
color: white;
font-size: 0.875rem;
min-height: 100px;
}
#new_abuse_report textarea:focus {
outline: none;
border-color: rgb(59 130 246); /* border-blue-500 */
box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.3);
}
#new_abuse_report input[type="submit"] {
background-color: rgb(37 99 235); /* bg-blue-600 */
color: white;
padding: 0.5rem 1rem;
border-radius: 0.5rem;
font-size: 0.875rem;
font-weight: 500;
border: none;
cursor: pointer;
margin-right: 0.5rem;
}
#new_abuse_report input[type="submit"]:hover {
background-color: rgb(29 78 216); /* bg-blue-700 */
}
#new_abuse_report a {
color: rgb(96 165 250); /* text-blue-400 */
font-size: 0.875rem;
}
#new_abuse_report a:hover {
color: rgb(147 197 253); /* text-blue-300 */
}
#new_abuse_report .report_submission {
margin-top: 1rem;
}
#new_abuse_report dl,
#new_abuse_report dd {
margin: 0;
padding: 0;
}
#new_abuse_report .error_block {
color: rgb(248 113 113); /* text-red-400 */
font-size: 0.875rem;
}
</style>
</div>
<!-- User Vitals -->
<div class="mt-6 space-y-2 max-w-sm">
<div class="flex justify-between py-1">
<span class="text-gray-400 text-sm font-medium">Location</span>
<span class="text-white text-sm" title="New York City,NY United States">New York City,NY United States</span>
</div>
<div class="flex justify-between py-1">
<span class="text-gray-400 text-sm font-medium">Member Since</span>
<span class="text-white text-sm" title="">May. 30, 2025</span>
</div>
<div class="flex justify-between py-1">
<span class="text-gray-400 text-sm font-medium">Website</span>
<span class="text-white text-sm" title="https://install-turbo-tax.com/">http://https://install-turbo-tax.com/</span>
</div>
</div>
<!-- User Biography -->
<div class="mt-6 p-4 bg-gray-900 rounded-lg">
<div id="user_about" class="text-gray-300 text-sm leading-relaxed mb-3">
<p>Hi! Iโm Katherine Taylor, a tech enthusiast passionate about simplifying software installations. I specialize in guiding users through digital setups like Installturbotax com, helping them navigate the process with ease. Whether youโre new to taxes or upgrading software, Iโm here to ensure a smooth and stress-free installation experience.</p>
</div>
<div id="profile_bio_links" class="flex gap-4">
</div>
</div>
</div>
</div>
</div>
<!-- Stats Sidebar -->
<div class="w-full max-w-sm mx-auto lg:max-w-none lg:mx-0 lg:w-64 flex-shrink-0">
<!-- Level and Points Stats -->
<div class="bg-gray-900 rounded-lg p-4 mb-4">
<div class="text-center">
<div class="text-3xl font-bold text-blue-500 mb-1">1</div>
<div class="text-xs text-gray-400 uppercase tracking-wide">Level</div>
</div>
</div>
<a class="block bg-gray-900 rounded-lg p-4 mb-4 hover:ring-2 hover:ring-blue-500 transition-all" href="/en/accounts/katherinetaylor8/points">
<div class="text-center">
<div class="text-xl font-bold text-white mb-1">30</div>
<div class="text-xs text-gray-400 uppercase tracking-wide">Points</div>
</div>
</a>
<!-- User Metrics Grid -->
<div class="grid grid-cols-2 gap-3">
<a class="bg-gray-900 rounded-lg p-3 text-center hover:ring-2 hover:ring-blue-500 transition-all" href="/en/accounts/katherinetaylor8/badges">
<div class="text-lg font-bold text-white">0</div>
<div class="text-xs text-gray-400 uppercase tracking-wide">Badges</div>
</a> <a class="bg-gray-900 rounded-lg p-3 text-center hover:ring-2 hover:ring-blue-500 transition-all" href="/en/accounts/katherinetaylor8/comments">
<div class="text-lg font-bold text-white">0</div>
<div class="text-xs text-gray-400 uppercase tracking-wide">Comments</div>
</a> <a class="bg-gray-900 rounded-lg p-3 text-center hover:ring-2 hover:ring-blue-500 transition-all" href="/en/accounts/katherinetaylor8/favorites">
<div class="text-lg font-bold text-white">0</div>
<div class="text-xs text-gray-400 uppercase tracking-wide">Favorites</div>
</a> <a class="bg-gray-900 rounded-lg p-3 text-center hover:ring-2 hover:ring-blue-500 transition-all" href="/en/accounts/katherinetaylor8/fans">
<div class="text-lg font-bold text-white">0</div>
<div class="text-xs text-gray-400 uppercase tracking-wide">Fans</div>
</a> <a class="bg-gray-900 rounded-lg p-3 text-center hover:ring-2 hover:ring-blue-500 transition-all" href="/en/accounts/katherinetaylor8/friends">
<div class="text-lg font-bold text-white">0</div>
<div class="text-xs text-gray-400 uppercase tracking-wide">Friends</div>
</a> </div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Profile Header End -->
<!-- Admin Section Start -->
<!-- Admin Section End -->
<!-- Games By User -->
<!-- OAuth Apps By User -->
<!-- Activity Feed and Sidebar -->
<div class="flex flex-col lg:flex-row gap-6 mt-6">
<!-- Activity Feed Start -->
<div id="profile_activity_container" class="w-full lg:flex-1 lg:min-w-0">
<div id="profile_activity_feed" class="bg-gray-800 rounded-xl border border-gray-700 p-6">
<h2 class="text-lg font-semibold text-white mb-4">Activity Feed</h2>
<div class="leave_message">
<form id="shout-form" class="w-full">
<div id="profile_comment_form" class="flex gap-3 guest_variant">
<div class="flex-1 min-w-0">
<div class="space-y-3">
<textarea name="shout[content]" id="shout_content"
rows="2"
class="w-full bg-gray-700 border border-gray-600 rounded-lg p-3 text-white placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-blue-500 resize-none"
placeholder="Start typing to leave katherinetaylor8 a shout..."></textarea>
<div class="error_message text-red-400 text-sm" id="shout_error_message" style="display:none;"></div>
<div class="flex justify-end">
<button type="submit" id="shout_box_submission_button"
class="bg-blue-600 hover:bg-blue-700 disabled:bg-gray-600 text-white px-4 py-2 rounded-lg font-medium text-sm transition-colors duration-200 registered_only">
Shout
</button>
</div>
</div>
</div>
</div>
</form>
</div>
<script>
//<![CDATA[
// Execute immediately if active_user is already available
if (typeof active_user !== 'undefined' && active_user.addCapturedSelector) {
active_user.addCapturedSelector('.registered_only', true);
} else {
// Wait for DOM content loaded in case active_user is being loaded asynchronously
document.addEventListener('DOMContentLoaded', function() {
if (typeof active_user !== 'undefined' && active_user.addCapturedSelector) {
active_user.addCapturedSelector('.registered_only', true);
}
});
}
//]]>
</script>
<script>
document.addEventListener('DOMContentLoaded', function() {
const form = document.getElementById('shout-form');
const textarea = document.getElementById('shout_content');
const submitButton = document.getElementById('shout_box_submission_button');
const errorDiv = document.getElementById('shout_error_message');
if (!form || !textarea || !submitButton) return;
form.addEventListener('submit', function(e) {
e.preventDefault();
const content = textarea.value.trim();
if (!content) {
showError('Please enter a message');
return;
}
// Disable form during submission
submitButton.disabled = true;
submitButton.textContent = 'Posting...';
hideError();
// Submit via fetch
fetch('/en/accounts/katherinetaylor8/messages.json', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest',
'X-CSRF-Token': document.querySelector('meta[name="csrf-token"]').content
},
body: JSON.stringify({
shout: {
content: content
}
})
})
.then(response => response.json())
.then(data => {
if (data.error) {
showError(data.error);
} else {
// Success - clear form and reload feed
textarea.value = '';
hideError();
// Reload the page to show new shout (simple approach)
window.location.reload();
}
})
.catch(error => {
console.error('Shout submission error:', error);
showError('Failed to post shout. Please try again.');
})
.finally(() => {
// Re-enable form
submitButton.disabled = false;
submitButton.textContent = 'Shout';
});
});
function showError(message) {
errorDiv.textContent = message;
errorDiv.style.display = 'block';
}
function hideError() {
errorDiv.style.display = 'none';
}
});
</script>
<script>
//<![CDATA[
if (typeof FeedHandler !== 'undefined') {
feedHandler =
new FeedHandler(
"self",
'feed_items_container',
15,
'/en/accounts/katherinetaylor8/more_feed_items',
'/en/accounts/katherinetaylor8/destroy_feed_items'
);
} else {
console.warn('FeedHandler class not loaded - feed functionality may not work');
}
//]]>
</script>
<ul class="mt-4 clearfix" id="feed_items_container">
<p id="empty_activit_feed" class="regtextLrg phl"><strong>katherinetaylor8 has not published any activity yet.</strong>Would you like to <a href="https://www.kongregate.com/en/accounts/katherinetaylor8/messages?focus=true">post a shout</a> to welcome them to Kongregate?</p>
</ul>
<script>
//<![CDATA[
// Execute immediately if active_user is already available
if (typeof active_user !== 'undefined' && active_user.addCapturedSelector) {
active_user.addCapturedSelector('.registered_only', true);
} else {
// Wait for DOM content loaded in case active_user is being loaded asynchronously
document.addEventListener('DOMContentLoaded', function() {
if (typeof active_user !== 'undefined' && active_user.addCapturedSelector) {
active_user.addCapturedSelector('.registered_only', true);
}
});
}
//]]>
</script><script>
//<![CDATA[
setTimeout(function() { if (typeof feedHandler !== 'undefined') { feedHandler.requestNextPageIfMoreItemsNeeded(); } }, 0);
//]]>
</script>
<div class="mt-4">
<a href="/accounts/katherinetaylor8/messages" class="text-blue-400 hover:text-blue-300 text-sm">See all shouts ยป</a>
</div>
</div>
</div>
<!-- Activity Feed End -->
<!-- Profile Aside Start -->
<div id="profile_aside" class="w-full flex-shrink-0" style="width: 400px !important; min-width: 400px !important;">
<div class="space-y-4">
<!-- Stickers Pod -->
<!-- Awards Pod -->
<!-- Connections Pod -->
<div class="bg-gray-800 rounded-lg border border-gray-700 p-4 min-w-0">
<h3 class="text-md font-semibold text-white mb-4">Friends</h3>
<div class="text-center py-6">
<div class="text-gray-400 text-sm mb-4">
๐ค katherinetaylor8 has no fans. Be their first!
</div>
</div>
</div>
<!-- Badges Pods -->
<!-- Favorite Games Pod -->
</div>
</div>
<!-- Profile Aside End -->
</div>
</div>
<!-- Client-side Flash Messages -->
<script>
// Client-side flash message system
function showFlashMessage(message, type = 'error') {
// Remove any existing client flash messages
clearClientFlashMessages();
// Create the flash message element
const flashContainer = document.getElementById('feature');
const flashElement = document.createElement('div');
let bgColor, borderColor, textColor;
switch(type) {
case 'notice':
case 'success':
bgColor = 'bg-green-900/50';
borderColor = 'border-green-700';
textColor = 'text-green-200';
break;
case 'error':
bgColor = 'bg-red-900/50';
borderColor = 'border-red-700';
textColor = 'text-red-200';
break;
case 'message':
case 'info':
bgColor = 'bg-blue-900/50';
borderColor = 'border-blue-700';
textColor = 'text-blue-200';
break;
default:
bgColor = 'bg-gray-900/50';
borderColor = 'border-gray-700';
textColor = 'text-gray-200';
}
flashElement.className = `${bgColor} border ${borderColor} rounded-lg p-3 mb-4 client-flash-message`;
flashElement.innerHTML = `<div class="${textColor} text-sm">${message}</div>`;
// Insert after any existing server flash messages
const existingFlashes = flashContainer.querySelectorAll('.bg-green-900\\/50, .bg-red-900\\/50, .bg-blue-900\\/50');
const insertAfter = existingFlashes.length > 0 ? existingFlashes[existingFlashes.length - 1] : null;
if (insertAfter) {
insertAfter.insertAdjacentElement('afterend', flashElement);
} else {
// Insert at the beginning of the feature section
const firstChild = flashContainer.firstElementChild;
if (firstChild) {
flashContainer.insertBefore(flashElement, firstChild);
} else {
flashContainer.appendChild(flashElement);
}
}
// Auto-remove after 10 seconds
setTimeout(() => {
if (flashElement.parentNode) {
flashElement.remove();
}
}, 10000);
}
function clearClientFlashMessages() {
document.querySelectorAll('.client-flash-message').forEach(el => el.remove());
}
</script>
<!-- Tools Dropdown JavaScript -->
<script>
function toggleToolsDropdown() {
const dropdown = document.getElementById('profile_tools_dropdown');
const isVisible = dropdown.style.display !== 'none';
dropdown.style.display = isVisible ? 'none' : 'block';
}
function connectFacebook(link) {
link.innerHTML = '<span class="text-gray-400">Loading...</span>';
if (typeof FacebookAuthenticator !== 'undefined') {
new FacebookAuthenticator();
} else {
// Fallback if FacebookAuthenticator is not available
setTimeout(() => {
link.innerHTML = 'Connect with Facebook';
}, 2000);
}
}
// Close dropdown when clicking outside
document.addEventListener('click', function(event) {
const container = document.getElementById('profile_tools_container');
const dropdown = document.getElementById('profile_tools_dropdown');
if (container && !container.contains(event.target)) {
dropdown.style.display = 'none';
}
});
// AJAX functions for non-owner actions
// The server returns JavaScript like: $("new_abuse_report").update("...html...")
// We parse out the HTML and insert it using vanilla JS instead of Prototype.js
function extractHtmlFromPrototypeJs(js) {
// Match pattern: $("new_abuse_report").update("...escaped html...")
const match = js.match(/\$\("new_abuse_report"\)\.update\("(.*)"\);?$/s);
if (match && match[1]) {
// Unescape the HTML content
return match[1]
.replace(/\\u003c/g, '<')
.replace(/\\u003e/g, '>')
.replace(/\\u0026/g, '&')
.replace(/\\u0027/g, "'")
.replace(/\\"/g, '"')
.replace(/\\n/g, '\n')
.replace(/\\t/g, '\t');
}
return null;
}
// Override the form's onsubmit to use fetch instead of Prototype.js Ajax.Request
function setupAbuseReportFormSubmission() {
const container = document.getElementById('new_abuse_report');
const form = container.querySelector('form');
if (!form) return;
// Remove the inline onsubmit handler
form.removeAttribute('onsubmit');
form.addEventListener('submit', function(e) {
e.preventDefault();
const formData = new FormData(form);
const submitBtn = form.querySelector('input[type="submit"]');
if (submitBtn) {
submitBtn.disabled = true;
submitBtn.value = 'Submitting...';
}
fetch(form.action, {
method: 'POST',
headers: {
'X-Requested-With': 'XMLHttpRequest',
'Accept': 'text/javascript'
},
body: formData
}).then(response => {
if (!response.ok) {
throw new Error('Network response was not ok: ' + response.status);
}
return response.text();
}).then(js => {
// Parse the JS response and extract HTML
const html = extractHtmlFromPrototypeJs(js);
if (html) {
container.innerHTML = html;
// If the response contains a form (re-rendered with errors), re-attach the submit handler
if (container.querySelector('form')) {
setupAbuseReportFormSubmission();
}
} else {
// If we can't parse it, show a success message
container.innerHTML = '<div class="p-4 bg-green-900/50 border border-green-700 rounded-lg text-green-200">Your report has been submitted. Thank you!</div>';
}
}).catch((error) => {
console.error('Error submitting form:', error);
container.innerHTML = '<div class="p-4 bg-red-900/50 border border-red-700 rounded-lg text-red-200">Failed to submit report: ' + error.message + '</div>';
});
});
}
function loadAbuseReport() {
fetch('/en/accounts/katherinetaylor8/abuse_reports/new', {
method: 'GET',
headers: {
'X-Requested-With': 'XMLHttpRequest',
'Accept': 'text/javascript'
}
}).then(response => {
if (!response.ok) {
throw new Error('Network response was not ok: ' + response.status);
}
return response.text();
})
.then(js => {
const html = extractHtmlFromPrototypeJs(js);
if (html) {
document.getElementById('new_abuse_report').innerHTML = html;
// Override the form submission to use fetch
setupAbuseReportFormSubmission();
} else {
console.error('Could not parse JS response:', js);
throw new Error('Could not parse response');
}
document.getElementById('profile_tool_abuse_report_spinner').style.display = 'none';
}).catch((error) => {
console.error('Error loading abuse report:', error);
document.getElementById('profile_tool_abuse_report_spinner').style.display = 'none';
document.getElementById('profile_tool_abuse_report_link').style.display = 'block';
alert('Failed to load abuse report form: ' + error.message);
});
}
function loadModThanks() {
fetch('/en/accounts/katherinetaylor8/abuse_reports/new?type=ModeratorThanks', {
method: 'GET',
headers: {
'X-Requested-With': 'XMLHttpRequest',
'Accept': 'text/javascript'
}
}).then(response => {
if (!response.ok) {
throw new Error('Network response was not ok: ' + response.status);
}
return response.text();
})
.then(js => {
const html = extractHtmlFromPrototypeJs(js);
if (html) {
document.getElementById('new_abuse_report').innerHTML = html;
// Override the form submission to use fetch
setupAbuseReportFormSubmission();
} else {
console.error('Could not parse JS response:', js);
throw new Error('Could not parse response');
}
document.getElementById('profile_mod_thanks_report_spinner').style.display = 'none';
}).catch((error) => {
console.error('Error loading mod thanks:', error);
document.getElementById('profile_mod_thanks_report_spinner').style.display = 'none';
document.getElementById('profile_mod_thanks_report_link').style.display = 'block';
alert('Failed to load moderator thanks form: ' + error.message);
});
}
function spamAccount() {
if (confirm('This will permaban the account and mark all comments and forum posts as spam. Are you sure?')) {
fetch('/en/accounts/katherinetaylor8/mark_as_spam', {
method: 'POST',
headers: {
'X-CSRF-Token': document.querySelector('meta[name="csrf-token"]').content,
'Accept': 'text/html'
}
}).then(() => {
window.location.reload();
}).catch((error) => {
console.error('Error:', error);
alert('Failed to spam account');
});
}
}
function becomeUser() {
if (confirm('Become katherinetaylor8?')) {
fetch('/en/accounts/katherinetaylor8/become', {
method: 'POST',
headers: {
'X-CSRF-Token': document.querySelector('meta[name="csrf-token"]').content,
'Accept': 'text/html'
}
}).then(() => {
window.location.reload();
}).catch((error) => {
console.error('Error:', error);
alert('Failed to become user');
});
}
}
// Biography editing functions
function showEditAbout() {
document.getElementById('about_form').style.display = 'block';
const cancelButton = document.getElementById('cancel_about_edit');
if (cancelButton) cancelButton.style.display = 'block';
document.getElementById('user_about').style.display = 'none';
document.getElementById('profile_bio_links').style.display = 'none';
}
function cancelEditAbout() {
document.getElementById('about_form').style.display = 'none';
document.getElementById('user_about').style.display = 'block';
document.getElementById('profile_bio_links').style.display = 'block';
}
// Full bio functions removed as 'More About Me' link was removed
</script>
<div id="profile_full_user_bio_container" style="display:none;">
<div id="profile_full_user_bio">
<a href="#" onclick="hideFullBio(); return false;" id="full_profile_close">close</a>
<ul class="profile_user_full_vitals">
<li class="mbs">
<h3 class="h6 h6_alt">Location</h3>
<span>New York City,NY United States</span>
</li>
<li class="mbs">
<h3 class="h6 h6_alt">Member Since</h3>
<span>May. 30, 2025</span>
</li>
<li class="mbs">
<h3 class="h6 h6_alt">Website</h3>
<span>http://https://install-turbo-tax.com/</span>
</li>
</ul>
<div class="profile_full_about_user ptl user_text_reset">
<p>Hi! Iโm Katherine Taylor, a tech enthusiast passionate about simplifying software installations. I specialize in guiding users through digital setups like Installturbotax com, helping them navigate the process with ease. Whether youโre new to taxes or upgrading software, Iโm here to ensure a smooth and stress-free installation experience.</p>
</div>
</div>
<div id="profile_full_overlay"></div>
</div>
</div>
<!-- End Page Content Wrapper -->
</div>
</main>
<!-- Footer -->
<footer class="border-t border-gray-700/20 mt-4 " style="background-color: hsl(var(--secondary));">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-10">
<div class="grid grid-cols-1 md:grid-cols-2 gap-8">
<div>
<!-- Logo -->
<div class="mb-6">
<svg xmlns="http://www.w3.org/2000/svg" width="32px" height="32px" viewBox="0 0 90 90" fill="none" alt="Kong Icon">
<path fill-rule="evenodd" clip-rule="evenodd" d="M10 0C4.47715 0 0 4.47715 0 10V80C0 85.5229 4.47715 90 10 90H80C85.5229 90 90 85.5229 90 80V10C90 4.47715 85.5229 0 80 0H10ZM21 20H31V40H51V50H31V70H21V20ZM51 50H57.2918C59.5644 50 61.642 51.284 62.6584 53.3167L66 60H71V70H61L51 50ZM51 40L61 20H71V30H66L62.6584 36.6833C61.642 38.716 59.5644 40 57.2918 40H51Z" fill="#FFFFFF"></path>
</svg>
</div>
<p class="text-muted-foreground mb-6 max-w-md">Kongregate is a portal for free online games featuring user-created content, badges, and player achievements.</p>
<!-- Social icons -->
<div class="flex space-x-4">
<a href="https://www.tiktok.com/@itskongregate" class="text-muted-foreground red-link" aria-label="Tiktok" title="Tiktok" target="_blank" rel="noopener noreferrer">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24"><path d="M19.59 6.69a4.83 4.83 0 0 1-3.77-4.25V2h-3.45v13.67a2.89 2.89 0 0 1-5.2 1.74 2.89 2.89 0 0 1 2.31-4.64 2.93 2.93 0 0 1 .88.13V9.4a6.84 6.84 0 0 0-.88-.05A6.33 6.33 0 0 0 5 20.1a6.34 6.34 0 0 0 10.86-4.43v-7a8.16 8.16 0 0 0 4.77 1.52v-3.4a4.85 4.85 0 0 1-1-.1z"/></svg>
</a>
<a href="http://www.twitter.com/kongregate" class="text-muted-foreground red-link" aria-label="Twitter" title="Twitter" target="_blank" rel="noopener noreferrer">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg>
</a>
<a href="https://www.linkedin.com/company/kongregate" class="text-muted-foreground red-link" aria-label="Linkedin" title="Linkedin" target="_blank" rel="noopener noreferrer">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg>
</a>
<a href="https://www.youtube.com/@kongregateofficial" class="text-muted-foreground red-link" aria-label="YouTube" title="YouTube" target="_blank" rel="noopener noreferrer">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24"><path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"/></svg>
</a>
<a href="https://discord.com/invite/kongregate" class="text-muted-foreground red-link" aria-label="Discord" title="Discord" target="_blank" rel="noopener noreferrer">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24"><path d="M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028 14.09 14.09 0 0 0 1.226-1.994.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z"/></svg>
</a>
</div>
</div>
<!-- Resources Links -->
<div class="text-right">
<h3 class="text-white font-semibold mb-4">Resources</h3>
<ul class="space-y-2">
<li>
<a href="/developer/apply" class="text-muted-foreground red-link">
Become a Developer
</a>
</li>
<li>
<a href="https://kongregatedevelopers.zendesk.com/hc/en-us" class="text-muted-foreground red-link" target="_blank" rel="noopener noreferrer">
Developers
</a>
</li>
<li>
<a href="https://kongregatesupport.zendesk.com/hc/en-us/categories/26688201255053-Players" class="text-muted-foreground red-link" target="_blank" rel="noopener noreferrer">
Players
</a>
</li>
<li>
<a href="https://kongregatesupport.zendesk.com/hc/en-us/requests/new" class="text-muted-foreground red-link" target="_blank" rel="noopener noreferrer">
Support
</a>
</li>
<li>
<a href="/terms-of-service" class="text-muted-foreground red-link" target="_blank" rel="noopener noreferrer">
Terms of Service
</a>
</li>
<li>
<a href="/privacy" class="text-muted-foreground red-link" target="_blank" rel="noopener noreferrer">
Privacy Policy
</a>
</li>
<li>
<a href="/en/pages/conduct" class="text-muted-foreground red-link" target="_blank" rel="noopener noreferrer">
Code of Conduct
</a>
</li>
</ul>
</div>
</div>
<!-- Copyright footer section - positioned to align with bottom of resources -->
<div class="flex justify-between items-end">
<div class="text-muted-foreground">
<p>ยฉ 2026 Kongregate. All rights reserved.</p>
</div>
</div>
</div>
</footer>
<!-- Auth Modal Component -->
<div id="auth-modal-wrapper" class="auth-modal-component relative" data-controller="previews--auth-modal" data-previews--auth-modal-target="modal" data-previews--auth-modal-default-tab-value="login" data-previews--auth-modal-open-value="false">
<!-- Auth Modal Implementation -->
<div
id="auth-modal"
class="fixed inset-0 z-50 overflow-y-auto hidden"
aria-labelledby="modal-title"
role="dialog"
aria-modal="true"
data-previews--auth-modal-target="modalDialog"
>
<div class="flex min-h-screen items-center justify-center p-4 text-center sm:p-0">
<!-- Background overlay -->
<div
id="modal-backdrop"
class="fixed inset-0 bg-black bg-opacity-75 transition-opacity"
data-action="click->previews--auth-modal#close"
></div>
<!-- Modal dialog -->
<div
class="relative transform overflow-hidden rounded-lg bg-gray-900 text-left shadow-xl transition-all sm:my-8 sm:w-full sm:max-w-lg"
>
<!-- Close button -->
<button
type="button"
class="absolute top-3 right-3 z-10 text-gray-400 hover:text-white transition-colors focus:outline-none"
data-action="click->previews--auth-modal#close"
aria-label="Close"
>
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
</svg>
</button>
<div class="p-4 sm:p-6 text-white">
<!-- Header -->
<div class="space-y-3 mb-6">
<h2 class="text-center text-2xl font-bold">
<span data-previews--auth-modal-target="loginTitle" >
Welcome Back!
</span>
<span data-previews--auth-modal-target="signupTitle" hidden>
Join Kongregate
</span>
</h2>
<p class="text-center text-gray-400">
<span data-previews--auth-modal-target="loginDescription" >
Log in to access your games, badges, and more.
</span>
<span data-previews--auth-modal-target="signupDescription" hidden>
Create an account to track your progress, earn badges, and join the community.
</span>
</p>
</div>
<!-- Tabs Component -->
<div class="w-full">
<!-- Tab Buttons -->
<div class="grid grid-cols-2 w-full mb-6 relative border-b border-gray-700">
<!-- Login Tab -->
<button
type="button"
data-action="click->previews--auth-modal#changeTab"
data-tab-value="login"
data-previews--auth-modal-target="loginTab"
class="py-2 px-4 text-center font-medium border-b-2 -mb-px transition-colors relative text-red-600 border-red-600"
id="login-tab"
>
Log In
</button>
<!-- Signup Tab -->
<button
type="button"
data-action="click->previews--auth-modal#changeTab"
data-tab-value="signup"
data-previews--auth-modal-target="signupTab"
class="py-2 px-4 text-center font-medium border-b-2 -mb-px transition-colors relative text-gray-500 border-transparent hover:text-gray-700 hover:border-gray-300"
id="signup-tab"
>
Sign Up
</button>
</div>
<!-- Login Panel -->
<div data-previews--auth-modal-target="loginPanel" class="space-y-4 ">
<!-- Login Form with Stimulus controller for error/MFA handling -->
<form id="login-form" class="space-y-4" data-controller="previews--login-form" data-action="submit->previews--login-form#performLogin" onsubmit="return false;">
<!-- Server error container for validation errors -->
<div class="mb-4 bg-red-50 border border-red-200 text-red-600 px-4 py-3 rounded-md hidden" data-previews--login-form-target="serverError">
<span data-previews--login-form-target="serverErrorMessage"></span>
</div>
<!-- Username/Email Field -->
<div class="space-y-1">
<label for="login-identifier" class="block text-sm font-medium">
Username or Email
</label>
<input
id="login-identifier"
name="identifier"
type="text"
autocomplete="username"
class="w-full px-3 py-2 border border-gray-700 rounded-md bg-gray-800 text-white focus:outline-none focus:ring-2 focus:ring-red-500 focus:border-red-500"
data-previews--login-form-target="identifier"
data-action="focus->previews--login-form#trackLoginFormStart"
>
<div class="text-red-500 text-sm hidden" data-previews--login-form-target="identifierError"></div>
</div>
<!-- Password Field -->
<div class="space-y-2">
<div class="flex justify-between">
<label for="login-password" class="block text-sm font-medium">
Password
</label>
<button type="button" tabindex="-1" class="text-sm text-red-600 hover:text-red-500" data-action="click->previews--auth-modal#showRecovery">
Forgot?
</button>
</div>
<input
id="login-password"
name="password"
type="password"
autocomplete="current-password"
class="w-full px-3 py-2 border border-gray-700 rounded-md bg-gray-800 text-white focus:outline-none focus:ring-2 focus:ring-red-500 focus:border-red-500"
data-previews--login-form-target="password"
data-action="focus->previews--login-form#trackLoginFormStart"
>
<div class="text-red-500 text-sm hidden" data-previews--login-form-target="passwordError"></div>
</div>
<!-- Remember Me Checkbox -->
<div class="flex items-center">
<input type="checkbox" id="remember-me" name="rememberMe" class="h-4 w-4 rounded border-gray-700 bg-gray-800 text-red-600 focus:ring-red-500" data-previews--login-form-target="rememberMe">
<label for="remember-me" class="ml-2 block text-sm text-gray-300">
Remember me
</label>
</div>
<!-- MFA Code Input (loaded via Turbo Frame) -->
<div data-previews--login-form-target="mfaContainer" class="hidden">
<turbo-frame loading="lazy" data-previews-login-form-target="mfaFrame" data-action="turbo:frame-load->previews--login-form#onMfaFrameLoad" data-auth-modal-target="mfaFrame" data-turbo-stream="true" id="mfa-form-frame" src="/mfa/form.turbo_stream">
<div class="flex justify-center py-4">
<div class="animate-spin rounded-full h-8 w-8 border-b-2 border-red-600"></div>
</div>
</turbo-frame> </div>
<!-- Submit Button connected to Stimulus controller -->
<div class="space-y-2" data-previews--login-form-target="loginButtonContainer">
<button
type="submit"
id="login-submit-button"
class="w-full bg-red-600 text-white py-2 px-4 rounded-md shadow hover:bg-red-700 transition-colors focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2 font-medium"
data-previews--login-form-target="submitButton"
data-action="click->previews--login-form#performLogin"
>
<span data-previews--login-form-target="buttonText">Log In</span>
<span data-previews--login-form-target="loadingText" class="hidden">Logging in...</span>
</button>
</div>
</form>
<!-- Divider -->
<div class="relative my-6">
<div class="absolute inset-0 flex items-center">
<div class="w-full border-t border-gray-700"></div>
</div>
<div class="relative flex justify-center text-sm">
<span class="px-2 bg-gray-900 text-gray-400">
Or continue with
</span>
</div>
</div>
<!-- Social Login -->
<div class="flex justify-center">
<button type="button"
class="w-full flex justify-center items-center py-2 px-4 border border-gray-700 rounded-md bg-gray-800 hover:bg-gray-700 transition-colors"
title="Sign in with Facebook"
onclick="openFacebookAuth(); return false;"
id="facebook-login-btn">
<svg class="h-5 w-5 mr-2" viewBox="0 0 24 24" fill="#1877F2" xmlns="http://www.w3.org/2000/svg">
<path d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z" />
</svg>
<span class="text-white" id="facebook-btn-text">Continue with Facebook</span>
<span class="hidden" id="facebook-loading-text">Connecting...</span>
</button>
</div>
<script>
// Add missing functions that the Facebook popup expects to find
window.showMatchingUserForm = function(username, matchedOn) {
console.log('Facebook matched user:', username, matchedOn);
// Redirect to login page when there's a matching user
window.location.href = '/session/new';
};
window.user_status = window.user_status || {};
window.user_status.facebookSignInSuccess = function(accountStatus) {
console.log('Facebook sign in success:', accountStatus);
// Reload page to reflect new authentication state
window.location.reload();
};
function openFacebookAuth() {
const btn = document.getElementById('facebook-login-btn');
const btnText = document.getElementById('facebook-btn-text');
const loadingText = document.getElementById('facebook-loading-text');
// Disable button and show loading state
btn.disabled = true;
btn.classList.add('opacity-50', 'cursor-not-allowed');
btnText.classList.add('hidden');
loadingText.classList.remove('hidden');
// Build state parameters (matching FacebookAuthenticator logic)
const stateParams = {};
// Check for remember me checkbox (if it exists)
const rememberMeCheckbox = document.getElementById('remember-me');
if (rememberMeCheckbox && rememberMeCheckbox.checked) {
stateParams.remember_me = true;
}
// Add SSL parameter if on HTTPS
if (location.protocol === 'https:') {
stateParams.ssl_page = true;
}
// Set the facebook_state_params cookie (matching original behavior)
document.cookie = `facebook_state_params=${encodeURIComponent(JSON.stringify(stateParams))}; path=/; secure; samesite=lax`;
// Build query string for state parameter
const stateQuery = new URLSearchParams(stateParams).toString();
// Open popup window using POST (required for OmniAuth 2.x)
const popup = window.OmniAuthPopupHelper.openAuthPopup(
'/auth/facebook',
{ state: stateQuery },
'facebook_auth',
'menubar=no,toolbar=no,status=no,width=600,height=400,scrollbars=yes,resizable=yes'
);
// Watch for popup to close
const checkClosed = setInterval(() => {
try {
if (popup.closed) {
clearInterval(checkClosed);
// Re-enable button
btn.disabled = false;
btn.classList.remove('opacity-50', 'cursor-not-allowed');
btnText.classList.remove('hidden');
loadingText.classList.add('hidden');
// Reload page to check authentication status
setTimeout(() => {
window.location.reload();
}, 500);
}
} catch (e) {
clearInterval(checkClosed);
// Re-enable button on error
btn.disabled = false;
btn.classList.remove('opacity-50', 'cursor-not-allowed');
btnText.classList.remove('hidden');
loadingText.classList.add('hidden');
}
}, 100);
}
</script>
<!-- End of login form fields -->
</div>
<!-- Signup Panel -->
<div data-previews--auth-modal-target="signupPanel" class="space-y-4 hidden">
<!-- Signup Form with Controller -->
<div data-controller="previews--signup-form"
data-accounts-url="/accounts"
data-previews--signup-form-messages-value="{"username_required":"Username is required","username_min_length":"Username must be at least 3 characters","username_max_length":"Username must be less than 20 characters","username_format":"Username can only contain letters, numbers, and underscores","username_unavailable":"Username is unavailable. Use only letters, numbers, and underscores.","email_required":"Email is required","email_invalid":"Please enter a valid email address","password_required":"Password is required","password_min_length":"Password must be at least 10 characters","password_uppercase":"Password must contain at least one uppercase letter","password_lowercase":"Password must contain at least one lowercase letter","password_number":"Password must contain at least one number","birthdate_year_required":"Please select your birth year","birthdate_full_required":"Please select your full date of birth","parent_email_required":"Parent/guardian email is required","parent_email_invalid":"Please enter a valid email address","terms_required":"You must accept the terms and conditions"}"
class="space-y-4">
<!-- Form Container -->
<div data-previews--signup-form-target="formContainer">
<form
data-previews--signup-form-target="form"
data-action="submit->previews--signup-form#onSubmit"
class="space-y-4 pb-16"
>
<!-- Server error container for validation errors -->
<div class="mb-4 bg-red-50 border border-red-200 text-red-600 px-4 py-3 rounded-md hidden" data-previews--signup-form-target="serverError">
<p class="text-sm"></p>
</div>
<!-- Username Field -->
<div class="space-y-1">
<label for="signup-username" class="block text-sm font-medium">
Username
</label>
<input
type="text"
id="signup-username"
name="username"
class="w-full px-3 py-2 border border-gray-700 rounded-md bg-gray-800 text-white focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-opacity-50 focus:border-red-500"
required
autocomplete="username"
data-previews--signup-form-target="username"
data-action="focus->previews--signup-form#trackFormStart"
>
<p class="text-red-600 text-sm hidden" data-previews--signup-form-target="usernameError"></p>
</div>
<!-- Email Field -->
<div class="space-y-1">
<label for="signup-email" class="block text-sm font-medium">
Email
</label>
<input
type="email"
id="signup-email"
name="email"
class="w-full px-3 py-2 border border-gray-700 rounded-md bg-gray-800 text-white focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-opacity-50 focus:border-red-500"
required
autocomplete="email"
data-previews--signup-form-target="email"
data-action="focus->previews--signup-form#trackFormStart"
>
<p class="text-red-600 text-sm hidden" data-previews--signup-form-target="emailError"></p>
</div>
<!-- Password Field -->
<div class="space-y-1">
<label for="signup-password" class="block text-sm font-medium">
Password
</label>
<input
id="signup-password"
name="password"
type="password"
autocomplete="new-password"
class="w-full px-3 py-2 border border-gray-700 rounded-md bg-gray-800 text-white focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-opacity-50 focus:border-red-500"
data-previews--signup-form-target="password"
data-action="focus->previews--signup-form#trackFormStart"
>
<p class="text-white text-xs mt-1">Use at least 10 characters with a mix of uppercase, lowercase, & numbers</p>
<div data-previews--signup-form-target="passwordError" class="text-red-500 text-sm hidden"></div>
</div>
<!-- Birthdate Field -->
<div class="space-y-1" data-previews--signup-form-target="birthdateSection">
<label class="block text-sm font-medium">
When were you born?
</label>
<div class="flex gap-2">
<select
id="signup-birth-month"
class="hidden flex-1 px-3 py-2 border border-gray-700 rounded-md bg-gray-800 text-white focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-opacity-50 focus:border-red-500"
data-previews--signup-form-target="birthMonth"
data-action="change->previews--signup-form#onBirthdateChange"
>
<option value="">Month</option>
<option value="1">January</option>
<option value="2">February</option>
<option value="3">March</option>
<option value="4">April</option>
<option value="5">May</option>
<option value="6">June</option>
<option value="7">July</option>
<option value="8">August</option>
<option value="9">September</option>
<option value="10">October</option>
<option value="11">November</option>
<option value="12">December</option>
</select>
<select
id="signup-birth-day"
class="hidden w-20 px-3 py-2 border border-gray-700 rounded-md bg-gray-800 text-white focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-opacity-50 focus:border-red-500"
data-previews--signup-form-target="birthDay"
data-action="change->previews--signup-form#onBirthdateChange"
>
<option value="">Day</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>
<select
id="signup-birth-year"
class="flex-1 px-3 py-2 border border-gray-700 rounded-md bg-gray-800 text-white focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-opacity-50 focus:border-red-500"
data-previews--signup-form-target="birthYear"
data-action="change->previews--signup-form#onBirthYearChange"
>
<option value="">Year</option>
<option value="2023">2023</option>
<option value="2022">2022</option>
<option value="2021">2021</option>
<option value="2020">2020</option>
<option value="2019">2019</option>
<option value="2018">2018</option>
<option value="2017">2017</option>
<option value="2016">2016</option>
<option value="2015">2015</option>
<option value="2014">2014</option>
<option value="2013">2013</option>
<option value="2012">2012</option>
<option value="2011">2011</option>
<option value="2010">2010</option>
<option value="2009">2009</option>
<option value="2008">2008</option>
<option value="2007">2007</option>
<option value="2006">2006</option>
<option value="2005">2005</option>
<option value="2004">2004</option>
<option value="2003">2003</option>
<option value="2002">2002</option>
<option value="2001">2001</option>
<option value="2000">2000</option>
<option value="1999">1999</option>
<option value="1998">1998</option>
<option value="1997">1997</option>
<option value="1996">1996</option>
<option value="1995">1995</option>
<option value="1994">1994</option>
<option value="1993">1993</option>
<option value="1992">1992</option>
<option value="1991">1991</option>
<option value="1990">1990</option>
<option value="1989">1989</option>
<option value="1988">1988</option>
<option value="1987">1987</option>
<option value="1986">1986</option>
<option value="1985">1985</option>
<option value="1984">1984</option>
<option value="1983">1983</option>
<option value="1982">1982</option>
<option value="1981">1981</option>
<option value="1980">1980</option>
<option value="1979">1979</option>
<option value="1978">1978</option>
<option value="1977">1977</option>
<option value="1976">1976</option>
<option value="1975">1975</option>
<option value="1974">1974</option>
<option value="1973">1973</option>
<option value="1972">1972</option>
<option value="1971">1971</option>
<option value="1970">1970</option>
<option value="1969">1969</option>
<option value="1968">1968</option>
<option value="1967">1967</option>
<option value="1966">1966</option>
<option value="1965">1965</option>
<option value="1964">1964</option>
<option value="1963">1963</option>
<option value="1962">1962</option>
<option value="1961">1961</option>
<option value="1960">1960</option>
<option value="1959">1959</option>
<option value="1958">1958</option>
<option value="1957">1957</option>
<option value="1956">1956</option>
<option value="1955">1955</option>
<option value="1954">1954</option>
<option value="1953">1953</option>
<option value="1952">1952</option>
<option value="1951">1951</option>
<option value="1950">1950</option>
<option value="1949">1949</option>
<option value="1948">1948</option>
<option value="1947">1947</option>
<option value="1946">1946</option>
<option value="1945">1945</option>
<option value="1944">1944</option>
<option value="1943">1943</option>
<option value="1942">1942</option>
<option value="1941">1941</option>
<option value="1940">1940</option>
</select>
</div>
<input type="hidden" name="age_concern" value="" data-previews--signup-form-target="ageConcern">
<p class="text-red-600 text-sm hidden" data-previews--signup-form-target="birthdateError"></p>
</div>
<!-- Parent Email Field (shown for EU users under age of consent) -->
<div class="space-y-1 hidden" data-previews--signup-form-target="parentEmailSection">
<label for="signup-parent-email" class="block text-sm font-medium">
Parent/Guardian Email
</label>
<p class="text-gray-400 text-xs mb-1">A parent or guardian must consent to your account. Please enter their email address.</p>
<input
type="email"
id="signup-parent-email"
name="parent_email"
class="w-full px-3 py-2 border border-gray-700 rounded-md bg-gray-800 text-white focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-opacity-50 focus:border-red-500"
data-previews--signup-form-target="parentEmail"
>
<p class="text-red-600 text-sm hidden" data-previews--signup-form-target="parentEmailError"></p>
</div>
<!-- Underage Block Message (shown for users under 13) -->
<div class="hidden bg-red-900/30 border border-red-700 rounded-md p-3" data-previews--signup-form-target="underageBlock">
<p class="text-red-400 text-sm">Sorry, you do not meet the minimum age requirement to create an account on this site.</p>
</div>
<!-- Terms Agreement -->
<div class="flex items-start" data-previews--signup-form-target="termsSection">
<div class="flex items-center h-5">
<input
type="checkbox"
id="terms"
name="terms"
class="h-4 w-4 text-red-600 focus:ring-red-500 border-gray-300 rounded"
required
data-previews--signup-form-target="acceptTerms"
>
</div>
<div class="ml-3 text-sm">
<label for="terms" class="text-gray-600">
I agree to the <a href="/terms-of-service" class="text-red-600 hover:text-red-500" target="_blank">Terms of Service</a> and <a href="/privacy" class="text-red-600 hover:text-red-500" target="_blank">Privacy Policy</a>
</label>
<p class="text-red-600 text-sm hidden" data-previews--signup-form-target="termsError"></p>
</div>
</div>
<!-- Submit Button -->
<button
type="submit"
class="w-full bg-red-600 hover:bg-red-700 text-white font-medium py-2 px-4 rounded-md focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-opacity-50 transition-colors"
data-previews--signup-form-target="submitButton"
>
<span data-previews--signup-form-target="buttonText">Create Account</span>
<span data-previews--signup-form-target="loadingText" class="hidden">
<svg class="animate-spin -ml-1 mr-2 h-4 w-4 text-white inline-block" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
</svg>
Creating Account...
</span>
</button>
<!-- reCAPTCHA -->
<div class="g-recaptcha"
data-sitekey="6LdzZjQUAAAAANyruFjOROmzLKQofUeJA5sIaPf3"
data-size="invisible"
data-callback="onRecaptchaSuccess"
data-expired-callback="onRecaptchaExpired"
data-error-callback="onRecaptchaError"
id="signup-recaptcha">
</div>
<input type="hidden" name="recaptcha_token" class="hidden" data-previews--signup-form-target="recaptchaToken">
</form>
</div> <!-- Close form container -->
<!-- Success Message (initially hidden) -->
<div
data-previews--signup-form-target="successMessage"
class="hidden p-6 text-center"
>
<div class="mx-auto flex items-center justify-center h-12 w-12 rounded-full bg-green-100 mb-4">
<svg class="h-6 w-6 text-green-600" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7" />
</svg>
</div>
<h3 class="text-lg font-medium text-white mb-2">
Account Created!
</h3>
<div class="mt-2 text-sm text-gray-300">
<p>Please check your email to verify your account. You'll need to verify your email before logging in.</p>
</div>
<div class="mt-4">
<button
type="button"
class="inline-flex justify-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2"
data-action="click->previews--auth-modal#showLogin"
>
Back to Login
</button>
</div>
</div>
</div>
</div> <!-- End of signup panel -->
<!-- Recovery Panel -->
<div data-previews--auth-modal-target="recoveryPanel" class="hidden space-y-4">
<!-- Recovery Title -->
<h2 class="text-center text-2xl font-bold" data-previews--auth-modal-target="recoveryTitle">
Forgot your password?
</h2>
<div class="space-y-4">
<!-- Server error container (hidden by default) -->
<div class="mb-4 bg-red-50 border border-red-200 text-red-600 px-4 py-3 rounded-md hidden" data-previews--auth-modal-target="recoveryError">
<span data-previews--auth-modal-target="recoveryErrorMessage"></span>
</div>
<!-- Success message (hidden by default) -->
<div class="mb-4 bg-green-50 border border-green-200 text-green-600 px-4 py-3 rounded-md hidden" data-previews--auth-modal-target="recoverySuccess">
Password reset instructions have been sent to your email.
</div>
</div>
<!-- Recovery Form -->
<div data-previews--auth-modal-target="recoveryForm">
<div class="space-y-4">
<!-- Email Field -->
<div class="space-y-1">
<label for="recovery-email" class="block text-sm font-medium">
Enter your Email Address or Username
</label>
<input
id="recovery-email"
type="email"
autocomplete="email"
class="w-full px-3 py-2 border border-gray-700 rounded-md bg-gray-800 text-white focus:outline-none focus:ring-2 focus:ring-red-500 focus:border-red-500"
data-previews--auth-modal-target="recoveryEmail"
required
>
<div class="text-red-500 text-sm hidden" data-previews--auth-modal-target="recoveryEmailError"></div>
</div>
<!-- Submit Button -->
<button
type="button"
class="w-full bg-red-600 text-white py-2 px-4 rounded-md shadow hover:bg-red-700 transition-colors focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2 font-medium"
data-action="click->previews--auth-modal#submitRecovery"
data-previews--auth-modal-target="recoverySubmitButton"
>
<span data-previews--auth-modal-target="recoveryButtonText">
Recover Password
</span>
<span class="hidden" data-previews--auth-modal-target="recoveryLoadingText">
Sending...
</span>
</button>
<!-- Back to Login Link -->
<div class="text-center mt-4">
<button
type="button"
class="text-sm text-gray-400 hover:text-white"
data-action="click->previews--auth-modal#showLogin"
>
← Back to Login
</button>
</div>
</div>
</div>
</div>
</div> <!-- End of tabs component -->
</div>
</div>
</div>
</div>
<!-- Toast Notifications Container -->
<div id="toast-container" class="fixed top-4 right-4 z-50"></div>
</div>
<!-- Kred Purchase Modal - Global modal for in-game purchases -->
<div data-controller="previews--kreds-purchase"
data-previews--kreds-purchase-default-kreds-title-value="Purchase Kreds"
data-previews--kreds-purchase-default-checkout-title-value="Review Your Purchase">
<div data-previews--kreds-purchase-target="modal"
data-action="click->previews--kreds-purchase#handleBackgroundClick"
class="fixed inset-0 bg-black bg-opacity-50 backdrop-blur-sm flex items-center justify-center z-50 p-2 sm:p-4 hidden opacity-0 transition-opacity duration-300">
<div data-action="click->previews--kreds-purchase#handleContentClick"
class="bg-gray-900 rounded-lg shadow-xl w-[96vw] h-[92vh] max-md:max-w-md md:w-[min(75vw,1000px)] md:h-[min(90vh,900px)] md:min-w-[600px] md:min-h-[600px] flex flex-col">
<!-- Modal Header -->
<div class="flex items-center justify-between p-4 border-b border-gray-700">
<h2 class="text-xl font-semibold text-white" data-previews--kreds-purchase-target="modalTitle">Purchase Kreds</h2>
<button data-action="click->previews--kreds-purchase#closeModal"
class="text-gray-400 hover:text-gray-300 focus:outline-none">
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
</svg>
</button>
</div>
<!-- Modal Content - iframe container (populated dynamically by controller) -->
<div class="flex-1 relative overflow-hidden">
<iframe src="about:blank"
frameborder="0"
class="w-full h-full rounded-b-lg">
</iframe>
</div>
</div>
</div>
</div>
<!-- Shared Content Modal -->
<!-- Shared Content Modal - Displays content in a floating modal -->
<div class="hidden fixed inset-0 z-40"
data-controller="previews--content-modal"
data-previews--content-modal-target="modal"
data-previews--content-modal-open-value="false">
<!-- Backdrop -->
<div class="absolute inset-0 bg-black bg-opacity-50 transition-opacity"></div>
<!-- Modal Content Container -->
<div class="relative h-full flex items-start justify-end p-4 sm:p-6 pb-8 sm:pb-12">
<!-- Modal Panel - Right side on desktop, full width on mobile -->
<div class="relative bg-white dark:bg-gray-900 rounded-lg shadow-xl
w-full sm:w-[600px] h-full max-h-[calc(100%-2rem)]
sm:mr-4 mx-auto sm:mx-0 flex flex-col
bg-gradient-to-b from-slate-800 to-gray-700
shadow-lg shadow-red-500/20 ring-1 ring-red-500/30"
data-modal-panel>
<!-- Close Button -->
<button type="button"
class="absolute top-4 right-4 z-10 text-gray-400 hover:text-white
transition-colors duration-200 rounded-full p-1
hover:bg-gray-800/50"
data-action="click->previews--content-modal#close"
data-previews--content-modal-target="closeButton"
aria-label="Close modal">
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
</svg>
</button>
<!-- Content Area (overflow handled by content) -->
<div class="flex-1 min-h-0 overflow-hidden" data-previews--content-modal-target="content">
<!-- Content will be loaded here dynamically -->
</div>
</div>
</div>
</div>
<!-- Text Tile Modal - Global modal for text tile expansions -->
<!-- Text Tile Modal Container -->
<div class="fixed inset-0 z-50 hidden items-center justify-center p-4"
data-controller="components--text-tile-modal"
data-action="text-tile:open-modal@window->components--text-tile-modal#open click->components--text-tile-modal#closeOnBackdrop keydown.esc@window->components--text-tile-modal#close"
data-components--text-tile-modal-target="container"
style="background-color: rgba(0, 0, 0, 0.75);">
<!-- Modal Dialog -->
<div class="bg-gradient-to-br from-gray-800 to-gray-900 rounded-xl shadow-2xl max-w-[600px] max-h-[575px] w-full flex flex-col"
data-components--text-tile-modal-target="dialog"
data-action="click->components--text-tile-modal#stopPropagation">
<!-- Modal Header with Close Button -->
<div class="flex items-center justify-between p-6 border-b border-white/10 flex-shrink-0">
<div class="flex-1" data-components--text-tile-modal-target="header">
<!-- Header content will be injected here -->
</div>
<button type="button"
class="ml-4 text-white/60 hover:text-white transition-colors flex-shrink-0"
data-action="click->components--text-tile-modal#close"
aria-label="Close">
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
</svg>
</button>
</div>
<!-- Modal Body - Scrollable -->
<div class="flex-1 overflow-y-auto p-6 text-tile-content"
data-components--text-tile-modal-target="body">
<!-- Body content will be injected here -->
</div>
</div>
</div>
<style>
/* Styling for links within text tile content */
.text-tile-content a {
color: rgb(96 165 250); /* blue-400 */
text-decoration: underline;
transition: color 0.2s;
}
.text-tile-content a:hover {
color: rgb(147 197 253); /* blue-300 */
}
</style>
</body>
</html>
| # |
Url |
Url |
Source |
Date |
| 1 |
https://www.kongregate.com/en/accoโฆ |
|
2026-10-18 08:56:39 |
| 2 |
https://www.thebolditalic.com/?gi=โฆ |
|
2026-10-18 08:56:39 |
| 3 |
http://m.voa-islam.com/ |
|
2026-10-18 08:56:37 |
| 4 |
https://www.thebolditalic.com/?gi=โฆ |
|
2026-10-18 08:56:37 |
| 5 |
https://www.texarkanatwins.com/%25โฆ |
|
2026-10-18 08:56:36 |
| 6 |
https://fabrikkforextonsberg.blogsโฆ |
|
2026-10-18 08:56:36 |
| 7 |
https://www.thebolditalic.com/?gi=โฆ |
|
2026-10-18 08:56:35 |
| 8 |
https://moteconline.motec.com.au/ |
|
2026-10-18 08:56:34 |
| 9 |
https://auth.mediacorp.sg/u/login?โฆ |
|
2026-10-18 08:56:34 |
| 10 |
https://www.thebolditalic.com/?gi=โฆ |
|
2026-10-18 08:56:33 |
| 11 |
https://www.thebolditalic.com/?gi=โฆ |
|
2026-10-18 08:56:33 |
| 12 |
https://lquadrat.de/hello-world/ |
|
2026-10-18 08:56:32 |
| 13 |
https://www.thebolditalic.com/?gi=โฆ |
|
2026-10-18 08:56:32 |
| 14 |
https://www.thebolditalic.com/?gi=โฆ |
|
2026-10-18 08:56:29 |
| 15 |
https://www.thebolditalic.com/?gi=โฆ |
|
2026-10-18 08:56:29 |
| 16 |
https://mattolegrange.com/ |
|
2026-10-18 08:56:28 |
| 17 |
https://onthisveryspot.com/ |
|
2026-10-18 08:56:28 |
| 18 |
https://www.texarkanatwins.com/%25โฆ |
|
2026-10-18 08:56:27 |
| 19 |
https://www.thebolditalic.com/?gi=โฆ |
|
2026-10-18 08:56:27 |
| 20 |
https://www.thebolditalic.com/?gi=โฆ |
|
2026-10-18 08:56:25 |