Blog

DreamLeague Season 29 Final-Day Meta Report: What May 23-24 Games Actually Teach You in 7.41c

/* === WOODMART BLOG LAYOUT FIXES === */
.single-post .wd-post-cat { display: none !important; height: 0 !important; margin: 0 !important; padding: 0 !important; }
.single-post .wd-post-meta { display: none !important; height: 0 !important; margin: 0 !important; padding: 0 !important; }
.single-post .wd-breadcrumbs { display: none !important; }
.single-post .wd-single-post-header { gap: 0 !important; }
.single-post .wd-content-layout { padding-top: 0 !important; }

/* Reorder: image above title */
.single-post .wd-single-post-header {
display: flex !important;
flex-direction: column !important;
}
.single-post .wd-single-post-img {
order: -1 !important;
width: 100vw !important;
max-width: 100vw !important;
margin-left: calc(-50vw + 50%) !important;
margin-right: calc(-50vw + 50%) !important;
}
.single-post .wd-single-post-img img {
width: 100% !important;
height: auto !important;
}
.single-post .wd-entities-title {
order: 1 !important;
text-align: center !important;
padding: 24px 0 8px !important;
}

/* Hide image placeholders (will be replaced with actual images later) */
.ts-blog .ts-image-placeholder { display: none !important; }

/* === WPAUTOP BR FIX === */
/* WordPress wpautop inserts
between inline elements – hide them where unwanted */
.ts-blog .ts-byline br { display: none; }
.ts-blog .ts-cta br { display: none; }
.ts-blog .ts-cta p { margin-bottom: 10px; }
.ts-blog .ts-table-wrap br { display: none; }
.ts-blog .ts-proscons br { display: none; }
.ts-blog .ts-table-wrap table { margin-bottom: 0 !important; }
.ts-blog .ts-table-wrap { padding: 0 !important; overflow: hidden; }
.ts-blog .ts-table-wrap p { margin: 0 !important; display: none; }
.ts-blog table tbody tr:last-child { border-bottom: none !important; }
.ts-blog .ts-faq-q br { display: none; }
.ts-blog .ts-callout br { display: none; }

/* === TEAM SMURF BLOG STYLES === */
.ts-blog {
–ts-bg: #000000;
–ts-card: #0d0d0d;
–ts-card-alt: #141414;
–ts-border: #222222;
–ts-accent: #F6B059;
–ts-accent-dark: #D28147;
–ts-accent-glow: rgba(246, 176, 89, 0.1);
–ts-green: #009900;
–ts-green-light: #00d084;
–ts-red: #ff0000;
–ts-yellow: #fcb900;
–ts-text: #EEEEEE;
–ts-text-dim: #888888;
–ts-text-bright: #ffffff;
–ts-radius: 10px;
font-family: ‘Inter’, ‘Segoe UI’, system-ui, -apple-system, sans-serif;
color: var(–ts-text);
line-height: 1.8;
font-size: 17px;
max-width: 960px;
margin: 0 auto;
padding: 0 20px;
}
.ts-blog *, .ts-blog *::before, .ts-blog *::after { box-sizing: border-box; }

/* === BYLINE === */
.ts-blog .ts-byline {
display: flex;
align-items: center;
gap: 12px;
padding: 16px 20px;
background: var(–ts-card);
border-left: 3px solid var(–ts-accent);
border-radius: var(–ts-radius);
margin-bottom: 32px;
font-size: 14px;
color: var(–ts-text-dim);
position: relative;
z-index: 1;
}
.ts-blog .ts-byline .ts-badge {
background: var(–ts-accent);
color: #000;
padding: 2px 10px;
border-radius: 20px;
font-size: 12px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
white-space: nowrap;
}

/* === INTRO === */
.ts-blog .ts-intro {
font-size: 19px;
color: var(–ts-text-bright);
border-bottom: 1px solid var(–ts-border);
padding-bottom: 28px;
margin-bottom: 36px;
}
.ts-blog .ts-intro p { margin-bottom: 16px; }

/* === HEADINGS === */
.ts-blog h2 {
font-size: 28px;
font-weight: 700;
color: var(–ts-accent);
margin: 48px 0 20px;
padding-bottom: 12px;
border-bottom: 2px solid var(–ts-accent-dark);
letter-spacing: -0.3px;
}
.ts-blog h3 {
font-size: 22px;
font-weight: 600;
color: var(–ts-text-bright);
margin: 36px 0 16px;
}
.ts-blog h4 {
font-size: 18px;
font-weight: 600;
color: var(–ts-accent);
margin: 24px 0 12px;
}

/* === PARAGRAPHS === */
.ts-blog p {
margin-bottom: 18px;
color: var(–ts-text);
}

/* === LINKS === */
.ts-blog a {
color: var(–ts-accent);
text-decoration: none;
border-bottom: 1px solid transparent;
transition: border-color 0.2s;
}
.ts-blog a:hover {
border-bottom-color: var(–ts-accent);
}

/* === TABLE OF CONTENTS === */
.ts-blog .ts-toc {
background: var(–ts-card);
border: 1px solid var(–ts-border);
border-radius: var(–ts-radius);
padding: 24px 28px;
margin: 28px 0 36px;
}
.ts-blog .ts-toc h2 {
font-size: 20px;
margin: 0 0 16px;
padding: 0;
border: none;
color: var(–ts-accent);
}
.ts-blog .ts-toc ul {
list-style: none;
padding: 0;
margin: 0;
columns: 2;
column-gap: 24px;
}
.ts-blog .ts-toc li { padding: 6px 0; break-inside: avoid; }
.ts-blog .ts-toc a { color: var(–ts-text); font-size: 15px; }
.ts-blog .ts-toc a:hover { color: var(–ts-accent); }

/* === TABLES === */
.ts-blog .ts-table-wrap {
overflow-x: auto;
margin: 24px 0;
border-radius: var(–ts-radius);
border: 1px solid var(–ts-border);
background: var(–ts-card);
}
.ts-blog table {
width: 100%;
border-collapse: collapse;
font-size: 15px;
table-layout: auto;
}
.ts-blog table th,
.ts-blog table td {
padding: 12px 16px !important;
text-align: left !important;
vertical-align: middle !important;
font-size: 15px !important;
line-height: 1.5 !important;
}
.ts-blog thead tr {
background: var(–ts-accent) !important;
}
.ts-blog thead th {
font-weight: 700 !important;
color: #000 !important;
text-transform: none !important;
letter-spacing: normal !important;
border-bottom: 2px solid var(–ts-accent-dark) !important;
}
.ts-blog tbody tr {
border-bottom: 1px solid var(–ts-border) !important;
}
.ts-blog tbody tr:nth-child(odd) { background: var(–ts-card) !important; }
.ts-blog tbody tr:nth-child(even) { background: var(–ts-card-alt) !important; }
.ts-blog tbody tr:hover { background: rgba(246, 176, 89, 0.08) !important; }
.ts-blog tbody td {
color: var(–ts-text) !important;
}
.ts-blog tbody td:nth-child(2) {
color: var(–ts-accent) !important;
font-weight: 600 !important;
}

/* === LISTS === */
.single-post .entry-content .ts-blog ul { padding-left: 24px; margin-bottom: 20px; list-style-type: disc !important; }
.single-post .entry-content .ts-blog ol { padding-left: 24px; margin-bottom: 20px; list-style-type: decimal !important; }
.single-post .entry-content .ts-blog li { margin-bottom: 8px; color: var(–ts-text); display: list-item !important; list-style-type: inherit !important; }
.ts-blog ul { padding-left: 24px; margin-bottom: 20px; list-style-type: disc !important; }
.ts-blog ol { padding-left: 24px; margin-bottom: 20px; list-style-type: decimal !important; }
.ts-blog li { margin-bottom: 8px; color: var(–ts-text); display: list-item !important; list-style-type: inherit !important; }
.ts-blog li strong { color: var(–ts-text-bright); }

/* === ORDERED RANKING LIST === */
.ts-blog .ts-ranking {
list-style: none;
padding: 0;
counter-reset: ranking;
}
.ts-blog .ts-ranking li {
counter-increment: ranking;
background: var(–ts-card);
border: 1px solid var(–ts-border);
border-radius: var(–ts-radius);
padding: 16px 20px 16px 60px;
margin-bottom: 12px;
position: relative;
transition: border-color 0.2s, transform 0.2s;
}
.ts-blog .ts-ranking li:hover { border-color: var(–ts-accent); transform: translateX(4px); }
.ts-blog .ts-ranking li::before {
content: ‘#’ counter(ranking);
position: absolute; left: 16px; top: 50%; transform: translateY(-50%);
font-size: 20px; font-weight: 700; color: var(–ts-text-dim);
}
.ts-blog .ts-ranking li:first-child {
border-color: var(–ts-accent);
background: linear-gradient(135deg, rgba(246,176,89,0.08), var(–ts-card));
}
.ts-blog .ts-ranking li:first-child::before { color: var(–ts-accent); }

/* === SERVICE REVIEW CARD === */
.ts-blog .ts-review {
background: var(–ts-card);
border: 1px solid var(–ts-border);
border-radius: var(–ts-radius);
padding: 28px;
margin: 28px 0;
}
.ts-blog .ts-review.ts-featured {
border-color: var(–ts-accent);
background: linear-gradient(135deg, rgba(246,176,89,0.05), var(–ts-card));
}
.ts-blog .ts-review h3 { margin-top: 0; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.ts-blog .ts-score {
display: inline-flex; align-items: center;
background: var(–ts-card-alt); color: var(–ts-text);
padding: 4px 12px; border-radius: 20px; font-size: 14px; font-weight: 700;
border: 1px solid var(–ts-border);
}
.ts-blog .ts-score.ts-gold-score { background: var(–ts-accent); color: #000; border-color: var(–ts-accent); }

/* === PROS/CONS === */
.ts-blog .ts-proscons { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin: 16px 0; }
.ts-blog .ts-pros, .ts-blog .ts-cons { background: var(–ts-card-alt); border-radius: 8px; padding: 16px 20px; }
.ts-blog .ts-pros { border-top: 3px solid var(–ts-green); }
.ts-blog .ts-cons { border-top: 3px solid var(–ts-red); }
.ts-blog .ts-pros h4 { color: var(–ts-green-light); margin-top: 0; font-size: 15px; }
.ts-blog .ts-cons h4 { color: var(–ts-red); margin-top: 0; font-size: 15px; }
.ts-blog .ts-proscons ul { font-size: 14px; margin: 0; padding-left: 18px; }
.ts-blog .ts-proscons li { margin-bottom: 6px; }

/* === EXPERIENCE BOX === */
.ts-blog .ts-experience {
background: var(–ts-accent-glow);
border-left: 3px solid var(–ts-accent);
border-radius: 0 var(–ts-radius) var(–ts-radius) 0;
padding: 16px 20px; margin: 16px 0; font-size: 15px;
}
.ts-blog .ts-experience strong { color: var(–ts-accent); }

/* === RED FLAGS / GREEN FLAGS === */
.ts-blog .ts-flag {
background: var(–ts-card);
border: 1px solid var(–ts-border);
border-radius: var(–ts-radius);
padding: 20px 24px; margin: 16px 0;
}
.ts-blog .ts-flag.ts-red-flag { border-left: 4px solid var(–ts-red); }
.ts-blog .ts-flag.ts-green-flag { border-left: 4px solid var(–ts-green); }
.ts-blog .ts-flag h3 { margin-top: 0; font-size: 18px; }

/* === IMAGE === */
.ts-blog .ts-image-wrap {
border-radius: var(–ts-radius); overflow: hidden; margin: 28px 0;
border: 1px solid var(–ts-border);
}
.ts-blog .ts-image-wrap img { width: 100%; height: auto; display: block; }
.ts-blog .ts-image-placeholder {
background: linear-gradient(135deg, var(–ts-card), var(–ts-card-alt));
border: 2px dashed var(–ts-border);
border-radius: var(–ts-radius);
padding: 40px 24px; margin: 28px 0; text-align: center;
color: var(–ts-text-dim); font-size: 14px; font-style: italic;
}

/* === FAQ === */
.ts-blog .ts-faq { margin: 24px 0; }
.ts-blog .ts-faq-item {
background: var(–ts-card);
border: 1px solid var(–ts-border);
border-radius: var(–ts-radius);
margin-bottom: 12px; overflow: hidden;
}
.ts-blog .ts-faq-q {
padding: 18px 24px; font-weight: 600; color: var(–ts-text-bright);
display: flex; align-items: center; gap: 12px; font-size: 16px;
}
.ts-blog .ts-faq-q .ts-q-badge {
background: var(–ts-accent); color: #000;
width: 28px; height: 28px; border-radius: 50%;
display: flex; align-items: center; justify-content: center;
font-size: 13px; font-weight: 700; flex-shrink: 0;
}
.ts-blog .ts-faq-a {
padding: 0 24px 18px 64px; color: var(–ts-text); font-size: 15px; line-height: 1.7;
}

/* === CTA BOX === */
.ts-blog .ts-cta {
background: linear-gradient(135deg, rgba(246,176,89,0.1), rgba(210,129,71,0.05));
border: 2px solid var(–ts-accent);
border-radius: var(–ts-radius);
padding: 32px; margin: 40px 0; text-align: center;
}
.ts-blog .ts-cta h3 { color: var(–ts-accent); margin-top: 0; font-size: 24px; }
.ts-blog .ts-cta p { color: var(–ts-text); margin-bottom: 20px; }
.ts-blog .ts-cta-btn {
display: inline-block;
background: var(–ts-accent); color: #000 !important;
padding: 14px 36px; border-radius: 8px;
font-weight: 700; font-size: 16px;
text-decoration: none !important; border: none !important;
transition: background 0.2s, transform 0.15s; margin: 4px 8px;
}
.ts-blog .ts-cta-btn:hover { background: var(–ts-accent-dark); transform: translateY(-2px); }
.ts-blog .ts-cta-btn.ts-btn-secondary {
background: transparent; color: var(–ts-accent) !important;
border: 2px solid var(–ts-accent) !important;
}
.ts-blog .ts-cta-btn.ts-btn-secondary:hover { background: var(–ts-accent-glow); }

/* === CALLOUT === */
.ts-blog .ts-callout {
background: var(–ts-card); border-radius: var(–ts-radius);
padding: 20px 24px; margin: 24px 0;
display: flex; gap: 14px; align-items: flex-start; font-size: 15px;
}
.ts-blog .ts-callout.ts-tip { border-left: 4px solid var(–ts-green); }
.ts-blog .ts-callout.ts-warning { border-left: 4px solid var(–ts-accent); }

/* === RELATED POSTS === */
.ts-blog .ts-related {
background: var(–ts-card); border: 1px solid var(–ts-border);
border-radius: var(–ts-radius); padding: 24px 28px; margin: 40px 0 0;
}
.ts-blog .ts-related h3 { margin-top: 0; font-size: 18px; color: var(–ts-accent); }
.ts-blog .ts-related ul { list-style: none; padding: 0; margin: 0; }
.ts-blog .ts-related li { padding: 10px 0; border-bottom: 1px solid var(–ts-border); }
.ts-blog .ts-related li:last-child { border: none; }
.ts-blog .ts-related a { font-weight: 500; }

/* === RESPONSIVE === */
@media (max-width: 768px) {
.ts-blog { font-size: 16px; padding: 0 16px; }
.ts-blog h2 { font-size: 22px; }
.ts-blog h3 { font-size: 19px; }
.ts-blog .ts-toc ul { columns: 1; }
.ts-blog .ts-proscons { grid-template-columns: 1fr; }
.ts-blog .ts-cta { padding: 24px 20px; }
.ts-blog .ts-cta-btn { display: block; margin: 8px 0; }
.ts-blog .ts-review { padding: 20px; }
}
?/* === WOODMART BLOG LAYOUT FIXES === */
.single-post .wd-post-cat { display: none !important; height: 0 !important; margin: 0 !important; padding: 0 !important; }
.single-post .wd-post-meta { display: none !important; height: 0 !important; margin: 0 !important; padding: 0 !important; }
.single-post .wd-breadcrumbs { display: none !important; }
.single-post .wd-single-post-header { gap: 0 !important; }
.single-post .wd-content-layout { padding-top: 0 !important; }

/* Reorder: image above title */
.single-post .wd-single-post-header {
display: flex !important;
flex-direction: column !important;
}
.single-post .wd-single-post-img {
order: -1 !important;
width: 100vw !important;
max-width: 100vw !important;
margin-left: calc(-50vw + 50%) !important;
margin-right: calc(-50vw + 50%) !important;
}
.single-post .wd-single-post-img img {
width: 100% !important;
height: auto !important;
}
.single-post .wd-entities-title {
order: 1 !important;
text-align: center !important;
padding: 24px 0 8px !important;
}

/* Hide image placeholders (will be replaced with actual images later) */
.ts-blog .ts-image-placeholder { display: none !important; }

/* === WPAUTOP BR FIX === */
/* WordPress wpautop inserts
between inline elements – hide them where unwanted */
.ts-blog .ts-byline br { display: none; }
.ts-blog .ts-cta br { display: none; }
.ts-blog .ts-cta p { margin-bottom: 10px; }
.ts-blog .ts-table-wrap br { display: none; }
.ts-blog .ts-proscons br { display: none; }
.ts-blog .ts-table-wrap table { margin-bottom: 0 !important; }
.ts-blog .ts-table-wrap { padding: 0 !important; overflow: hidden; }
.ts-blog .ts-table-wrap p { margin: 0 !important; display: none; }
.ts-blog table tbody tr:last-child { border-bottom: none !important; }
.ts-blog .ts-faq-q br { display: none; }
.ts-blog .ts-callout br { display: none; }

/* === TEAM SMURF BLOG STYLES === */
.ts-blog {
–ts-bg: #000000;
–ts-card: #0d0d0d;
–ts-card-alt: #141414;
–ts-border: #222222;
–ts-accent: #F6B059;
–ts-accent-dark: #D28147;
–ts-accent-glow: rgba(246, 176, 89, 0.1);
–ts-green: #009900;
–ts-green-light: #00d084;
–ts-red: #ff0000;
–ts-yellow: #fcb900;
–ts-text: #EEEEEE;
–ts-text-dim: #888888;
–ts-text-bright: #ffffff;
–ts-radius: 10px;
font-family: ‘Inter’, ‘Segoe UI’, system-ui, -apple-system, sans-serif;
color: var(–ts-text);
line-height: 1.8;
font-size: 17px;
max-width: 960px;
margin: 0 auto;
padding: 0 20px;
}
.ts-blog *, .ts-blog *::before, .ts-blog *::after { box-sizing: border-box; }

/* === BYLINE === */
.ts-blog .ts-byline {
display: flex;
align-items: center;
gap: 12px;
padding: 16px 20px;
background: var(–ts-card);
border-left: 3px solid var(–ts-accent);
border-radius: var(–ts-radius);
margin-bottom: 32px;
font-size: 14px;
color: var(–ts-text-dim);
position: relative;
z-index: 1;
}
.ts-blog .ts-byline .ts-badge {
background: var(–ts-accent);
color: #000;
padding: 2px 10px;
border-radius: 20px;
font-size: 12px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
white-space: nowrap;
}

/* === INTRO === */
.ts-blog .ts-intro {
font-size: 19px;
color: var(–ts-text-bright);
border-bottom: 1px solid var(–ts-border);
padding-bottom: 28px;
margin-bottom: 36px;
}
.ts-blog .ts-intro p { margin-bottom: 16px; }

/* === HEADINGS === */
.ts-blog h2 {
font-size: 28px;
font-weight: 700;
color: var(–ts-accent);
margin: 48px 0 20px;
padding-bottom: 12px;
border-bottom: 2px solid var(–ts-accent-dark);
letter-spacing: -0.3px;
}
.ts-blog h3 {
font-size: 22px;
font-weight: 600;
color: var(–ts-text-bright);
margin: 36px 0 16px;
}
.ts-blog h4 {
font-size: 18px;
font-weight: 600;
color: var(–ts-accent);
margin: 24px 0 12px;
}

/* === PARAGRAPHS === */
.ts-blog p {
margin-bottom: 18px;
color: var(–ts-text);
}

/* === LINKS === */
.ts-blog a {
color: var(–ts-accent);
text-decoration: none;
border-bottom: 1px solid transparent;
transition: border-color 0.2s;
}
.ts-blog a:hover {
border-bottom-color: var(–ts-accent);
}

/* === TABLE OF CONTENTS === */
.ts-blog .ts-toc {
background: var(–ts-card);
border: 1px solid var(–ts-border);
border-radius: var(–ts-radius);
padding: 24px 28px;
margin: 28px 0 36px;
}
.ts-blog .ts-toc h2 {
font-size: 20px;
margin: 0 0 16px;
padding: 0;
border: none;
color: var(–ts-accent);
}
.ts-blog .ts-toc ul {
list-style: none;
padding: 0;
margin: 0;
columns: 2;
column-gap: 24px;
}
.ts-blog .ts-toc li { padding: 6px 0; break-inside: avoid; }
.ts-blog .ts-toc a { color: var(–ts-text); font-size: 15px; }
.ts-blog .ts-toc a:hover { color: var(–ts-accent); }

/* === TABLES === */
.ts-blog .ts-table-wrap {
overflow-x: auto;
margin: 24px 0;
border-radius: var(–ts-radius);
border: 1px solid var(–ts-border);
background: var(–ts-card);
}
.ts-blog table {
width: 100%;
border-collapse: collapse;
font-size: 15px;
table-layout: auto;
}
.ts-blog table th,
.ts-blog table td {
padding: 12px 16px !important;
text-align: left !important;
vertical-align: middle !important;
font-size: 15px !important;
line-height: 1.5 !important;
}
.ts-blog thead tr {
background: var(–ts-accent) !important;
}
.ts-blog thead th {
font-weight: 700 !important;
color: #000 !important;
text-transform: none !important;
letter-spacing: normal !important;
border-bottom: 2px solid var(–ts-accent-dark) !important;
}
.ts-blog tbody tr {
border-bottom: 1px solid var(–ts-border) !important;
}
.ts-blog tbody tr:nth-child(odd) { background: var(–ts-card) !important; }
.ts-blog tbody tr:nth-child(even) { background: var(–ts-card-alt) !important; }
.ts-blog tbody tr:hover { background: rgba(246, 176, 89, 0.08) !important; }
.ts-blog tbody td {
color: var(–ts-text) !important;
}
.ts-blog tbody td:nth-child(2) {
color: var(–ts-accent) !important;
font-weight: 600 !important;
}

/* === LISTS === */
.single-post .entry-content .ts-blog ul { padding-left: 24px; margin-bottom: 20px; list-style-type: disc !important; }
.single-post .entry-content .ts-blog ol { padding-left: 24px; margin-bottom: 20px; list-style-type: decimal !important; }
.single-post .entry-content .ts-blog li { margin-bottom: 8px; color: var(–ts-text); display: list-item !important; list-style-type: inherit !important; }
.ts-blog ul { padding-left: 24px; margin-bottom: 20px; list-style-type: disc !important; }
.ts-blog ol { padding-left: 24px; margin-bottom: 20px; list-style-type: decimal !important; }
.ts-blog li { margin-bottom: 8px; color: var(–ts-text); display: list-item !important; list-style-type: inherit !important; }
.ts-blog li strong { color: var(–ts-text-bright); }

/* === ORDERED RANKING LIST === */
.ts-blog .ts-ranking {
list-style: none;
padding: 0;
counter-reset: ranking;
}
.ts-blog .ts-ranking li {
counter-increment: ranking;
background: var(–ts-card);
border: 1px solid var(–ts-border);
border-radius: var(–ts-radius);
padding: 16px 20px 16px 60px;
margin-bottom: 12px;
position: relative;
transition: border-color 0.2s, transform 0.2s;
}
.ts-blog .ts-ranking li:hover { border-color: var(–ts-accent); transform: translateX(4px); }
.ts-blog .ts-ranking li::before {
content: ‘#’ counter(ranking);
position: absolute; left: 16px; top: 50%; transform: translateY(-50%);
font-size: 20px; font-weight: 700; color: var(–ts-text-dim);
}
.ts-blog .ts-ranking li:first-child {
border-color: var(–ts-accent);
background: linear-gradient(135deg, rgba(246,176,89,0.08), var(–ts-card));
}
.ts-blog .ts-ranking li:first-child::before { color: var(–ts-accent); }

/* === SERVICE REVIEW CARD === */
.ts-blog .ts-review {
background: var(–ts-card);
border: 1px solid var(–ts-border);
border-radius: var(–ts-radius);
padding: 28px;
margin: 28px 0;
}
.ts-blog .ts-review.ts-featured {
border-color: var(–ts-accent);
background: linear-gradient(135deg, rgba(246,176,89,0.05), var(–ts-card));
}
.ts-blog .ts-review h3 { margin-top: 0; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.ts-blog .ts-score {
display: inline-flex; align-items: center;
background: var(–ts-card-alt); color: var(–ts-text);
padding: 4px 12px; border-radius: 20px; font-size: 14px; font-weight: 700;
border: 1px solid var(–ts-border);
}
.ts-blog .ts-score.ts-gold-score { background: var(–ts-accent); color: #000; border-color: var(–ts-accent); }

/* === PROS/CONS === */
.ts-blog .ts-proscons { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin: 16px 0; }
.ts-blog .ts-pros, .ts-blog .ts-cons { background: var(–ts-card-alt); border-radius: 8px; padding: 16px 20px; }
.ts-blog .ts-pros { border-top: 3px solid var(–ts-green); }
.ts-blog .ts-cons { border-top: 3px solid var(–ts-red); }
.ts-blog .ts-pros h4 { color: var(–ts-green-light); margin-top: 0; font-size: 15px; }
.ts-blog .ts-cons h4 { color: var(–ts-red); margin-top: 0; font-size: 15px; }
.ts-blog .ts-proscons ul { font-size: 14px; margin: 0; padding-left: 18px; }
.ts-blog .ts-proscons li { margin-bottom: 6px; }

/* === EXPERIENCE BOX === */
.ts-blog .ts-experience {
background: var(–ts-accent-glow);
border-left: 3px solid var(–ts-accent);
border-radius: 0 var(–ts-radius) var(–ts-radius) 0;
padding: 16px 20px; margin: 16px 0; font-size: 15px;
}
.ts-blog .ts-experience strong { color: var(–ts-accent); }

/* === RED FLAGS / GREEN FLAGS === */
.ts-blog .ts-flag {
background: var(–ts-card);
border: 1px solid var(–ts-border);
border-radius: var(–ts-radius);
padding: 20px 24px; margin: 16px 0;
}
.ts-blog .ts-flag.ts-red-flag { border-left: 4px solid var(–ts-red); }
.ts-blog .ts-flag.ts-green-flag { border-left: 4px solid var(–ts-green); }
.ts-blog .ts-flag h3 { margin-top: 0; font-size: 18px; }

/* === IMAGE === */
.ts-blog .ts-image-wrap {
border-radius: var(–ts-radius); overflow: hidden; margin: 28px 0;
border: 1px solid var(–ts-border);
}
.ts-blog .ts-image-wrap img { width: 100%; height: auto; display: block; }
.ts-blog .ts-image-placeholder {
background: linear-gradient(135deg, var(–ts-card), var(–ts-card-alt));
border: 2px dashed var(–ts-border);
border-radius: var(–ts-radius);
padding: 40px 24px; margin: 28px 0; text-align: center;
color: var(–ts-text-dim); font-size: 14px; font-style: italic;
}

/* === FAQ === */
.ts-blog .ts-faq { margin: 24px 0; }
.ts-blog .ts-faq-item {
background: var(–ts-card);
border: 1px solid var(–ts-border);
border-radius: var(–ts-radius);
margin-bottom: 12px; overflow: hidden;
}
.ts-blog .ts-faq-q {
padding: 18px 24px; font-weight: 600; color: var(–ts-text-bright);
display: flex; align-items: center; gap: 12px; font-size: 16px;
}
.ts-blog .ts-faq-q .ts-q-badge {
background: var(–ts-accent); color: #000;
width: 28px; height: 28px; border-radius: 50%;
display: flex; align-items: center; justify-content: center;
font-size: 13px; font-weight: 700; flex-shrink: 0;
}
.ts-blog .ts-faq-a {
padding: 0 24px 18px 64px; color: var(–ts-text); font-size: 15px; line-height: 1.7;
}

/* === CTA BOX === */
.ts-blog .ts-cta {
background: linear-gradient(135deg, rgba(246,176,89,0.1), rgba(210,129,71,0.05));
border: 2px solid var(–ts-accent);
border-radius: var(–ts-radius);
padding: 32px; margin: 40px 0; text-align: center;
}
.ts-blog .ts-cta h3 { color: var(–ts-accent); margin-top: 0; font-size: 24px; }
.ts-blog .ts-cta p { color: var(–ts-text); margin-bottom: 20px; }
.ts-blog .ts-cta-btn {
display: inline-block;
background: var(–ts-accent); color: #000 !important;
padding: 14px 36px; border-radius: 8px;
font-weight: 700; font-size: 16px;
text-decoration: none !important; border: none !important;
transition: background 0.2s, transform 0.15s; margin: 4px 8px;
}
.ts-blog .ts-cta-btn:hover { background: var(–ts-accent-dark); transform: translateY(-2px); }
.ts-blog .ts-cta-btn.ts-btn-secondary {
background: transparent; color: var(–ts-accent) !important;
border: 2px solid var(–ts-accent) !important;
}
.ts-blog .ts-cta-btn.ts-btn-secondary:hover { background: var(–ts-accent-glow); }

/* === CALLOUT === */
.ts-blog .ts-callout {
background: var(–ts-card); border-radius: var(–ts-radius);
padding: 20px 24px; margin: 24px 0;
display: flex; gap: 14px; align-items: flex-start; font-size: 15px;
}
.ts-blog .ts-callout.ts-tip { border-left: 4px solid var(–ts-green); }
.ts-blog .ts-callout.ts-warning { border-left: 4px solid var(–ts-accent); }

/* === RELATED POSTS === */
.ts-blog .ts-related {
background: var(–ts-card); border: 1px solid var(–ts-border);
border-radius: var(–ts-radius); padding: 24px 28px; margin: 40px 0 0;
}
.ts-blog .ts-related h3 { margin-top: 0; font-size: 18px; color: var(–ts-accent); }
.ts-blog .ts-related ul { list-style: none; padding: 0; margin: 0; }
.ts-blog .ts-related li { padding: 10px 0; border-bottom: 1px solid var(–ts-border); }
.ts-blog .ts-related li:last-child { border: none; }
.ts-blog .ts-related a { font-weight: 500; }

/* === RESPONSIVE === */
@media (max-width: 768px) {
.ts-blog { font-size: 16px; padding: 0 16px; }
.ts-blog h2 { font-size: 22px; }
.ts-blog h3 { font-size: 19px; }
.ts-blog .ts-toc ul { columns: 1; }
.ts-blog .ts-proscons { grid-template-columns: 1fr; }
.ts-blog .ts-cta { padding: 24px 20px; }
.ts-blog .ts-cta-btn { display: block; margin: 8px 0; }
.ts-blog .ts-review { padding: 20px; }
}

DreamLeague Season 29 Final-Day Meta Report: What May 23-24 Games Actually Teach You in 7.41c

DreamLeague Season 29 did not just give us entertaining playoff games. It gave us a clean read on what works in serious 7.41c Dota when teams stop experimenting and start playing elimination Dota. If you are trying to climb MMR this week, this is where your draft priorities should come from.

The key shift from May 23 to May 24 was not random. We saw two patterns at the same time: first, high-tempo supports still show up in draft volume, but second, actual series winners are getting more value from stable scaling cores and flexible mid/offlane initiators. This split is exactly why many pub players feel confused right now. They copy support trends but miss the real win conditions.

This report breaks down the exact matches, dates, and numbers from DreamLeague Season 29, then translates that into ranked decisions you can execute today. We include match IDs, kill scorelines, game lengths, and hero pick and win rates so you can see where the edge really is.

Why This Final-Day Meta Matters

Patch 7.41c is now old enough that random pub chaos is fading. DreamLeague Season 29 playoff games from May 23 and May 24 are late-patch games where teams punish weak map structure fast. That is exactly the environment you want to study if your goal is consistent MMR gain.

From ESL’s event format page, Season 29 ran May 13-24, 2026 with group stage then playoffs. That means these games happened after teams had enough sample size on the patch. Not day-one theorycraft. Real draft adaptation.

Also, this topic is fresh. TeamSmurf already covered Esports World Cup 2026 moving to Paris on May 23, but did not publish a deep tactical DreamLeague final-day meta report. So this avoids duplicate intent and captures active search demand around “DreamLeague Season 29 playoffs” and “7.41c meta”.

Tip: Late-patch playoff games are usually more useful for ranked than day-one patch pubs. Teams reveal reliable structures under pressure.

What Happened on May 23-24

Using Dotabuff’s DreamLeague Season 29 scores page, we can map the key playoff sequences directly:

Date (UTC) Series Result Notable Game Lines
2026-05-23 Aurora vs Team Falcons Aurora 2-0 26-8 in 23:17, then 38-18 in 43:32
2026-05-23 PARIVISION vs Team Spirit PARIVISION 2-1 40-15 in 35:46, 14-4 in 24:58, then Spirit bounceback 38-9 in 27:01
2026-05-24 Aurora vs Team Spirit Aurora 2-0 30-9 in 29:41, then 52-42 in 1:06:40

These are not low-kill macro snoozers. These are decisive swings and timing punish games. The May 24 second map (52-42, 66:40) is the type of game where itemization discipline and buyback map control decide outcomes, not just lane dominance.

Hero Data Snapshot: Picks vs Wins

Dotabuff’s Season 29 hero page gives a useful split between popularity and conversion. This is where many pub players misread the meta.

Hero Matches Win Rate Interpretation
Hoodwink 87 51.72% High contest value, flexible support impact
Rubick 78 39.74% Overpicked in pubs; execution burden too high for most stacks
Pangolier 69 56.52% Reliable mid tempo with survivability and initiation
Tiny 48 58.33% Burst + tower pressure still closes games
Kez 47 59.57% Strong conversion pick when drafted with clear lane plan
Doom 43 62.79% One of the cleanest offlane win-condition heroes in this sample
Axe 40 60.00% Punishes greed cores and bad support spacing

Core insight: The highest pick rate heroes are not always the strongest ladder choices for your bracket. Rubick at 39.74% is the perfect example. Mechanical ceiling is high, but the average team fight clarity in ranked is low, so copy-pasting pro support picks without structure tanks win rate.

Series Breakdown with Match IDs

This section covers exact games you can watch and study.

Aurora vs Team Spirit (May 24, 2026): Why 2-0 Was Not a Fluke

Dotabuff series view for this match block shows Aurora taking the best-of-three 2-0.

  • Game 1: 29:41, score 30-9 (Aurora favored tempo, closed before Spirit stabilized)
  • Game 2: 1:06:40, score 52-42 (long game, Aurora still controlled late conversions)

Match IDs:

  • 8823502263 (Game 1)
  • 8823581121 (Game 2)

In match 8823581121, key visible carry damage/output details show why late-game discipline matters. Spirit cores posted large raw damage, but Aurora translated fight wins into building pressure and objective progress better.

PARIVISION vs Team Spirit (May 23, 2026): Tempo Collapse and Recovery Pattern

On May 23, PARIVISION took the series 2-1 with two dominant wins before dropping game three:

  • Game 1 (ID 8822412074): 35:46, 40-15
  • Game 2 (ID 8822330030): 24:58, 14-4
  • Game 3 (ID 8822238357): 27:01, Spirit 38-9

This pattern matters for pubs: when a team is losing map control twice in a row, they often overforce one smoke or one high-ground defense. That is where comebacks happen. The correct move in high MMR is usually to reset lanes first, then force around a power-spike item, not around frustration.

Aurora vs Falcons (May 23, 2026): Why Fast Stomps Still Matter for Draft Theory

From the same score feed, Aurora beat Falcons 2-0 with one 23:17 stomp (26-8) and one 43:32 control game (38-18). That two-speed win profile is exactly what you want in ranked drafts:

  • A lineup that can win fast if lanes go well
  • A lineup that still scales and team fights at 35+ minutes

Immortal-Level Draft Insights from These Games

This is where most guides stay generic. We will be specific.

1) Stop Blind-Copying Rubick in Solo Queue

Rubick at 78 matches and 39.74% win rate in this tournament sample should wake people up. In coordinated teams, Rubick can enable clutch steals. In solo queue, support players often first-pick Rubick into weak lane pairs, then enter midgame under-farmed. Result: no blink timing, no high-impact steals, dead hero slot for first two Roshan windows.

If your stack is not calling layered fights, pick Hoodwink, Clockwerk, or another stable initiator instead. Hoodwink had 87 matches at 51.72%. That is not flashy, but it is stable value.

2) Mid Tempo Heroes with Built-In Mobility Are Premium

Pangolier (69 matches, 56.52%) and Tiny (48 matches, 58.33%) show the same truth: mid heroes that can start fights and survive counter-initiation are carrying this patch phase.

In 7.41c, pure glass cannon mids get punished if your supports do not perfectly secure vision. Mobility plus control lets you force map events on your terms. This is why pubs with active mid rotations around minute 8-12 still overperform compared to AFK farm mids.

3) Offlane Win Condition Is Back to Reliable Disable Pressure

Doom at 62.79% and Axe at 60.00% in this sample is not noise. These heroes simplify fight calls:

  • Find target
  • Commit reliable disable
  • Force enemy response with buyback pressure

When your team has shaky communication, heroes with obvious go-buttons increase average fight quality. That is why these picks perform even when games get chaotic.

4) Two-Speed Drafting Wins More Series

Aurora’s May 23 and May 24 profile shows both stomp and long-game wins. This is the blueprint:

  • Draft one lane dominator
  • Draft one scaling insurance core
  • Draft one reliable initiation hero
  • Draft at least one support with wave clear or long-range catch

If your draft only does one thing, a single bad lane can end your game. If your draft has two win paths, enemy mistakes in minute 30+ are still punishable.

How to Apply This in Ranked Today

Below is a practical ladder framework based on this playoff sample.

Phase What Most Players Do What You Should Do
Draft Copy highest pick-rate heroes Pick high conversion heroes your role can execute
Lane Exit AFK farm triangle Push one extra wave then smoke to first objective fight
First Roshan Fight with no ward prep Force support TP, deward one angle, then commit
Post-Wipe Chase kills Convert to tower, outpost control, and lane state
Late Game Random buyback usage Plan buyback around next objective and wave position

If you want this executed without trial-and-error losses, Team Smurf’s Dota 2 coaching helps you map pro-level concepts to your exact bracket. If you are short on time and want direct rank progression, MMR boost service is the fastest path.

Role-by-Role Priority in the Current 7.41c Window

Carry (Pos 1)

Focus on heroes that can join second-item fights and still scale past 35 minutes. In these playoff samples, the teams that converted leads did not wait forever for six-slot fantasy timing. They fought on practical two to three item spikes and turned that into map control.

  • Do not skip early BKB windows if enemy control is layered
  • Keep lane pressure before objective calls
  • Join if your offlane initiation is online

Mid (Pos 2)

Tempo mids with mobility and setup are safer than greedy scaling mids in average ranked conditions. Pangolier and Tiny numbers support this. Your job is not only to top net worth. Your job is to decide where the game is played.

  • Rotate on power rune timings
  • Call smoke with support when catapult waves are active
  • Play for tower damage after won fights, not just kills

Offlane (Pos 3)

Doom and Axe trends say one thing: reliable control still wins when games get messy. Pick heroes that start fights clearly and threaten enemy carry positioning.

  • Build for first real team fight, not pure lane greed
  • Protect your support’s vision game by front-lining map entry points
  • Keep buyback in mind after 25 minutes

Supports (Pos 4/5)

Hoodwink’s high presence and positive conversion versus Rubick’s low conversion should change your pub approach. Pick what your team can execute with imperfect comms.

  • Prioritize heroes with lane impact plus catch
  • Ward for entry and exit routes, not just high grounds
  • Track one enemy core item timing and call around it

Common Meta Mistakes We See After Tournament Week

Mistake 1: Treating Pick Rate as Win Rate

Most common bad take: “Pro teams pick it a lot, so I should spam it.” No. Rubick example again: high use, low conversion.

Mistake 2: Copying Builds Without Copying Team Structure

Some pub players copy six-slot item paths from long pro games, then lose before minute 25. In pro games, supports secure space and vision around that progression. In your bracket, you need earlier stability.

Mistake 3: Forcing High Ground Without Lane Prep

The May 23-24 games repeatedly show decisive swings around objective conversions. If side lanes are bad, your “won fight” can still become a bad push. Fix lanes first, then commit.

Mistake 4: No Backup Win Condition in Draft

One-dimensional drafts lose to one bad lane or one failed smoke. Aurora’s profile worked because they could win short and long games. Build your ranked drafts the same way.

Warning: If your draft has no tower damage and no reliable catch, you are praying for enemy throws. That is not a climbing strategy.

FAQ

Q Is DreamLeague Season 29 data enough to define the full 7.41c meta?
No single event is enough. But final-week playoff data is a strong signal because teams are pressure-tested and drafts are optimized.

Q Why avoid Rubick if pros still pick him?
Because ranked execution quality is lower than coordinated pro play. If your team cannot set up steals and vision, Rubick value drops hard.

Q Which role should adapt first from this report?
Mid and offlane first. They control tempo and objective access in this patch window.

Q Should I copy exact pro drafts?
Copy concepts, not full drafts. Keep two-speed win conditions and reliable initiation, then choose heroes you can execute in your bracket.

Q I have limited time this season. What is the fastest route to climb?
Use coaching to fix your decision patterns quickly, or use boosting if your goal is immediate rank correction while you focus on work or study.

Final Take: What Actually Wins MMR This Week

The biggest takeaway from DreamLeague Season 29 final-day games is simple: stable execution beats flashy theory. Draft heroes that convert, fight around clear timings, and force objective trades with lane prep. Stop gambling on highlight-reel picks without structure.

If you want to apply this without dropping 200 MMR while testing, Team Smurf can help:

Track the event data, apply the structure, and keep your draft logic disciplined. That is how high-MMR players climb consistently in patches like 7.41c.