Conversations with masters, champions, and leaders of the Tang Soo Do community. Trending Now
Tang Soo Do Leadership
'
: '';
row.innerHTML = imgHtml
+ '
'
+ p.title.replace(//g,'>')
+ '
';
listEl.appendChild(row);
});
}
window.tsLeaderNav = window.tsLeaderNav || function(){};
window.tsLeaderNav = function(u, dir) {
if (u === uid) render(page + dir);
};
render(0);
})();
Tang Soo Do History
The Shocking Truth: Why Tang Soo Do Karate Isn't in the Olympics
Discover the Rich Heritage of Tang Soo Do!
Latest Articles
🎙 The Martial Paradox of Tang Soo Do
/* ── Utility bar ─────────────────────────────────── */
.ts-util-bar {
background:#f2f2f2;border-bottom:1px solid #ddd;
font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:12px;color:#444;
}
.ts-util-inner {
max-width:1280px;margin:0 auto;padding:0 20px;
display:flex;align-items:center;height:34px;gap:18px;
}
.ts-util-left { display:flex;align-items:center;gap:14px;flex:1; }
.ts-util-right { display:flex;align-items:center;gap:10px; }
.ts-util-bar a { color:#444;text-decoration:none; }
.ts-util-bar a:hover { color:#c8102e; }
.ts-util-social a {
display:inline-flex;align-items:center;justify-content:center;
width:24px;height:24px;border-radius:50%;
color:#555;transition:color .15s;
}
.ts-util-social a:hover { color:#c8102e; }
.ts-util-divider { color:#ccc; }
/* ── Logo + Ad banner ────────────────────────────── */
.ts-logo-banner {
background:#fff;border-bottom:1px solid #e8e8e8;
font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
}
.ts-lb-inner {
max-width:1280px;margin:0 auto;padding:12px 20px;
display:flex;align-items:center;gap:20px;justify-content:space-between;
}
/* Logo block */
.ts-lb-logo {
display:flex;flex-direction:column;align-items:center;
text-decoration:none;flex-shrink:0;min-width:120px;
background:transparent;
padding:0;
border-radius:0;
}
.ts-lb-logo-flags { display:flex;align-items:center;gap:6px;margin-bottom:6px; }
.ts-lb-logo-flags img { height:32px;border:1px solid #ddd;border-radius:2px; }
.ts-lb-logo-emblem { width:auto;height:80px;max-width:240px;object-fit:contain; }
.ts-lb-logo-name {
display:flex;align-items:center;gap:8px;
font-size:13px;font-weight:900;color:#0f1e3c;
text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;margin-top:6px;
}
.ts-lb-logo-name::before,.ts-lb-logo-name::after { display:none; }
/* Ad slot */
.ts-lb-ad {
flex:1;display:flex;align-items:stretch;
background:#111;border-radius:6px;overflow:hidden;
min-height:90px;
}
/* When all slides are image banners, lock to 728×90 */
.ts-lb-ad.ts-ban-img-only { background:transparent;min-height:0;flex:0 0 728px;max-width:728px; }
.ts-lb-ad.ts-ban-img-only .ts-lb-banner-slide { height:90px;overflow:hidden; }
.ts-lb-ad.ts-ban-img-only .ts-lb-banner-slide img { width:728px;max-width:728px;height:90px;object-fit:cover;display:block; }
.ts-lb-ad-left {
background:#111;padding:14px 20px;display:flex;flex-direction:column;
justify-content:center;flex:1;min-width:0;
}
.ts-lb-ad-site {
font-size:18px;font-weight:900;color:#fff;text-transform:uppercase;
letter-spacing:.05em;line-height:1;margin-bottom:6px;display:flex;align-items:center;gap:8px;
}
.ts-lb-ad-site::after { content:'';display:block;flex:1;height:2px;background:#c8102e;max-width:100px; }
.ts-lb-ad-flags { display:flex;gap:4px;margin-top:4px; }
.ts-lb-ad-flags img { height:18px;border-radius:1px; }
.ts-lb-ad-right {
background:#1a1a1a;padding:14px 20px;display:flex;flex-direction:column;
justify-content:center;align-items:flex-end;gap:10px;flex-shrink:0;min-width:280px;
}
.ts-lb-ad-text {
font-size:14px;color:#fff;font-weight:700;text-align:right;line-height:1.35;
}
.ts-lb-ad-text em { font-style:normal;color:#fff;font-weight:900;font-size:16px; }
.ts-lb-ad-btn {
display:inline-block;border:2px solid #fff;color:#fff;
padding:8px 22px;font-size:13px;font-weight:800;text-decoration:none;
letter-spacing:.03em;transition:background .15s,color .15s;white-space:nowrap;
}
.ts-lb-ad-btn:hover { background:#fff;color:#111; }
/* image-only ad override */
.ts-lb-ad-img-wrap { display:block;flex:1; }
.ts-lb-ad-img-wrap img { width:100%;height:100%;object-fit:cover;display:block; }
@media(max-width:700px) {
.ts-util-left .ts-util-date { display:none; } /* hide date on mobile, keep weather */
.ts-lb-ad-right { min-width:auto; }
.ts-lb-ad-text { font-size:12px; }
}
// ── Weather widget ─────────────────────────────────────────
// Uses wttr.in — one call, no geolocation permission needed,
// returns city + temp + condition automatically from visitor IP.
(function(){
var ICONS = {
'Sunny':'☀️','Clear':'☀️',
'Partly cloudy':'🌤','Partly Cloudy':'🌤',
'Cloudy':'☁️','Overcast':'☁️',
'Mist':'🌫','Fog':'🌫','Freezing fog':'🌫',
'Blizzard':'🌨','Blowing snow':'🌨',
'Light snow':'🌨','Moderate snow':'🌨','Heavy snow':'❄️',
'Light drizzle':'🌦','Freezing drizzle':'🌦',
'Light rain':'🌧','Moderate rain':'🌧','Heavy rain':'🌧',
'Light sleet':'🌨','Moderate sleet':'🌨',
'Thundery outbreaks possible':'⛈','Patchy rain possible':'🌦',
'Patchy snow possible':'🌨','Patchy light drizzle':'🌦',
'Patchy light rain':'🌦','Light rain shower':'🌦',
'Moderate or heavy rain shower':'🌧',
'Torrential rain shower':'⛈',
'Patchy light snow':'🌨','Light snow showers':'🌨',
'Moderate or heavy snow showers':'❄️',
'Light showers of ice pellets':'🌨',
'Moderate or heavy showers of ice pellets':'🌨',
'Patchy light rain with thunder':'⛈',
'Moderate or heavy rain with thunder':'⛈',
'Patchy light snow with thunder':'⛈',
'Moderate or heavy snow with thunder':'⛈',
'Blowing snow':'❄️','Ice pellets':'🌨',
};
fetch('https://wttr.in/?format=j1')
.then(function(r){ return r.json(); })
.then(function(d){
var cur = (d.current_condition || [{}])[0];
var area = ((d.nearest_area || [{}])[0].areaName || [{}])[0].value || '';
var temp = Math.round(parseFloat(cur.temp_F || cur.temp_C || 0));
var desc = (cur.weatherDesc || [{}])[0].value || '';
var icon = ICONS[desc] || '🌡';
// Use Fahrenheit; if only Celsius available convert
if (!cur.temp_F && cur.temp_C) {
temp = Math.round(parseFloat(cur.temp_C) * 9/5 + 32);
}
var icoEl = document.getElementById('ts-util-icon');
var tmpEl = document.getElementById('ts-util-temp');
var cityEl = document.getElementById('ts-util-city');
if (icoEl) icoEl.textContent = icon;
if (tmpEl) tmpEl.textContent = temp;
if (cityEl && area) cityEl.textContent = area;
})
.catch(function(){
// Silent fail — widget stays as placeholder
});
})();
/* ── Reset / base ─────────────────────────────── */
#ts-topnav *, #ts-topnav *::before, #ts-topnav *::after { box-sizing: border-box; }
#ts-topnav { position:sticky;top:0;z-index:99999;background:#0f1e3c;box-shadow:0 2px 16px rgba(0,0,0,.4);font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;/* needed so absolute mega panels anchor here */overflow:visible; }
/* ── Main bar ─────────────────────────────────── */
.ts-tn-bar { max-width:1280px;margin:0 auto;padding:0 20px;display:flex;align-items:center;height:62px; }
/* ── Logo ────────────────────────────────────── */
.ts-tn-logo { display:flex;align-items:center;gap:10px;text-decoration:none;flex-shrink:0;margin-right:28px; }
.ts-tn-logo img { height:38px;width:auto;display:block; }
.ts-tn-logo-text { font-size:15px;font-weight:900;color:#fff;white-space:nowrap;letter-spacing:.03em; }
/* ── Nav list (desktop) ───────────────────────── */
.ts-tn-nav { display:flex;align-items:stretch;flex:1;list-style:none;margin:0;padding:0;gap:0; }
.ts-tn-nav > li { position:static;display:flex;align-items:stretch; }
.ts-tn-nav > li > a,
.ts-tn-nav > li > button {
display:inline-flex;align-items:center;gap:5px;
padding:0 14px;height:62px;
font-size:13px;font-weight:700;
color:rgba(255,255,255,.82);
text-decoration:none;background:none;border:none;cursor:pointer;
white-space:nowrap;border-bottom:3px solid transparent;
transition:color .15s,border-color .15s,background .15s;
}
.ts-tn-nav > li > a:hover,
.ts-tn-nav > li > button:hover,
.ts-tn-nav > li.ts-mega-open > a,
.ts-tn-nav > li.ts-mega-open > button {
color:#fff;
background:rgba(255,255,255,.07);
border-bottom-color:#c8102e;
}
.ts-tn-nav > li > a.ts-active { color:#fff;border-bottom-color:#c8102e; }
/* caret */
.ts-tn-caret { width:10px;height:10px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg) translateY(-2px);display:inline-block;transition:transform .2s; }
.ts-mega-open .ts-tn-caret { transform:rotate(-135deg) translateY(-2px); }
/* CTA button */
.ts-tn-cta-btn {
display:inline-flex;align-items:center;
background:#c8102e;color:#fff !important;border:none;
padding:9px 20px;border-radius:5px;font-size:13px;font-weight:800;
cursor:pointer;text-decoration:none;white-space:nowrap;margin-left:12px;flex-shrink:0;
transition:background .15s,transform .15s;box-shadow:0 2px 10px rgba(200,16,46,.35);
}
.ts-tn-cta-btn:hover { background:#a30d25;transform:translateY(-1px); }
/* ── Mega panel — drops BELOW the header bar ─── */
.ts-mega-panel {
display:none;
position:absolute; /* relative to sticky */
left:0;right:0;
top:100%; /* flush under the nav bar */
background:#fff;
box-shadow:0 12px 40px rgba(0,0,0,.22);
border-top:3px solid #c8102e;
z-index:99998;
animation:tsMegaIn .18s ease;
}
@keyframes tsMegaIn { from{opacity:0;transform:translateY(-6px)} to{opacity:1;transform:translateY(0)} }
.ts-mega-panel.ts-mega-visible { display:block; }
.ts-mega-inner { max-width:1280px;margin:0 auto;padding:28px 24px;display:flex;gap:0; }
/* columns */
.ts-mega-cols { display:flex;flex:1;gap:8px; }
.ts-mega-col { flex:1;padding:0 16px;border-right:1px solid #f0f0f0; }
.ts-mega-col:last-child { border-right:none; }
.ts-mega-col-heading {
font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.1em;
color:#999;margin:0 0 14px;padding-bottom:8px;border-bottom:1px solid #f0f0f0;
}
.ts-mega-col ul { list-style:none;margin:0;padding:0; }
.ts-mega-col ul li { margin-bottom:2px; }
.ts-mega-col ul li a {
display:flex;align-items:flex-start;gap:10px;
padding:8px 10px;border-radius:7px;text-decoration:none;
transition:background .12s;
}
.ts-mega-col ul li a:hover { background:#f7f8fa; }
.ts-mega-col ul li a .ts-mi-icon {
font-size:18px;flex-shrink:0;width:28px;height:28px;
display:flex;align-items:center;justify-content:center;
background:#f3f4f6;border-radius:6px;margin-top:1px;
}
.ts-mega-col ul li a .ts-mi-text .ts-mi-label {
display:block;font-size:13px;font-weight:700;color:#1a1a1a;line-height:1.3;
}
.ts-mega-col ul li a .ts-mi-text .ts-mi-desc {
display:block;font-size:11px;color:#888;margin-top:2px;line-height:1.4;
}
/* no-icon items (compact list) */
.ts-mega-col ul li a.ts-mi-compact { padding:7px 10px; }
.ts-mega-col ul li a.ts-mi-compact .ts-mi-label { font-size:13px;font-weight:600;color:#333; }
/* featured card */
.ts-mega-featured {
width:240px;flex-shrink:0;margin-left:16px;
background:linear-gradient(135deg,#0f1e3c 0%,#1a3a6e 100%);
border-radius:10px;padding:24px 20px;display:flex;flex-direction:column;
text-decoration:none;color:#fff;transition:transform .15s,box-shadow .15s;
}
.ts-mega-featured:hover { transform:translateY(-2px);box-shadow:0 8px 24px rgba(0,0,0,.2); }
.ts-mega-featured.ts-feat-red { background:linear-gradient(135deg,#c8102e 0%,#8b0d20 100%); }
.ts-mega-featured-title { font-size:16px;font-weight:800;margin:0 0 8px;line-height:1.25; }
.ts-mega-featured-desc { font-size:12px;color:rgba(255,255,255,.72);margin:0 0 auto;line-height:1.5; }
.ts-mega-featured-btn {
display:inline-block;margin-top:20px;background:rgba(255,255,255,.18);
color:#fff;padding:8px 16px;border-radius:5px;font-size:12px;font-weight:700;
text-align:center;transition:background .15s;
}
.ts-mega-featured:hover .ts-mega-featured-btn { background:rgba(255,255,255,.28); }
/* overlay — sits below the panel, covers page content */
.ts-mega-overlay {
display:none;position:fixed;inset:0;background:rgba(0,0,0,.35);z-index:99990;
}
.ts-mega-overlay.ts-mega-visible { display:block; }
/* ── Extra mega content types ────────────────── */
/* Image tile */
.ts-mega-img-tile {
display:block;border-radius:8px;overflow:hidden;text-decoration:none;
border:1px solid #eee;transition:box-shadow .15s,transform .15s;
}
.ts-mega-img-tile:hover { box-shadow:0 4px 16px rgba(0,0,0,.12);transform:translateY(-2px); }
.ts-mega-img-tile img { width:100%;aspect-ratio:16/9;object-fit:cover;display:block; }
.ts-mega-img-tile span {
display:block;padding:8px 10px;font-size:12px;font-weight:700;color:#1a1a1a;
background:#fff;border-top:1px solid #eee;
}
/* Map embed */
.ts-mega-map { border-radius:8px;overflow:hidden;border:1px solid #e0e0e0; }
.ts-mega-map iframe { display:block;width:100%;height:180px;border:none; }
/* Inline mini-form */
.ts-mega-form { background:#f7f8fa;border-radius:8px;padding:18px 16px; }
.ts-mega-form h4 { font-size:13px;font-weight:800;color:#1a1a1a;margin:0 0 12px; }
.ts-mega-form input,.ts-mega-form select {
width:100%;padding:8px 10px;border:1px solid #ddd;border-radius:5px;
font-size:13px;margin-bottom:8px;background:#fff;color:#333;outline:none;
}
.ts-mega-form input:focus,.ts-mega-form select:focus { border-color:#c8102e; }
.ts-mega-form button {
width:100%;background:#c8102e;color:#fff;border:none;padding:9px;
border-radius:5px;font-size:13px;font-weight:800;cursor:pointer;transition:background .15s;
}
.ts-mega-form button:hover { background:#a30d25; }
/* ── Hamburger / mobile ───────────────────────── */
.ts-tn-burger {
display:none;flex-direction:column;justify-content:center;gap:5px;
background:none;border:none;cursor:pointer;padding:10px;margin-left:auto;
}
.ts-tn-burger span { display:block;width:22px;height:2px;background:#fff;border-radius:2px;transition:transform .22s,opacity .22s; }
.ts-tn-burger.ts-open span:nth-child(1) { transform:translateY(7px) rotate(45deg); }
.ts-tn-burger.ts-open span:nth-child(2) { opacity:0; }
.ts-tn-burger.ts-open span:nth-child(3) { transform:translateY(-7px) rotate(-45deg); }
/* mobile drawer */
.ts-tn-drawer {
display:none;background:#0d1a35;
border-top:1px solid rgba(255,255,255,.08);
max-height:0;overflow:hidden;transition:max-height .3s ease;
}
.ts-tn-drawer.ts-open { display:block;max-height:900px; }
.ts-tn-drawer > ul { list-style:none;margin:0;padding:0; }
.ts-tn-drawer > ul > li > a,
.ts-tn-drawer > ul > li > button {
display:flex;justify-content:space-between;align-items:center;width:100%;
padding:13px 22px;font-size:14px;font-weight:700;
color:rgba(255,255,255,.85);text-decoration:none;
background:none;border:none;cursor:pointer;
border-bottom:1px solid rgba(255,255,255,.06);text-align:left;
}
.ts-tn-drawer > ul > li > a:hover,
.ts-tn-drawer > ul > li > button:hover { background:rgba(255,255,255,.06); }
/* mobile sub-panel */
.ts-mob-sub { display:none;background:#0a1428; }
.ts-mob-sub.ts-open { display:block; }
.ts-mob-sub a {
display:flex;align-items:center;gap:10px;
padding:10px 22px 10px 32px;font-size:13px;font-weight:600;
color:rgba(255,255,255,.7);text-decoration:none;
border-bottom:1px solid rgba(255,255,255,.04);
}
.ts-mob-sub a:hover { color:#fff;background:rgba(255,255,255,.05); }
.ts-mob-sub-heading {
padding:10px 22px 6px 32px;font-size:10px;font-weight:800;
text-transform:uppercase;letter-spacing:.08em;color:rgba(255,255,255,.35);
}
@media (max-width:860px) {
.ts-tn-nav, .ts-tn-cta-btn { display:none; }
.ts-tn-burger { display:flex; }
}
(function(){
var _openIdx = -1, _keepTimer = null;
window.tsMegaOpen = function(uid, idx) {
clearTimeout(_keepTimer);
if (_openIdx === idx) return;
tsMegaCloseAll(uid);
_openIdx = idx;
var panel = document.getElementById(uid + '_panel' + idx);
var item = document.getElementById(uid + '_item' + idx);
var ov = document.getElementById(uid + '_overlay');
if (panel) panel.classList.add('ts-mega-visible');
if (item) item.classList.add('ts-mega-open');
if (ov) ov.classList.add('ts-mega-visible');
};
window.tsMegaKeep = function(uid, idx) {
clearTimeout(_keepTimer);
};
window.tsMegaClose = function(uid, idx) {
// 500ms grace period — enough time to move mouse from nav to panel
_keepTimer = setTimeout(function(){
var panel = document.getElementById(uid + '_panel' + idx);
var item = document.getElementById(uid + '_item' + idx);
var ov = document.getElementById(uid + '_overlay');
if (panel) panel.classList.remove('ts-mega-visible');
if (item) item.classList.remove('ts-mega-open');
if (ov) ov.classList.remove('ts-mega-visible');
if (_openIdx === idx) _openIdx = -1;
}, 500);
};
window.tsMegaToggle = function(uid, idx) {
if (_openIdx === idx) { tsMegaCloseAll(uid); }
else { tsMegaOpen(uid, idx); }
};
window.tsMegaCloseAll = function(uid) {
clearTimeout(_keepTimer);
document.querySelectorAll('#' + uid + ' .ts-mega-panel').forEach(function(p){ p.classList.remove('ts-mega-visible'); });
document.querySelectorAll('#' + uid + ' .ts-mega-open').forEach(function(li){ li.classList.remove('ts-mega-open'); });
var ov = document.getElementById(uid + '_overlay');
if (ov) ov.classList.remove('ts-mega-visible');
_openIdx = -1;
};
// Mobile
window.tsMobToggle = function(uid) {
var d = document.getElementById(uid + '_drawer');
var b = document.getElementById(uid + '_burger');
if (!d) return;
d.classList.toggle('ts-open');
if (b) b.classList.toggle('ts-open');
};
window.tsMobSub = function(id) {
var el = document.getElementById(id);
if (!el) return;
el.classList.toggle('ts-open');
};
// Close mega on nav item hover (desktop)
document.querySelectorAll('#ts-topnav .ts-tn-nav > li').forEach(function(li){
li.addEventListener('mouseenter', function(){
var btn = li.querySelector('button[onclick*="tsMegaToggle"]');
if (!btn) { tsMegaCloseAll('ts-topnav'); }
});
});
// Close on Escape
document.addEventListener('keydown', function(e){
if (e.key === 'Escape') tsMegaCloseAll('ts-topnav');
});
})();
#tstr_6a23f262da91b {
background: #0f1e3c;
padding: 24px 0 28px;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
}
#tstr_6a23f262da91b .ts-tr-header {
max-width: 1280px; margin: 0 auto; padding: 0 20px;
display: flex; align-items: center; justify-content: space-between;
margin-bottom: 16px; gap: 16px; flex-wrap: wrap;
}
#tstr_6a23f262da91b .ts-tr-title {
color: #fff; font-size: 16px; font-weight: 800;
text-transform: uppercase; letter-spacing: .1em; margin: 0;
}
/* Speed control — admin only, hidden for visitors via PHP */
#tstr_6a23f262da91b .ts-tr-speed {
display: flex; align-items: center; gap: 10px;
background: rgba(255,255,255,.07); border-radius: 20px;
padding: 5px 14px; border: 1px solid rgba(255,255,255,.12);
}
#tstr_6a23f262da91b .ts-tr-speed label {
font-size: 11px; font-weight: 700; color: rgba(255,255,255,.6);
text-transform: uppercase; letter-spacing: .06em; white-space: nowrap;
}
#tstr_6a23f262da91b .ts-tr-speed input[type=range] {
width: 80px; accent-color: #c8102e; cursor: pointer;
}
#tstr_6a23f262da91b .ts-tr-speed .ts-spd-val {
font-size: 11px; font-weight: 700; color: #c8102e; min-width: 16px;
}
/* No side padding — track runs full-bleed, no gap on right */
#tstr_6a23f262da91b .ts-tr-outer {
display: flex; align-items: center; position: relative;
}
#tstr_6a23f262da91b .ts-tr-arrow {
position: absolute; z-index: 10;
width: 38px; height: 38px; border-radius: 50%;
background: rgba(15,30,60,.75);
border: 1px solid rgba(255,255,255,.25);
cursor: pointer; display: flex; align-items: center; justify-content: center;
transition: background .15s; flex-shrink: 0;
}
#tstr_6a23f262da91b .ts-tr-arrow:hover { background: rgba(200,16,46,.85); }
#tstr_6a23f262da91b .ts-tr-arrow.ts-arrow-prev { left: 10px; }
#tstr_6a23f262da91b .ts-tr-arrow.ts-arrow-next { right: 10px; }
/* Viewport: full width, no side padding, clips scrolling track */
#tstr_6a23f262da91b .ts-tr-viewport {
overflow: hidden;
width: 100%;
}
@keyframes ts-tr-scroll-tstr_6a23f262da91b {
0% { transform: translateX(0); }
100% { transform: translateX(-33.333%); }
}
#tstr_6a23f262da91b .ts-tr-track {
display: flex;
gap: 0; /* no gap — cards are flush, padding inside each card */
width: max-content;
animation: ts-tr-scroll-tstr_6a23f262da91b 110s linear infinite;
}
#tstr_6a23f262da91b .ts-tr-track.ts-paused { animation-play-state: paused; }
#tstr_6a23f262da91b:hover .ts-tr-track { animation-play-state: paused; }
#tstr_6a23f262da91b .ts-tr-card {
transition: transform .15s, box-shadow .15s;
margin-right: 3px; /* tiny seam instead of big gap */
}
#tstr_6a23f262da91b .ts-tr-card:hover {
transform: translateY(-3px);
box-shadow: 0 6px 20px rgba(0,0,0,.5);
}
(function(){
// Speed levels: 1=very slow … 10=fast
var speeds = {1:180,2:140,3:110,4:85,5:65,6:48,7:35,8:24,9:16,10:9};
var LS_KEY = 'ts_trend_speed';
// Restore saved speed from localStorage
(function(){
var saved = parseInt(localStorage.getItem(LS_KEY) || '3');
var track = document.getElementById('tstr_6a23f262da91b_track');
var spd = document.getElementById('tstr_6a23f262da91b_spd');
var lbl = document.getElementById('tstr_6a23f262da91b_spdval');
if (track) track.style.animationDuration = (speeds[saved]||110)+'s';
if (spd) spd.value = saved;
if (lbl) lbl.textContent = saved;
})();
window.tsTrSpeed = function(uid, val) {
val = parseInt(val);
var track = document.getElementById(uid + '_track');
var lbl = document.getElementById(uid + '_spdval');
if (!track) return;
if (lbl) lbl.textContent = val;
var dur = speeds[val] || 110;
track.style.animationDuration = dur + 's';
// Save to localStorage so it persists
try { localStorage.setItem(LS_KEY, val); } catch(e){}
};
window.tsTrNudge = function(uid, dir) {
var track = document.getElementById(uid + '_track');
if (!track) return;
var card = track.querySelector('.ts-tr-card');
var step = card ? (card.offsetWidth + 14) : 234;
track.classList.add('ts-paused');
// shift the animation phase
var cur = parseFloat(track.dataset.tsDur || 28);
var now = performance.now();
var elapsed = ((now % (cur * 1000)) / (cur * 1000));
var pct = elapsed - (dir * (step / track.scrollWidth));
pct = ((pct % 1) + 1) % 1;
track.style.animationDelay = -(pct * cur) + 's';
clearTimeout(track._tsRT);
track._tsRT = setTimeout(function(){ track.classList.remove('ts-paused'); }, 700);
};
})();
#ts-fh-6a23f262dcb31 { max-width:1280px;margin:0 auto;padding:28px 20px 0;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif; }
/* ── Section header ── */
#ts-fh-6a23f262dcb31 .ts-fh-header {
display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;
}
#ts-fh-6a23f262dcb31 .ts-fh-title {
font-size:13px;font-weight:800;text-transform:uppercase;letter-spacing:.08em;
color:#1a1a1a;background:#fff;padding:5px 14px 5px 0;
border-bottom:3px solid #1a1a1a;display:inline-block;
}
#ts-fh-6a23f262dcb31 .ts-fh-controls {
display:flex;align-items:center;gap:10px;
}
#ts-fh-6a23f262dcb31 .ts-fh-arrow {
width:34px;height:34px;border-radius:50%;background:#fff;border:1px solid #ddd;
cursor:pointer;display:flex;align-items:center;justify-content:center;
transition:background .15s,border-color .15s;flex-shrink:0;
}
#ts-fh-6a23f262dcb31 .ts-fh-arrow:hover { background:#0f1e3c;border-color:#0f1e3c; }
#ts-fh-6a23f262dcb31 .ts-fh-arrow:hover svg { stroke:#fff; }
#ts-fh-6a23f262dcb31 .ts-fh-dots { display:flex;gap:5px; }
#ts-fh-6a23f262dcb31 .ts-fh-dot {
width:7px;height:7px;border-radius:50%;background:#ddd;cursor:pointer;transition:background .2s,width .2s;
}
#ts-fh-6a23f262dcb31 .ts-fh-dot.active { background:#c8102e;width:20px;border-radius:4px; }
/* ── Slider viewport ── */
#ts-fh-6a23f262dcb31 .ts-fh-viewport {
position:relative;overflow:hidden;margin-bottom:4px;
border-radius:2px;
}
#ts-fh-6a23f262dcb31 .ts-fh-track {
display:flex;
width:300%;
}
#ts-fh-6a23f262dcb31 .ts-fh-slide {
width:33.333333333333%;
display:grid;grid-template-columns:1fr 1fr;gap:4px;flex-shrink:0;
}
#ts-fh-6a23f262dcb31 .ts-fh-card {
display:block;position:relative;overflow:hidden;
text-decoration:none;aspect-ratio:16/9;
}
#ts-fh-6a23f262dcb31 .ts-fh-card img {
width:100%;height:100%;object-fit:cover;display:block;
transition:transform .6s ease;
}
#ts-fh-6a23f262dcb31 .ts-fh-card:hover img { transform:scale(1.04); }
#ts-fh-6a23f262dcb31 .ts-fh-card .ts-fh-overlay {
position:absolute;inset:0;
background:linear-gradient(to top,rgba(0,0,0,.78) 0%,rgba(0,0,0,.18) 55%,transparent 100%);
pointer-events:none;
}
#ts-fh-6a23f262dcb31 .ts-fh-card .ts-fh-caption {
position:absolute;bottom:0;left:0;right:0;padding:18px 20px;
}
#ts-fh-6a23f262dcb31 .ts-fh-card .ts-fh-cat {
display:inline-block;font-size:10px;font-weight:800;text-transform:uppercase;
letter-spacing:.08em;color:#c8102e;margin-bottom:6px;
}
#ts-fh-6a23f262dcb31 .ts-fh-card h3 {
margin:0;font-size:clamp(13px,1.7vw,21px);font-weight:800;color:#fff;
line-height:1.2;text-shadow:0 1px 8px rgba(0,0,0,.5);
}
/* ── Thumbnail strip ── */
#ts-fh-6a23f262dcb31 .ts-fh-strip {
display:grid;gap:4px;margin-bottom:28px;
}
#ts-fh-6a23f262dcb31 .ts-fh-thumb {
display:block;position:relative;overflow:hidden;
text-decoration:none;
height:160px; /* fixed short height — compact like tangsoodokarate.com */
}
#ts-fh-6a23f262dcb31 .ts-fh-thumb img {
width:100%;height:100%;object-fit:cover;display:block;
transition:transform .5s ease;
}
#ts-fh-6a23f262dcb31 .ts-fh-thumb:hover img { transform:scale(1.06); }
#ts-fh-6a23f262dcb31 .ts-fh-thumb .ts-fh-overlay {
position:absolute;inset:0;
background:linear-gradient(to top,rgba(0,0,0,.85) 0%,rgba(0,0,0,.1) 55%,transparent 100%);
}
#ts-fh-6a23f262dcb31 .ts-fh-thumb h4 {
position:absolute;bottom:0;left:0;right:0;padding:8px 10px;
margin:0;font-size:11px;font-weight:700;color:#fff;
line-height:1.3;text-shadow:0 1px 4px rgba(0,0,0,.5);
}
@media(max-width:600px){
#ts-fh-6a23f262dcb31 .ts-fh-strip { grid-template-columns:1fr 1fr !important; }
#ts-fh-6a23f262dcb31 .ts-fh-thumb { height:110px; }
}
/* ══════════════════════════════════════════════
* EFFECT CSS
* ══════════════════════════════════════════════ */
#ts-fh-6a23f262dcb31 .ts-fh-track {
transition: transform .55s cubic-bezier(.4,0,.2,1);
}
(function(){
var uid = 'ts-fh-6a23f262dcb31';
var effect = 'slide';
var total = 3;
var cur = 0;
var timer = null;
var DELAY = 5000;
function getSlides() { return document.querySelectorAll('#'+uid+' .ts-fh-slide'); }
function getDots() { return document.querySelectorAll('#'+uid+' .ts-fh-dot'); }
function buildDots() {
var wrap = document.getElementById(uid+'_dots');
if (!wrap) return;
wrap.innerHTML = '';
for (var i=0;i<total;i++) {
var d = document.createElement('button');
d.className = 'ts-fh-dot' + (i===0?' active':'');
d.setAttribute('aria-label','Slide '+(i+1));
(function(idx){ d.onclick = function(){ tsFhSet(uid, idx); }; })(i);
wrap.appendChild(d);
}
}
function show(idx) {
var slides = getSlides();
var dots = getDots();
slides.forEach(function(s,i){
s.classList.toggle('active', i===idx);
});
dots.forEach(function(d,i){
d.classList.toggle('active', i===idx);
});
if (effect === 'slide') {
var track = document.getElementById(uid+'_track');
if (track) track.style.transform = 'translateX(-'+(idx*(100/total))+'%)';
}
cur = idx;
}
window.tsFhGo = function(u, dir) {
if (u !== uid) return;
clearTimeout(timer);
show((cur + dir + total) % total);
autoplay();
};
window.tsFhSet = function(u, idx) {
if (u !== uid) return;
clearTimeout(timer);
show(idx);
autoplay();
};
function autoplay() {
timer = setTimeout(function(){ tsFhGo(uid, 1); }, DELAY);
}
// Pause on hover
var vp = document.getElementById(uid+'_vp');
if (vp) {
vp.addEventListener('mouseenter', function(){ clearTimeout(timer); });
vp.addEventListener('mouseleave', autoplay);
}
buildDots();
autoplay();
})();
(function(){
var uid = 'ts-leader-1';
var posts = [{"url":"https:\/\/www.tangsoodokarate.com\/the-ripple-of-kindness\/","thumb":"https:\/\/www.tangsoodokarate.com\/wp-content\/uploads\/2024\/11\/tsdk-ripple-768x620.jpg","thmb":"https:\/\/www.tangsoodokarate.com\/wp-content\/uploads\/2024\/11\/tsdk-ripple-150x150.jpg","title":"The Ripple of Kindness"},{"url":"https:\/\/www.tangsoodokarate.com\/grand-master-young-h-kwon-a-legacy-of-excellence-in-traditional-korean-martial-arts\/","thumb":"https:\/\/www.tangsoodokarate.com\/wp-content\/uploads\/2024\/05\/tsdk-kwon-web-768x768.jpg","thmb":"https:\/\/www.tangsoodokarate.com\/wp-content\/uploads\/2024\/05\/tsdk-kwon-web-150x150.jpg","title":"Grand Master Young H. Kwon: A Legacy of Excellence in Traditional Korean Martial Arts"},{"url":"https:\/\/www.tangsoodokarate.com\/master-eric-r-king-a-martial-arts-journey-of-perseverance-and-excellence\/","thumb":"https:\/\/www.tangsoodokarate.com\/wp-content\/uploads\/2024\/05\/tsdk-master-king-1-768x768.jpg","thmb":"https:\/\/www.tangsoodokarate.com\/wp-content\/uploads\/2024\/05\/tsdk-master-king-1-150x150.jpg","title":"Master Eric R. King: A Martial Arts Journey of Perseverance and Excellence"},{"url":"https:\/\/www.tangsoodokarate.com\/the-inspiring-journey-of-master-clare-marsch-yuk-dan-master-at-allied-gardens-tang-soo-do\/","thumb":"https:\/\/www.tangsoodokarate.com\/wp-content\/uploads\/2024\/05\/Master-Clare-Marsch-768x768.jpg","thmb":"https:\/\/www.tangsoodokarate.com\/wp-content\/uploads\/2024\/05\/Master-Clare-Marsch-150x150.jpg","title":"The Inspiring Journey of Master Clare Marsch: Yuk Dan Master at Allied Gardens Tang Soo Do"},{"url":"https:\/\/www.tangsoodokarate.com\/master-kenneth-purnell-a-journey-of-dedication-and-martial-arts-wisdom\/","thumb":"https:\/\/www.tangsoodokarate.com\/wp-content\/uploads\/2024\/05\/tsdk-master-purnell-768x768.jpg","thmb":"https:\/\/www.tangsoodokarate.com\/wp-content\/uploads\/2024\/05\/tsdk-master-purnell-150x150.jpg","title":"Master Kenneth Purnell: A Journey of Dedication and Martial Arts Wisdom"}];
var perPage = 5; // 1 lead + 4 list
var page = 0;
var pages = Math.ceil(posts.length / perPage);
function render(pg) {
page = ((pg % pages) + pages) % pages;
var offset = page * perPage;
var lead = posts[offset];
var list = posts.slice(offset + 1, offset + perPage);
// Lead (left)
var limg = document.getElementById(uid + '_lead_img');
var llink = document.getElementById(uid + '_lead_link');
var ltitle= document.getElementById(uid + '_lead_title');
if (limg) { limg.src = lead.thumb; limg.alt = lead.title; }
if (llink) llink.href = lead.url;
if (ltitle) ltitle.textContent = lead.title;
// List (right)
var listEl = document.getElementById(uid + '_list');
if (!listEl) return;
listEl.innerHTML = '';
list.forEach(function(p) {
var row = document.createElement('a');
row.href = p.url;
row.style.cssText = 'display:flex;gap:14px;align-items:flex-start;padding:12px 0;border-bottom:1px solid #f0f0f0;text-decoration:none;color:inherit;';
var imgHtml = p.thmb
? '
@media(max-width:600px){
section div[style*="grid-template-columns:340px"]{grid-template-columns:1fr!important;}
section div[style*="grid-template-columns:1fr 1fr"]{grid-template-columns:1fr!important;}
}
#ts-podcast-the-martial-paradox-of-tang-soo-do {
background: #0f1e3c;
padding: 48px 24px;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
}
#ts-podcast-the-martial-paradox-of-tang-soo-do .sp-inner {
max-width: 1100px;
margin: 0 auto;
display: grid;
grid-template-columns: 320px 1fr;
gap: 48px;
align-items: center;
}
/* Left column */
#ts-podcast-the-martial-paradox-of-tang-soo-do .sp-art-wrap {
position: relative;
cursor: pointer;
border-radius: 18px;
overflow: hidden;
box-shadow: 0 12px 48px rgba(0,0,0,.55);
aspect-ratio: 1/1;
}
#ts-podcast-the-martial-paradox-of-tang-soo-do .sp-art-wrap img {
width: 100%; height: 100%; object-fit: cover; display: block;
}
#ts-podcast-the-martial-paradox-of-tang-soo-do .sp-art-placeholder {
width: 100%; height: 100%;
background: linear-gradient(135deg,#c8102e,#8b0d20);
display: flex; align-items: center; justify-content: center;
}
#ts-podcast-the-martial-paradox-of-tang-soo-do .sp-play-overlay {
position: absolute; inset: 0;
display: flex; align-items: center; justify-content: center;
background: rgba(0,0,0,.25);
transition: background .2s;
}
#ts-podcast-the-martial-paradox-of-tang-soo-do .sp-art-wrap:hover .sp-play-overlay { background: rgba(0,0,0,.38); }
#ts-podcast-the-martial-paradox-of-tang-soo-do .sp-play-btn {
width: 72px; height: 72px; border-radius: 50%;
background: #c8102e;
display: flex; align-items: center; justify-content: center;
box-shadow: 0 4px 24px rgba(200,16,46,.6);
transition: transform .15s, background .15s;
}
#ts-podcast-the-martial-paradox-of-tang-soo-do .sp-art-wrap:hover .sp-play-btn { transform: scale(1.08); background: #a30d25; }
/* Right column */
#ts-podcast-the-martial-paradox-of-tang-soo-do .sp-title {
font-size: clamp(22px,3vw,34px); font-weight: 900; color: #fff;
margin: 0 0 8px; line-height: 1.15;
}
#ts-podcast-the-martial-paradox-of-tang-soo-do .sp-desc {
font-size: 14px; color: rgba(255,255,255,.6); margin: 0 0 24px; line-height: 1.6;
}
/* Progress bar */
#ts-podcast-the-martial-paradox-of-tang-soo-do .sp-prog-row {
display: flex; align-items: center; gap: 12px; margin-bottom: 20px;
}
#ts-podcast-the-martial-paradox-of-tang-soo-do .sp-prog-track {
flex: 1; height: 4px; background: rgba(255,255,255,.15);
border-radius: 2px; cursor: pointer; position: relative;
}
#ts-podcast-the-martial-paradox-of-tang-soo-do .sp-prog-fill {
height: 100%; background: #c8102e; border-radius: 2px; width: 0%;
transition: width .1s linear;
}
#ts-podcast-the-martial-paradox-of-tang-soo-do .sp-time {
font-size: 11px; color: rgba(255,255,255,.45); flex-shrink: 0;
}
/* Episode list */
#ts-podcast-the-martial-paradox-of-tang-soo-do .sp-ep {
display: flex; align-items: center; gap: 14px;
padding: 11px 0; border-bottom: 1px solid rgba(255,255,255,.07);
cursor: pointer; transition: background .12s; border-radius: 6px;
}
#ts-podcast-the-martial-paradox-of-tang-soo-do .sp-ep:hover { background: rgba(255,255,255,.05); padding-left: 8px; }
#ts-podcast-the-martial-paradox-of-tang-soo-do .sp-ep.sp-playing { background: rgba(255,255,255,.06); padding-left: 8px; }
#ts-podcast-the-martial-paradox-of-tang-soo-do .sp-ep-num {
font-size: 12px; font-weight: 800; color: rgba(255,255,255,.3); width: 28px; flex-shrink: 0;
}
#ts-podcast-the-martial-paradox-of-tang-soo-do .sp-ep.sp-playing .sp-ep-num { color: #c8102e; }
#ts-podcast-the-martial-paradox-of-tang-soo-do .sp-ep-title { flex: 1; font-size: 14px; font-weight: 700; color: #fff; }
#ts-podcast-the-martial-paradox-of-tang-soo-do .sp-ep-dur { font-size: 12px; color: rgba(255,255,255,.4); flex-shrink: 0; }
/* Now-playing label */
#ts-podcast-the-martial-paradox-of-tang-soo-do .sp-now {
font-size: 13px; font-weight: 700; color: rgba(255,255,255,.75);
margin-bottom: 8px; min-height: 18px;
}
/* Share + listen row */
#ts-podcast-the-martial-paradox-of-tang-soo-do .sp-bottom {
display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-top: 20px;
}
@media(max-width:680px){
#ts-podcast-the-martial-paradox-of-tang-soo-do .sp-inner { grid-template-columns: 1fr; gap: 28px; }
#ts-podcast-the-martial-paradox-of-tang-soo-do .sp-art-wrap { max-width: 260px; margin: 0 auto; }
}
(function(){
var uid = 'ts-podcast-the-martial-paradox-of-tang-soo-do';
var AJAX = 'https://www.tangsoodokarate.com/wp-admin/admin-ajax.php';
var NONCE = 'd76ba5262e';
var audio = document.getElementById(uid+'_audio');
var icon = document.getElementById(uid+'_icon');
var nowEl = document.getElementById(uid+'_now');
var fill = document.getElementById(uid+'_fill');
var curEl = document.getElementById(uid+'_cur');
var durEl = document.getElementById(uid+'_dur');
var loading = false;
var curIdx = -1;
var PLAY_SVG = '';
var PAUSE_SVG = '';
var SILENT = 'data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA';
function fmt(s){ s=Math.floor(s||0); return Math.floor(s/60)+':'+(s%60<10?'0':'')+(s%60); }
function xorDecode(b64p,b64k){ var p=atob(b64p),k=atob(b64k),o=''; for(var i=0;i<p.length;i++) o+=String.fromCharCode(p.charCodeAt(i)^k.charCodeAt(i)); return o; }
function doFetch(idx){
var fd=new FormData();
fd.append('action','ts_pod_token');
fd.append('nonce',NONCE);
fd.append('ep',idx);
fetch(AJAX,{method:'POST',body:fd,credentials:'same-origin'})
.then(function(r){return r.json();})
.then(function(d){
loading=false;
if(!d.success){if(nowEl)nowEl.textContent='Error loading';return;}
var url=xorDecode(d.data.p,d.data.k);
audio.pause(); audio.src=url; audio.load(); url=null;
var p=audio.play();
if(p)p.catch(function(){if(nowEl)nowEl.textContent='Tap ▶ to play';});
})
.catch(function(){loading=false;if(nowEl)nowEl.textContent='Could not load';});
}
function loadAndPlay(idx){
if(loading)return; loading=true;
audio.src=SILENT; audio.load();
var u=audio.play();
var go=function(){doFetch(idx);};
if(u)u.then(go).catch(go); else go();
}
window.spPodPlay=function(uid2,idx){
if(uid2!==uid)return;
curIdx=idx;
document.querySelectorAll('#'+uid+' .sp-ep').forEach(function(el){el.classList.remove('sp-playing');});
var epEl=document.getElementById(uid+'_ep'+idx);
if(epEl){epEl.classList.add('sp-playing'); var t=epEl.querySelector('.sp-ep-title'); if(nowEl&&t)nowEl.textContent=t.textContent;}
loadAndPlay(idx);
};
window.spPodToggle=function(uid2){
if(uid2!==uid)return;
if(!audio.src||audio.src.indexOf('data:audio')===0){
if(curIdx= dropH || window.innerHeight - r.bottom >= r.top) {
drop.style.top = (r.bottom+8)+'px'; drop.style.bottom='auto';
} else {
drop.style.bottom=(window.innerHeight-r.top+8)+'px'; drop.style.top='auto';
}
var re = window.innerWidth - r.right;
drop.style.right = Math.max(8,re)+'px'; drop.style.left='auto';
}
drop.style.display='block';
} else { origToggle(u, triggerEl); }
};
})();
document.addEventListener('click',function(e){
var drop=document.getElementById(shareDropId);
if(!drop||drop.style.display!=='block')return;
if(!drop.contains(e.target)&&!e.target.closest('[onclick*="'+uid+'_share"]')){drop.style.display='none';}
});
// ── Share functions for this splitscreen player ────────────────────
// podcast_share_and_badges() is not called for the splitscreen layout,
// so we define the share helpers here, in this closure, capturing podUrl.
var podUrl = window.location.href.split('#')[0] + '#' + uid;
var podTitle = 'The Martial Paradox of Tang Soo Do';
var podDesc = 'Conversations with masters, champions, and leaders of the Tang Soo Do community.';
function spCopyUrl() {
var copied = false;
try {
var ta = document.createElement('textarea');
ta.value = podUrl; ta.style.cssText = 'position:fixed;top:-9999px;left:-9999px;';
document.body.appendChild(ta); ta.select();
copied = document.execCommand('copy');
document.body.removeChild(ta);
} catch(x){}
if (!copied && navigator.clipboard && navigator.clipboard.writeText) {
navigator.clipboard.writeText(podUrl).catch(function(){});
}
var btn = document.getElementById(uid+'_copyBtn');
if (btn) {
var prev = btn.textContent;
btn.textContent = '✓ Copied!';
setTimeout(function(){ btn.textContent = prev; }, 2500);
}
}
window.tsPodShareNative = function() {
if (navigator.share) {
navigator.share({title:podTitle, text:podDesc, url:podUrl}).catch(function(){});
} else { spCopyUrl(); }
};
window.tsPodShareFb = function(e) {
if (e) e.preventDefault();
window.open('https://www.facebook.com/sharer/sharer.php?u=' + encodeURIComponent(podUrl), '_blank', 'width=600,height=400');
};
window.tsPodShareX = function(e) {
if (e) e.preventDefault();
window.open('https://twitter.com/intent/tweet?text=' + encodeURIComponent(podTitle) + '&url=' + encodeURIComponent(podUrl), '_blank', 'width=600,height=400');
};
window.tsPodShareWa = function(e) {
if (e) e.preventDefault();
window.open('https://wa.me/?text=' + encodeURIComponent(podTitle + ' ' + podUrl), '_blank');
};
// Override tsPodCopy so the copy button in this player's dropdown works
// (there is no _urlinput element in the splitscreen dropdown).
window.tsPodCopy = function(u) {
if (u === uid+'_share') { spCopyUrl(); }
};
audio.addEventListener('play', function(){if(icon)icon.innerHTML=PAUSE_SVG;});
audio.addEventListener('pause', function(){if(icon)icon.innerHTML=PLAY_SVG;});
audio.addEventListener('ended', function(){if(icon)icon.innerHTML=PLAY_SVG;});
audio.addEventListener('timeupdate',function(){
if(!audio.duration)return;
if(fill)fill.style.width=(audio.currentTime/audio.duration*100)+'%';
if(curEl)curEl.textContent=fmt(audio.currentTime);
});
audio.addEventListener('loadedmetadata',function(){if(durEl)durEl.textContent=fmt(audio.duration);});
document.getElementById(uid).addEventListener('contextmenu',function(e){e.preventDefault();});
})();
Featured Articles
Select an episode below
0:00
0:00
01
Tang Soo Do Paradox
tsdk


