{"id":16371,"date":"2026-09-03T17:34:22","date_gmt":"2026-09-03T09:34:22","guid":{"rendered":"https:\/\/tiffanysmandarin.com\/?p=16371"},"modified":"2026-09-09T12:39:51","modified_gmt":"2026-09-09T04:39:51","slug":"book-1-l2","status":"publish","type":"post","link":"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/03\/book-1-l2\/","title":{"rendered":"\u8996\u807d\u83ef\u8a9e Book 1 Lesson 2"},"content":{"rendered":"\n<div style=\"height:5px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<!--\n  \u5be6\u7528\u8996\u807d\u83ef\u8a9e (Practical Audio-Visual Chinese) Book 1 \u00b7 Lesson 2\u300c\u65e9\uff0c\u60a8\u597d\u300dGood Morning, Hello! \u2014 Vocabulary Embed\n  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  REBUILT VERSION \u2014 replaces an earlier version built from a secondary\n  Quizlet-style source. This 20-word list was read directly off the\n  textbook's own numbered VOCABULARY section (pages 24\u201328) via page-by-\n  page visual inspection. Two corrections from the earlier version:\n    - \u8d99 (Zh\u00e0o) and \u5f35 (Zh\u0101ng) are formally taught surnames in this\n      lesson (the textbook's own dialogue characters) \u2014 both were missing\n      before\n    - The earlier version wrongly bundled \u592a and \u4e86 together as one\n      \"\u592a...\u4e86\" entry. \u4e86 is not part of this lesson at all (it belongs\n      to Lesson 6); this lesson only teaches \u592a (\"too\") on its own\n  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  Same technical pattern as the rest of this series \u2014 see earlier lesson\n  files for the fuller architecture rationale. Key points:\n    - No <!DOCTYPE>\/<html>\/<head>\/<body>; site's own Text Display \/ Pinyin\n      Display toggle covers zh-TW\/zh-CN as usual\n    - CSS scoped under .pavc-b1l2-vocab-embed with its own --pv2-* vars\n    - Ruby: every example\/dialogue sentence segmented WORD BY WORD\n    - Root lookup by id (#pavc-b1l2-vocab-embed-1), not currentScript\n    - Self-contained EN \/ \u65e5\u672c\u8a9e \/ \ud55c\uad6d\uc5b4 translation toggle (TR()\/\n      trSpans()\/pv2-lang-* classes; quiz's QMC()\/QTYPE() + UI_STRINGS +\n      getLang())\n    - COPYRIGHT: no textbook dialogue text reproduced. Section 05 (\"Put It\n      Together\") is an ORIGINAL dialogue I wrote myself, using the\n      textbook's own character surnames (\u8d99\u5c0f\u59d0, \u5f35\u5148\u751f) since those are\n      this lesson's actual vocabulary items, but an entirely original\n      conversation \u2014 not the textbook's own dialogue lines.\n    - Every example sentence below uses only Lesson 1 + Lesson 2\n      vocabulary \u2014 nothing from later lessons\n    - Traditional\/simplified pairs checked individually against the actual\n      textbook page \u2014 real differences in \u597d\u4e45\u4e0d\u898b\/\u597d\u4e45\u4e0d\u89c1, \u8b1d\u8b1d\/\u8c22\u8c22,\n      \u9019\/\u8fd9, \u4f60\u5011\/\u4f60\u4eec, \u4e0a\u8ab2\/\u4e0a\u8bfe, \u5929\u6c23\/\u5929\u6c14, \u71b1\/\u70ed \u2014 all handled via\n      WD(); \u65e9, \u8d99, \u5c0f\u59d0, \u5f35, \u554a, \u5f88, \u4e5f, \u592a\u592a, \u53bb, \u592a, \u518d\u898b(\u898b\/\u89c1 differs\n      too \u2014 corrected below), \u51b7, \u5fd9 are otherwise identical or\n      individually checked (\u518d\u898b\/\u518d\u89c1 does differ \u2014 marked WD)\n    - Japanese\/Korean glosses are natural translations of the meaning\n    - No literal `&&` inside the <script> tag (WordPress content filter risk)\n    - Top-of-page support note, same as the rest of the series\n-->\n<div class=\"pavc-b1l2-vocab-embed\" id=\"pavc-b1l2-vocab-embed-1\">\n<style>\n.pavc-b1l2-vocab-embed {\n  --pv2-oxblood: #7b2d26;\n  --pv2-oxblood-dark: #5e211c;\n  --pv2-mustard: #c9922b;\n  --pv2-sage: #7c8b6f;\n  --pv2-bone: #f7f1e6;\n  --pv2-ink: #2c2620;\n  --pv2-line: #e4d9c4;\n  font-family: 'Work Sans', -apple-system, sans-serif;\n  color: var(--pv2-ink);\n  background: #fff;\n  max-width: 760px;\n  margin: 0 auto;\n  padding: 8px 4px 24px;\n  line-height: 1.6;\n}\n.pavc-b1l2-vocab-embed * { box-sizing: border-box; }\n.pavc-b1l2-vocab-embed h1,\n.pavc-b1l2-vocab-embed h2,\n.pavc-b1l2-vocab-embed h3 {\n  font-family: 'Bitter', Georgia, serif;\n  color: var(--pv2-oxblood-dark);\n  margin: 0 0 8px;\n}\n.pavc-b1l2-vocab-embed .pv2-support-note {\n  font-size: 0.85rem;\n  color: var(--pv2-sage);\n  border-bottom: 1px solid var(--pv2-line);\n  padding-bottom: 12px;\n  margin: 0 0 16px;\n}\n.pavc-b1l2-vocab-embed .pv2-lede {\n  margin: 0 0 16px;\n  padding: 14px 16px;\n  background: var(--pv2-bone);\n  border-left: 4px solid var(--pv2-mustard);\n  border-radius: 4px;\n  font-size: 0.98rem;\n}\n.pavc-b1l2-vocab-embed .pv2-lede b { color: var(--pv2-oxblood-dark); }\n\n.pavc-b1l2-vocab-embed .pv2-lang-toggle {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin: 0 0 24px;\n  flex-wrap: wrap;\n}\n.pavc-b1l2-vocab-embed .pv2-lang-label {\n  font-family: 'IBM Plex Mono', monospace;\n  font-size: 0.75rem;\n  color: var(--pv2-sage);\n  letter-spacing: 0.06em;\n}\n.pavc-b1l2-vocab-embed .pv2-lang-btn {\n  font-family: 'Work Sans', sans-serif;\n  font-size: 0.85rem;\n  border: 1px solid var(--pv2-oxblood);\n  color: var(--pv2-oxblood);\n  background: #fff;\n  padding: 5px 14px;\n  border-radius: 20px;\n  cursor: pointer;\n}\n.pavc-b1l2-vocab-embed .pv2-lang-btn:hover { background: var(--pv2-bone); }\n.pavc-b1l2-vocab-embed .pv2-lang-btn.pv2-lang-active { background: var(--pv2-oxblood); color: #fff; }\n\n.pavc-b1l2-vocab-embed .pv2-tr { display: none; }\n.pavc-b1l2-vocab-embed.pv2-lang-en .pv2-tr-en { display: inline; }\n.pavc-b1l2-vocab-embed.pv2-lang-ja .pv2-tr-ja { display: inline; }\n.pavc-b1l2-vocab-embed.pv2-lang-ko .pv2-tr-ko { display: inline; }\n\n.pavc-b1l2-vocab-embed .pv2-sec-eyebrow {\n  display: inline-block;\n  font-family: 'IBM Plex Mono', monospace;\n  font-size: 0.75rem;\n  letter-spacing: 0.08em;\n  color: #fff;\n  background: var(--pv2-oxblood);\n  padding: 3px 9px;\n  border-radius: 3px;\n  margin: 32px 0 10px;\n}\n.pavc-b1l2-vocab-embed .pv2-word-card {\n  border: 1px solid var(--pv2-line);\n  border-radius: 8px;\n  padding: 12px 14px;\n  margin-bottom: 10px;\n  background: #fff;\n}\n.pavc-b1l2-vocab-embed .pv2-word-top {\n  display: flex;\n  align-items: baseline;\n  gap: 10px;\n  flex-wrap: wrap;\n}\n.pavc-b1l2-vocab-embed .pv2-num {\n  font-family: 'IBM Plex Mono', monospace;\n  font-size: 0.75rem;\n  color: var(--pv2-mustard);\n  min-width: 22px;\n}\n.pavc-b1l2-vocab-embed .pv2-hanzi { font-size: 1.35rem; font-weight: 600; }\n.pavc-b1l2-vocab-embed ruby {\n  ruby-position: over;\n  margin-right: 2px;\n  color: var(--pv2-ink) !important;\n  font-size: inherit !important;\n}\n.pavc-b1l2-vocab-embed .rb {\n  color: var(--pv2-ink) !important;\n  font-size: inherit !important;\n}\n.pavc-b1l2-vocab-embed rt {\n  font-family: 'IBM Plex Mono', monospace;\n  font-size: 0.6rem !important;\n  color: var(--pv2-sage) !important;\n  font-weight: 400;\n}\n.pavc-b1l2-vocab-embed rt.hidden { display: none; }\n.pavc-b1l2-vocab-embed rt.mouseover { opacity: 0; }\n.pavc-b1l2-vocab-embed rt.mouseover:hover { opacity: 1; }\n.pavc-b1l2-vocab-embed .pv2-meaning { font-style: italic; color: #6b5f52; font-size: 0.92rem; }\n.pavc-b1l2-vocab-embed .pv2-speaker {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  flex: 0 0 26px;\n  width: 26px;\n  height: 26px;\n  padding: 0;\n  border: none;\n  background: var(--pv2-bone);\n  color: var(--pv2-oxblood);\n  border-radius: 50%;\n  cursor: pointer;\n  margin-left: auto;\n}\n.pavc-b1l2-vocab-embed .pv2-speaker:hover { background: var(--pv2-mustard); color: #fff; }\n.pavc-b1l2-vocab-embed .pv2-example {\n  margin-top: 8px;\n  padding-top: 8px;\n  border-top: 1px dashed var(--pv2-line);\n  font-size: 0.95rem;\n}\n.pavc-b1l2-vocab-embed .pv2-example .pv2-sent-word { display: inline-flex; }\n.pavc-b1l2-vocab-embed .pv2-example .pv2-punct { margin-right: 2px; }\n.pavc-b1l2-vocab-embed .pv2-example .pv2-en {\n  display: block;\n  color: #6b5f52;\n  font-size: 0.85rem;\n  margin-top: 4px;\n}\n.pavc-b1l2-vocab-embed .pv2-dialogue-note { font-size: 0.85rem; color: #6b5f52; margin: 0 0 10px; }\n.pavc-b1l2-vocab-embed .pv2-dialogue {\n  background: var(--pv2-bone);\n  border-radius: 8px;\n  padding: 16px 18px;\n  margin-top: 8px;\n}\n.pavc-b1l2-vocab-embed .pv2-line {\n  display: flex;\n  gap: 8px;\n  margin-bottom: 12px;\n  align-items: flex-start;\n  flex-wrap: wrap;\n}\n.pavc-b1l2-vocab-embed .pv2-speaker-tag {\n  font-family: 'IBM Plex Mono', monospace;\n  font-size: 0.72rem;\n  color: var(--pv2-oxblood);\n  min-width: 46px;\n  padding-top: 3px;\n}\n.pavc-b1l2-vocab-embed .pv2-line-body { flex: 1; min-width: 200px; }\n.pavc-b1l2-vocab-embed .pv2-line-en { display: block; color: #6b5f52; font-size: 0.82rem; margin-top: 2px; }\n\n.pavc-b1l2-vocab-embed .pv2-fc-hint { font-size: 0.85rem; color: #6b5f52; margin: 0 0 12px; text-align: center; }\n.pavc-b1l2-vocab-embed .pv2-flashcard-wrap { max-width: 320px; margin: 0 auto 14px; perspective: 1200px; }\n.pavc-b1l2-vocab-embed .pv2-flashcard {\n  position: relative;\n  width: 100%;\n  height: 230px;\n  cursor: pointer;\n  transform-style: preserve-3d;\n  transition: transform 0.5s;\n}\n.pavc-b1l2-vocab-embed .pv2-flashcard.pv2-flipped { transform: rotateY(180deg); }\n.pavc-b1l2-vocab-embed .pv2-fc-face {\n  position: absolute;\n  inset: 0;\n  backface-visibility: hidden;\n  border: 1px solid var(--pv2-line);\n  border-radius: 12px;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  padding: 16px;\n  background: #fff;\n  text-align: center;\n}\n.pavc-b1l2-vocab-embed .pv2-fc-back { transform: rotateY(180deg); background: var(--pv2-bone); }\n.pavc-b1l2-vocab-embed .pv2-fc-front .pv2-hanzi { font-size: 4rem !important; }\n.pavc-b1l2-vocab-embed .pv2-flashcard-wrap rt { font-size: 1.2rem !important; }\n.pavc-b1l2-vocab-embed .pv2-fc-back .pv2-meaning { font-style: italic; color: var(--pv2-oxblood-dark); font-size: 1.725rem; }\n.pavc-b1l2-vocab-embed .pv2-flashcard-controls { display: flex; align-items: center; justify-content: center; gap: 14px; margin-bottom: 28px; }\n.pavc-b1l2-vocab-embed .pv2-game-btn {\n  font-family: 'Work Sans', sans-serif;\n  font-size: 0.85rem;\n  border: 1px solid var(--pv2-oxblood);\n  color: var(--pv2-oxblood);\n  background: #fff;\n  padding: 6px 14px;\n  border-radius: 20px;\n  cursor: pointer;\n}\n.pavc-b1l2-vocab-embed .pv2-game-btn:hover { background: var(--pv2-oxblood); color: #fff; }\n.pavc-b1l2-vocab-embed .pv2-game-bar { display: flex; align-items: center; gap: 12px; margin-bottom: 12px; flex-wrap: wrap; }\n.pavc-b1l2-vocab-embed .pv2-game-status { font-family: 'IBM Plex Mono', monospace; font-size: 0.82rem; color: var(--pv2-sage); }\n.pavc-b1l2-vocab-embed .pv2-game-board { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }\n.pavc-b1l2-vocab-embed .pv2-game-col { display: flex; flex-direction: column; gap: 8px; }\n.pavc-b1l2-vocab-embed .pv2-tile {\n  font-family: 'Work Sans', sans-serif;\n  text-align: left;\n  border: 1px solid var(--pv2-line);\n  background: #fff;\n  border-radius: 6px;\n  padding: 10px 12px;\n  cursor: pointer;\n  font-size: 0.95rem;\n  color: var(--pv2-ink);\n  transition: background 0.15s, border-color 0.15s, transform 0.1s;\n}\n.pavc-b1l2-vocab-embed .pv2-tile .pv2-tile-py {\n  display: block;\n  font-family: 'IBM Plex Mono', monospace;\n  font-size: 0.7rem;\n  color: var(--pv2-sage);\n  margin-top: 2px;\n}\n.pavc-b1l2-vocab-embed .pv2-tile:hover:not(.pv2-matched):not(.pv2-selected) { border-color: var(--pv2-mustard); }\n.pavc-b1l2-vocab-embed .pv2-tile.pv2-selected { border-color: var(--pv2-oxblood); background: var(--pv2-bone); }\n.pavc-b1l2-vocab-embed .pv2-tile.pv2-matched { border-color: var(--pv2-sage); background: #eef2e9; color: var(--pv2-sage); cursor: default; }\n.pavc-b1l2-vocab-embed .pv2-tile.pv2-wrong { border-color: #b5453d; background: #fbeceb; animation: pv2-shake 0.3s; }\n@keyframes pv2-shake { 0%, 100% { transform: translateX(0); } 25% { transform: translateX(-4px); } 75% { transform: translateX(4px); } }\n.pavc-b1l2-vocab-embed .pv2-game-win { text-align: center; padding: 14px; font-family: 'Bitter', serif; color: var(--pv2-oxblood-dark); display: none; }\n.pavc-b1l2-vocab-embed .pv2-game-win.pv2-show { display: block; }\n@media (max-width: 480px) { .pavc-b1l2-vocab-embed .pv2-game-board { grid-template-columns: 1fr; } }\n.pavc-b1l2-vocab-embed .pv2-quiz { background: #fff; border: 1px solid var(--pv2-line); border-radius: 12px; padding: 20px 22px; margin-top: 8px; }\n.pavc-b1l2-vocab-embed .pv2-quiz-progress { font-size: 0.82rem; color: var(--pv2-sage); margin: 0 0 10px; font-family: 'IBM Plex Mono', monospace; }\n.pavc-b1l2-vocab-embed .pv2-quiz-prompt { font-size: 1.1rem; margin: 0 0 14px; }\n.pavc-b1l2-vocab-embed .pv2-quiz-options { display: flex; flex-direction: column; gap: 8px; margin: 0 0 10px; }\n.pavc-b1l2-vocab-embed .pv2-quiz-opt { text-align: left; border: 1px solid var(--pv2-line); background: var(--pv2-bone); border-radius: 8px; padding: 10px 14px; cursor: pointer; font-size: 0.98rem; color: var(--pv2-ink); }\n.pavc-b1l2-vocab-embed .pv2-quiz-opt:hover { background: #f0e6d2; }\n.pavc-b1l2-vocab-embed .pv2-quiz-opt.correct { background: #e3efdd; border-color: #7fae6d; color: #3d5c34; }\n.pavc-b1l2-vocab-embed .pv2-quiz-opt.incorrect { background: #f5e0dc; border-color: var(--pv2-oxblood); color: var(--pv2-oxblood-dark); }\n.pavc-b1l2-vocab-embed .pv2-quiz-opt[disabled] { cursor: default; }\n.pavc-b1l2-vocab-embed .pv2-quiz-input-row { display: flex; gap: 8px; margin: 0 0 10px; flex-wrap: wrap; }\n.pavc-b1l2-vocab-embed .pv2-quiz-input { flex: 1 1 200px; border: 1px solid var(--pv2-line); border-radius: 8px; padding: 9px 12px; font-size: 0.98rem; }\n.pavc-b1l2-vocab-embed .pv2-quiz-submit, .pavc-b1l2-vocab-embed .pv2-quiz-next, .pavc-b1l2-vocab-embed .pv2-quiz-retake { border: none; background: var(--pv2-oxblood); color: #fff; border-radius: 20px; padding: 8px 18px; font-size: 0.9rem; cursor: pointer; }\n.pavc-b1l2-vocab-embed .pv2-quiz-submit:hover, .pavc-b1l2-vocab-embed .pv2-quiz-next:hover, .pavc-b1l2-vocab-embed .pv2-quiz-retake:hover { background: var(--pv2-oxblood-dark); }\n.pavc-b1l2-vocab-embed .pv2-quiz-feedback { font-size: 0.95rem; margin: 0 0 10px; min-height: 1.4em; }\n.pavc-b1l2-vocab-embed .pv2-quiz-feedback.correct { color: #3d5c34; }\n.pavc-b1l2-vocab-embed .pv2-quiz-feedback.incorrect { color: var(--pv2-oxblood-dark); }\n.pavc-b1l2-vocab-embed .pv2-quiz-score { text-align: center; }\n.pavc-b1l2-vocab-embed .pv2-quiz-score .pv2-quiz-score-num { font-size: 2.2rem; font-weight: 700; color: var(--pv2-oxblood-dark); display: block; margin-bottom: 8px; font-family: 'Bitter', serif; }\n<\/style>\n\n<p class=\"pv2-support-note\"><em>A note before you start: I&#8217;d love for you to support the official textbook \u2014 this page is only meant as a review tool for people who already own a copy, not a replacement for it.<\/em><\/p>\n\n<p class=\"pv2-lede\">\n<b><span class=\"lang-zh-TW\">\u5be6\u7528\u8996\u807d\u83ef\u8a9e<\/span><span class=\"lang-zh-CN\">\u5b9e\u7528\u89c6\u542c\u534e\u8bed<\/span> Book 1 \u00b7 Lesson 2\u300c\u65e9\uff0c\u60a8\u597d\u300dGood Morning, Hello!<\/b> \u2014 this lesson&#8217;s vocabulary with pinyin, meaning, and an example sentence for every word, segmented word by word so you can see how each piece works on its own.\n<\/p>\n\n<div class=\"pv2-lang-toggle\">\n  <span class=\"pv2-lang-label\">TRANSLATION<\/span>\n  <button type=\"button\" class=\"pv2-lang-btn pv2-lang-active\" data-lang=\"en\">EN<\/button>\n  <button type=\"button\" class=\"pv2-lang-btn\" data-lang=\"ja\">\u65e5\u672c\u8a9e<\/button>\n  <button type=\"button\" class=\"pv2-lang-btn\" data-lang=\"ko\">\ud55c\uad6d\uc5b4<\/button>\n<\/div>\n\n<div class=\"pv2-sec-eyebrow\">01 \u2014 GREETINGS &amp; PARTING<\/div>\n<div id=\"pv2-word-list-1\"><\/div>\n\n<div class=\"pv2-sec-eyebrow\">02 \u2014 NAMES &amp; TITLES<\/div>\n<div id=\"pv2-word-list-2\"><\/div>\n\n<div class=\"pv2-sec-eyebrow\">03 \u2014 DEGREE &amp; LINKING WORDS<\/div>\n<div id=\"pv2-word-list-3\"><\/div>\n\n<div class=\"pv2-sec-eyebrow\">04 \u2014 PEOPLE &amp; PLACES<\/div>\n<div id=\"pv2-word-list-4\"><\/div>\n\n<div class=\"pv2-sec-eyebrow\">05 \u2014 WEATHER &amp; STATES<\/div>\n<div id=\"pv2-word-list-5\"><\/div>\n\n<div class=\"pv2-sec-eyebrow\">06 \u2014 PUT IT TOGETHER<\/div>\n<p class=\"pv2-dialogue-note\"><em>Note: this dialogue is not from the textbook \u2014 it&#8217;s a short conversation I made up using this lesson&#8217;s vocabulary (plus Lesson 1&#8217;s, for review) so you can see the words used together. It uses the textbook&#8217;s own character surnames (\u8d99, \u5f35) since those are this lesson&#8217;s actual vocabulary, but the conversation itself is original. For the actual Lesson 2 dialogue, I&#8217;d recommend picking up a copy of the textbook itself.<\/em><\/p>\n<div class=\"pv2-dialogue\" id=\"pv2-dialogue\"><\/div>\n\n<div class=\"pv2-sec-eyebrow\">07 \u2014 FLASHCARDS<\/div>\n<p class=\"pv2-fc-hint\">Tap the card to flip it, then use the arrows to move through the deck.<\/p>\n<div class=\"pv2-flashcard-wrap\">\n  <div class=\"pv2-flashcard\" id=\"pv2-flashcard\">\n    <div class=\"pv2-fc-face pv2-fc-front\" id=\"pv2-fc-front\"><\/div>\n    <div class=\"pv2-fc-face pv2-fc-back\" id=\"pv2-fc-back\"><\/div>\n  <\/div>\n<\/div>\n<div class=\"pv2-flashcard-controls\">\n  <button class=\"pv2-game-btn\" id=\"pv2-fc-prev\">\u2039 Prev<\/button>\n  <span class=\"pv2-game-status\" id=\"pv2-fc-progress\">1 \/ 20<\/span>\n  <button class=\"pv2-game-btn\" id=\"pv2-fc-next\">Next \u203a<\/button>\n<\/div>\n\n<div class=\"pv2-sec-eyebrow\">08 \u2014 MATCH IT<\/div>\n<p style=\"font-size:0.9rem;color:#6b5f52;margin:0 0 10px;\">Tap a Chinese word, then tap the meaning that matches it (in whichever translation language is selected above). Get all 8 pairs to finish the round.<\/p>\n<div class=\"pv2-game-bar\">\n  <button class=\"pv2-game-btn\" id=\"pv2-game-new\">New Round<\/button>\n  <span class=\"pv2-game-status\" id=\"pv2-game-status\">0 \/ 8 matched<\/span>\n<\/div>\n<div class=\"pv2-game-board\">\n  <div class=\"pv2-game-col\" id=\"pv2-game-col-zh\"><\/div>\n  <div class=\"pv2-game-col\" id=\"pv2-game-col-en\"><\/div>\n<\/div>\n<div class=\"pv2-game-win\" id=\"pv2-game-win\">\ud83c\udf89 All matched! Nice work.<\/div>\n\n<div class=\"pv2-sec-eyebrow\">09 \u2014 VOCABULARY QUIZ<\/div>\n<p style=\"font-size:0.9rem;color:#6b5f52;margin:0 0 10px;\">15 questions covering this lesson&#8217;s vocabulary \u2014 a mix of multiple choice and type-the-pinyin. Questions pick up whichever translation language is selected above; switching mid-question applies from the next question onward.<\/p>\n<div class=\"pv2-quiz\" id=\"pv2-quiz\"><\/div>\n\n<script>\n(function () {\n  var root = document.getElementById('pavc-b1l2-vocab-embed-1');\n  if (!root) return;\n\n  var SPEAKER_SVG = '<svg viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"currentColor\" aria-hidden=\"true\">' +\n    '<path d=\"M7 4.5v15l13-7.5z\"><\/path>' +\n    '<\/svg>';\n\n  function W(t, s, p) { return { t: t, s: s, pt: p, ps: p }; }\n  function WD(t, s, pt, ps) { return { t: t, s: s, pt: pt, ps: ps }; }\n  function TR(en, ja, ko) { return { en: en, ja: ja, ko: ko }; }\n\n  var GROUPS = {\n    'pv2-word-list-1': [\n      { t: '\u65e9', s: '\u65e9', p: 'z\u01ceo', meaning: TR('good morning; to be early', '\u304a\u306f\u3088\u3046;\u65e9\u3044', '\uc88b\uc740 \uc544\uce68; \uc774\ub974\ub2e4'),\n        ex: [W('\u738b','\u738b','W\u00e1ng'), W('\u5148\u751f','\u5148\u751f','xi\u0101nsh\u0113ng'), '\uff0c', W('\u65e9','\u65e9','z\u01ceo'), '\uff01'],\n        exEn: TR('Good morning, Mr. Wang!', '\u738b\u3055\u3093\u3001\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059!', '\uc655 \uc120\uc0dd\ub2d8, \uc88b\uc740 \uc544\uce68\uc785\ub2c8\ub2e4!') },\n      { t: '\u597d\u4e45\u4e0d\u898b', s: '\u597d\u4e45\u4e0d\u89c1', p: 'h\u01ceoji\u01d4b\u00faji\u00e0n', meaning: TR('long time no see', '\u304a\u4e45\u3057\u3076\u308a\u3067\u3059', '\uc624\ub79c\ub9cc\uc774\uc5d0\uc694'),\n        ex: [W('\u8d99','\u8d75','Zh\u00e0o'), W('\u5c0f\u59d0','\u5c0f\u59d0','xi\u01ceoji\u011b'), '\uff0c', WD('\u597d\u4e45\u4e0d\u898b','\u597d\u4e45\u4e0d\u89c1','h\u01ceoji\u01d4b\u00faji\u00e0n','h\u01ceoji\u01d4b\u00faji\u00e0n'), '\uff01'],\n        exEn: TR('Miss Zhao, long time no see!', '\u8d99\u3055\u3093\u3001\u304a\u4e45\u3057\u3076\u308a\u3067\u3059!', '\uc790\uc624 \uc544\uac00\uc528, \uc624\ub79c\ub9cc\uc774\uc5d0\uc694!') },\n      { t: '\u8b1d\u8b1d', s: '\u8c22\u8c22', p: 'xi\u00e8xie', meaning: TR('thank you', '\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3059', '\uac10\uc0ac\ud569\ub2c8\ub2e4'),\n        ex: [WD('\u8b1d\u8b1d','\u8c22\u8c22','Xi\u00e8xie','xi\u00e8xie'), W('\u4f60','\u4f60','n\u01d0'), '\uff0c', W('\u5f35','\u5f20','Zh\u0101ng'), W('\u5148\u751f','\u5148\u751f','xi\u0101nsh\u0113ng'), '\u3002'],\n        exEn: TR('Thank you, Mr. Zhang.', '\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3059\u3001\u5f35\u3055\u3093\u3002', '\uac10\uc0ac\ud569\ub2c8\ub2e4, \uc7a5 \uc120\uc0dd\ub2d8.') },\n      { t: '\u518d\u898b', s: '\u518d\u89c1', p: 'z\u00e0iji\u00e0n', meaning: TR('goodbye', '\u3055\u3088\u3046\u306a\u3089', '\uc548\ub155\ud788 \uac00\uc138\uc694'),\n        ex: [W('\u674e','\u674e','L\u01d0'), W('\u5c0f\u59d0','\u5c0f\u59d0','xi\u01ceoji\u011b'), '\uff0c', WD('\u518d\u898b','\u518d\u89c1','z\u00e0iji\u00e0n','z\u00e0iji\u00e0n'), '\uff01'],\n        exEn: TR('Goodbye, Miss Li!', '\u674e\u3055\u3093\u3001\u3055\u3088\u3046\u306a\u3089!', '\uc774 \uc544\uac00\uc528, \uc548\ub155\ud788 \uac00\uc138\uc694!') },\n      { t: '\u554a', s: '\u554a', p: 'a', meaning: TR('(interjection; softens a statement)', '\u3042(\u9593\u6295\u8a5e)', '\uc544(\uac10\ud0c4\uc0ac)'),\n        ex: [W('\u662f','\u662f','Sh\u00ec'), W('\u554a','\u554a','a'), '\uff0c', W('\u6211','\u6211','w\u01d2'), W('\u5f88','\u5f88','h\u011bn'), W('\u5fd9','\u5fd9','m\u00e1ng'), '\u3002'],\n        exEn: TR(\"Yeah, I'm very busy.\", '\u305d\u3046\u3067\u3059\u3001\u79c1\u306f\u3068\u3066\u3082\u5fd9\u3057\u3044\u3067\u3059\u3002', '\ub9de\uc544\uc694, \uc800\ub294 \ub9e4\uc6b0 \ubc14\ube60\uc694.') }\n    ],\n    'pv2-word-list-2': [\n      { t: '\u8d99', s: '\u8d75', p: 'Zh\u00e0o', meaning: TR('Zhao (a common surname)', '\u8d99(\u3088\u304f\u3042\u308b\u82d7\u5b57)', '\uc790\uc624(\u8d99, \ud754\ud55c \uc131)'),\n        ex: [W('\u8d99','\u8d75','Zh\u00e0o'), W('\u5c0f\u59d0','\u5c0f\u59d0','xi\u01ceoji\u011b'), W('\u662f','\u662f','sh\u00ec'), W('\u7f8e\u570b\u4eba','\u7f8e\u56fd\u4eba','M\u011bigu\u00f3r\u00e9n'), '\u3002'],\n        exEn: TR('Miss Zhao is American.', '\u8d99\u3055\u3093\u306f\u30a2\u30e1\u30ea\u30ab\u4eba\u3067\u3059\u3002', '\uc790\uc624 \uc544\uac00\uc528\ub294 \ubbf8\uad6d\uc778\uc774\uc5d0\uc694.') },\n      { t: '\u5c0f\u59d0', s: '\u5c0f\u59d0', p: 'xi\u01ceoji\u011b', meaning: TR('Miss; young lady', '\u301c\u3055\u3093(\u5973\u6027\u3078\u306e\u656c\u79f0)', '\uc544\uac00\uc528'),\n        ex: [W('\u5c0f\u59d0','\u5c0f\u59d0','Xi\u01ceoji\u011b'), '\uff0c', W('\u60a8','\u60a8','n\u00edn'), W('\u597d','\u597d','h\u01ceo'), '\uff01'],\n        exEn: TR('Miss, hello!', '\u304a\u5b22\u3055\u3093\u3001\u3053\u3093\u306b\u3061\u306f!', '\uc544\uac00\uc528, \uc548\ub155\ud558\uc138\uc694!') },\n      { t: '\u5f35', s: '\u5f20', p: 'Zh\u0101ng', meaning: TR('Zhang (a common surname)', '\u5f35(\u3088\u304f\u3042\u308b\u82d7\u5b57)', '\uc7a5(\u5f35, \ud754\ud55c \uc131)'),\n        ex: [WD('\u8ab0','\u8c01','Sh\u00e9i','sh\u00e9i'), W('\u662f','\u662f','sh\u00ec'), W('\u5f35','\u5f20','Zh\u0101ng'), W('\u5148\u751f','\u5148\u751f','xi\u0101nsh\u0113ng'), '\uff1f'],\n        exEn: TR('Who is Mr. Zhang?', '\u5f35\u3055\u3093\u306f\u8ab0\u3067\u3059\u304b\u3002', '\uc7a5 \uc120\uc0dd\ub2d8\uc740 \ub204\uad6c\uc608\uc694?') }\n    ],\n    'pv2-word-list-3': [\n      { t: '\u5f88', s: '\u5f88', p: 'h\u011bn', meaning: TR('very', '\u3068\u3066\u3082', '\ub9e4\uc6b0'),\n        ex: [W('\u5929\u6c23','\u5929\u6c14','Ti\u0101nq\u00ec'), W('\u5f88','\u5f88','h\u011bn'), W('\u71b1','\u70ed','r\u00e8'), '\u3002'],\n        exEn: TR('The weather is very hot.', '\u5929\u6c17\u306f\u3068\u3066\u3082\u6691\u3044\u3067\u3059\u3002', '\ub0a0\uc528\uac00 \ub9e4\uc6b0 \ub354\uc6cc\uc694.') },\n      { t: '\u4e5f', s: '\u4e5f', p: 'y\u011b', meaning: TR('also', '\u3082', '\ub3c4'),\n        ex: [W('\u5f35','\u5f20','Zh\u0101ng'), W('\u592a\u592a','\u592a\u592a','t\u00e0itai'), W('\u4e5f','\u4e5f','y\u011b'), W('\u5f88','\u5f88','h\u011bn'), W('\u5fd9','\u5fd9','m\u00e1ng'), '\u3002'],\n        exEn: TR('Mrs. Zhang is also very busy.', '\u5f35\u3055\u3093\u306e\u5965\u3055\u3093\u3082\u3068\u3066\u3082\u5fd9\u3057\u3044\u3067\u3059\u3002', '\uc7a5 \uc5ec\uc0ac\ub2d8\ub3c4 \ub9e4\uc6b0 \ubc14\ube60\uc694.') },\n      { t: '\u592a', s: '\u592a', p: 't\u00e0i', meaning: TR('too', '\u301c\u3059\u304e\u308b', '\ub108\ubb34'),\n        ex: [W('\u6211','\u6211','W\u01d2'), W('\u4e0d','\u4e0d','b\u00f9'), W('\u592a','\u592a','t\u00e0i'), W('\u5fd9','\u5fd9','m\u00e1ng'), '\u3002'],\n        exEn: TR(\"I'm not too busy.\", '\u79c1\u306f\u3042\u307e\u308a\u5fd9\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u3002', '\uc800\ub294 \ub108\ubb34 \ubc14\uc058\uc9c0 \uc54a\uc544\uc694.') },\n      { t: '\u9019', s: '\u8fd9', p: 'zh\u00e8', meaning: TR('this', '\u3053\u308c', '\uc774\uac83'),\n        ex: [WD('\u9019','\u8fd9','Zh\u00e8','zh\u00e8'), W('\u662f','\u662f','sh\u00ec'), W('\u4ec0\u9ebc','\u4ec0\u4e48','sh\u00e9nme'), '\uff1f'],\n        exEn: TR('What is this?', '\u3053\u308c\u306f\u4f55\u3067\u3059\u304b\u3002', '\uc774\uac83\uc740 \ubb34\uc5c7\uc774\uc5d0\uc694?') }\n    ],\n    'pv2-word-list-4': [\n      { t: '\u592a\u592a', s: '\u592a\u592a', p: 't\u00e0itai', meaning: TR('Mrs.; wife', '\u5965\u69d8;\u59bb', '\ubd80\uc778; \uc544\ub0b4'),\n        ex: [W('\u5979','\u5979','T\u0101'), W('\u662f','\u662f','sh\u00ec'), W('\u6211','\u6211','w\u01d2'), W('\u592a\u592a','\u592a\u592a','t\u00e0itai'), '\u3002'],\n        exEn: TR('She is my wife.', '\u5f7c\u5973\u306f\u79c1\u306e\u59bb\u3067\u3059\u3002', '\uadf8\ub140\ub294 \uc81c \uc544\ub0b4\uc608\uc694.') },\n      { t: '\u4f60\u5011', s: '\u4f60\u4eec', p: 'n\u01d0men', meaning: TR('you (plural)', '\u3042\u306a\u305f\u305f\u3061', '\ub2f9\uc2e0\ub4e4'),\n        ex: [WD('\u4f60\u5011','\u4f60\u4eec','N\u01d0men','n\u01d0men'), W('\u597d','\u597d','h\u01ceo'), W('\u55ce','\u5417','ma'), '\uff1f'],\n        exEn: TR('How are you (all)?', '\u3042\u306a\u305f\u305f\u3061\u306f\u5143\u6c17\u3067\u3059\u304b\u3002', '\ub2f9\uc2e0\ub4e4\uc740 \uc798 \uc9c0\ub0b4\uc694?') },\n      { t: '\u4e0a\u8ab2', s: '\u4e0a\u8bfe', p: 'sh\u00e0ngk\u00e8', meaning: TR('to attend class', '\u6388\u696d\u306b\u51fa\u308b', '\uc218\uc5c5\ud558\ub2e4'),\n        ex: [W('\u4f60','\u4f60','N\u01d0'), W('\u53bb','\u53bb','q\u00f9'), WD('\u4e0a\u8ab2','\u4e0a\u8bfe','sh\u00e0ngk\u00e8','sh\u00e0ngk\u00e8'), W('\u55ce','\u5417','ma'), '\uff1f'],\n        exEn: TR('Are you going to class?', '\u3042\u306a\u305f\u306f\u6388\u696d\u306b\u884c\u304d\u307e\u3059\u304b\u3002', '\ub2f9\uc2e0\uc740 \uc218\uc5c5\ud558\ub7ec \uac00\uc694?') },\n      { t: '\u53bb', s: '\u53bb', p: 'q\u00f9', meaning: TR('to go', '\u884c\u304f', '\uac00\ub2e4'),\n        ex: [W('\u4ed6','\u4ed6','T\u0101'), W('\u53bb','\u53bb','q\u00f9'), WD('\u4e0a\u8ab2','\u4e0a\u8bfe','sh\u00e0ngk\u00e8','sh\u00e0ngk\u00e8'), '\u3002'],\n        exEn: TR('He goes to class.', '\u5f7c\u306f\u6388\u696d\u306b\u884c\u304d\u307e\u3059\u3002', '\uadf8\ub294 \uc218\uc5c5\ud558\ub7ec \uac00\uc694.') }\n    ],\n    'pv2-word-list-5': [\n      { t: '\u5929\u6c23', s: '\u5929\u6c14', p: 'ti\u0101nq\u00ec', meaning: TR('weather', '\u5929\u6c17', '\ub0a0\uc528'),\n        ex: [W('\u5929\u6c23','\u5929\u6c14','Ti\u0101nq\u00ec'), W('\u5f88','\u5f88','h\u011bn'), W('\u51b7','\u51b7','l\u011bng'), '\u3002'],\n        exEn: TR('The weather is very cold.', '\u5929\u6c17\u306f\u3068\u3066\u3082\u5bd2\u3044\u3067\u3059\u3002', '\ub0a0\uc528\uac00 \ub9e4\uc6b0 \ucd94\uc6cc\uc694.') },\n      { t: '\u71b1', s: '\u70ed', p: 'r\u00e8', meaning: TR('hot', '\u6691\u3044', '\ub365\ub2e4'),\n        ex: [W('\u4f60','\u4f60','N\u01d0'), W('\u71b1','\u70ed','r\u00e8'), W('\u4e0d','\u4e0d','b\u00f9'), W('\u71b1','\u70ed','r\u00e8'), '\uff1f'],\n        exEn: TR('Are you hot?', '\u3042\u306a\u305f\u306f\u6691\u3044\u3067\u3059\u304b\u3002', '\ub2f9\uc2e0\uc740 \ub354\uc6cc\uc694?') },\n      { t: '\u51b7', s: '\u51b7', p: 'l\u011bng', meaning: TR('cold', '\u5bd2\u3044', '\ucda5\ub2e4'),\n        ex: [W('\u6211','\u6211','W\u01d2'), W('\u5f88','\u5f88','h\u011bn'), W('\u51b7','\u51b7','l\u011bng'), '\u3002'],\n        exEn: TR('I am very cold.', '\u79c1\u306f\u3068\u3066\u3082\u5bd2\u3044\u3067\u3059\u3002', '\uc800\ub294 \ub9e4\uc6b0 \ucd94\uc6cc\uc694.') },\n      { t: '\u5fd9', s: '\u5fd9', p: 'm\u00e1ng', meaning: TR('busy', '\u5fd9\u3057\u3044', '\ubc14\uc058\ub2e4'),\n        ex: [WD('\u4f60\u5011','\u4f60\u4eec','N\u01d0men','n\u01d0men'), W('\u5fd9','\u5fd9','m\u00e1ng'), W('\u55ce','\u5417','ma'), '\uff1f'],\n        exEn: TR('Are you (all) busy?', '\u3042\u306a\u305f\u305f\u3061\u306f\u5fd9\u3057\u3044\u3067\u3059\u304b\u3002', '\ub2f9\uc2e0\ub4e4\uc740 \ubc14\ube60\uc694?') }\n    ]\n  };\n\n  var DIALOGUE = [\n    { speakerT: '\u8d99\u5c0f\u59d0', speakerS: '\u8d75\u5c0f\u59d0',\n      tokens: [W('\u5f35','\u5f20','Zh\u0101ng'), W('\u5148\u751f','\u5148\u751f','xi\u0101nsh\u0113ng'), '\uff0c', W('\u65e9','\u65e9','z\u01ceo'), '\uff01'],\n      en: TR('Mr. Zhang, good morning!', '\u5f35\u3055\u3093\u3001\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059!', '\uc7a5 \uc120\uc0dd\ub2d8, \uc88b\uc740 \uc544\uce68\uc785\ub2c8\ub2e4!') },\n    { speakerT: '\u5f35\u5148\u751f', speakerS: '\u5f20\u5148\u751f',\n      tokens: [W('\u65e9','\u65e9','Z\u01ceo'), '\uff0c', W('\u8d99','\u8d75','Zh\u00e0o'), W('\u5c0f\u59d0','\u5c0f\u59d0','xi\u01ceoji\u011b'), '\uff0c', WD('\u597d\u4e45\u4e0d\u898b','\u597d\u4e45\u4e0d\u89c1','h\u01ceoji\u01d4b\u00faji\u00e0n','h\u01ceoji\u01d4b\u00faji\u00e0n'), '\uff0c', W('\u60a8','\u60a8','n\u00edn'), W('\u597d','\u597d','h\u01ceo'), W('\u55ce','\u5417','ma'), '\uff1f'],\n      en: TR('Morning, Miss Zhao, long time no see, how are you?', '\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059\u3001\u8d99\u3055\u3093\u3001\u304a\u4e45\u3057\u3076\u308a\u3067\u3059\u3001\u304a\u5143\u6c17\u3067\u3059\u304b\u3002', '\uc88b\uc740 \uc544\uce68\uc785\ub2c8\ub2e4, \uc790\uc624 \uc544\uac00\uc528, \uc624\ub79c\ub9cc\uc774\uc5d0\uc694, \uc798 \uc9c0\ub0b4\uc138\uc694?') },\n    { speakerT: '\u8d99\u5c0f\u59d0', speakerS: '\u8d75\u5c0f\u59d0',\n      tokens: [W('\u5f88','\u5f88','H\u011bn'), W('\u597d','\u597d','h\u01ceo'), '\uff0c', WD('\u8b1d\u8b1d','\u8c22\u8c22','xi\u00e8xie','xi\u00e8xie'), '\u3002', W('\u60a8','\u60a8','N\u00edn'), W('\u5462','\u5462','ne'), '\uff1f', W('\u5fd9','\u5fd9','M\u00e1ng'), W('\u4e0d','\u4e0d','b\u00f9'), W('\u5fd9','\u5fd9','m\u00e1ng'), '\uff1f'],\n      en: TR('Very well, thank you. And you? Are you busy?', '\u5143\u6c17\u3067\u3059\u3001\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3059\u3002\u3042\u306a\u305f\u306f\u3002\u5fd9\u3057\u3044\u3067\u3059\u304b\u3002', '\uc798 \uc9c0\ub0b4\uc694, \uac10\uc0ac\ud569\ub2c8\ub2e4. \ub2f9\uc2e0\uc740\uc694? \ubc14\ube60\uc694?') },\n    { speakerT: '\u5f35\u5148\u751f', speakerS: '\u5f20\u5148\u751f',\n      tokens: [W('\u5f88','\u5f88','H\u011bn'), W('\u5fd9','\u5fd9','m\u00e1ng'), '\u3002', WD('\u9019','\u8fd9','Zh\u00e8','zh\u00e8'), W('\u5929\u6c23','\u5929\u6c14','ti\u0101nq\u00ec'), W('\u5f88','\u5f88','h\u011bn'), W('\u71b1','\u70ed','r\u00e8'), '\uff0c', W('\u6211','\u6211','w\u01d2'), W('\u4e5f','\u4e5f','y\u011b'), W('\u5f88','\u5f88','h\u011bn'), W('\u5fd9','\u5fd9','m\u00e1ng'), '\u3002'],\n      en: TR(\"Very busy. This weather is hot, and I'm also very busy.\", '\u3068\u3066\u3082\u5fd9\u3057\u3044\u3067\u3059\u3002\u3053\u306e\u5929\u6c17\u306f\u6691\u3044\u3067\u3059\u3001\u79c1\u3082\u3068\u3066\u3082\u5fd9\u3057\u3044\u3067\u3059\u3002', '\ub9e4\uc6b0 \ubc14\ube60\uc694. \uc774 \ub0a0\uc528\ub294 \ub365\uace0, \uc800\ub3c4 \ub9e4\uc6b0 \ubc14\ube60\uc694.') },\n    { speakerT: '\u8d99\u5c0f\u59d0', speakerS: '\u8d75\u5c0f\u59d0',\n      tokens: [W('\u5f35','\u5f20','Zh\u0101ng'), W('\u592a\u592a','\u592a\u592a','t\u00e0itai'), W('\u5fd9','\u5fd9','m\u00e1ng'), W('\u55ce','\u5417','ma'), '\uff1f'],\n      en: TR('Is Mrs. Zhang busy?', '\u5f35\u3055\u3093\u306e\u5965\u3055\u3093\u306f\u5fd9\u3057\u3044\u3067\u3059\u304b\u3002', '\uc7a5 \uc5ec\uc0ac\ub2d8\uc740 \ubc14\uc058\uc138\uc694?') },\n    { speakerT: '\u5f35\u5148\u751f', speakerS: '\u5f20\u5148\u751f',\n      tokens: [W('\u5979','\u5979','T\u0101'), W('\u4e5f','\u4e5f','y\u011b'), W('\u5f88','\u5f88','h\u011bn'), W('\u5fd9','\u5fd9','m\u00e1ng'), '\u3002'],\n      en: TR(\"She's also very busy.\", '\u5f7c\u5973\u3082\u3068\u3066\u3082\u5fd9\u3057\u3044\u3067\u3059\u3002', '\uadf8\ub140\ub3c4 \ub9e4\uc6b0 \ubc14\ube60\uc694.') },\n    { speakerT: '\u8d99\u5c0f\u59d0', speakerS: '\u8d75\u5c0f\u59d0',\n      tokens: [WD('\u518d\u898b','\u518d\u89c1','Z\u00e0iji\u00e0n','z\u00e0iji\u00e0n'), '\uff01'],\n      en: TR('Goodbye!', '\u3055\u3088\u3046\u306a\u3089!', '\uc548\ub155\ud788 \uac00\uc138\uc694!') },\n    { speakerT: '\u5f35\u5148\u751f', speakerS: '\u5f20\u5148\u751f',\n      tokens: [WD('\u518d\u898b','\u518d\u89c1','Z\u00e0iji\u00e0n','z\u00e0iji\u00e0n'), '\uff01'],\n      en: TR('Goodbye!', '\u3055\u3088\u3046\u306a\u3089!', '\uc548\ub155\ud788 \uac00\uc138\uc694!') }\n  ];\n\n  var ALL_WORDS = [];\n  Object.keys(GROUPS).forEach(function (k) {\n    GROUPS[k].forEach(function (w) { ALL_WORDS.push(w); });\n  });\n\n  function trSpans(tr) {\n    return '<span class=\"pv2-tr pv2-tr-en\">' + tr.en + '<\/span>' +\n           '<span class=\"pv2-tr pv2-tr-ja\">' + tr.ja + '<\/span>' +\n           '<span class=\"pv2-tr pv2-tr-ko\">' + tr.ko + '<\/span>';\n  }\n\n  function rubyWord(w) {\n    return '<span class=\"pv2-sent-word\">' +\n      '<ruby class=\"lang-zh-TW\"><span class=\"rb\">' + w.t + '<\/span><rt>' + w.pt + '<\/rt><\/ruby>' +\n      '<ruby class=\"lang-zh-CN\"><span class=\"rb\">' + w.s + '<\/span><rt>' + w.ps + '<\/rt><\/ruby>' +\n      '<\/span>';\n  }\n\n  function renderTokens(tokens) {\n    var html = '';\n    tokens.forEach(function (tok) {\n      if (typeof tok === 'string') {\n        html += '<span class=\"pv2-punct\">' + tok + '<\/span>';\n      } else {\n        html += rubyWord(tok);\n      }\n    });\n    return html;\n  }\n\n  function headwordRuby(t, s, pt, ps) {\n    return '<ruby class=\"lang-zh-TW\"><span class=\"rb\">' + t + '<\/span><rt>' + pt + '<\/rt><\/ruby>' +\n           '<ruby class=\"lang-zh-CN\"><span class=\"rb\">' + s + '<\/span><rt>' + ps + '<\/rt><\/ruby>';\n  }\n\n  var counter = 0;\n  Object.keys(GROUPS).forEach(function (containerId) {\n    var container = root.querySelector('#' + containerId);\n    if (!container) return;\n    var html = '';\n    GROUPS[containerId].forEach(function (w) {\n      counter++;\n      var num = (counter < 10 ? '0' : '') + counter;\n      html += '<div class=\"pv2-word-card\">' +\n        '<div class=\"pv2-word-top\">' +\n          '<span class=\"pv2-num\">' + num + '<\/span>' +\n          '<span class=\"pv2-hanzi\">' + headwordRuby(w.t, w.s, w.pt || w.p, w.ps || w.p) + '<\/span>' +\n          '<span class=\"pv2-meaning\">' + trSpans(w.meaning) + '<\/span>' +\n          '<button class=\"pv2-speaker\" data-trad=\"' + w.t + '\" data-simp=\"' + w.s + '\" aria-label=\"Play pronunciation\">' + SPEAKER_SVG + '<\/button>' +\n        '<\/div>' +\n        '<div class=\"pv2-example\">' +\n          renderTokens(w.ex) +\n          '<span class=\"pv2-en\">' + trSpans(w.exEn) + '<\/span>' +\n        '<\/div>' +\n      '<\/div>';\n    });\n    container.innerHTML = html;\n  });\n\n  var dialogueEl = root.querySelector('#pv2-dialogue');\n  if (dialogueEl) {\n    var dHtml = '';\n    DIALOGUE.forEach(function (line) {\n      dHtml += '<div class=\"pv2-line\">' +\n        '<span class=\"pv2-speaker-tag\">' +\n          '<span class=\"lang-zh-TW\">' + line.speakerT + '<\/span>' +\n          '<span class=\"lang-zh-CN\">' + line.speakerS + '<\/span>' +\n        '<\/span>' +\n        '<span class=\"pv2-line-body\">' +\n          renderTokens(line.tokens) +\n          '<span class=\"pv2-line-en\">' + trSpans(line.en) + '<\/span>' +\n        '<\/span>' +\n      '<\/div>';\n    });\n    dialogueEl.innerHTML = dHtml;\n  }\n\n  \/\/ ---- Translation language toggle ----\n  var langBtns = root.querySelectorAll('.pv2-lang-btn');\n  langBtns.forEach(function (btn) {\n    btn.addEventListener('click', function () {\n      var lang = btn.getAttribute('data-lang');\n      root.classList.remove('pv2-lang-en', 'pv2-lang-ja', 'pv2-lang-ko');\n      root.classList.add('pv2-lang-' + lang);\n      langBtns.forEach(function (b) { b.classList.remove('pv2-lang-active'); });\n      btn.classList.add('pv2-lang-active');\n    });\n  });\n  root.classList.add('pv2-lang-en');\n\n  \/\/ ---- Flashcards ----\n  var fcCard = root.querySelector('#pv2-flashcard');\n  var fcFront = root.querySelector('#pv2-fc-front');\n  var fcBack = root.querySelector('#pv2-fc-back');\n  var fcProgress = root.querySelector('#pv2-fc-progress');\n  var fcPrevBtn = root.querySelector('#pv2-fc-prev');\n  var fcNextBtn = root.querySelector('#pv2-fc-next');\n  var fcIndex = 0;\n  var fcFlipped = false;\n\n  function renderFlashcard() {\n    var w = ALL_WORDS[fcIndex];\n    if (!w || !fcFront || !fcBack) return;\n    fcFront.innerHTML = '<span class=\"pv2-hanzi\">' + headwordRuby(w.t, w.s, w.pt || w.p, w.ps || w.p) + '<\/span>';\n    fcBack.innerHTML = '<span class=\"pv2-meaning\">' + trSpans(w.meaning) + '<\/span>';\n    if (fcProgress) fcProgress.textContent = (fcIndex + 1) + ' \/ ' + ALL_WORDS.length;\n    if (fcCard) fcCard.classList.remove('pv2-flipped');\n    fcFlipped = false;\n  }\n\n  if (fcCard) {\n    fcCard.addEventListener('click', function () {\n      fcFlipped = !fcFlipped;\n      fcCard.classList.toggle('pv2-flipped', fcFlipped);\n    });\n  }\n  if (fcPrevBtn) fcPrevBtn.addEventListener('click', function () {\n    fcIndex = (fcIndex - 1 + ALL_WORDS.length) % ALL_WORDS.length;\n    renderFlashcard();\n  });\n  if (fcNextBtn) fcNextBtn.addEventListener('click', function () {\n    fcIndex = (fcIndex + 1) % ALL_WORDS.length;\n    renderFlashcard();\n  });\n  renderFlashcard();\n\n  \/\/ ---- Match It game ----\n  var gameColZh = root.querySelector('#pv2-game-col-zh');\n  var gameColEn = root.querySelector('#pv2-game-col-en');\n  var gameStatus = root.querySelector('#pv2-game-status');\n  var gameWin = root.querySelector('#pv2-game-win');\n  var gameNewBtn = root.querySelector('#pv2-game-new');\n  var gameRound = [];\n  var gameSelectedZh = null;\n  var gameSelectedEn = null;\n  var gameMatchedCount = 0;\n  var gameBusy = false;\n\n  function shuffle(arr) {\n    var a = arr.slice();\n    for (var i = a.length - 1; i > 0; i--) {\n      var j = Math.floor(Math.random() * (i + 1));\n      var tmp = a[i]; a[i] = a[j]; a[j] = tmp;\n    }\n    return a;\n  }\n\n  function startRound() {\n    gameRound = shuffle(ALL_WORDS).slice(0, 8);\n    gameSelectedZh = null;\n    gameSelectedEn = null;\n    gameMatchedCount = 0;\n    gameBusy = false;\n    if (gameWin) gameWin.classList.remove('pv2-show');\n\n    var zhOrder = shuffle(gameRound);\n    var enOrder = shuffle(gameRound);\n\n    gameColZh.innerHTML = zhOrder.map(function (w) {\n      return '<button class=\"pv2-tile\" data-id=\"' + w.t + '\" data-side=\"zh\">' +\n        '<span class=\"lang-zh-TW\">' + w.t + '<\/span><span class=\"lang-zh-CN\">' + w.s + '<\/span>' +\n        '<span class=\"pv2-tile-py\">' + (w.pt || w.p) + '<\/span>' +\n      '<\/button>';\n    }).join('');\n\n    gameColEn.innerHTML = enOrder.map(function (w) {\n      return '<button class=\"pv2-tile\" data-id=\"' + w.t + '\" data-side=\"en\">' + trSpans(w.meaning) + '<\/button>';\n    }).join('');\n\n    updateGameStatus();\n  }\n\n  function updateGameStatus() {\n    if (gameStatus) gameStatus.textContent = gameMatchedCount + ' \/ ' + gameRound.length + ' matched';\n  }\n\n  function handleTileClick(tile) {\n    if (gameBusy || tile.classList.contains('pv2-matched')) return;\n    var side = tile.getAttribute('data-side');\n\n    if (side === 'zh') {\n      if (gameSelectedZh) gameSelectedZh.classList.remove('pv2-selected');\n      gameSelectedZh = tile;\n      tile.classList.add('pv2-selected');\n    } else {\n      if (gameSelectedEn) gameSelectedEn.classList.remove('pv2-selected');\n      gameSelectedEn = tile;\n      tile.classList.add('pv2-selected');\n    }\n\n    if (gameSelectedZh) {\n      if (gameSelectedEn) {\n        var zhId = gameSelectedZh.getAttribute('data-id');\n        var enId = gameSelectedEn.getAttribute('data-id');\n        if (zhId === enId) {\n          gameSelectedZh.classList.remove('pv2-selected');\n          gameSelectedEn.classList.remove('pv2-selected');\n          gameSelectedZh.classList.add('pv2-matched');\n          gameSelectedEn.classList.add('pv2-matched');\n          gameMatchedCount++;\n          updateGameStatus();\n          gameSelectedZh = null;\n          gameSelectedEn = null;\n          var roundDone = (gameMatchedCount === gameRound.length);\n          if (roundDone) {\n            if (gameWin) {\n              gameWin.classList.add('pv2-show');\n            }\n          }\n        } else {\n          gameBusy = true;\n          var z = gameSelectedZh, en = gameSelectedEn;\n          z.classList.add('pv2-wrong');\n          en.classList.add('pv2-wrong');\n          setTimeout(function () {\n            z.classList.remove('pv2-selected', 'pv2-wrong');\n            en.classList.remove('pv2-selected', 'pv2-wrong');\n            gameBusy = false;\n          }, 400);\n          gameSelectedZh = null;\n          gameSelectedEn = null;\n        }\n      }\n    }\n  }\n\n  root.addEventListener('click', function (e) {\n    var tile = e.target.closest('.pv2-tile');\n    if (tile) {\n      if (root.contains(tile)) handleTileClick(tile);\n    }\n  });\n  if (gameNewBtn) gameNewBtn.addEventListener('click', startRound);\n\n  startRound();\n\n  \/\/ ---- Vocabulary Quiz (follows the EN\/JA\/KO translation toggle) ----\n  function QMC(promptTR, optionsTR, answer) { return { type: 'mc', prompt: promptTR, options: optionsTR, answer: answer }; }\n  function QTYPE(promptTR, accept) { return { type: 'type', prompt: promptTR, accept: accept }; }\n\n  var QUIZ_DATA = [\n    QTYPE(TR('Type the pinyin for \u65e9.', '\u65e9\u306e\u30d4\u30f3\u30a4\u30f3\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002', '\u65e9\uc758 \ubcd1\uc74c\uc744 \uc785\ub825\ud558\uc138\uc694.'), ['zao']),\n    QMC(\n      TR('\u5c0f\u59d0 means...', '\u5c0f\u59d0\u306e\u610f\u5473\u306f?', '\u5c0f\u59d0\uc758 \ub73b\uc740?'),\n      [\n        TR('Miss', '\u301c\u3055\u3093(\u5973\u6027\u3078\u306e\u656c\u79f0)', '\uc544\uac00\uc528'),\n        TR('Mr.', '\u301c\u3055\u3093(\u7537\u6027\u3078\u306e\u656c\u79f0)', '\uc528(\ub0a8\uc131 \uc874\uce6d)'),\n        TR('teacher', '\u5148\u751f', '\uc120\uc0dd\ub2d8'),\n        TR('student', '\u5b66\u751f', '\ud559\uc0dd')\n      ], 0),\n    QMC(\n      TR('<span class=\"lang-zh-TW\">\u597d\u4e45\u4e0d\u898b<\/span><span class=\"lang-zh-CN\">\u597d\u4e45\u4e0d\u89c1<\/span> means...', '<span class=\"lang-zh-TW\">\u597d\u4e45\u4e0d\u898b<\/span><span class=\"lang-zh-CN\">\u597d\u4e45\u4e0d\u89c1<\/span>\u306e\u610f\u5473\u306f?', '<span class=\"lang-zh-TW\">\u597d\u4e45\u4e0d\u898b<\/span><span class=\"lang-zh-CN\">\u597d\u4e45\u4e0d\u89c1<\/span>\uc758 \ub73b\uc740?'),\n      [\n        TR('long time no see', '\u304a\u4e45\u3057\u3076\u308a\u3067\u3059', '\uc624\ub79c\ub9cc\uc774\uc5d0\uc694'),\n        TR('goodbye', '\u3055\u3088\u3046\u306a\u3089', '\uc548\ub155\ud788 \uac00\uc138\uc694'),\n        TR('thank you', '\u3042\u308a\u304c\u3068\u3046', '\uac10\uc0ac\ud569\ub2c8\ub2e4'),\n        TR('hello', '\u3053\u3093\u306b\u3061\u306f', '\uc548\ub155\ud558\uc138\uc694')\n      ], 0),\n    QTYPE(TR('Type the pinyin for \u8d99.', '\u8d99\u306e\u30d4\u30f3\u30a4\u30f3\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002', '\u8d99\uc758 \ubcd1\uc74c\uc744 \uc785\ub825\ud558\uc138\uc694.'), ['zhao']),\n    QMC(\n      TR('<span class=\"lang-zh-TW\">\u8b1d\u8b1d<\/span><span class=\"lang-zh-CN\">\u8c22\u8c22<\/span> means...', '<span class=\"lang-zh-TW\">\u8b1d\u8b1d<\/span><span class=\"lang-zh-CN\">\u8c22\u8c22<\/span>\u306e\u610f\u5473\u306f?', '<span class=\"lang-zh-TW\">\u8b1d\u8b1d<\/span><span class=\"lang-zh-CN\">\u8c22\u8c22<\/span>\uc758 \ub73b\uc740?'),\n      [\n        TR('thank you', '\u3042\u308a\u304c\u3068\u3046', '\uac10\uc0ac\ud569\ub2c8\ub2e4'),\n        TR('goodbye', '\u3055\u3088\u3046\u306a\u3089', '\uc548\ub155\ud788 \uac00\uc138\uc694'),\n        TR('hello', '\u3053\u3093\u306b\u3061\u306f', '\uc548\ub155\ud558\uc138\uc694'),\n        TR('sorry', '\u3059\u307f\u307e\u305b\u3093', '\ubbf8\uc548\ud569\ub2c8\ub2e4')\n      ], 0),\n    QMC(\n      TR('<span class=\"lang-zh-TW\">\u518d\u898b<\/span><span class=\"lang-zh-CN\">\u518d\u89c1<\/span> means...', '<span class=\"lang-zh-TW\">\u518d\u898b<\/span><span class=\"lang-zh-CN\">\u518d\u89c1<\/span>\u306e\u610f\u5473\u306f?', '<span class=\"lang-zh-TW\">\u518d\u898b<\/span><span class=\"lang-zh-CN\">\u518d\u89c1<\/span>\uc758 \ub73b\uc740?'),\n      [\n        TR('goodbye', '\u3055\u3088\u3046\u306a\u3089', '\uc548\ub155\ud788 \uac00\uc138\uc694'),\n        TR('hello', '\u3053\u3093\u306b\u3061\u306f', '\uc548\ub155\ud558\uc138\uc694'),\n        TR('thank you', '\u3042\u308a\u304c\u3068\u3046', '\uac10\uc0ac\ud569\ub2c8\ub2e4'),\n        TR('sorry', '\u3059\u307f\u307e\u305b\u3093', '\ubbf8\uc548\ud569\ub2c8\ub2e4')\n      ], 0),\n    QMC(\n      TR('\u5f88 means...', '\u5f88\u306e\u610f\u5473\u306f?', '\u5f88\uc758 \ub73b\uc740?'),\n      [\n        TR('very', '\u3068\u3066\u3082', '\ub9e4\uc6b0'),\n        TR('also', '\u3082', '\ub3c4'),\n        TR('too', '\u301c\u3059\u304e\u308b', '\ub108\ubb34'),\n        TR('this', '\u3053\u308c', '\uc774\uac83')\n      ], 0),\n    QTYPE(TR('Type the pinyin for \u5f35.', '\u5f35\u306e\u30d4\u30f3\u30a4\u30f3\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002', '\u5f35\uc758 \ubcd1\uc74c\uc744 \uc785\ub825\ud558\uc138\uc694.'), ['zhang']),\n    QMC(\n      TR('\u4e5f means...', '\u4e5f\u306e\u610f\u5473\u306f?', '\u4e5f\uc758 \ub73b\uc740?'),\n      [\n        TR('also', '\u3082', '\ub3c4'),\n        TR('very', '\u3068\u3066\u3082', '\ub9e4\uc6b0'),\n        TR('too', '\u301c\u3059\u304e\u308b', '\ub108\ubb34'),\n        TR('this', '\u3053\u308c', '\uc774\uac83')\n      ], 0),\n    QMC(\n      TR('\u592a means...', '\u592a\u306e\u610f\u5473\u306f?', '\u592a\uc758 \ub73b\uc740?'),\n      [\n        TR('too', '\u301c\u3059\u304e\u308b', '\ub108\ubb34'),\n        TR('very', '\u3068\u3066\u3082', '\ub9e4\uc6b0'),\n        TR('also', '\u3082', '\ub3c4'),\n        TR('this', '\u3053\u308c', '\uc774\uac83')\n      ], 0),\n    QMC(\n      TR('\u592a\u592a means...', '\u592a\u592a\u306e\u610f\u5473\u306f?', '\u592a\u592a\uc758 \ub73b\uc740?'),\n      [\n        TR('Mrs.; wife', '\u5965\u69d8;\u59bb', '\ubd80\uc778; \uc544\ub0b4'),\n        TR('Miss', '\u301c\u3055\u3093(\u5973\u6027\u3078\u306e\u656c\u79f0)', '\uc544\uac00\uc528'),\n        TR('Mr.', '\u301c\u3055\u3093(\u7537\u6027\u3078\u306e\u656c\u79f0)', '\uc528(\ub0a8\uc131 \uc874\uce6d)'),\n        TR('teacher', '\u5148\u751f', '\uc120\uc0dd\ub2d8')\n      ], 0),\n    QTYPE(TR('Type the pinyin for \u51b7.', '\u51b7\u306e\u30d4\u30f3\u30a4\u30f3\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002', '\u51b7\uc758 \ubcd1\uc74c\uc744 \uc785\ub825\ud558\uc138\uc694.'), ['leng']),\n    QMC(\n      TR('\u5929\u6c23 means...', '\u5929\u6c23\u306e\u610f\u5473\u306f?', '\u5929\u6c23\uc758 \ub73b\uc740?'),\n      [\n        TR('weather', '\u5929\u6c17', '\ub0a0\uc528'),\n        TR('hot', '\u6691\u3044', '\ub365\ub2e4'),\n        TR('cold', '\u5bd2\u3044', '\ucda5\ub2e4'),\n        TR('busy', '\u5fd9\u3057\u3044', '\ubc14\uc058\ub2e4')\n      ], 0),\n    QMC(\n      TR('\u71b1 means...', '\u71b1\u306e\u610f\u5473\u306f?', '\u71b1\uc758 \ub73b\uc740?'),\n      [\n        TR('hot', '\u6691\u3044', '\ub365\ub2e4'),\n        TR('cold', '\u5bd2\u3044', '\ucda5\ub2e4'),\n        TR('busy', '\u5fd9\u3057\u3044', '\ubc14\uc058\ub2e4'),\n        TR('weather', '\u5929\u6c17', '\ub0a0\uc528')\n      ], 0),\n    QMC(\n      TR('\u5fd9 means...', '\u5fd9\u306e\u610f\u5473\u306f?', '\u5fd9\uc758 \ub73b\uc740?'),\n      [\n        TR('busy', '\u5fd9\u3057\u3044', '\ubc14\uc058\ub2e4'),\n        TR('hot', '\u6691\u3044', '\ub365\ub2e4'),\n        TR('cold', '\u5bd2\u3044', '\ucda5\ub2e4'),\n        TR('weather', '\u5929\u6c17', '\ub0a0\uc528')\n      ], 0)\n  ];\n\n  var UI_STRINGS = {\n    en: { submit: 'Submit', next: 'Next', placeholder: 'Type your answer', correct: 'Correct!', incorrectPrefix: 'Not quite \u2014 the answer is \"', incorrectSuffix: '\".', incorrectGeneric: 'Not quite \u2014 check the highlighted answer above.', scoreLine: 'Nice work! Want to try again?', retake: 'Retake Quiz', questionLabel: 'Question' },\n    ja: { submit: '\u9001\u4fe1', next: '\u6b21\u3078', placeholder: '\u7b54\u3048\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044', correct: '\u6b63\u89e3!', incorrectPrefix: '\u6b8b\u5ff5\u3001\u6b63\u89e3\u306f\u300c', incorrectSuffix: '\u300d\u3067\u3059\u3002', incorrectGeneric: '\u6b8b\u5ff5\u3001\u4e0a\u306e\u30cf\u30a4\u30e9\u30a4\u30c8\u3055\u308c\u305f\u7b54\u3048\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002', scoreLine: '\u3088\u304f\u3067\u304d\u307e\u3057\u305f!\u3082\u3046\u4e00\u5ea6\u6311\u6226\u3057\u307e\u3059\u304b?', retake: '\u30af\u30a4\u30ba\u3092\u3084\u308a\u76f4\u3059', questionLabel: '\u8cea\u554f' },\n    ko: { submit: '\uc81c\ucd9c', next: '\ub2e4\uc74c', placeholder: '\ub2f5\uc744 \uc785\ub825\ud558\uc138\uc694', correct: '\uc815\ub2f5\uc785\ub2c8\ub2e4!', incorrectPrefix: '\uc544\uc27d\ub124\uc694 \u2014 \uc815\ub2f5\uc740 \"', incorrectSuffix: '\"\uc785\ub2c8\ub2e4.', incorrectGeneric: '\uc544\uc27d\ub124\uc694 \u2014 \uc704\uc5d0 \ud45c\uc2dc\ub41c \uc815\ub2f5\uc744 \ud655\uc778\ud558\uc138\uc694.', scoreLine: '\uc798\ud558\uc168\uc5b4\uc694! \ub2e4\uc2dc \ub3c4\uc804\ud574\ubcf4\uc2dc\uaca0\uc5b4\uc694?', retake: '\ud034\uc988 \ub2e4\uc2dc \ud480\uae30', questionLabel: '\ubb38\uc81c' }\n  };\n\n  function getLang() {\n    if (root.classList.contains('pv2-lang-ja')) return 'ja';\n    if (root.classList.contains('pv2-lang-ko')) return 'ko';\n    return 'en';\n  }\n\n  function stripTones(s) {\n    return s.normalize('NFD').replace(\/[\\u0300-\\u036f]\/g, '').toLowerCase().replace(\/[^a-z0-9]\/g, '');\n  }\n\n  (function initQuiz() {\n    var qRoot = root.querySelector('#pv2-quiz');\n    if (!qRoot) return;\n    var current = 0;\n    var score = 0;\n    var answered = false;\n\n    function render() {\n      if (current >= QUIZ_DATA.length) { renderScore(); return; }\n      var lang = getLang();\n      var ui = UI_STRINGS[lang];\n      var q = QUIZ_DATA[current];\n      answered = false;\n      var html = '<p class=\"pv2-quiz-progress\">' + ui.questionLabel + ' ' + (current + 1) + ' \/ ' + QUIZ_DATA.length + '<\/p>';\n      html += '<p class=\"pv2-quiz-prompt\">' + q.prompt[lang] + '<\/p>';\n      if (q.type === 'mc') {\n        html += '<div class=\"pv2-quiz-options\">';\n        for (var i = 0; i < q.options.length; i++) {\n          html += '<button type=\"button\" class=\"pv2-quiz-opt\" data-i=\"' + i + '\">' + q.options[i][lang] + '<\/button>';\n        }\n        html += '<\/div>';\n      } else {\n        html += '<div class=\"pv2-quiz-input-row\">';\n        html += '<input type=\"text\" class=\"pv2-quiz-input\" placeholder=\"' + ui.placeholder + '\">';\n        html += '<button type=\"button\" class=\"pv2-quiz-submit\">' + ui.submit + '<\/button>';\n        html += '<\/div>';\n      }\n      html += '<p class=\"pv2-quiz-feedback\"><\/p>';\n      html += '<button type=\"button\" class=\"pv2-quiz-next\" style=\"display:none;\">' + ui.next + '<\/button>';\n      qRoot.innerHTML = html;\n\n      if (q.type === 'mc') {\n        var opts = qRoot.querySelectorAll('.pv2-quiz-opt');\n        opts.forEach(function (btn) {\n          btn.addEventListener('click', function () {\n            if (answered) return;\n            answered = true;\n            var i = parseInt(this.getAttribute('data-i'), 10);\n            var correct = i === q.answer;\n            if (correct) score++;\n            opts.forEach(function (b, bi) {\n              b.setAttribute('disabled', 'disabled');\n              if (bi === q.answer) b.classList.add('correct');\n              else if (bi === i) b.classList.add('incorrect');\n            });\n            showFeedback(correct);\n          });\n        });\n      } else {\n        var input = qRoot.querySelector('.pv2-quiz-input');\n        var submitBtn = qRoot.querySelector('.pv2-quiz-submit');\n        function submit() {\n          if (answered) return;\n          answered = true;\n          var val = stripTones(input.value || '');\n          var correct = q.accept.indexOf(val) !== -1;\n          if (correct) score++;\n          input.setAttribute('disabled', 'disabled');\n          submitBtn.setAttribute('disabled', 'disabled');\n          showFeedback(correct, q.accept[0]);\n        }\n        submitBtn.addEventListener('click', submit);\n        input.addEventListener('keydown', function (e) { if (e.key === 'Enter') submit(); });\n      }\n\n      function showFeedback(correct, correctAnswer) {\n        var fb = qRoot.querySelector('.pv2-quiz-feedback');\n        if (correct) {\n          fb.textContent = ui.correct;\n        } else if (correctAnswer) {\n          fb.textContent = ui.incorrectPrefix + correctAnswer + ui.incorrectSuffix;\n        } else {\n          fb.textContent = ui.incorrectGeneric;\n        }\n        fb.className = 'pv2-quiz-feedback ' + (correct ? 'correct' : 'incorrect');\n        var nextBtn = qRoot.querySelector('.pv2-quiz-next');\n        nextBtn.style.display = 'inline-block';\n        nextBtn.addEventListener('click', function () { current++; render(); });\n      }\n    }\n\n    function renderScore() {\n      var ui = UI_STRINGS[getLang()];\n      qRoot.innerHTML =\n        '<div class=\"pv2-quiz-score\">' +\n        '<span class=\"pv2-quiz-score-num\">' + score + ' \/ ' + QUIZ_DATA.length + '<\/span>' +\n        '<p>' + ui.scoreLine + '<\/p>' +\n        '<button type=\"button\" class=\"pv2-quiz-retake\">' + ui.retake + '<\/button>' +\n        '<\/div>';\n      qRoot.querySelector('.pv2-quiz-retake').addEventListener('click', function () {\n        current = 0; score = 0; render();\n      });\n    }\n\n    render();\n  })();\n\n  \/\/ Speaker buttons (event delegation, Web Speech API) \u2014 headword cards only\n  root.addEventListener('click', function (e) {\n    var btn = e.target.closest('.pv2-speaker');\n    if (!btn || !root.contains(btn)) return;\n    if (!('speechSynthesis' in window)) return;\n    var showingSimp = false;\n    var simpEl = root.querySelector('.lang-zh-CN');\n    if (simpEl) {\n      if (simpEl.offsetParent !== null) showingSimp = true;\n    }\n    var text = showingSimp ? btn.getAttribute('data-simp') : btn.getAttribute('data-trad');\n    var utter = new SpeechSynthesisUtterance(text);\n    utter.lang = showingSimp ? 'zh-CN' : 'zh-TW';\n    window.speechSynthesis.cancel();\n    window.speechSynthesis.speak(utter);\n  });\n\n})();\n<\/script>\n<\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-medium is-resized\"><a href=\"https:\/\/tiffanysmandarin.com\/index.php\/shitinghuayu-audio\/\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"86\" src=\"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2022\/06\/e68f92e59c963-300x86.png\" alt=\"\" class=\"wp-image-571\" style=\"object-fit:cover;width:150px;height:43px\" srcset=\"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2022\/06\/e68f92e59c963-300x86.png 300w, https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2022\/06\/e68f92e59c963-600x171.png 600w, https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2022\/06\/e68f92e59c963.png 700w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":2,"featured_media":16392,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_wp_convertkit_post_meta":{"form":"-1","landing_page":"0","tag":"0","restrict_content":"0"},"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":true,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[1357],"tags":[],"class_list":["post-16371","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-1357"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\u8996\u807d\u83ef\u8a9e Book 1 Lesson 2 - OneDotDot Chinese<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/03\/book-1-l2\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u8996\u807d\u83ef\u8a9e Book 1 Lesson 2 - OneDotDot Chinese\" \/>\n<meta property=\"og:url\" content=\"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/03\/book-1-l2\/\" \/>\n<meta property=\"og:site_name\" content=\"OneDotDot Chinese\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-03T09:34:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-09T04:39:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2026\/09\/20190211100150_pic-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1755\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"tiffany\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"tiffany\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2026\\\/09\\\/03\\\/book-1-l2\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2026\\\/09\\\/03\\\/book-1-l2\\\/\"},\"author\":{\"name\":\"tiffany\",\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/#\\\/schema\\\/person\\\/3556e1160fac98b190d03b8aa8604d99\"},\"headline\":\"\u8996\u807d\u83ef\u8a9e Book 1 Lesson 2\",\"datePublished\":\"2026-09-03T09:34:22+00:00\",\"dateModified\":\"2026-09-09T04:39:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2026\\\/09\\\/03\\\/book-1-l2\\\/\"},\"wordCount\":2,\"publisher\":{\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/#\\\/schema\\\/person\\\/3556e1160fac98b190d03b8aa8604d99\"},\"image\":{\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2026\\\/09\\\/03\\\/book-1-l2\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/tiffanysmandarin.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/20190211100150_pic-scaled.jpg\",\"articleSection\":[\"\u8996\u807d\u83ef\u8a9e\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2026\\\/09\\\/03\\\/book-1-l2\\\/\",\"url\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2026\\\/09\\\/03\\\/book-1-l2\\\/\",\"name\":\"\u8996\u807d\u83ef\u8a9e Book 1 Lesson 2 - OneDotDot Chinese\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2026\\\/09\\\/03\\\/book-1-l2\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2026\\\/09\\\/03\\\/book-1-l2\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/tiffanysmandarin.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/20190211100150_pic-scaled.jpg\",\"datePublished\":\"2026-09-03T09:34:22+00:00\",\"dateModified\":\"2026-09-09T04:39:51+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2026\\\/09\\\/03\\\/book-1-l2\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2026\\\/09\\\/03\\\/book-1-l2\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2026\\\/09\\\/03\\\/book-1-l2\\\/#primaryimage\",\"url\":\"https:\\\/\\\/tiffanysmandarin.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/20190211100150_pic-scaled.jpg\",\"contentUrl\":\"https:\\\/\\\/tiffanysmandarin.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/20190211100150_pic-scaled.jpg\",\"width\":2560,\"height\":1755},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2026\\\/09\\\/03\\\/book-1-l2\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9801\",\"item\":\"https:\\\/\\\/tiffanysmandarin.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u8996\u807d\u83ef\u8a9e Book 1 Lesson 2\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/#website\",\"url\":\"https:\\\/\\\/tiffanysmandarin.com\\\/\",\"name\":\"OneDotDot Chinese\",\"description\":\"Learn a little Chinese every day\",\"publisher\":{\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/#\\\/schema\\\/person\\\/3556e1160fac98b190d03b8aa8604d99\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/tiffanysmandarin.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/#\\\/schema\\\/person\\\/3556e1160fac98b190d03b8aa8604d99\",\"name\":\"tiffany\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\\\/\\\/tiffanysmandarin.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/cropped-logo_tiffany2-1.png\",\"url\":\"http:\\\/\\\/tiffanysmandarin.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/cropped-logo_tiffany2-1.png\",\"contentUrl\":\"http:\\\/\\\/tiffanysmandarin.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/cropped-logo_tiffany2-1.png\",\"width\":214,\"height\":214,\"caption\":\"tiffany\"},\"logo\":{\"@id\":\"http:\\\/\\\/tiffanysmandarin.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/cropped-logo_tiffany2-1.png\"},\"sameAs\":[\"https:\\\/\\\/www.instagram.com\\\/tiffanys_talk\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/tiffany-huang-mandarin\\\/\"],\"url\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/author\\\/tiffany\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u8996\u807d\u83ef\u8a9e Book 1 Lesson 2 - OneDotDot Chinese","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/03\/book-1-l2\/","og_locale":"en_US","og_type":"article","og_title":"\u8996\u807d\u83ef\u8a9e Book 1 Lesson 2 - OneDotDot Chinese","og_url":"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/03\/book-1-l2\/","og_site_name":"OneDotDot Chinese","article_published_time":"2026-09-03T09:34:22+00:00","article_modified_time":"2026-09-09T04:39:51+00:00","og_image":[{"width":2560,"height":1755,"url":"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2026\/09\/20190211100150_pic-scaled.jpg","type":"image\/jpeg"}],"author":"tiffany","twitter_card":"summary_large_image","twitter_misc":{"Written by":"tiffany","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/03\/book-1-l2\/#article","isPartOf":{"@id":"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/03\/book-1-l2\/"},"author":{"name":"tiffany","@id":"https:\/\/tiffanysmandarin.com\/#\/schema\/person\/3556e1160fac98b190d03b8aa8604d99"},"headline":"\u8996\u807d\u83ef\u8a9e Book 1 Lesson 2","datePublished":"2026-09-03T09:34:22+00:00","dateModified":"2026-09-09T04:39:51+00:00","mainEntityOfPage":{"@id":"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/03\/book-1-l2\/"},"wordCount":2,"publisher":{"@id":"https:\/\/tiffanysmandarin.com\/#\/schema\/person\/3556e1160fac98b190d03b8aa8604d99"},"image":{"@id":"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/03\/book-1-l2\/#primaryimage"},"thumbnailUrl":"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2026\/09\/20190211100150_pic-scaled.jpg","articleSection":["\u8996\u807d\u83ef\u8a9e"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/03\/book-1-l2\/","url":"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/03\/book-1-l2\/","name":"\u8996\u807d\u83ef\u8a9e Book 1 Lesson 2 - OneDotDot Chinese","isPartOf":{"@id":"https:\/\/tiffanysmandarin.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/03\/book-1-l2\/#primaryimage"},"image":{"@id":"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/03\/book-1-l2\/#primaryimage"},"thumbnailUrl":"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2026\/09\/20190211100150_pic-scaled.jpg","datePublished":"2026-09-03T09:34:22+00:00","dateModified":"2026-09-09T04:39:51+00:00","breadcrumb":{"@id":"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/03\/book-1-l2\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/03\/book-1-l2\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/03\/book-1-l2\/#primaryimage","url":"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2026\/09\/20190211100150_pic-scaled.jpg","contentUrl":"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2026\/09\/20190211100150_pic-scaled.jpg","width":2560,"height":1755},{"@type":"BreadcrumbList","@id":"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/03\/book-1-l2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9801","item":"https:\/\/tiffanysmandarin.com\/"},{"@type":"ListItem","position":2,"name":"\u8996\u807d\u83ef\u8a9e Book 1 Lesson 2"}]},{"@type":"WebSite","@id":"https:\/\/tiffanysmandarin.com\/#website","url":"https:\/\/tiffanysmandarin.com\/","name":"OneDotDot Chinese","description":"Learn a little Chinese every day","publisher":{"@id":"https:\/\/tiffanysmandarin.com\/#\/schema\/person\/3556e1160fac98b190d03b8aa8604d99"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/tiffanysmandarin.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/tiffanysmandarin.com\/#\/schema\/person\/3556e1160fac98b190d03b8aa8604d99","name":"tiffany","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2022\/06\/cropped-logo_tiffany2-1.png","url":"http:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2022\/06\/cropped-logo_tiffany2-1.png","contentUrl":"http:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2022\/06\/cropped-logo_tiffany2-1.png","width":214,"height":214,"caption":"tiffany"},"logo":{"@id":"http:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2022\/06\/cropped-logo_tiffany2-1.png"},"sameAs":["https:\/\/www.instagram.com\/tiffanys_talk\/","https:\/\/www.linkedin.com\/in\/tiffany-huang-mandarin\/"],"url":"https:\/\/tiffanysmandarin.com\/index.php\/author\/tiffany\/"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2026\/09\/20190211100150_pic-scaled.jpg","_links":{"self":[{"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/posts\/16371","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/comments?post=16371"}],"version-history":[{"count":3,"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/posts\/16371\/revisions"}],"predecessor-version":[{"id":16770,"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/posts\/16371\/revisions\/16770"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/media\/16392"}],"wp:attachment":[{"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/media?parent=16371"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/categories?post=16371"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/tags?post=16371"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}