Official Updates

Official TFSF announcement
Status
Not open for further replies.
Phrase no_prefix: Changed '(no prefix) to (Add prefix).
Screenshot_2026-03-13-12-20-52-57_e4424258c8b8649f6e67d283a50a2cbc.jpg
 
Teal Style: Made a number of diy styling adjustments to address some of the more glaring styling discrepancies.
 
Last edited:
BB Code Tag Spoiler: Removed default 'Spoiler' phrase. | Modified behavior to show only entered title text, or a 'see more' phrase if no title entered.
Before
Screenshot_2026-03-18-03-01-15-54_e4424258c8b8649f6e67d283a50a2cbc.jpg
Screenshot_2026-03-18-03-01-56-45_e4424258c8b8649f6e67d283a50a2cbc.jpg


After
Screenshot_2026-03-18-03-05-49-77_e4424258c8b8649f6e67d283a50a2cbc.jpg

Screenshot_2026-03-18-03-20-22-37_e4424258c8b8649f6e67d283a50a2cbc.jpg
 
Last edited:
BB Code Media Sites: Set-up a suno.com media embed template. (*it works but suno.com links are tricky to embed properly apparently)

How-to guide found here
 
Last edited:
diem.io (Tank Warfare mini game): Set-up embed HTML Page Node. | Set-up Public Nav 'Games' + Sub Nav 'Tank Warfare' tabs. | Added a bunch of logic that includes a custom 'Fullscreen' & 'Close Game' button to resolve mobile scroll/pan annoyance.
Screenshot_2026-03-19-12-07-13-92_e4424258c8b8649f6e67d283a50a2cbc.jpg

*Budget as fuck, butt still..... something different for a forum. It's optionally solo or multiplayer by invite too.
 
Last edited:
Public Navigation: Reorganization. | Set-up nav tabs linked to dedicated thread lists for each thread prefix category.
Screenshot_2026-03-19-15-35-01-90_e4424258c8b8649f6e67d283a50a2cbc.jpg
Screenshot_2026-03-19-15-35-12-87_e4424258c8b8649f6e67d283a50a2cbc.jpg


Note: Need to resolve:
file path issue between categories. Done✓
quirk with FA icons on desktop. Done✓
 
Last edited:
Board Title & Meta Description Tags: Updated both to within the optimal SEO min/max character recommendation thresholds of 50–60 for the title and 120–160 for the meta. (*increased on-page SEO from B to A- as a result)

Board title
•Was: The Free Speech Forum (21 char)​

•Now: The Free Speech Forum - Open & Uncensored Social Discussion (56 char)​

Board meta description
Was: A place for free and open speech (32 char)​

•Now: Join The Free Speech Forum for uncensored news, politics, and social debate. A global community where your voice is heard without censorship. Join us today! (156 char)​
 
Last edited:
TECHNICAL HIATUS & QUANTUM DISPLACEMENT

Please be advised that active technical updates to the Change Log are temporarily suspended effective immediately due to a sudden onset of spontaneous quantum macro superpositioning causing TheFiend to phase between adjacent dimensions at random.

UPDATE: Back at it (Thursday, 16 April 2026NZT)

Current site issues:
1. Cloudflare storage link broken; Resolved ✓​
2. [DohTheme] add-on version outdated;​

Current site status: Stable
 
Last edited:
Community Notice: Disabled 'Dance Your Cares Away/Law Abiding Citizens' > 'New Fraqqle Rock' update/redirect notification. | Temporarily disabled Community Notices system to reduce unnecessary session queries since no notices are currently active.
 
Widgets: 4 Redundancies removed - [TH] Donate Campaign, Share Page, Featured Content, and Forum Statistics. | Started reorganizing the rest.
 
Last edited:
Custom User Fields: Set-up 2 additional Identities options (for Bitchute & Telegram) in the user Account area (directly below the 'About you' section).
Screenshot_2026-04-16-19-11-35-71_e4424258c8b8649f6e67d283a50a2cbc.jpg
 
Last edited:
Member Stats Widgets: Set-up 1. Message Count 2. Reaction Score, 3. Trophy Points, and 4. Total Donations (all linked to the Notable Members page). | Set-up and wrapped all 4 within an advanced HTML widget to create a single Leaderboard widget. (*located on the Forum View: Sidebar for desktop & below the Forum View list for mobile).
Screenshot_2026-04-18-14-37-18-72_e4424258c8b8649f6e67d283a50a2cbc.jpg
Note: Need to fine-tune it some more and will also have to work on adding new Trophies too since it appears most OG members already acquired all the defaults years ago. Done✓
 
Last edited:
User Trophies: Set-up a whole bunch more.

Note: the stock XF user Trophy system has retardedly limited options (~75% pedantically relating to donations) and uses ultra nerdy (underwhelming yet wildly overcomplicated, extremely vague, and highly temperamental/unreliable) boolean configured variables.

TLDR: Basically, it's a pain in the ass, can't really do fuck all with them.
 
Last edited:
Custom User Fields: Set-up another 3 (Rumble, Odysee, and Truth Social). | Disabled 3 of the defaults (Parler, Skype, and Facebook). | Updated default Twitter title > X/Twitter + added basic description.

Note: These are located in the user account section.
Screenshot_2026-04-18-02-17-48-31_e4424258c8b8649f6e67d283a50a2cbc.jpg



Note 2: Adding your handles to these creates a small clickable text link under 'Contacts' in the 'About' section of the user profile page.
Screenshot_2026-04-18-03-18-32-32_e4424258c8b8649f6e67d283a50a2cbc.jpg


Note 3: Have confirmed Bitchute & Telegram Custom User Fields work using my own channels, (*Telegram still seems a little tweaky though), butt I don't use the other 4 platforms so haven't been able to confirm if they're working yet.

Hit me up if there's any issues with them.
 
Last edited:
Widget Minor Headers: All of them | Optimized styling (adding linear-gradient backgrounds, font colors/weights, borders, icons, margins, padding, etcetera) more consistently in line with the major headers.
Screenshot_2026-04-18-14-06-42-92_e4424258c8b8649f6e67d283a50a2cbc.jpg
Screenshot_2026-04-18-14-06-53-72_e4424258c8b8649f6e67d283a50a2cbc.jpg

Screenshot_2026-04-18-14-24-10-02_e4424258c8b8649f6e67d283a50a2cbc.jpg
Screenshot_2026-04-18-14-23-58-77_e4424258c8b8649f6e67d283a50a2cbc.jpg
Screenshot_2026-04-18-14-23-45-71_e4424258c8b8649f6e67d283a50a2cbc.jpg
Screenshot_2026-04-18-14-23-22-42_e4424258c8b8649f6e67d283a50a2cbc.jpg
 
Attachment Storage: Cleared out around 20 (very large 50—200MB) broken vids from years ago that were hogging up (~1GB) of our limited/expensive data storage allowance.

This should free up enough space to store roughly 5,000 to 10,000 "normal" forum images (assuming a more reasonable average of 100–200KB per image).
 
Cache Rebuild: Optimize Avatars. | Ran the rebuild job (*took over an hour). | Estimated approx. 30-80% reduction in total storage space used by all avatars.
 
Last edited:
Public Navigation: Overall improvements. | Fixed incorrect LAC Vol. 1 link. | Set 'Home' & 'Forum' as independent top link tabs without nested sub tabs, moved/nested all thread category list link sub tabs under top level non-link tab 'Categories' and added Registered members link sub tab to the nested sub tabs under 'Info'.

Home > home page link.
Forum > forum view link.
Categories > opens thread category links menu;
-LAC (*non-link);​
--Vol.1 > original DYCA thread link.​
--Vol.2 > New Fraqqle Rock thread link.​
-Social > Social threads list link.​
-Debate > Debate threads list link.​
-Media > Media threads list link.​
-News > News threads list link.​
-Sports > Sports threads list link.​
-Rebarcock. > Rebarcock. threads list link.​
-Resources > Resources threads list link.​
-Official > Official threads list link.​
-Tank Warfare (game) > mini game page link.​
Info > opens info list menu;
-Rules > Rules thread link.​
-Guides > Guides thread link.​
-Updates > Updates thread link.​
-Your profile > Your profile page link.​
-Your account > Your account page link.​
-Current visitors > Visitors page link.​
-Registered members > Members page link.​
Support Free Speech > opens donate list menu;
-Become a Patron > TFSF Patreon sub. link.​
-Become a Sponsor > TFSF donate page link.​
Screenshot_2026-04-21-09-57-24-58_e4424258c8b8649f6e67d283a50a2cbc.webp

Screenshot_2026-04-21-09-57-33-75_e4424258c8b8649f6e67d283a50a2cbc.webp
 
Public Navigation: A few minor improvements. | Updated the Info section. | Added linked tabs for all 6 default XF Help Pages categories too.
Screenshot_2026-04-25-09-56-46-40_e4424258c8b8649f6e67d283a50a2cbc.webp
 
Post Action Bar/Menu: Added FA icons. | Tweaked (mobile) action menu header title font-weight.
MOBILE
Screenshot_2026-04-27-03-25-19-47_e4424258c8b8649f6e67d283a50a2cbc.webp


DESKTOP
Screenshot_2026-04-27-03-26-03-44_e4424258c8b8649f6e67d283a50a2cbc.webp
 
Advanced Statistics: Trialing an add-on that beefs up our operational security and enables a number of additional features such as an advanced stats widget, as well as traffic analysis and performance diagnostics pages.
*Widget.
Screenshot_2026-04-28-01-15-42-38_e4424258c8b8649f6e67d283a50a2cbc.webp
 
Last edited:
Advanced Statistics Widget: Started making some significant layout and styling improvements. | Repositioned several of the add-on's default stats and added a few missing default XF stats.
Screenshot_2026-04-28-20-39-17-07_e4424258c8b8649f6e67d283a50a2cbc.webp
Contents:
1. Adv. Stats widget modified template block.
2. Adv. Stats widget modified template extra.less block.

#1 is my first rough attempt at modifying the advanced stats widget's template (also includes some CSS styling), and #2 is the accompanying extra.less template styling that went with #1.

Note: I reverted the advanced stats widget template & styling back to default after discovering that my initial modification attempt, (with the 2 codes copied here), was apparently fucking up the desktop layout of the site somehow. I'm not yet sure why this was occurring as I specifically only modified the widget, although I suspect this is possibly another of the developer's security measures. For example, if I modify anything involving the branding, even just moving it slightly, a large glaring warning notice automatically appears across the widget, so I wouldn't be surprised if modifying the widget in other ways automatically triggers various other annoying results specifically intended to force us to refrain from daring to customize anything about it.

Regardless, I've saved my initial modification attempt codes here because they had improved the widget itself overall insofar as was possible at the time and I should be able to use some parts of these in future attempts.


/*ADV. STATS TEMPLATE (MOD TEST)*/
Code:
<xf:css>
.stat-pulse-dot {
    display: inline-block;
    width: 8px; height: 8px;
    background-color: #4caf50;
    border-radius: 50%;
    margin-left: 8px;
    margin-right: 6px;
    box-shadow: 0 0 0 rgba(76, 175, 80, 0.4);
    animation: statPulse 2s infinite;
    vertical-align: middle;
}
@keyframes statPulse {
    0% { box-shadow: 0 0 0 0 rgba(76, 175, 80, 0.7); }
    70% { box-shadow: 0 0 0 6px rgba(76, 175, 80, 0); }
    100% { box-shadow: 0 0 0 0 rgba(76, 175, 80, 0); }
}

.stat-radar-icon {
    color: #e53935;
    animation: radarPulse 1.5s infinite;
}
@keyframes radarPulse {
    0% { opacity: 0.6; transform: scale(0.9); }
    50% { opacity: 1; transform: scale(1.1); text-shadow: 0 0 5px rgba(229, 57, 53, 0.5); }
    100% { opacity: 0.6; transform: scale(0.9); }
}

@keyframes statTrill {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-3px); }
}

.stat-sparkline {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    height: 60px;
    margin-top: 5px;
    margin-bottom: 15px;
    padding-bottom: 0;
    gap: 3px;
    border-bottom: 1px solid @xf-borderColorLight;
}

.stat-spark-bar {
    flex: 1;
    background: linear-gradient(to top, #0288D1, #29B6F6);
    border-radius: 3px 3px 0 0;
    position: relative;
    transition: all 0.3s ease;
    display: flex;
    align-items: flex-end;
    justify-content: center;
    padding-bottom: 2px;
}

.stat-spark-bar:hover {
    transform: translateY(-2px);
    filter: brightness(1.1);
}

.stat-spark-bar.today {
    background: linear-gradient(to top, #F57C00, #FFCA28);
}

.stat-bar-text {
    font-size: 9px;
    font-weight: 700;
    color: #fff;
    text-shadow: 0 1px 1px rgba(0,0,0, 0.5);
    pointer-events: none;
    line-height: 1;
    padding-bottom: 3px;
}

.stat-device-bar {
    display: flex;
    height: 6px;
    border-radius: 3px;
    overflow: hidden;
    margin-top: 8px;
    background: @xf-borderColorLight;
}
.stat-dev-segment { height: 100%; }

.stat-toggle-line {
    text-align: center;
    cursor: pointer;
    margin: 10px 0 5px 0;
    padding: 4px 0;
    border-top: 1px dashed @xf-borderColorLight;
    border-bottom: 1px dashed @xf-borderColorLight;
    background: rgba(0,0,0,0.02);
    color: @xf-textColorMuted;
    font-size: 10px;
    transition: background 0.2s;
}
.stat-toggle-line:hover {
    background: rgba(0,0,0,0.05);
    color: @xf-textColor;
}

.stat-toggle-line .stat-arrow {
    display: inline-block;
    transition: transform 0.3s ease;
    animation: statTrill 2s infinite ease-in-out;
}

.stat-toggle-line.is-active .stat-arrow {
    transform: rotate(180deg);
}

#stat-detailed-metrics {
    display: none;
    opacity: 0;
    transition: opacity 0.3s ease;
}
#stat-detailed-metrics.is-active {
    display: block;
    opacity: 1;
    animation: statFadeIn 0.3s;
}
@keyframes statFadeIn {
    from { opacity: 0; transform: translateY(-5px); }
    to { opacity: 1; transform: translateY(0); }
}

.stat-footer-btn {
    border: 1px solid @xf-borderColor;
    border-radius: 12px;
    font-weight: 700;
    color: @xf-textColor !important;
    padding: 6px 15px;
    display: inline-block;
    text-decoration: none;
    font-size: 13px;
    background: @xf-contentAltBg;
    transition: background 0.2s, transform 0.2s;
}
.stat-footer-btn:hover {
    background: @xf-contentHighlightBg;
    text-decoration: none;
    transform: translateY(-1px);
}

.stat-glass-style .block-container {
    background: rgba(30, 35, 45, 0.65) !important;
    backdrop-filter: blur(10px) !important;
    -webkit-backdrop-filter: blur(10px) !important;
    border: 1px solid rgba(255, 255, 255, 0.1) !important;
    box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.37) !important;
    color: #f0f0f0 !important;
}
.stat-glass-style .block-header,
.stat-glass-style .block-minorHeader {
    background: transparent !important;
    color: #ffffff !important;
    border-bottom: 1px solid rgba(255, 255, 255, 0.1) !important;
}
.stat-glass-style .block-body {
    background: transparent !important;
}
.stat-glass-style a {
    color: #81d4fa !important;
}
.stat-glass-style .u-muted {
    color: #b0bec5 !important;
}
.stat-glass-style .stat-footer-btn {
    background: rgba(255, 255, 255, 0.1) !important;
    color: #fff !important;
    border: 1px solid rgba(255, 255, 255, 0.3) !important;
}
.stat-glass-style .stat-footer-btn:hover {
    background: rgba(255, 255, 255, 0.2) !important;
}
.stat-glass-style hr.formRowSep {
    border-color: rgba(255, 255, 255, 0.1) !important;
}
.stat-glass-style .stat-toggle-line {
    border-color: rgba(255, 255, 255, 0.1) !important;
    background: rgba(255, 255, 255, 0.05) !important;
    color: #aaa !important;
}
.stat-glass-style .stat-toggle-line:hover {
    background: rgba(255, 255, 255, 0.1) !important;
    color: #fff !important;
}
</xf:css>

<div class="block {{ $glassMode ? 'stat-glass-style' : '' }}" data-widget-key="statistiche_visite">
    <div class="block-container">
        {$layoutData|raw}
       
        <h3 class="block-minorHeader">
            <a href="{{ link('online') }}" style="text-decoration: none; color: inherit;">
                {{ phrase('statistiche_real_time_header') }}
            </a>
        </h3>

        <div class="block-body block-row">
           
            <xf:if is="count($online.users)">
    <div class="stats-user-scroll">
        <ul class="listInline u-smaller">
            <li><xf:fa icon="fa-users" /></li>
            <xf:foreach loop="$online.users" value="$user">
                <li>
                    <xf:username user="$user" rich="true" class="not-bold" /><xf:if is="!$loop.last">,</xf:if>
                </li>
            </xf:foreach>
        </ul>
    </div>
    <hr class="formRowSep" />
</xf:if>

<dl class="pairs pairs--justified u-smaller">
    <dt style="font-weight: bold; color: @xf-textColor;">
        <xf:if is="$hasLicense">
            <span class="stat-pulse-dot" title="Live Monitor"></span>
        </xf:if>
        <xf:fa icon="fa-user-clock" /> {{ phrase('statistiche_online_now') }}
    </dt>
    <dd><strong>{{ $online.total|number }}</strong></dd>
</dl>

<div class="u-muted u-smaller custom-stats-list" style="margin-bottom: 5px;">
    <!-- Ratio Bar -->
    <xf:set var="$totalAll" value="{{ $online.total + $online.robots }}" />
    <xf:if is="$totalAll > 0">
        <div class="stat-ratio-bar" style="margin-bottom: 8px;">
             <div style="display: flex; justify-content: space-between; font-size: 9px; opacity: 0.8; margin-bottom: 2px;">
                <span>Humans: {{ number($online.total / $totalAll * 100, 1) }}%</span>
                <span>Robots: {{ number($online.robots / $totalAll * 100, 1) }}%</span>
            </div>
            <div style="display: flex; height: 4px; border-radius: 2px; overflow: hidden; background: rgba(255,255,255,0.1);">
                <div style="width: {{ ($online.total / $totalAll) * 100 }}%; background: #4caf50;"></div>
                <div style="width: {{ ($online.robots / $totalAll) * 100 }}%; background: #999;"></div>
            </div>
        </div>
    </xf:if>

    <!-- Online Details -->
    <dl class="pairs pairs--justified"><dt><xf:fa icon="fa-user-check" /> {{ phrase('statistiche_members') }}</dt><dd>{{ $online.registered|number }}</dd></dl>
    <dl class="pairs pairs--justified"><dt><xf:fa icon="fa-user-secret" /> {{ phrase('statistiche_guests') }}</dt><dd>{{ $online.guests|number }}</dd></dl>
    <dl class="pairs pairs--justified"><dt><xf:fa icon="fa-spider" /> {{ phrase('statistiche_robots') }}</dt><dd>{{ $online.robots|number }}</dd></dl>

    <!-- Blocked Stats (If applicable) -->
    <xf:if is="$hasLicense AND $blockedToday > 0">
        <div style="margin-top: 4px; color: #e53935; font-weight: bold;">
            <xf:fa icon="fa-ban" class="stat-radar-icon" />
            {$blockedToday|number} {{ phrase('statistiche_blocked_today') }}
        </div>
    </xf:if>

    <!-- RESTORED VISITORS (Exposed outside of the hidden toggle) -->
    <div class="visitors-exposed-block" style="margin-top: 10px; border-top: 1px dashed @xf-borderColorLight; padding-top: 8px;">
        <dl class="pairs pairs--justified"><dt><xf:fa icon="fa-chart-line" /> {{ phrase('statistiche_visitors_today') }}</dt><dd>{$unici24h|number}</dd></dl>
        <dl class="pairs pairs--justified"><dt><xf:fa icon="fa-calendar-alt" /> {{ phrase('statistiche_visitors_month') }}</dt><dd>{$uniciMese|number}</dd></dl>
        <dl class="pairs pairs--justified"><dt><xf:fa icon="fa-globe" /> {{ phrase('statistiche_visitors_year') }}</dt><dd>{$uniciAnno|number}</dd></dl>
        <dl class="pairs pairs--justified"><dt><xf:fa icon="fa-eye" /> {{ phrase('statistiche_unique_visitors') }}</dt><dd><strong>{{ $totalViews|number }}</strong></dd></dl>
    </div>
</div>


           
             <hr class="formRowSep" />

            <!-- FORUM ANALYTICS SECTION -->
<h4 class="block-minorHeader" style="margin-top: 5px; margin-bottom: 10px; background: transparent; padding-left: 0; color: @xf-linkColor;">
    <a href="{{ link('statistiche') }}" style="text-decoration: none; color: inherit;">
        <xf:fa icon="fa-chart-bar" /> {{ phrase('statistiche_forum_stats') }}
    </a>
</h4>

<div class="custom-stats-list u-smaller">
    <!-- 1. Total Threads -->
    <dl class="pairs pairs--justified">
        <dt><xf:fa icon="fa-comments" /> {{ phrase('threads') }}</dt>
        <dd>{{ $xf.app.forumStatistics.threads|number }}</dd>
    </dl>
   
    <!-- 2. Total Posts (Messages) -->
    <dl class="pairs pairs--justified">
        <dt><xf:fa icon="fa-comment-dots" /> {{ phrase('messages') }}</dt>
        <dd>{{ $xf.app.forumStatistics.messages|number }}</dd>
    </dl>
   
    <!-- New Posts Today -->
    <dl class="pairs pairs--justified">
        <dt><xf:fa icon="fa-pencil-alt" /> {{ phrase('new_posts') }}</dt>
        <dd>{{ $forumStats.new_posts_today|number }}</dd>
    </dl>
   
    <!-- Total Members -->
    <dl class="pairs pairs--justified">
        <dt><xf:fa icon="fa-users" /> {{ phrase('statistiche_members') }}</dt>
        <dd>{{ $xf.app.forumStatistics.users|number }}</dd>
    </dl>

    <!-- 3. Latest Member -->
    <dl class="pairs pairs--justified">
        <dt><xf:fa icon="fa-user-plus" /> {{ phrase('latest_member') }}</dt>
        <dd><xf:username user="{$xf.app.forumStatistics.latestUser}" rich="true" /></dd>
    </dl>
</div>

<!-- NEWEST MEMBERS (Outside toggle) -->
<xf:if is="$xf.options.statistiche_show_latest">
    <div class="u-muted u-smaller" style="margin-top: 10px; padding-top: 10px; border-top: 1px dashed @xf-borderColorLight;">
        <div style="margin-bottom:6px; font-weight: bold;">{{ phrase('statistiche_newest_members') }}:</div>
        <div style="display: flex; gap: 6px; justify-content: flex-start; flex-wrap: wrap;">
            <xf:foreach loop="$latestUsers" value="$user">
                <xf:avatar user="$user" size="s" data-xf-init="tooltip" title="{$user.username}" style="width: 28px; height: 28px; border-radius: 50%;" />
            </xf:foreach>
        </div>
    </div>
</xf:if>

<hr class="formRowSep" />

<!-- FOOTER (No Toggle, Standard Placement) -->
<div style="text-align:center; margin-top:15px; padding-bottom: 5px;">
    <xf:if is="$xf.visitor.hasPermission('general', 'view_report')">
        <a href="{{ link('statistiche/') }}" class="stat-footer-btn">
            <xf:fa icon="fa-list-alt" /> {{ phrase('statistiche_view_full_report') }}
        </a>
    </xf:if>

    <xf:if is="$brandingHtml">
        <div style="margin-top: 10px;">
            {$brandingHtml|raw}
        </div>
    </xf:if>
</div>

ADVANCED STATS EXTRA.LESS (STYLE TEST)
CSS:
/********ADVANCED STATS WIDGET********/
[data-widget-key="statistiche_visite"] {

    // 1. Username Scrollbox & Icon Fix
    .stats-user-scroll {
        max-height: 80px;
        overflow-y: auto;
        padding-right: 5px;
        margin-bottom: 5px;

        &::-webkit-scrollbar { width: 4px; }
        &::-webkit-scrollbar-track { background: rgba(0,0,0,0.05); }
        &::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.2); border-radius: 2px; }
    }

    // Fix leading icon in username list
    .listInline {
        li:first-child {
            margin-right: 8px;
            &::after { content: "" !important; }
        }
        li { display: inline; margin-right: 3px; }
    }

    // 2. Hide unwanted toggle elements
    .stat-toggle-line, #stat-detailed-metrics {
        display: none !important;
    }

    // 3. Formatting for all Stat Lists (Online, Visitors, Analytics)
    .custom-stats-list, .visitors-exposed-block {
        .pairs--justified {
            margin-bottom: 3px;
           
            dt {
                font-weight: @xf-fontWeightNormal;
                display: flex;
                align-items: center;
                &::after { content: ":"; } // Single colon
                i { width: 18px; margin-right: 5px; text-align: center; }
            }
           
            dd {
                font-weight: @xf-fontWeightNormal;
                strong { font-weight: @xf-fontWeightNormal; }
            }
        }
    }

    // 4. Force "Online Now" row (the total) to stay Bold
    .pairs--justified.u-smaller:not(.custom-stats-list .pairs--justified) {
        dt {
            font-weight: @xf-fontWeightHeavy !important;
            color: @xf-textColor;
        }
        dd strong { font-weight: @xf-fontWeightHeavy !important; }
    }

    // 5. Spacing for Newest Members & Footer Line
    .u-muted.u-smaller[style*="margin-top: 10px"] {
        margin-bottom: 25px !important;
    }
}
// Ensure the latest member name aligns nicely
.custom-stats-list .pairs--justified dd {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 120px; // Prevents long names from breaking the layout
    text-align: right;
}

/*****************END********THEFIEND*/
 
Last edited:
Advanced Statistics Add-on: Ended trial. | Results were promising yet insufficient to justify bothering with it. | Uninstalled. | Re-enabled custom guerrilla stats widgie.
 
[XB] Badges Add-on: Trialed to assess if it could meaningfully enhance the default XF Trophy system. | Results were unimpressive. It's essentially the XF Trophy system + ghey custom badges. | Uninstalled.
 
Widget Minor Headers: Discovered the alternate dark mode background & text color styling isn't being applied in Default Style - Dark Mode. Attempted to address it, without success so far. Update: Resolved ✓
 
Last edited:
Theme Styles: Created fresh style ('D3A: TFSF Blue (light | dark)') set as a child to the System Default. | Completely overhauled and moved entire extra.less code + other template modifications from the System Default into the TFSF Blue style. | Almost fully replicated the System Default style in TFSF Blue style. Still some niggly fine tuning to do but already good enough to use, and isn't afflicted with the issues plaguing the System Default.
Light Mode
Screenshot_2026-05-03-06-12-53-87_e4424258c8b8649f6e67d283a50a2cbc.webp


Dark Mode
Screenshot_2026-05-03-06-13-15-94_e4424258c8b8649f6e67d283a50a2cbc.webp
 
Report System Phrases: 'Report' buttons, report pop-up overlay block header title ('Report Content'), & report block ('Report reason:') prompt phrase, each respectively changed to 'Snitch', 'Official Snitch Portal', & 'Reason for snitching:'.
Screenshot_2026-05-03-06-38-55-29_e4424258c8b8649f6e67d283a50a2cbc.webp
 
Last edited:
Footercock.memorial: Replaced version 1 code with improved version which functions as an interactive internal link to the entertaining Rebarcock. tells a story thread.....butt with a fiendish twist.
Screenshot_2026-05-03-14-20-11-82_e4424258c8b8649f6e67d283a50a2cbc.webp
 
Last edited:
Themehouse Footer Branding: Disabled automated public template modification that applies the TH branding. Effectively removing the branding and thus reduced the footer external branding bloat.

Costs $350 to legally remove the XF branding mess unfortunately, otherwise it'd already be gone too.
 
[DohTheme] REME Add-on: Safely disabled, uninstalled, and removed (*t'was over 4 or 5 years out versioned). | New custom theme styles in development.
 
Status
Not open for further replies.
Back
Top Bottom