fix: purge FMHY refs, bump sitewide fonts, 4-col contraband grid, brighter text colors

This commit is contained in:
jae 2026-04-03 00:04:32 +00:00
parent ca92fd16b9
commit 3224bb46fa
6 changed files with 102 additions and 181440 deletions

View file

@ -820,7 +820,7 @@ def backup_all():
except Exception as e:
return jsonify({'error': str(e)}), 500
# ─── Contraband (FMHY) ───────────────────────────────
# ─── Contraband ───────────────────────────────
_contraband_cache = None
_contraband_mtime = 0

File diff suppressed because one or more lines are too long

View file

@ -1,5 +1,5 @@
/*
CONTRABAND // FMHY DATABASE Classified Resource Index
CONTRABAND Classified Resource Index
*/
/* ─── Stats Bar ──────────────────────────────────────── */
@ -12,7 +12,7 @@
border-left: 3px solid var(--mil-red);
margin-bottom: 1.5rem;
font-family: var(--font-mono);
font-size: 0.65rem;
font-size: 0.85rem;
letter-spacing: 1px;
flex-wrap: wrap;
}
@ -25,14 +25,14 @@
.crt-stat-label {
color: var(--text-muted);
font-size: 0.55rem;
font-size: 0.95rem;
text-transform: uppercase;
}
.crt-stat-value {
color: var(--status-green);
font-weight: 700;
font-size: 0.8rem;
font-size: 1rem;
}
.crt-stat-value.amber { color: var(--status-amber); }
@ -51,7 +51,7 @@
border: 1px solid var(--border);
color: var(--text-primary);
font-family: var(--font-mono);
font-size: 0.75rem;
font-size: 0.95rem;
letter-spacing: 1px;
outline: none;
transition: all 0.3s ease;
@ -73,7 +73,7 @@
top: 50%;
transform: translateY(-50%);
color: var(--text-muted);
font-size: 0.8rem;
font-size: 1rem;
pointer-events: none;
}
@ -84,7 +84,7 @@
transform: translateY(-50%);
color: var(--text-muted);
font-family: var(--font-mono);
font-size: 0.6rem;
font-size: 1rem;
letter-spacing: 1px;
}
@ -103,7 +103,7 @@
border: 1px solid var(--border);
color: var(--text-muted);
font-family: var(--font-mono);
font-size: 0.6rem;
font-size: 1rem;
letter-spacing: 1px;
cursor: pointer;
transition: all 0.3s ease;
@ -124,7 +124,7 @@
/* ─── Category Grid ──────────────────────────────────── */
.crt-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
grid-template-columns: repeat(4, 1fr);
gap: 1rem;
margin-bottom: 2rem;
}
@ -160,7 +160,7 @@
.crt-card-code {
font-family: var(--font-mono);
font-size: 0.55rem;
font-size: 0.95rem;
color: var(--mil-red);
letter-spacing: 2px;
margin-bottom: 0.35rem;
@ -169,7 +169,7 @@
.crt-card-name {
font-family: var(--font-display);
font-size: 0.8rem;
font-size: 1rem;
font-weight: 700;
color: var(--text-primary);
letter-spacing: 1px;
@ -178,7 +178,7 @@
.crt-card-icon {
float: right;
font-size: 1.4rem;
font-size: 1.8rem;
opacity: 0.5;
margin-top: -0.25rem;
}
@ -187,7 +187,7 @@
display: flex;
justify-content: space-between;
font-family: var(--font-mono);
font-size: 0.55rem;
font-size: 0.95rem;
color: var(--text-muted);
letter-spacing: 1px;
border-top: 1px solid var(--border);
@ -204,7 +204,7 @@
}
.crt-card-status {
font-size: 0.5rem;
font-size: 0.9rem;
color: var(--status-green);
letter-spacing: 2px;
text-transform: uppercase;
@ -220,7 +220,7 @@
border: 1px solid var(--border);
color: var(--text-secondary);
font-family: var(--font-mono);
font-size: 0.65rem;
font-size: 0.85rem;
letter-spacing: 1px;
cursor: pointer;
transition: all 0.3s ease;
@ -244,7 +244,7 @@
.crt-detail-code {
font-family: var(--font-mono);
font-size: 0.6rem;
font-size: 1rem;
color: var(--mil-red);
letter-spacing: 3px;
margin-bottom: 0.25rem;
@ -252,7 +252,7 @@
.crt-detail-title {
font-family: var(--font-display);
font-size: 1.4rem;
font-size: 1.8rem;
font-weight: 700;
color: var(--text-primary);
letter-spacing: 2px;
@ -263,7 +263,7 @@
display: flex;
gap: 1.5rem;
font-family: var(--font-mono);
font-size: 0.6rem;
font-size: 1rem;
color: var(--text-muted);
letter-spacing: 1px;
}
@ -293,7 +293,7 @@
.crt-sub-toggle {
color: var(--text-muted);
font-size: 0.6rem;
font-size: 1rem;
transition: transform 0.3s ease;
}
@ -303,7 +303,7 @@
.crt-sub-name {
font-family: var(--font-display);
font-size: 0.75rem;
font-size: 0.95rem;
font-weight: 600;
color: var(--text-primary);
letter-spacing: 1px;
@ -312,7 +312,7 @@
.crt-sub-count {
font-family: var(--font-mono);
font-size: 0.55rem;
font-size: 0.95rem;
color: var(--text-muted);
letter-spacing: 1px;
}
@ -321,7 +321,7 @@
padding: 0.5rem 1rem;
margin-bottom: 0.5rem;
font-family: var(--font-mono);
font-size: 0.6rem;
font-size: 1rem;
color: var(--status-amber);
line-height: 1.5;
border-left: 2px solid var(--status-amber);
@ -352,7 +352,7 @@
.crt-entry-star {
color: var(--status-amber);
font-size: 0.7rem;
font-size: 0.9rem;
min-width: 1rem;
text-align: center;
padding-top: 0.1rem;
@ -364,7 +364,7 @@
}
.crt-entry-name {
font-size: 0.7rem;
font-size: 0.9rem;
font-weight: 600;
letter-spacing: 0.5px;
}
@ -384,7 +384,7 @@
}
.crt-entry-desc {
font-size: 0.6rem;
font-size: 1rem;
color: var(--text-muted);
line-height: 1.5;
margin-top: 0.15rem;
@ -398,7 +398,7 @@
}
.crt-entry-extra a {
font-size: 0.55rem;
font-size: 0.95rem;
color: var(--text-muted);
text-decoration: none;
padding: 0.1rem 0.3rem;
@ -429,7 +429,7 @@
.crt-result-breadcrumb {
font-family: var(--font-mono);
font-size: 0.5rem;
font-size: 0.9rem;
color: var(--mil-red);
letter-spacing: 1px;
margin-bottom: 0.25rem;
@ -437,7 +437,7 @@
.crt-result-name {
font-family: var(--font-mono);
font-size: 0.7rem;
font-size: 0.9rem;
font-weight: 600;
}
@ -450,7 +450,7 @@
.crt-result-desc {
font-family: var(--font-mono);
font-size: 0.6rem;
font-size: 1rem;
color: var(--text-muted);
margin-top: 0.15rem;
}
@ -460,7 +460,7 @@
text-align: center;
padding: 3rem;
font-family: var(--font-mono);
font-size: 0.7rem;
font-size: 0.9rem;
color: var(--text-muted);
letter-spacing: 2px;
}
@ -480,20 +480,20 @@
text-align: center;
padding: 3rem;
font-family: var(--font-mono);
font-size: 0.7rem;
font-size: 0.9rem;
color: var(--text-muted);
letter-spacing: 2px;
border: 1px dashed var(--border);
}
/* ─── FMHY Attribution ───────────────────────────────── */
/* ─── Attribution ───────────────────────────────── */
.crt-attribution {
margin-top: 2rem;
padding: 1rem 1.25rem;
background: rgba(16, 16, 16, 0.5);
border: 1px solid var(--border);
font-family: var(--font-mono);
font-size: 0.55rem;
font-size: 0.95rem;
color: var(--text-muted);
letter-spacing: 1px;
text-align: center;
@ -509,6 +509,18 @@
}
/* ─── Responsive ─────────────────────────────────────── */
@media (max-width: 1200px) {
.crt-grid {
grid-template-columns: repeat(3, 1fr);
}
}
@media (max-width: 900px) {
.crt-grid {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 768px) {
.crt-stats-bar {
gap: 1rem;

View file

@ -21,9 +21,9 @@
--mil-red: #8b0000;
--mil-red-dim: #8b000040;
--link-color: #6688aa;
--text-primary: #c0c0c0;
--text-secondary: #707070;
--text-muted: #3a3a3a;
--text-primary: #d8d8d8;
--text-secondary: #999999;
--text-muted: #666666;
--border: #2a2a2a;
--border-accent: #ffffff10;
--danger: #ff2d2d;
@ -142,7 +142,7 @@ a:hover { color: #fff; text-shadow: none; }
.logo-bracket { color: #e0e0e0; font-weight: 300; }
.logo-accent { color: #e0e0e0; }
.logo-status {
font-size: 0.55rem;
font-size: 0.75rem;
color: var(--status-green);
margin-left: 0.75rem;
animation: pulse-status 2s ease-in-out infinite;
@ -258,7 +258,7 @@ a:hover { color: #fff; text-shadow: none; }
/* Dropdown Arrow */
.dropdown-arrow {
font-size: 0.55rem;
font-size: 0.75rem;
margin-left: 0.35rem;
opacity: 0.5;
transition: transform 0.3s ease, opacity 0.3s ease;
@ -278,7 +278,7 @@ a:hover { color: #fff; text-shadow: none; }
display: flex;
align-items: center;
gap: 1rem;
font-size: 0.65rem;
font-size: 0.85rem;
color: var(--text-secondary);
}
@ -291,7 +291,7 @@ a:hover { color: #fff; text-shadow: none; }
.nav-signal {
color: var(--status-green);
letter-spacing: 1px;
font-size: 0.55rem;
font-size: 0.75rem;
}
/* Mobile Toggle */
@ -401,7 +401,7 @@ a:hover { color: #fff; text-shadow: none; }
.panel-title {
font-family: var(--font-mono);
font-size: 0.6rem;
font-size: 0.8rem;
letter-spacing: 3px;
color: var(--text-secondary);
text-transform: uppercase;
@ -421,7 +421,7 @@ a:hover { color: #fff; text-shadow: none; }
.panel-status-dot {
font-family: var(--font-mono);
font-size: 0.55rem;
font-size: 0.75rem;
letter-spacing: 1px;
}
@ -496,7 +496,7 @@ a:hover { color: #fff; text-shadow: none; }
.coord-label {
display: block;
font-family: var(--font-mono);
font-size: 0.5rem;
font-size: 0.7rem;
letter-spacing: 2px;
color: var(--text-secondary);
}
@ -519,7 +519,7 @@ a:hover { color: #fff; text-shadow: none; }
.hero-label {
font-family: var(--font-mono);
font-size: 0.65rem;
font-size: 0.85rem;
letter-spacing: 4px;
color: var(--text-secondary);
margin-bottom: 1rem;
@ -593,7 +593,7 @@ a:hover { color: #fff; text-shadow: none; }
============================ */
.metric-label {
font-family: var(--font-mono);
font-size: 0.55rem;
font-size: 0.75rem;
letter-spacing: 2px;
color: var(--text-secondary);
}
@ -625,7 +625,7 @@ a:hover { color: #fff; text-shadow: none; }
.metric-val {
font-family: var(--font-mono);
font-size: 0.65rem;
font-size: 0.85rem;
color: var(--status-green);
text-align: right;
text-shadow: 0 0 6px var(--status-green-glow);
@ -731,7 +731,7 @@ a:hover { color: #fff; text-shadow: none; }
.container-label {
font-family: var(--font-mono);
font-size: 0.5rem;
font-size: 0.7rem;
letter-spacing: 2px;
color: #808080;
opacity: 0.7;
@ -766,7 +766,7 @@ a:hover { color: #fff; text-shadow: none; }
.graph-stat-label {
display: block;
font-family: var(--font-mono);
font-size: 0.5rem;
font-size: 0.7rem;
letter-spacing: 2px;
color: var(--text-secondary);
margin-bottom: 0.25rem;
@ -815,7 +815,7 @@ a:hover { color: #fff; text-shadow: none; }
.hud-dot-online {
font-family: var(--font-mono);
font-size: 0.55rem;
font-size: 0.75rem;
color: var(--status-green);
letter-spacing: 1px;
}
@ -840,7 +840,7 @@ a:hover { color: #fff; text-shadow: none; }
.hud-bstat-value {
font-family: var(--font-mono);
font-size: 0.6rem;
font-size: 0.8rem;
color: var(--text-primary);
letter-spacing: 1px;
}
@ -855,7 +855,7 @@ a:hover { color: #fff; text-shadow: none; }
.hud-scan-label {
font-family: var(--font-mono);
font-size: 0.5rem;
font-size: 0.7rem;
letter-spacing: 2px;
color: var(--text-secondary);
animation: scanPulse 2s ease infinite;
@ -884,7 +884,7 @@ a:hover { color: #fff; text-shadow: none; }
.hud-scan-pct {
font-family: var(--font-mono);
font-size: 0.55rem;
font-size: 0.75rem;
color: var(--status-green);
min-width: 28px;
}
@ -994,7 +994,7 @@ a:hover { color: #fff; text-shadow: none; }
.panel-title {
font-family: var(--font-display);
font-size: 0.65rem;
font-size: 0.85rem;
letter-spacing: 2px;
color: var(--text-secondary);
}
@ -1046,7 +1046,7 @@ a:hover { color: #fff; text-shadow: none; }
}
.skill-name {
font-size: 0.6rem;
font-size: 0.8rem;
letter-spacing: 1px;
color: var(--text-secondary);
}
@ -1072,7 +1072,7 @@ a:hover { color: #fff; text-shadow: none; }
.bar-fill.animated { width: var(--target-width); }
.skill-pct {
font-size: 0.65rem;
font-size: 0.85rem;
color: #d0d0d0;
text-align: right;
}
@ -1120,13 +1120,13 @@ a:hover { color: #fff; text-shadow: none; }
}
.blog-date {
font-size: 0.6rem;
font-size: 0.8rem;
color: var(--text-secondary);
letter-spacing: 2px;
}
.blog-tag {
font-size: 0.55rem;
font-size: 0.75rem;
letter-spacing: 1px;
color: #808080;
padding: 0.2rem 0.5rem;
@ -1158,12 +1158,12 @@ a:hover { color: #fff; text-shadow: none; }
}
.blog-read-time {
font-size: 0.6rem;
font-size: 0.8rem;
color: var(--text-muted);
}
.blog-link {
font-size: 0.65rem;
font-size: 0.85rem;
font-family: var(--font-display);
letter-spacing: 2px;
color: #d0d0d0;
@ -1219,7 +1219,7 @@ a:hover { color: #fff; text-shadow: none; }
}
.dev-status {
font-size: 0.55rem;
font-size: 0.75rem;
letter-spacing: 1px;
color: var(--status-green);
}
@ -1250,7 +1250,7 @@ a:hover { color: #fff; text-shadow: none; }
}
.tech-tag {
font-size: 0.55rem;
font-size: 0.75rem;
letter-spacing: 1px;
padding: 0.25rem 0.6rem;
border: 1px solid var(--border);
@ -1264,7 +1264,7 @@ a:hover { color: #fff; text-shadow: none; }
}
.dev-link {
font-size: 0.65rem;
font-size: 0.85rem;
font-family: var(--font-display);
letter-spacing: 2px;
}
@ -1313,7 +1313,7 @@ a:hover { color: #fff; text-shadow: none; }
}
.link-url {
font-size: 0.65rem;
font-size: 0.85rem;
color: var(--text-secondary);
}
@ -1350,7 +1350,7 @@ a:hover { color: #fff; text-shadow: none; }
.form-label {
display: block;
font-size: 0.55rem;
font-size: 0.75rem;
letter-spacing: 2px;
color: var(--text-secondary);
margin-bottom: 0.5rem;
@ -1412,7 +1412,7 @@ a:hover { color: #fff; text-shadow: none; }
.form-submit:hover::before { left: 0; }
.submit-icon {
font-size: 0.6rem;
font-size: 0.8rem;
transition: transform 0.3s ease;
}
@ -1428,7 +1428,7 @@ a:hover { color: #fff; text-shadow: none; }
.info-label {
display: block;
font-size: 0.55rem;
font-size: 0.75rem;
letter-spacing: 2px;
color: var(--text-muted);
margin-bottom: 0.3rem;
@ -1485,19 +1485,19 @@ a:hover { color: #fff; text-shadow: none; }
}
.footer-copy {
font-size: 0.6rem;
font-size: 0.8rem;
color: var(--text-muted);
letter-spacing: 1px;
}
.footer-coords {
font-size: 0.6rem;
font-size: 0.8rem;
color: var(--text-muted);
letter-spacing: 1px;
}
.footer-signal {
font-size: 0.6rem;
font-size: 0.8rem;
color: var(--status-green);
letter-spacing: 1px;
}
@ -1601,7 +1601,7 @@ a:hover { color: #fff; text-shadow: none; }
.dropdown li a {
padding-left: 3rem;
font-size: 0.65rem;
font-size: 0.85rem;
}
.dropdown li a::before {
@ -1727,7 +1727,7 @@ a:hover { color: #fff; text-shadow: none; }
}
.weather-detail {
font-family: 'JetBrains Mono', monospace;
font-size: 0.6rem;
font-size: 0.8rem;
color: rgba(192, 192, 192, 0.4);
letter-spacing: 1px;
padding: 0.2rem 0.5rem;
@ -1757,7 +1757,7 @@ a:hover { color: #fff; text-shadow: none; }
}
.np-album {
font-family: 'JetBrains Mono', monospace;
font-size: 0.6rem;
font-size: 0.8rem;
color: rgba(192, 192, 192, 0.35);
letter-spacing: 0.5px;
margin-bottom: 0.3rem;
@ -1828,7 +1828,7 @@ a:hover { color: #fff; text-shadow: none; }
.chat-model {
color: #555;
font-size: 0.5rem;
font-size: 0.7rem;
letter-spacing: 1px;
}
@ -1893,14 +1893,14 @@ a:hover { color: #fff; text-shadow: none; }
.chat-welcome-sub {
font-family: var(--font-mono);
font-size: 0.55rem;
font-size: 0.75rem;
letter-spacing: 3px;
color: var(--text-secondary);
}
.chat-welcome-hint {
font-family: var(--font-mono);
font-size: 0.6rem;
font-size: 0.8rem;
letter-spacing: 1px;
color: #555;
margin-top: 0.5rem;
@ -2040,7 +2040,7 @@ a:hover { color: #fff; text-shadow: none; }
color: var(--status-green);
cursor: pointer;
transition: all 0.2s;
font-size: 0.65rem;
font-size: 0.85rem;
}
.chat-send:hover {
@ -2136,7 +2136,7 @@ a:hover { color: #fff; text-shadow: none; }
.globe-coord-block .coord-value {
display: block;
font-family: var(--font-mono);
font-size: 0.65rem;
font-size: 0.85rem;
color: var(--status-green);
text-shadow: 0 0 6px var(--status-green-glow);
}
@ -2152,13 +2152,13 @@ a:hover { color: #fff; text-shadow: none; }
width: 100%;
border-collapse: collapse;
font-family: var(--font-mono);
font-size: 0.6rem;
font-size: 0.8rem;
}
.proc-table th {
text-align: left;
padding: 0.3rem 0.4rem;
font-size: 0.5rem;
font-size: 0.7rem;
letter-spacing: 2px;
color: var(--text-secondary);
border-bottom: 1px solid var(--border);
@ -2197,7 +2197,7 @@ a:hover { color: #fff; text-shadow: none; }
text-align: center;
color: #555;
letter-spacing: 2px;
font-size: 0.5rem;
font-size: 0.7rem;
padding: 1rem !important;
animation: hintPulse 2s ease-in-out infinite;
}
@ -2220,7 +2220,7 @@ a:hover { color: #fff; text-shadow: none; }
min-height: 180px;
}
.proc-table {
font-size: 0.55rem;
font-size: 0.75rem;
}
}
@ -2264,7 +2264,7 @@ a:hover { color: #fff; text-shadow: none; }
.clock-date {
font-family: var(--font-mono);
font-size: 0.55rem;
font-size: 0.75rem;
color: var(--text-secondary);
letter-spacing: 2px;
}

View file

@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JAESWIFT // CONTRABAND — FMHY Resource Index</title>
<title>JAESWIFT // CONTRABAND — Classified Resource Index</title>
<meta name="description" content="The largest classified index of free resources on the internet — catalogued, coded, and declassified.">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@400;700;900&family=JetBrains+Mono:wght@300;400;500;700&display=swap" rel="stylesheet">
@ -40,7 +40,7 @@
<section class="section-header" style="padding-top: calc(var(--nav-height) + 1.5rem);">
<div class="section-header-label">DEPOT // CLASSIFIED RESOURCE INDEX</div>
<h1 class="section-header-title">CONTRABAND <span class="accent">//</span> FMHY</h1>
<h1 class="section-header-title">CONTRABAND</h1>
<p class="section-header-sub">&gt; The largest classified index of free resources on the internet — 16,000+ assets catalogued, coded, and declassified.</p>
</section>

View file

@ -1,5 +1,5 @@
/*
CONTRABAND // FMHY Resource Database Controller
CONTRABAND // Resource Database Controller
*/
(function () {
'use strict';
@ -37,7 +37,7 @@
// Stats bar
html += `<div class="crt-stats-bar">
<div class="crt-stat"><span class="crt-stat-label">DATABASE</span><span class="crt-stat-value">FMHY</span></div>
<div class="crt-stat"><span class="crt-stat-label">DATABASE</span><span class="crt-stat-value"> ONLINE</span></div>
<div class="crt-stat"><span class="crt-stat-label">TOTAL ASSETS</span><span class="crt-stat-value">${fmt(data.total_entries)}</span></div>
<div class="crt-stat"><span class="crt-stat-label">STARRED</span><span class="crt-stat-value amber">${fmt(data.total_starred)}</span></div>
<div class="crt-stat"><span class="crt-stat-label">CATEGORIES</span><span class="crt-stat-value">${data.total_categories}</span></div>
@ -71,12 +71,7 @@
}
html += `</div>`;
// Attribution
html += `<div class="crt-attribution">
DATA SOURCE: <a href="https://fmhy.net" target="_blank" rel="noopener">FREEMEDIAHECKYEAH</a>
&nbsp;//&nbsp; AUTO-SYNCED FROM <a href="https://github.com/fmhy/edit" target="_blank" rel="noopener">GITHUB.COM/FMHY/EDIT</a>
&nbsp;//&nbsp; ALL CREDIT TO THE FMHY COMMUNITY
</div>`;
// End of grid
root.innerHTML = html;
bindIndexEvents();
@ -144,11 +139,7 @@
}
html += `</div>`;
// Attribution
html += `<div class="crt-attribution">
DATA SOURCE: <a href="https://fmhy.net" target="_blank" rel="noopener">FREEMEDIAHECKYEAH</a>
&nbsp;//&nbsp; CATEGORY: ${esc(cat.code)} // ${esc(cat.name)}
</div>`;
// End of grid
root.innerHTML = html;
bindDetailEvents(cat);