<!-- ======================================================== --> <!-- CHƯƠNG 2 — BÁT TỰ TỬ BÌNH LÀ GÌ? (sequential 6 parts) --> <!-- WordPress safe iframe (JNews compatible) --> <!-- Paste into Custom HTML block in Gutenberg --> <!-- ======================================================== --> <style> .lt-wrap-lt-c2-frame { display: block !important; width: 100% !important; max-width: 100% !important; margin: 30px 0 !important; padding: 0 !important; background: transparent !important; border: 0 !important; position: relative !important; overflow: visible !important; box-sizing: border-box !important; height: auto !important; max-height: none !important; contain: none !important; } .lt-wrap-lt-c2-frame > iframe { width: 100% !important; max-width: 100% !important; border: 0 !important; display: block !important; background: transparent !important; padding: 0 !important; margin: 0 !important; max-height: none !important; min-height: 0 !important; vertical-align: top !important; } </style> <div class="lt-wrap-lt-c2-frame"> <iframe id="lt-c2-frame" height="3000" loading="eager" scrolling="no" srcdoc="<!DOCTYPE html> <html lang="vi"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"> <title>Chương 2 — Bát Tự Tử Bình là gì?</title> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;0,700;1,400;1,600;1,700&family=Be+Vietnam+Pro:wght@300;400;500;600;700&display=swap" rel="stylesheet"> <style> :root { --bg: #0b0812; --bg-2: #15101f; --bg-3: #1c1528; --ink: #f2e8d1; --ink-dim: #a89878; --ink-soft: #c7b88f; --gold: #d4af37; --gold-bright: #f5d061; --gold-soft: rgba(212, 175, 55, 0.35); --crimson: #9e1b3f; --deep-red: #5c0a1a; --warn: #e08eaa; --green: #7ed39e; --red: #ef6a6a; } * { box-sizing: border-box; margin: 0; padding: 0; } html { background: var(--bg); } body { background: var(--bg); color: var(--ink); font-family: 'Be Vietnam Pro', -apple-system, sans-serif; overflow-x: hidden; line-height: 1.65; font-size: 15px; -webkit-font-smoothing: antialiased; position: relative; min-height: 0; } .bg-gradient { position: fixed; inset: 0; z-index: 0; background: radial-gradient(ellipse 80% 50% at 50% 0%, rgba(139, 30, 63, 0.18), transparent 60%), radial-gradient(ellipse 60% 40% at 100% 50%, rgba(212, 175, 55, 0.08), transparent 60%), radial-gradient(ellipse 70% 50% at 0% 100%, rgba(92, 10, 26, 0.22), transparent 60%); pointer-events: none; } .stars { position: fixed; inset: 0; z-index: 1; pointer-events: none; background-image: radial-gradient(1.2px 1.2px at 23px 34px, rgba(212,175,55,0.6), transparent), radial-gradient(1px 1px at 67px 128px, rgba(244,234,213,0.45), transparent), radial-gradient(1.5px 1.5px at 142px 76px, rgba(212,175,55,0.55), transparent), radial-gradient(1px 1px at 198px 199px, rgba(244,234,213,0.35), transparent), radial-gradient(1px 1px at 253px 54px, rgba(212,175,55,0.45), transparent); background-size: 300px 280px; animation: twinkle 6s ease-in-out infinite; } @keyframes twinkle { 0%,100% { opacity: 0.5; } 50% { opacity: 1; } } @keyframes rotate { from { transform: rotate(0); } to { transform: rotate(360deg); } } @keyframes fadeUp { from { opacity: 0; transform: translateY(15px); } to { opacity: 1; transform: translateY(0); } } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes correctPop { 0% { transform: scale(0.95); } 50% { transform: scale(1.02); } 100% { transform: scale(1); } } @keyframes shake { 0%, 100% { transform: translateX(0); } 25% { transform: translateX(-4px); } 75% { transform: translateX(4px); } } .app { position: relative; z-index: 5; max-width: 460px; margin: 0 auto; padding: 28px 22px 60px; } .view { display: none; animation: fadeIn 0.4s ease; } .view.active { display: block; } /* HERO */ .hero { text-align: center; padding: 24px 0 30px; } .hero-tag { font-family: 'Cormorant Garamond', serif; font-style: italic; font-size: 12px; letter-spacing: 4px; text-transform: uppercase; color: var(--gold); margin-bottom: 18px; display: block; } .hero-tag::before, .hero-tag::after { content: '⟢'; margin: 0 10px; opacity: 0.7; } .hero-chinese { font-family: 'Cormorant Garamond', serif; font-size: 56px; line-height: 1; font-weight: 400; color: transparent; background: linear-gradient(180deg, var(--gold-bright), var(--gold), rgba(212,175,55,0.3)); -webkit-background-clip: text; background-clip: text; margin: 12px 0 14px; letter-spacing: 8px; padding-left: 8px; text-shadow: 0 0 30px rgba(212,175,55,0.3); } .hero h1 { font-family: 'Cormorant Garamond', serif; font-weight: 600; font-size: 30px; line-height: 1.18; color: var(--ink); margin: 4px 0 6px; } .hero h1 em { font-style: italic; color: var(--gold-bright); } .hero-rule { width: 80px; height: 1px; background: linear-gradient(90deg, transparent, var(--gold), transparent); margin: 18px auto 22px; } .hero-intro { font-family: 'Cormorant Garamond', serif; font-style: italic; font-size: 16px; color: var(--ink-soft); line-height: 1.6; padding: 0 4px; max-width: 380px; margin: 0 auto; } .hero-intro em { color: var(--gold-bright); font-weight: 600; } .hero-author { margin-top: 22px; font-family: 'Cormorant Garamond', serif; font-size: 12px; letter-spacing: 3px; text-transform: uppercase; color: var(--gold); font-weight: 600; } .hero-author::before, .hero-author::after { content: ''; display: inline-block; width: 22px; height: 1px; background: var(--gold); margin: 0 10px; vertical-align: middle; } /* PROGRESS DOTS */ .part-progress { display: flex; align-items: center; justify-content: center; gap: 8px; margin: 30px 0 24px; flex-wrap: wrap; } .part-progress .dot { width: 8px; height: 8px; border-radius: 50%; background: rgba(212,175,55,0.2); border: 1px solid rgba(212,175,55,0.3); transition: all 0.3s ease; } .part-progress .dot.done { background: var(--gold); box-shadow: 0 0 8px rgba(212,175,55,0.5); } .part-progress .dot.current { background: var(--gold-bright); box-shadow: 0 0 12px rgba(245,208,97,0.7); transform: scale(1.4); border-color: var(--gold-bright); } .part-progress .label { font-family: 'Cormorant Garamond', serif; font-style: italic; font-size: 12px; letter-spacing: 2px; color: var(--gold); margin-left: 8px; } .part-progress .label strong { color: var(--gold-bright); font-weight: 700; } /* PART CARD */ .part-card { background: linear-gradient(155deg, rgba(28,21,40,0.88), rgba(21,16,31,0.65)); border: 1px solid rgba(212,175,55,0.22); border-radius: 6px; padding: 32px 24px 28px; position: relative; overflow: hidden; animation: fadeUp 0.5s ease; } .part-card::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 1px; background: linear-gradient(90deg, transparent, var(--gold), transparent); opacity: 0.5; } .part-card-header { text-align: center; margin-bottom: 22px; padding-bottom: 18px; border-bottom: 1px solid rgba(212,175,55,0.15); } .part-card .seal { display: inline-flex; align-items: center; justify-content: center; width: 52px; height: 52px; border-radius: 50%; background: linear-gradient(145deg, var(--crimson), var(--deep-red)); border: 2px solid var(--gold); color: var(--gold-bright); font-family: 'Cormorant Garamond', serif; font-style: italic; font-weight: 700; font-size: 20px; box-shadow: 0 0 0 2px var(--bg), 0 0 18px rgba(158,27,63,0.5), inset 0 0 12px rgba(0,0,0,0.4); margin-bottom: 14px; position: relative; } .part-card .seal::before { content: ''; position: absolute; inset: -8px; border-radius: 50%; border: 1px dashed var(--gold-soft); animation: rotate 40s linear infinite; } .part-card .lbl { display: block; font-family: 'Cormorant Garamond', serif; font-style: italic; font-size: 11px; letter-spacing: 4px; text-transform: uppercase; color: var(--gold); margin-bottom: 6px; } .part-card h2 { font-family: 'Cormorant Garamond', serif; font-weight: 600; font-size: 24px; line-height: 1.2; color: var(--ink); margin-bottom: 4px; } .part-card h2 em { color: var(--gold-bright); font-style: italic; } .part-card .subtitle { display: block; margin-top: 6px; font-family: 'Cormorant Garamond', serif; font-style: italic; font-size: 13px; color: var(--ink-dim); letter-spacing: 1px; } .part-card .body { font-size: 15px; line-height: 1.75; color: var(--ink-soft); } .part-card .body p { margin-bottom: 14px; } .part-card .body p:last-child { margin-bottom: 0; } .part-card .body p strong { color: var(--ink); font-weight: 600; } .part-card .body em { color: var(--gold-bright); font-style: italic; } .part-card .body .hl { color: var(--gold-bright); font-weight: 500; font-style: italic; } .kp { margin: 16px 0; padding: 14px 16px; background: rgba(212,175,55,0.07); border-left: 3px solid var(--gold); border-radius: 0 2px 2px 0; font-family: 'Cormorant Garamond', serif; font-style: italic; font-size: 15px; line-height: 1.6; color: var(--ink); } .kp strong { color: var(--gold-bright); font-style: normal; font-family: 'Be Vietnam Pro', sans-serif; font-weight: 700; font-size: 14px; } .compare-pair { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin: 16px 0; } .compare-cell { padding: 14px; border-radius: 4px; border: 1px solid; } .compare-cell.bad { background: rgba(158,27,63,0.1); border-color: rgba(158,27,63,0.4); } .compare-cell.good { background: rgba(126,211,158,0.08); border-color: rgba(126,211,158,0.4); } .compare-cell .c-lbl { display: block; font-family: 'Cormorant Garamond', serif; font-style: italic; font-weight: 700; font-size: 11px; letter-spacing: 2px; text-transform: uppercase; margin-bottom: 6px; } .compare-cell.bad .c-lbl { color: var(--warn); } .compare-cell.good .c-lbl { color: var(--green); } .compare-cell .c-text { font-family: 'Cormorant Garamond', serif; font-style: italic; font-size: 13.5px; line-height: 1.5; color: var(--ink-soft); } .persons-grid { display: flex; flex-direction: column; gap: 10px; margin: 14px 0; } .person-row { padding: 12px 14px; background: rgba(15,11,22,0.5); border: 1px solid rgba(212,175,55,0.18); border-radius: 3px; display: grid; grid-template-columns: 1fr auto; gap: 4px 10px; align-items: center; } .person-row.tragic { border-color: rgba(158,27,63,0.4); background: rgba(158,27,63,0.08); } .person-name { font-family: 'Cormorant Garamond', serif; font-weight: 700; font-style: italic; font-size: 14.5px; color: var(--gold-bright); } .person-row.tragic .person-name { color: var(--warn); } .person-father { font-size: 12.5px; color: var(--ink-soft); font-style: italic; font-family: 'Cormorant Garamond', serif; text-align: right; } .person-fate { grid-column: 1 / -1; font-size: 13px; color: var(--ink-soft); padding-top: 4px; border-top: 1px dashed rgba(212,175,55,0.15); } .person-fate strong { color: var(--ink); font-weight: 600; } /* Nav buttons */ .part-nav { margin-top: 32px; display: flex; gap: 10px; flex-wrap: wrap; } .part-nav-btn { flex: 1; min-width: 130px; padding: 14px 18px; font-family: 'Cormorant Garamond', serif; font-style: italic; font-weight: 700; font-size: 14.5px; letter-spacing: 2px; border-radius: 4px; cursor: pointer; -webkit-tap-highlight-color: transparent; transition: all 0.2s ease; text-align: center; text-transform: uppercase; } .part-nav-btn.prev { background: transparent; border: 1px solid rgba(212,175,55,0.4); color: var(--gold); } .part-nav-btn.prev:hover { background: rgba(212,175,55,0.08); color: var(--gold-bright); border-color: var(--gold); } .part-nav-btn.prev:disabled { opacity: 0.3; cursor: not-allowed; } .part-nav-btn.next { background: linear-gradient(145deg, var(--crimson), var(--deep-red)); border: 1px solid var(--gold); color: var(--gold-bright); box-shadow: 0 0 18px rgba(158,27,63,0.3), inset 0 0 12px rgba(0,0,0,0.3); } .part-nav-btn.next:hover { transform: translateY(-2px); box-shadow: 0 4px 24px rgba(158,27,63,0.5), inset 0 0 12px rgba(0,0,0,0.3); } /* CLOSING + CTA */ .closing { margin: 30px 0 0; padding: 30px 22px; background: radial-gradient(ellipse at top, rgba(212,175,55,0.1), transparent 70%), linear-gradient(165deg, rgba(28,21,40,0.95), rgba(21,16,31,0.85)); border: 1px solid var(--gold-soft); border-radius: 4px; text-align: center; position: relative; overflow: hidden; } .closing::before { content: ''; position: absolute; inset: 6px; border: 1px solid rgba(212,175,55,0.15); border-radius: 2px; pointer-events: none; } .closing-label { font-family: 'Cormorant Garamond', serif; font-style: italic; font-size: 12px; letter-spacing: 4px; text-transform: uppercase; color: var(--gold); margin-bottom: 14px; } .closing-text { font-family: 'Cormorant Garamond', serif; font-style: italic; font-size: 16px; line-height: 1.65; color: var(--ink); } .closing-text em { color: var(--gold-bright); font-weight: 600; } .closing-mark { margin-top: 16px; font-size: 16px; color: var(--gold); letter-spacing: 12px; } .cta { margin: 30px 0 0; padding: 30px 22px; background: linear-gradient(155deg, rgba(28,21,40,0.92), rgba(21,16,31,0.75)); border: 1px solid rgba(212,175,55,0.4); border-radius: 4px; text-align: center; } .cta-label { font-family: 'Cormorant Garamond', serif; font-style: italic; font-size: 12px; letter-spacing: 4px; text-transform: uppercase; color: var(--gold); margin-bottom: 12px; } .cta h3 { font-family: 'Cormorant Garamond', serif; font-weight: 600; font-size: 24px; line-height: 1.2; color: var(--ink); margin-bottom: 8px; } .cta h3 em { color: var(--gold-bright); font-style: italic; } .cta-desc { font-family: 'Cormorant Garamond', serif; font-style: italic; font-size: 15px; color: var(--ink-soft); line-height: 1.55; margin-bottom: 18px; max-width: 360px; margin-left: auto; margin-right: auto; } .cta-meta { display: flex; gap: 12px; justify-content: center; margin-bottom: 20px; flex-wrap: wrap; } .cta-meta-item { font-family: 'Cormorant Garamond', serif; font-style: italic; font-size: 12px; letter-spacing: 2px; text-transform: uppercase; color: var(--gold); padding: 4px 12px; background: rgba(212,175,55,0.08); border: 1px solid rgba(212,175,55,0.3); border-radius: 2px; } .btn-primary { display: block; width: 100%; margin: 0 auto; padding: 16px 24px; background: linear-gradient(145deg, var(--crimson), var(--deep-red)); border: 1px solid var(--gold); border-radius: 4px; color: var(--gold-bright); font-family: 'Cormorant Garamond', serif; font-style: italic; font-weight: 700; font-size: 17px; letter-spacing: 3px; text-transform: uppercase; cursor: pointer; box-shadow: 0 0 24px rgba(158,27,63,0.4), inset 0 0 15px rgba(0,0,0,0.3); -webkit-tap-highlight-color: transparent; transition: transform 0.2s ease, box-shadow 0.2s ease; } .btn-primary:hover, .btn-primary:active { transform: translateY(-2px); box-shadow: 0 6px 32px rgba(158,27,63,0.6), inset 0 0 15px rgba(0,0,0,0.3); } /* QUIZ */ .quiz-back { display: inline-flex; align-items: center; gap: 8px; background: transparent; border: 1px solid rgba(212,175,55,0.4); border-radius: 2px; padding: 8px 14px; font-family: 'Cormorant Garamond', serif; font-style: italic; font-size: 13px; letter-spacing: 1.5px; color: var(--gold); cursor: pointer; transition: all 0.25s ease; margin-bottom: 20px; -webkit-tap-highlight-color: transparent; } .quiz-back:hover { background: rgba(212,175,55,0.08); color: var(--gold-bright); } .progress-bar { display: flex; align-items: center; gap: 8px; margin: 8px 0 24px; } .progress-track { flex: 1; height: 4px; background: rgba(212,175,55,0.15); border-radius: 2px; overflow: hidden; } .progress-fill { height: 100%; background: linear-gradient(90deg, var(--crimson), var(--gold)); border-radius: 2px; transition: width 0.4s ease; box-shadow: 0 0 6px var(--gold); } .progress-text { font-family: 'Cormorant Garamond', serif; font-style: italic; font-size: 13px; color: var(--gold); white-space: nowrap; } .progress-text strong { color: var(--gold-bright); font-weight: 700; } .q-card { background: linear-gradient(155deg, rgba(28,21,40,0.92), rgba(21,16,31,0.75)); border: 1px solid rgba(212,175,55,0.25); border-radius: 4px; padding: 24px 22px; margin-bottom: 20px; position: relative; animation: fadeUp 0.5s ease; } .q-card::before { content: ''; position: absolute; top: 0; left: 24px; width: 30px; height: 1px; background: var(--gold); box-shadow: 0 0 6px var(--gold); } .q-card .q-num { position: absolute; top: -14px; left: 18px; background: var(--bg); padding: 0 10px; font-family: 'Cormorant Garamond', serif; font-style: italic; font-size: 12px; letter-spacing: 2px; color: var(--gold); text-transform: uppercase; } .q-card h2 { font-family: 'Cormorant Garamond', serif; font-weight: 600; font-size: 19px; line-height: 1.4; color: var(--ink); } .q-card h2 em { font-style: italic; color: var(--gold-bright); } .options { display: flex; flex-direction: column; gap: 10px; margin-top: 18px; } .opt-btn { width: 100%; text-align: left; background: linear-gradient(155deg, rgba(15,11,22,0.7), rgba(11,8,18,0.5)); border: 1px solid rgba(212,175,55,0.2); border-radius: 4px; padding: 13px 14px 13px 48px; font-family: 'Be Vietnam Pro', sans-serif; font-size: 15px; line-height: 1.5; color: var(--ink-soft); cursor: pointer; position: relative; transition: all 0.2s ease; -webkit-tap-highlight-color: transparent; } .opt-btn:hover:not(:disabled) { border-color: var(--gold-soft); background: linear-gradient(155deg, rgba(28,21,40,0.85), rgba(21,16,31,0.65)); color: var(--ink); transform: translateX(2px); } .opt-btn .opt-letter { position: absolute; left: 14px; top: 14px; width: 24px; height: 24px; border-radius: 50%; border: 1px solid rgba(212,175,55,0.4); display: flex; align-items: center; justify-content: center; font-family: 'Cormorant Garamond', serif; font-style: italic; font-weight: 700; font-size: 13px; color: var(--gold); background: rgba(212,175,55,0.05); transition: all 0.2s ease; } .opt-btn:hover:not(:disabled) .opt-letter { border-color: var(--gold); background: rgba(212,175,55,0.15); color: var(--gold-bright); } .opt-btn:disabled { cursor: default; } .opt-btn.correct { background: linear-gradient(155deg, rgba(126,211,158,0.18), rgba(74,133,116,0.1)); border-color: var(--green); color: var(--ink); animation: correctPop 0.4s ease; } .opt-btn.correct .opt-letter { background: var(--green); border-color: var(--green); color: var(--bg); } .opt-btn.correct::after { content: '✓'; position: absolute; right: 14px; top: 14px; color: var(--green); font-weight: 700; font-size: 18px; } .opt-btn.wrong { background: linear-gradient(155deg, rgba(239,106,106,0.15), rgba(158,27,63,0.08)); border-color: var(--red); color: var(--ink); animation: shake 0.4s ease; } .opt-btn.wrong .opt-letter { background: var(--red); border-color: var(--red); color: var(--bg); } .opt-btn.wrong::after { content: '✕'; position: absolute; right: 14px; top: 14px; color: var(--red); font-weight: 700; font-size: 18px; } .opt-btn.dimmed { opacity: 0.4; } .explain { margin-top: 16px; padding: 14px 16px; background: rgba(212,175,55,0.06); border-left: 3px solid var(--gold); border-radius: 0 2px 2px 0; font-family: 'Cormorant Garamond', serif; font-style: italic; font-size: 15px; line-height: 1.55; color: var(--ink); display: none; animation: fadeUp 0.4s ease; } .explain.visible { display: block; } .explain strong { color: var(--gold-bright); font-style: normal; font-family: 'Be Vietnam Pro', sans-serif; font-weight: 700; font-size: 14.5px; } .explain em { color: var(--gold-bright); font-weight: 600; font-style: italic; } .explain .verdict { display: inline-block; padding: 2px 10px; border-radius: 2px; font-family: 'Be Vietnam Pro', sans-serif; font-style: normal; font-weight: 700; font-size: 13px; letter-spacing: 1px; text-transform: uppercase; margin-bottom: 8px; } .explain.is-correct .verdict { background: rgba(126,211,158,0.15); border: 1px solid var(--green); color: var(--green); } .explain.is-wrong .verdict { background: rgba(239,106,106,0.12); border: 1px solid var(--red); color: var(--red); } .next-btn { display: none; width: 100%; margin-top: 18px; padding: 14px 20px; background: linear-gradient(145deg, var(--crimson), var(--deep-red)); border: 1px solid var(--gold); border-radius: 4px; color: var(--gold-bright); font-family: 'Cormorant Garamond', serif; font-style: italic; font-weight: 700; font-size: 15px; letter-spacing: 2px; text-transform: uppercase; cursor: pointer; -webkit-tap-highlight-color: transparent; transition: all 0.2s ease; } .next-btn.visible { display: block; animation: fadeUp 0.4s ease; } .next-btn:hover { transform: translateY(-2px); box-shadow: 0 4px 20px rgba(158,27,63,0.5); } .result-hero { text-align: center; padding: 30px 0 20px; } .result-circle { width: 160px; height: 160px; margin: 0 auto 24px; border-radius: 50%; background: radial-gradient(circle at 50% 40%, rgba(212,175,55,0.25), transparent 60%), linear-gradient(145deg, var(--bg-3), var(--bg-2)); border: 2px solid var(--gold); display: flex; flex-direction: column; align-items: center; justify-content: center; position: relative; box-shadow: 0 0 0 6px rgba(212,175,55,0.05), 0 0 40px rgba(212,175,55,0.2), inset 0 0 30px rgba(212,175,55,0.1); animation: correctPop 0.6s ease; } .result-circle::before { content: ''; position: absolute; inset: -12px; border-radius: 50%; border: 1px dashed var(--gold-soft); animation: rotate 60s linear infinite; } .result-score { font-family: 'Cormorant Garamond', serif; font-weight: 700; font-size: 56px; line-height: 1; color: var(--gold-bright); text-shadow: 0 0 20px rgba(245,208,97,0.4); } .result-total { font-family: 'Cormorant Garamond', serif; font-style: italic; font-size: 14px; color: var(--ink-dim); margin-top: 4px; letter-spacing: 2px; } .result-label { font-family: 'Cormorant Garamond', serif; font-style: italic; font-size: 12px; letter-spacing: 4px; text-transform: uppercase; color: var(--gold); margin-bottom: 10px; display: block; } .result-title { font-family: 'Cormorant Garamond', serif; font-weight: 600; font-size: 26px; line-height: 1.2; color: var(--ink); margin-bottom: 8px; } .result-title em { font-style: italic; color: var(--gold-bright); } .result-msg { font-family: 'Cormorant Garamond', serif; font-style: italic; font-size: 16px; line-height: 1.55; color: var(--ink-soft); max-width: 380px; margin: 14px auto 0; } .action-row { display: flex; gap: 10px; margin-top: 32px; flex-wrap: wrap; } .btn-secondary { flex: 1; min-width: 130px; padding: 12px 16px; background: transparent; border: 1px solid var(--gold); border-radius: 4px; color: var(--gold); font-family: 'Cormorant Garamond', serif; font-style: italic; font-weight: 600; font-size: 13px; letter-spacing: 1.5px; cursor: pointer; -webkit-tap-highlight-color: transparent; transition: all 0.2s ease; text-align: center; } .btn-secondary:hover { background: rgba(212,175,55,0.08); color: var(--gold-bright); } @media (max-width: 400px) { .app { padding: 24px 16px 50px; } .hero h1 { font-size: 26px; } .hero-chinese { font-size: 46px; letter-spacing: 6px; } .part-card { padding: 28px 18px 24px; } .part-card h2 { font-size: 21px; } .part-card .body { font-size: 14.5px; } .compare-pair { grid-template-columns: 1fr; } .person-row { grid-template-columns: 1fr; } .person-father { text-align: left; } .q-card { padding: 22px 18px; } .q-card h2 { font-size: 17px; } .opt-btn { font-size: 14.5px; padding: 12px 12px 12px 44px; } .result-circle { width: 140px; height: 140px; } .result-score { font-size: 48px; } } </style> </head> <body> <div class="bg-gradient"></div> <div class="stars"></div> <div class="app"> <div class="view active" id="view-article"> <section class="hero"> <span class="hero-tag">Chương 2 · Bát Tự Tử Bình</span> <div class="hero-chinese">八字子平</div> <h1>Bát Tự Tử Bình<br><em>là gì?</em></h1> <div class="hero-rule"></div> <p class="hero-intro"> Tử bình có <em>giá trị thật</em>. Nhưng <em>không phải theo cái cách</em> mà nhiều người đang dẫn bạn. Sáu phần dưới đây — đọc tuần tự — để hiểu nó <em>đúng cách</em>. </p> <div class="hero-author">Hoàng Trung</div> </section> <div class="part-progress"> <span class="dot current"></span> <span class="dot"></span> <span class="dot"></span> <span class="dot"></span> <span class="dot"></span> <span class="dot"></span> <span class="label">Phần <strong id="partNumDisplay">1</strong> / 6</span> </div> <article class="part-card"> <div class="part-card-header"> <div class="seal" id="partSeal">I</div> <span class="lbl" id="partLbl">Phần thứ nhất</span> <h2 id="partTitle">…</h2> <span class="subtitle" id="partSubtitle">…</span> </div> <div class="body" id="partBody">…</div> <div class="part-nav"> <button class="part-nav-btn prev" id="prevPartBtn" onclick="prevPart()">← Phần trước</button> <button class="part-nav-btn next" id="nextPartBtn" onclick="nextPart()">Xem tiếp →</button> </div> </article> <div id="endSection" style="display: none;"> <section class="closing"> <div class="closing-label">⟢ Lời gửi gắm ⟢</div> <p class="closing-text"> Tôi viết chương này không phải để bạn <em>từ bỏ tử bình</em> — mà vì tôi không muốn bạn bị <em>ru ngủ</em> bởi những người biến sự mơ hồ thành quyền lực.<br><br> Bạn xứng đáng được hiểu tử bình theo cách khiến bạn <em>tự do hơn</em> — không phải ít tự do hơn. </p> <div class="closing-mark">⟢ ◈ ⟢</div> </section> <section class="cta"> <div class="cta-label">⟢ Tự kiểm tra ⟢</div> <h3>Đã hiểu? <em>Thử ngay</em></h3> <p class="cta-desc"> Mười câu hỏi để củng cố sáu phần vừa đọc. Trả lời từng câu, xem giải thích ngay lập tức. </p> <div class="cta-meta"> <span class="cta-meta-item">10 câu hỏi</span> <span class="cta-meta-item">Phản hồi ngay</span> <span class="cta-meta-item">Không tính giờ</span> </div> <button class="btn-primary" onclick="startQuiz()">⟢ Bắt đầu trắc nghiệm ⟢</button> </section> </div> </div> <div class="view" id="view-quiz"> <button class="quiz-back" onclick="backToArticle()">← Quay về bài viết</button> <div class="progress-bar"> <div class="progress-track"> <div class="progress-fill" id="progressFill" style="width: 0%"></div> </div> <div class="progress-text">Câu <strong id="qNumDisplay">1</strong> / 10</div> </div> <div class="q-card"> <div class="q-num" id="qLabel">Câu 1</div> <h2 id="qText">…</h2> <div class="options" id="qOptions"></div> <div class="explain" id="qExplain"></div> <button class="next-btn" id="nextBtn" onclick="nextQuestion()">Câu tiếp →</button> </div> </div> <div class="view" id="view-result"> <section class="result-hero"> <div class="result-circle"> <div class="result-score"><span id="finalScore">0</span></div> <div class="result-total">/ 10</div> </div> <span class="result-label">⟢ Kết quả ⟢</span> <h2 class="result-title" id="resultTitle">…</h2> <p class="result-msg" id="resultMsg">…</p> </section> <div class="action-row"> <button class="btn-secondary" onclick="restartQuiz()">⟲ Làm lại</button> <button class="btn-secondary" onclick="backToArticle()">← Đọc lại bài</button> </div> </div> </div> <script> const ROMAN = ['', 'I', 'II', 'III', 'IV', 'V', 'VI']; const ORDINAL = ['', 'thứ nhất', 'thứ hai', 'thứ ba', 'thứ tư', 'thứ năm', 'thứ sáu']; const PARTS = [ { title: 'Hai cách nhìn — <em>hai cuộc đời</em>', subtitle: 'Lá số là chân lý hay là bản đồ?', body: ` <p>Trong cộng đồng tử bình tồn tại <strong>hai cách nhìn</strong> đối lập về bản chất của nó.</p> <p><strong>Cách thứ nhất</strong> — phổ biến hơn: lá số là chân lý, luận đoán là định mệnh, thầy nói gì thì đó là điều sẽ xảy ra. Cách nhìn này <em>đã bị bằng chứng thực tế bác bỏ</em>.</p> <div class="kp"> <strong>Nghiên cứu Geoffrey Dean:</strong> theo dõi hơn 2.000 người sinh tại London cùng một khoảng thời gian ngắn — nhiều cặp <em>"time twins"</em> sinh cách nhau chỉ 15 phút. Nếu lá số quyết định vận mệnh, họ phải có cuộc đời tương đồng đáng kể. <strong>Kết quả: không có sự tương đồng nào vượt qua ngưỡng ngẫu nhiên.</strong> </div> <p><strong>Cách thứ hai</strong> — ít người nhắc, nhưng đáng đi: <em>nó không phủ nhận tử bình</em>, mà đặt câu hỏi đúng hơn — nếu người sinh cùng giờ có thể sống khác nhau, thì lá số đang <em>nắm bắt cái gì? đến mức nào? trong điều kiện nào?</em></p> ` }, { title: 'Không phải khoa học —<br><em>không cần giả vờ là khoa học</em>', subtitle: 'Đặt nó đúng chỗ để khỏi vỡ mộng', body: ` <p>Khoa học có cơ chế kiểm chứng nghiêm ngặt: <em>đo đếm được, lặp lại được, bác bỏ được</em>. Tử bình không có những thứ đó — và <strong>không cần giả vờ là có</strong>.</p> <p>Vấn đề là khi người học đối xử với tử bình như khoa học: tin từng chi tiết luận đoán như tin kết quả xét nghiệm. Họ đang <em>áp đặt một chuẩn mực mà nó không được xây dựng để đáp ứng</em>. Kết quả: vỡ mộng — hoặc tệ hơn, bào chữa không ngừng.</p> <div class="kp"> Tử bình là một <strong>hệ thống mô hình dự báo</strong> — xây dựng bản đồ giả định về xu hướng của một con người dựa trên cấu trúc thời gian sinh, rồi đưa ra những hướng phát triển <em>có thể xảy ra</em>. Một lá số có thể có nhiều hướng phát triển. </div> <p><span class="hl">Bản đồ không phải địa hình.</span> Người cầm bản đồ mà tin bản đồ là địa hình thì sẽ đi lạc. Người hiểu bản đồ chỉ là công cụ tham chiếu thì sẽ <em>đối chiếu, điều chỉnh</em>, và không hoảng loạn khi thực tế không khớp.</p> ` }, { title: 'Tiên tri khác <em>mô hình dự báo</em>', subtitle: 'Ranh giới quan trọng nhất — và bị xóa mờ nhiều nhất', body: ` <div class="compare-pair"> <div class="compare-cell bad"> <span class="c-lbl">⚠ Tiên tri</span> <div class="c-text">Kết quả đã định sẵn, không thể thay đổi, không cần điều kiện. <em>"Năm này anh sẽ phá sản."</em> Tự xưng là sự thật tuyệt đối.</div> </div> <div class="compare-cell good"> <span class="c-lbl">✓ Mô hình dự báo</span> <div class="c-text">Trong những điều kiện này, xu hướng này có khả năng xảy ra. <em>Thay đổi điều kiện — xu hướng thay đổi.</em></div> </div> </div> <p>Khi tin lá số có thể <em>tiên tri chính xác</em>, người học rơi vào tất cả các sai lầm tư duy của Chương 1: <strong>chỉ nhớ lần đúng</strong> (thiên kiến xác nhận), <strong>tin vào ba mươi lần đúng</strong> (lượng mẫu nhỏ), <strong>dùng "sai giờ" cho mọi lần thất bại</strong> (tiêu chuẩn kép).</p> <div class="kp"> <strong>Từ bỏ tiên tri không phải từ bỏ tử bình.</strong> Đó là <em>điều kiện để dùng tử bình đúng cách</em>. </div> ` }, { title: 'Bằng chứng từ <em>thực tế</em>', subtitle: 'Lá số có giá trị — nhưng không phải tiên tri', body: ` <p><strong>Sinh đôi bị tách ra từ nhỏ:</strong> Doug Rausch — Howard Burack lớn lên hoàn toàn tách biệt. Khi gặp lại: kết hôn cùng năm, nhiều sở thích chung, vợ tương đồng đáng kinh ngạc về tính cách và nghề nghiệp. Elyse Schein — Paula Bernstein, hay chị em Lulin — Yanfei tại Trung Quốc cũng vậy.</p> <div class="kp"> Có những thứ <em>được mang theo từ lúc sinh ra</em>, chi phối con người theo những cách mà môi trường không hoàn toàn xóa được. Đây là lý do tử bình đáng được nghiên cứu — không phải vì giải thích được tất cả, mà vì <strong>đang cố gắng đặt tên cho một thứ có thật</strong>. </div> <p><strong>Ba người cùng lá số — ba cuộc đời:</strong> sinh 14/6/1946. Cùng tứ trụ <em>năm Bính Tuất, tháng Giáp Ngọ, ngày Kỷ Mùi, giờ Kỷ Tỵ</em>. Dụng thần Bính hỏa tại trụ năm — <em>ngũ hành người cha có ảnh hưởng đặc biệt</em>:</p> <div class="persons-grid"> <div class="person-row"> <span class="person-name">Donald Trump</span> <span class="person-father">cha: hỏa thổ</span> <span class="person-fate">Phù dụng thần. <strong>Kế thừa sản nghiệp, tỷ phú, tổng thống.</strong></span> </div> <div class="person-row"> <span class="person-name">JD. Levitte</span> <span class="person-father">cha: hỏa thổ</span> <span class="person-fate">Bổ trợ tốt. <strong>Leo lên đỉnh ngoại giao Pháp.</strong></span> </div> <div class="person-row tragic"> <span class="person-name">T. Getty</span> <span class="person-father">cha: kim thủy</span> <span class="person-fate">Tương khắc dụng thần. <strong>Mất lúc 12 tuổi.</strong></span> </div> </div> <p><strong>Người xưa đã thấy giới hạn này:</strong> trong <em>Hỷ Kỵ Thiên</em> thời nhà Tống — gần một nghìn năm trước — đã ghi lại trường hợp hai người phụ nữ cùng bát tự, một sung túc một nghèo khó. Họ <em>không che giấu giới hạn — ghi lại, đặt tên, và dùng nó làm điểm khởi đầu</em>.</p> ` }, { title: 'Có thể làm gì — <em>không thể làm gì</em>', subtitle: 'Đặt đúng chức năng để dùng đúng', body: ` <p>Chỉ dựa vào lá số mà xem — <em>không thông tin ngoại cảnh, không bối cảnh con người</em> — thì chắc chắn là <strong>mê tín</strong>.</p> <p><strong>Tử bình không thể:</strong> xem hôn nhân tốt hay xấu, xem giàu nghèo, tiên tri tai nạn hay bệnh tật từ một lá số đơn thuần.</p> <p><strong>Tử bình có thể:</strong> xem <em>sự phù hợp</em> giữa hai người (nếu có thông tin cả hai); xem <em>xu hướng tài lộc</em> (nếu phối hợp với nền tảng gia đình, môi trường, bối cảnh); chỉ ra <em>giai đoạn cần thận trọng</em> (không phải tiên tri tai nạn).</p> <div class="kp"> Tử bình là công cụ <strong>đọc xu hướng trong điều kiện</strong> — không phải công cụ đọc kết quả tuyệt đối. </div> <p>Hình dung như <em>phân tích cây giống</em>: lá số là khâu thẩm định cây giống có tốt không. Nhưng cây phát triển thực sự còn phụ thuộc thổ nhưỡng, khí hậu, người chăm. <strong>Lá số là giống cây — cuộc đời là cả quá trình trồng trọt.</strong></p> ` }, { title: 'Mô hình có thể <em>tùy biến</em>', subtitle: 'Hai mức độ tác động — không phải tù nhân của lá số', body: ` <p><strong>Mức độ thứ nhất — chọn môi trường phù hợp:</strong> lá số mô tả xu hướng trong một môi trường <em>trung bình</em>. Nhưng môi trường không bao giờ là trung bình. Lá số dụng hỏa thổ đặt vào môi trường có hỏa thổ phù hợp sẽ phát triển thuận; cùng lá số vào môi trường kim thủy nhiều — bị kìm lại. Đây là lý do Trump và Levitte cùng lá số đi hai con đường khác nhau, và Timothy Getty ra đi lúc 12 tuổi.</p> <p><strong>Mức độ thứ hai — can thiệp thẳng vào kết cấu bát tự:</strong> kết cấu có thể thay đổi khi <em>có tác động từ bên ngoài đủ mạnh và đúng chỗ</em>. Ví dụ: can Đinh hỏa không có gốc — nhưng nếu mệnh cha mẹ có nhiều hỏa, nguồn hỏa từ gia đình có thể <em>bổ sung gốc</em> cho can Đinh. <strong>Cách cục thay đổi — xu hướng phát triển thay đổi.</strong></p> <div class="kp"> <strong>Con người không phải tù nhân của lá số.</strong> Lá số là <em>bản đồ khởi điểm</em> — hành trình thực sự phụ thuộc vào những gì được bổ sung, điều chỉnh, và xây dựng thêm trong suốt cuộc đời. </div> ` } ]; const QUESTIONS = [ { text: '<em>Tử bình</em> là gì?', options: ['Một bộ môn khoa học được kiểm chứng bằng thực nghiệm', 'Một hệ thống tiên tri về số phận con người', 'Một hệ thống mô hình dự báo xu hướng dựa trên cấu trúc thời gian sinh', 'Một phương pháp chữa bệnh theo ngũ hành'], correct: 2, explain: '<strong>Hệ thống mô hình dự báo xu hướng.</strong> Tử bình xây dựng <em>bản đồ giả định</em> về xu hướng của một con người dựa trên cấu trúc thời gian sinh — rồi đưa ra những hướng phát triển <em>có thể xảy ra</em>.' }, { text: 'Điểm khác biệt cốt lõi giữa <em>tiên tri</em> và <em>mô hình dự báo</em> là gì?', options: ['Tiên tri dùng ngũ hành, dự báo dùng thống kê', 'Tiên tri kết luận tuyệt đối không cần điều kiện; dự báo đặt xu hướng trong điều kiện cụ thể', 'Tiên tri chính xác hơn dự báo', 'Tiên tri do thầy giỏi thực hiện, dự báo ai cũng làm được'], correct: 1, explain: '<strong>Tiên tri tuyệt đối — dự báo có điều kiện.</strong> Tiên tri tự xưng sự thật, không cần bối cảnh. Mô hình dự báo nói: <em>"Trong những điều kiện này, xu hướng này có khả năng xảy ra"</em> — thay đổi điều kiện thì xu hướng thay đổi.' }, { text: 'Nghiên cứu <em>"time twins"</em> của Geoffrey Dean theo dõi hàng nghìn người sinh cùng khoảng thời gian ngắn tại London cho kết quả gì?', options: ['Những người sinh cùng giờ có tính cách và sự nghiệp rất giống nhau', 'Môi trường sống hoàn toàn quyết định cuộc đời, lá số không có giá trị', 'Không có sự tương đồng nào giữa họ vượt qua ngưỡng ngẫu nhiên', 'Lá số chỉ dự đoán đúng ở các nước phương Đông'], correct: 2, explain: '<strong>Không vượt qua ngưỡng ngẫu nhiên.</strong> Kết quả theo dõi suốt nhiều thập kỷ cho thấy hai người cùng lá số có thể sống <em>hoàn toàn khác nhau</em> — và <em>thường là vậy</em>.' }, { text: 'Bằng chứng từ các cặp <em>sinh đôi bị tách ra</em> từ nhỏ gợi lên điều gì?', options: ['Môi trường nuôi dưỡng quyết định hoàn toàn tính cách', 'Lá số không có giá trị vì hai người cùng giờ sinh sống khác nhau', 'Có những thứ được mang theo từ lúc sinh ra mà môi trường không hoàn toàn xóa được', 'Người sinh đôi luôn có cuộc đời giống hệt nhau'], correct: 2, explain: '<strong>Có những thứ mang theo từ lúc sinh ra.</strong> Nhiều cặp lớn lên hoàn toàn tách biệt vẫn có những tương đồng kỳ lạ — đủ để đặt câu hỏi nghiêm túc về một thứ <em>có thật, dù còn mơ hồ và chưa thể đo đếm được</em>.' }, { text: 'Trump, Levitte và Timothy Getty cùng lá số nhưng có cuộc đời <em>hoàn toàn khác nhau</em>. Yếu tố nào giải thích sự khác biệt đó?', options: ['Họ sinh tại múi giờ khác nhau nên lá số thực ra không giống nhau', 'Ngũ hành của môi trường xung quanh cũng như sự khác biệt về tôn giáo và văn hóa', 'Ảnh hưởng của tâm linh', 'Lá số của họ thực ra không giống nhau hoàn toàn'], correct: 1, explain: '<strong>Ngũ hành môi trường + bối cảnh sống.</strong> Cha của Trump và Levitte có ngũ hành <em>hỏa thổ</em> — phù hợp dụng thần Bính hỏa. Cha của Getty <em>kim thủy</em> — tương khắc.' }, { text: '<em>Hỷ Kỵ Thiên</em> từ thời nhà Tống ghi lại trường hợp hai người phụ nữ cùng bát tự — một sung túc, một nghèo khó. Điều đó dạy chúng ta điều gì?', options: ['Lá số không có giá trị vì hai người giống nhau mà cuộc đời khác nhau', 'Người xưa đã nhận ra giới hạn của lá số và dùng nó như điểm khởi đầu để mở rộng công cụ', 'Chỉ cần xem lá số là đủ, không cần thêm thông tin', 'Lá số phụ nữ khó đọc hơn lá số đàn ông'], correct: 1, explain: '<strong>Người xưa nhận ra giới hạn — và dùng nó để mở rộng công cụ.</strong> Họ ghi lại, đặt tên, và <em>dùng nó làm điểm khởi đầu để phát triển thêm</em>.' }, { text: 'Tử bình <em>có thể làm gì</em> trong số các lựa chọn sau?', options: ['Tiên tri chính xác tai nạn và bệnh tật', 'Xác định hôn nhân sẽ tốt hay xấu chỉ từ một lá số', 'Chỉ ra xu hướng phát triển tài lộc khi kết hợp với thông tin về nền tảng gia đình và bối cảnh xã hội', 'Dự báo thời điểm chính xác các sự kiện lớn trong đời'], correct: 2, explain: '<strong>Đọc xu hướng trong điều kiện.</strong> Tử bình không thể tiên tri tuyệt đối — nhưng có thể <em>chỉ ra xu hướng</em> khi phối hợp với thông tin ngoại cảnh.' }, { text: '<em>"Mức độ tùy biến thứ nhất"</em> của mô hình tử bình là gì?', options: ['Thay đổi giờ sinh để có lá số tốt hơn', 'Chọn môi trường sống có ngũ hành phù hợp với dụng thần của lá số', 'Học thêm nhiều trường phái để bổ sung cho nhau', 'Nhờ thầy phong thủy điều chỉnh nhà cửa'], correct: 1, explain: '<strong>Chọn môi trường phù hợp.</strong> Lá số mô tả xu hướng trong môi trường <em>trung bình</em> — nhưng môi trường không bao giờ là trung bình.' }, { text: '<em>"Mức độ tùy biến thứ hai"</em> của mô hình tử bình là gì?', options: ['Tìm vận may bằng cách thay đổi tên tuổi', 'Tác động từ bên ngoài đủ mạnh và đúng chỗ có thể bổ sung gốc cho can chi yếu, thay đổi cách cục bên trong bát tự', 'Kết hợp tử bình với phong thủy và tử vi để tăng độ chính xác', 'Chờ đại vận tốt để hành động'], correct: 1, explain: '<strong>Can thiệp thẳng vào kết cấu bát tự.</strong> Ví dụ: can Đinh hỏa không có gốc — nhưng nếu mệnh cha mẹ có nhiều hỏa, <em>nguồn hỏa từ gia đình có thể bổ sung gốc</em>.' }, { text: 'Nguy cơ nào <em>vẫn tồn tại</em> ngay cả khi đã hiểu đúng tử bình là mô hình dự báo có tùy biến?', options: ['Người học sẽ từ bỏ tử bình vì thấy quá phức tạp', 'Người học sẽ tin tuyệt đối vào khoa học và phủ nhận hoàn toàn tử bình', 'Dùng "môi trường chưa đủ điều kiện" một cách tùy tiện — biến nó thành phiên bản tinh vi hơn của "ngụy biện sai giờ"', 'Lá số sẽ bị diễn giải sai vì thiếu công cụ tính toán'], correct: 2, explain: '<strong>Phiên bản tinh vi hơn của "sai giờ".</strong> Câu hỏi cần đặt ra mỗi khi cầm lá số: <em>mình đang dùng mô hình để hiểu thực tế — hay đang dùng thực tế để bảo vệ mô hình?</em>' } ]; let currentPart = 0; let currentQ = 0; let answers = []; let answered = false; function renderPart() { const p = PARTS[currentPart]; document.getElementById('partSeal').textContent = ROMAN[currentPart + 1]; document.getElementById('partLbl').textContent = 'Phần ' + ORDINAL[currentPart + 1]; document.getElementById('partTitle').innerHTML = p.title; document.getElementById('partSubtitle').textContent = p.subtitle; document.getElementById('partBody').innerHTML = p.body; document.getElementById('partNumDisplay').textContent = currentPart + 1; document.querySelectorAll('.part-progress .dot').forEach((d, i) => { d.classList.remove('current', 'done'); if (i < currentPart) d.classList.add('done'); else if (i === currentPart) d.classList.add('current'); }); document.getElementById('prevPartBtn').disabled = currentPart === 0; const nextBtn = document.getElementById('nextPartBtn'); if (currentPart === PARTS.length - 1) { nextBtn.textContent = '⟢ Hoàn tất ⟢'; document.getElementById('endSection').style.display = 'block'; } else { nextBtn.textContent = 'Xem tiếp →'; document.getElementById('endSection').style.display = 'none'; } } function nextPart() { if (currentPart < PARTS.length - 1) { currentPart++; renderPart(); scrollPartIntoView(); } else { scrollToCTA(); } } function prevPart() { if (currentPart > 0) { currentPart--; renderPart(); scrollPartIntoView(); } } function scrollPartIntoView() { const card = document.querySelector('.part-card'); if (card) { const rect = card.getBoundingClientRect(); const top = rect.top + window.pageYOffset - 80; try { window.scrollTo({ top: top, behavior: 'smooth' }); } catch(e) { window.scrollTo(0, top); } } } function scrollToCTA() { const cta = document.querySelector('.cta'); if (cta) { const rect = cta.getBoundingClientRect(); const top = rect.top + window.pageYOffset - 30; try { window.scrollTo({ top: top, behavior: 'smooth' }); } catch(e) { window.scrollTo(0, top); } } } function startQuiz() { currentQ = 0; answers = []; document.getElementById('view-article').classList.remove('active'); document.getElementById('view-quiz').classList.add('active'); renderQuestion(); scrollToTop(); } function backToArticle() { document.getElementById('view-quiz').classList.remove('active'); document.getElementById('view-result').classList.remove('active'); document.getElementById('view-article').classList.add('active'); scrollToTop(); } function renderQuestion() { answered = false; const q = QUESTIONS[currentQ]; const total = QUESTIONS.length; document.getElementById('progressFill').style.width = ((currentQ) / total * 100) + '%'; document.getElementById('qNumDisplay').textContent = currentQ + 1; document.getElementById('qLabel').textContent = 'Câu ' + (currentQ + 1); document.getElementById('qText').innerHTML = q.text; const letters = ['A', 'B', 'C', 'D']; document.getElementById('qOptions').innerHTML = q.options.map((opt, i) => ` <button class="opt-btn" data-idx="${i}" onclick="selectAnswer(${i})"> <span class="opt-letter">${letters[i]}</span>${opt} </button> `).join(''); const explain = document.getElementById('qExplain'); explain.classList.remove('visible', 'is-correct', 'is-wrong'); explain.innerHTML = ''; document.getElementById('nextBtn').classList.remove('visible'); document.getElementById('nextBtn').textContent = (currentQ === QUESTIONS.length - 1) ? '⟢ Xem kết quả ⟢' : 'Câu tiếp →'; } function selectAnswer(idx) { if (answered) return; answered = true; const q = QUESTIONS[currentQ]; const isCorrect = idx === q.correct; answers.push({ correct: isCorrect }); document.querySelectorAll('.opt-btn').forEach((btn, i) => { btn.disabled = true; if (i === q.correct) btn.classList.add('correct'); else if (i === idx) btn.classList.add('wrong'); else btn.classList.add('dimmed'); }); const explain = document.getElementById('qExplain'); explain.innerHTML = `<span class="verdict">${isCorrect ? '✓ Chính xác' : '✕ Chưa đúng'}</span><br>${q.explain}`; explain.classList.add('visible'); explain.classList.add(isCorrect ? 'is-correct' : 'is-wrong'); document.getElementById('nextBtn').classList.add('visible'); document.getElementById('progressFill').style.width = ((currentQ + 1) / QUESTIONS.length * 100) + '%'; } function nextQuestion() { if (currentQ < QUESTIONS.length - 1) { currentQ++; renderQuestion(); scrollToTop(); } else { showResult(); } } function showResult() { let totalCorrect = 0; answers.forEach(a => { if (a.correct) totalCorrect++; }); document.getElementById('finalScore').textContent = totalCorrect; let title, msg; if (totalCorrect === 10) { title = 'Toàn <em>thập</em>!'; msg = 'Hoàn hảo. Bạn đã nắm vững cả sáu phần — sẵn sàng học các chương sâu hơn về cách cục, dụng thần, đại vận.'; } else if (totalCorrect >= 8) { title = 'Xuất <em>sắc</em>'; msg = 'Bạn đã hiểu đúng cốt lõi: tử bình là mô hình dự báo, không phải tiên tri. Vài câu sai chỉ là chi tiết.'; } else if (totalCorrect >= 6) { title = '<em>Khá</em> tốt'; msg = 'Đã có khái niệm cơ bản. Nên đọc lại phần III (tiên tri vs dự báo) và VI (tùy biến).'; } else if (totalCorrect >= 4) { title = 'Còn <em>chỗ trống</em>'; msg = 'Nền tảng chưa thật vững. Khuyến nghị: đọc lại sáu phần một lần nữa.'; } else { title = '<em>Khởi đầu</em>'; msg = 'Đây mới là bước đầu — không sao cả. Hãy đọc kỹ lại bài, sau đó quay lại làm trắc nghiệm.'; } document.getElementById('resultTitle').innerHTML = title; document.getElementById('resultMsg').innerHTML = msg; document.getElementById('view-quiz').classList.remove('active'); document.getElementById('view-result').classList.add('active'); scrollToTop(); } function restartQuiz() { currentQ = 0; answers = []; document.getElementById('view-result').classList.remove('active'); document.getElementById('view-quiz').classList.add('active'); renderQuestion(); scrollToTop(); } function scrollToTop() { try { window.scrollTo({ top: 0, behavior: 'instant' }); } catch(e) { window.scrollTo(0, 0); } } renderPart(); </script> <script> (function(){ function getH() { var app = document.querySelector('.app'); if (app) { var rect = app.getBoundingClientRect(); var appTop = rect.top + (window.pageYOffset || document.documentElement.scrollTop); return Math.ceil(appTop + app.scrollHeight + 40); } return Math.max(document.body.scrollHeight, document.body.offsetHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight); } function postH(){ try { if (window.parent && window.parent !== window) { var activeView = document.querySelector('.view.active'); var viewId = activeView ? activeView.id : ''; // Differentiate part state for height tracking if (viewId === 'view-article') { var endVisible = document.getElementById('endSection').style.display !== 'none'; viewId = 'view-article-p' + (typeof currentPart !== 'undefined' ? currentPart : 0) + (endVisible ? 'e' : ''); } window.parent.postMessage({ ltC2Height: getH(), viewId: viewId }, '*'); } } catch(e){} } function init() { postH(); [50, 200, 500, 1000, 2000, 3500, 5000, 8000, 12000].forEach(function(t){ setTimeout(postH, t); }); if (typeof ResizeObserver !== 'undefined') { try { var ro = new ResizeObserver(postH); var app = document.querySelector('.app'); if (app) ro.observe(app); ro.observe(document.body); } catch(e){} } if (typeof MutationObserver !== 'undefined') { try { new MutationObserver(postH).observe(document.body, { childList: true, subtree: true, attributes: true }); } catch(e){} } setInterval(postH, 1000); window.addEventListener('resize', postH); window.addEventListener('load', postH); if (document.fonts && document.fonts.ready) document.fonts.ready.then(postH); var hooks = ['nextPart', 'prevPart', 'startQuiz', 'backToArticle', 'selectAnswer', 'nextQuestion', 'restartQuiz']; hooks.forEach(function(name) { var orig = window[name]; if (orig) { window[name] = function() { var r = orig.apply(this, arguments); [50, 200, 500, 1000].forEach(function(t){ setTimeout(postH, t); }); return r; }; } }); } if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init); else init(); })(); </script> </body> </html> " style="width: 100% !important; height: 3000px !important; min-height: 3000px !important; max-height: none !important; border: 0 !important; display: block !important; background: transparent !important; margin: 0 !important; padding: 0 !important;" title="Chương 2 — Bát Tự Tử Bình - Hoàng Trung"> </iframe> </div> <script> (function() { var IFRAME_ID = 'lt-c2-frame'; var INITIAL_H = 3000; var currentH = INITIAL_H; var heightsByView = {}; var currentViewId = 'view-article-p0'; function applyH(h) { var f = document.getElementById(IFRAME_ID); if (!f) return; var newH = h + 50; if (newH < 200) return; if (newH === currentH) return; currentH = newH; f.style.setProperty('height', newH + 'px', 'important'); f.style.setProperty('min-height', newH + 'px', 'important'); f.style.setProperty('max-height', 'none', 'important'); f.setAttribute('height', newH); var parent = f.parentElement; while (parent && parent !== document.body) { var cs = window.getComputedStyle(parent); if (cs.maxHeight !== 'none' && cs.maxHeight !== '' && parseInt(cs.maxHeight) < newH) parent.style.setProperty('max-height', 'none', 'important'); if (cs.overflow === 'hidden') parent.style.setProperty('overflow', 'visible', 'important'); parent = parent.parentElement; } } function setH(h, viewId) { if (!h || h < 100) return; if (viewId) { if (!heightsByView[viewId] || h > heightsByView[viewId]) heightsByView[viewId] = h; currentViewId = viewId; } var targetH = heightsByView[currentViewId] || h; applyH(targetH); } window.addEventListener('message', function(e) { if (e && e.data && typeof e.data.ltC2Height === 'number') setH(e.data.ltC2Height, e.data.viewId); }); function pollHeight() { var f = document.getElementById(IFRAME_ID); if (!f || !f.contentWindow) return; try { var doc = f.contentWindow.document; if (doc) { var app = doc.querySelector('.app'); var activeView = doc.querySelector('.view.active'); var viewId = activeView ? activeView.id : ''; var h; if (app) { var rect = app.getBoundingClientRect(); var appTop = rect.top + (f.contentWindow.pageYOffset || doc.documentElement.scrollTop); h = Math.ceil(appTop + app.scrollHeight + 40); } else if (doc.body) { h = Math.max(doc.body.scrollHeight, doc.body.offsetHeight, doc.documentElement.scrollHeight, doc.documentElement.offsetHeight); } if (h) setH(h, viewId); } } catch(e) {} } function breakParents() { var f = document.getElementById(IFRAME_ID); if (!f) return; var parent = f.parentElement; while (parent && parent !== document.body) { var cs = window.getComputedStyle(parent); if (cs.maxHeight !== 'none' && cs.maxHeight !== '' && parseInt(cs.maxHeight) < INITIAL_H) parent.style.setProperty('max-height', 'none', 'important'); if (cs.overflow === 'hidden') parent.style.setProperty('overflow', 'visible', 'important'); parent = parent.parentElement; } } breakParents(); [100, 500, 1000, 2000, 4000, 7000, 11000].forEach(function(t) { setTimeout(function() { breakParents(); pollHeight(); }, t); }); setInterval(pollHeight, 800); window.addEventListener('resize', pollHeight); window.addEventListener('load', pollHeight); })(); </script> <!-- End of CHƯƠNG 2 -->