{"id":12874,"date":"2025-07-15T23:43:42","date_gmt":"2025-07-15T15:43:42","guid":{"rendered":"https:\/\/tiffanysmandarin.com\/?p=12874"},"modified":"2026-09-08T05:34:16","modified_gmt":"2026-09-07T21:34:16","slug":"contemporary-chinese-vocabulary-practice-b1l1","status":"publish","type":"post","link":"https:\/\/tiffanysmandarin.com\/index.php\/2025\/07\/15\/contemporary-chinese-vocabulary-practice-b1l1\/","title":{"rendered":"B1 L1 Vocabulary and Practice"},"content":{"rendered":"\n<div style=\"height:5px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div style=\"height:33px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<!--\n  \u7576\u4ee3\u4e2d\u6587\u8ab2\u7a0b Book 1 \u00b7 Lesson 1 \u300c\u6b61\u8fce\u4f60\u4f86\u81fa\u7063\uff01\u300d Vocabulary Embed \u2014 v2 (corrected)\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  This version replaces the previous (inaccurate) word list with the\n  ACTUAL Lesson 1 vocabulary transcribed from the textbook's own\n  \u751f\u8a5e\u4e00 \/ \u751f\u8a5e\u4e8c (Vocabulary I \/ II) pages, including \u4eba\u7269 (people in\n  the dialogue), Names, and Phrases sections, with the part-of-speech\n  tags shown in the book.\n\n  IMPORTANT: The dialogue in section 06 is NOT the textbook's dialogue.\n  It is an ORIGINAL short conversation written from scratch, using only\n  vocabulary that is confirmed to appear in this lesson's word list, so\n  as to avoid reproducing the copyrighted textbook dialogue. For the\n  real Lesson 1 dialogues, please use your own copy of the textbook.\n\n  Structural notes carried over from the previous version:\n    - No <!DOCTYPE>\/<html>\/<head>\/<body>, no page toggle UI, no footer\n    - CSS scoped under .dangdai-b1l1-vocab-embed with its own --db-*\n      variables (never touches site :root)\n    - Ruby markup: <ruby class=\"lang-zh-TW\">...<\/ruby><ruby class=\"lang-zh-CN\">...<\/ruby>\n      written consecutively (no dedupe even when trad = simp)\n    - Every example sentence \/ dialogue line is segmented WORD BY WORD\n      into its own ruby+pinyin chunk. Punctuation is plain text.\n    - Root lookup by id (#dangdai-b1l1-vocab-embed-2), not currentScript\n    - Speaker buttons use data-trad\/data-simp + one delegated click\n      listener; icon is an inline SVG play-triangle\n    - Self-contained flashcard deck + \"Match It\" game + 15-question quiz\n    - Traditional\/Simplified: uses the site's shared lang-zh-TW \/ lang-zh-CN\n      classes so the site's existing Text Display toggle works automatically\n    - ruby \/ .rb \/ rt all get color + font-size pinned with !important\n      (font-size: inherit !important) so the site's hyperscript toggle\n      can't zero them out\n    - No `data-script` (or other hyperscript-reserved) attribute names,\n      and no literal `&&` inside the <script> tag anywhere (WordPress's\n      filter can mangle `&&` into `&#038;&#038;`) \u2014 the Match It \"both\n      tiles selected\" check uses nested `if` blocks instead\n-->\n<div class=\"dangdai-b1l1-vocab-embed\" id=\"dangdai-b1l1-vocab-embed-2\">\n<style>\n.dangdai-b1l1-vocab-embed {\n  --db-oxblood: #7b2d26;\n  --db-oxblood-dark: #5e211c;\n  --db-mustard: #c9922b;\n  --db-sage: #7c8b6f;\n  --db-bone: #f7f1e6;\n  --db-ink: #2c2620;\n  --db-line: #e4d9c4;\n  font-family: 'Work Sans', -apple-system, sans-serif;\n  color: var(--db-ink);\n  background: #fff;\n  max-width: 760px;\n  margin: 0 auto;\n  padding: 8px 4px 24px;\n  line-height: 1.6;\n}\n.dangdai-b1l1-vocab-embed * { box-sizing: border-box; }\n.dangdai-b1l1-vocab-embed h1,\n.dangdai-b1l1-vocab-embed h2,\n.dangdai-b1l1-vocab-embed h3 {\n  font-family: 'Bitter', Georgia, serif;\n  color: var(--db-oxblood-dark);\n  margin: 0 0 8px;\n}\n.dangdai-b1l1-vocab-embed .db-lede {\n  margin: 0 0 24px;\n  padding: 14px 16px;\n  background: var(--db-bone);\n  border-left: 4px solid var(--db-mustard);\n  border-radius: 4px;\n  font-size: 0.98rem;\n}\n.dangdai-b1l1-vocab-embed .db-lede b { color: var(--db-oxblood-dark); }\n.dangdai-b1l1-vocab-embed .db-support-note {\n  font-size: 0.85rem;\n  color: var(--db-sage);\n  border-bottom: 1px solid var(--db-line);\n  padding-bottom: 12px;\n  margin: 0 0 16px;\n}\n.dangdai-b1l1-vocab-embed .db-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(--db-oxblood);\n  padding: 3px 9px;\n  border-radius: 3px;\n  margin: 32px 0 10px;\n}\n.dangdai-b1l1-vocab-embed .db-people-card {\n  border: 1px solid var(--db-line);\n  border-radius: 8px;\n  padding: 12px 14px;\n  margin-bottom: 10px;\n  background: var(--db-bone);\n  display: flex;\n  align-items: baseline;\n  gap: 10px;\n  flex-wrap: wrap;\n}\n.dangdai-b1l1-vocab-embed .db-word-card {\n  border: 1px solid var(--db-line);\n  border-radius: 8px;\n  padding: 12px 14px;\n  margin-bottom: 10px;\n  background: #fff;\n}\n.dangdai-b1l1-vocab-embed .db-word-top {\n  display: flex;\n  align-items: baseline;\n  gap: 10px;\n  flex-wrap: wrap;\n}\n.dangdai-b1l1-vocab-embed .db-num {\n  font-family: 'IBM Plex Mono', monospace;\n  font-size: 0.75rem;\n  color: var(--db-mustard);\n  min-width: 22px;\n}\n.dangdai-b1l1-vocab-embed .db-hanzi {\n  font-size: 1.35rem;\n  font-weight: 600;\n}\n.dangdai-b1l1-vocab-embed .db-pos {\n  font-family: 'IBM Plex Mono', monospace;\n  font-size: 0.7rem;\n  color: #fff;\n  background: var(--db-sage);\n  padding: 2px 7px;\n  border-radius: 10px;\n}\n.dangdai-b1l1-vocab-embed ruby {\n  ruby-position: over;\n  margin-right: 2px;\n  color: var(--db-ink) !important;\n  font-size: inherit !important;\n}\n.dangdai-b1l1-vocab-embed .rb {\n  color: var(--db-ink) !important;\n  font-size: inherit !important;\n}\n.dangdai-b1l1-vocab-embed rt {\n  font-family: 'IBM Plex Mono', monospace;\n  font-size: 0.6rem !important;\n  color: var(--db-sage) !important;\n  font-weight: 400;\n}\n.dangdai-b1l1-vocab-embed .db-meaning {\n  font-style: italic;\n  color: #6b5f52;\n  font-size: 0.92rem;\n}\n.dangdai-b1l1-vocab-embed .db-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(--db-bone);\n  color: var(--db-oxblood);\n  border-radius: 50%;\n  cursor: pointer;\n  margin-left: auto;\n}\n.dangdai-b1l1-vocab-embed .db-speaker:hover { background: var(--db-mustard); color: #fff; }\n.dangdai-b1l1-vocab-embed .db-example {\n  margin-top: 8px;\n  padding-top: 8px;\n  border-top: 1px dashed var(--db-line);\n  font-size: 0.95rem;\n}\n.dangdai-b1l1-vocab-embed .db-example .db-sent-word { display: inline-flex; }\n.dangdai-b1l1-vocab-embed .db-example .db-punct { margin-right: 2px; }\n.dangdai-b1l1-vocab-embed .db-example .db-en {\n  display: block;\n  color: #6b5f52;\n  font-size: 0.85rem;\n  margin-top: 4px;\n}\n.dangdai-b1l1-vocab-embed .db-dialogue {\n  background: var(--db-bone);\n  border-radius: 8px;\n  padding: 16px 18px;\n  margin-top: 8px;\n}\n.dangdai-b1l1-vocab-embed .db-line {\n  display: flex;\n  gap: 8px;\n  margin-bottom: 12px;\n  align-items: flex-start;\n  flex-wrap: wrap;\n}\n.dangdai-b1l1-vocab-embed .db-speaker-tag {\n  font-family: 'IBM Plex Mono', monospace;\n  font-size: 0.72rem;\n  color: var(--db-oxblood);\n  min-width: 46px;\n  padding-top: 3px;\n}\n.dangdai-b1l1-vocab-embed .db-line-body { flex: 1; min-width: 200px; }\n.dangdai-b1l1-vocab-embed .db-line-en { display: block; color: #6b5f52; font-size: 0.82rem; margin-top: 2px; }\n\n.dangdai-b1l1-vocab-embed .db-game-bar {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  margin-bottom: 12px;\n  flex-wrap: wrap;\n}\n.dangdai-b1l1-vocab-embed .db-game-status {\n  font-family: 'IBM Plex Mono', monospace;\n  font-size: 0.82rem;\n  color: var(--db-sage);\n}\n.dangdai-b1l1-vocab-embed .db-game-btn {\n  font-family: 'Work Sans', sans-serif;\n  font-size: 0.85rem;\n  border: 1px solid var(--db-oxblood);\n  color: var(--db-oxblood);\n  background: #fff;\n  padding: 6px 14px;\n  border-radius: 20px;\n  cursor: pointer;\n}\n.dangdai-b1l1-vocab-embed .db-game-btn:hover { background: var(--db-oxblood); color: #fff; }\n.dangdai-b1l1-vocab-embed .db-game-board {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 20px;\n}\n.dangdai-b1l1-vocab-embed .db-game-col { display: flex; flex-direction: column; gap: 8px; }\n.dangdai-b1l1-vocab-embed .db-tile {\n  font-family: 'Work Sans', sans-serif;\n  text-align: left;\n  border: 1px solid var(--db-line);\n  background: #fff;\n  border-radius: 6px;\n  padding: 10px 12px;\n  cursor: pointer;\n  font-size: 0.95rem;\n  color: var(--db-ink);\n  transition: background 0.15s, border-color 0.15s, transform 0.1s;\n}\n.dangdai-b1l1-vocab-embed .db-tile .db-tile-py {\n  display: block;\n  font-family: 'IBM Plex Mono', monospace;\n  font-size: 0.7rem;\n  color: var(--db-sage);\n  margin-top: 2px;\n}\n.dangdai-b1l1-vocab-embed .db-tile:hover:not(.db-matched):not(.db-selected) { border-color: var(--db-mustard); }\n.dangdai-b1l1-vocab-embed .db-tile.db-selected {\n  border-color: var(--db-oxblood);\n  background: var(--db-bone);\n}\n.dangdai-b1l1-vocab-embed .db-tile.db-matched {\n  border-color: var(--db-sage);\n  background: #eef2e9;\n  color: var(--db-sage);\n  cursor: default;\n}\n.dangdai-b1l1-vocab-embed .db-tile.db-wrong {\n  border-color: #b5453d;\n  background: #fbeceb;\n  animation: db-shake 0.3s;\n}\n@keyframes db-shake {\n  0%, 100% { transform: translateX(0); }\n  25% { transform: translateX(-4px); }\n  75% { transform: translateX(4px); }\n}\n.dangdai-b1l1-vocab-embed .db-game-win {\n  text-align: center;\n  padding: 14px;\n  font-family: 'Bitter', serif;\n  color: var(--db-oxblood-dark);\n  display: none;\n}\n.dangdai-b1l1-vocab-embed .db-game-win.db-show { display: block; }\n@media (max-width: 480px) {\n  .dangdai-b1l1-vocab-embed .db-game-board { grid-template-columns: 1fr; }\n}\n\n.dangdai-b1l1-vocab-embed .db-dialogue-note {\n  font-size: 0.85rem;\n  color: #6b5f52;\n  margin: 0 0 10px;\n}\n.dangdai-b1l1-vocab-embed .db-fc-hint {\n  font-size: 0.85rem;\n  color: #6b5f52;\n  margin: 0 0 12px;\n  text-align: center;\n}\n.dangdai-b1l1-vocab-embed .db-flashcard-wrap {\n  max-width: 320px;\n  margin: 0 auto 14px;\n  perspective: 1200px;\n}\n.dangdai-b1l1-vocab-embed .db-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.dangdai-b1l1-vocab-embed .db-flashcard.db-flipped { transform: rotateY(180deg); }\n.dangdai-b1l1-vocab-embed .db-fc-face {\n  position: absolute;\n  inset: 0;\n  backface-visibility: hidden;\n  border: 1px solid var(--db-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.dangdai-b1l1-vocab-embed .db-fc-back {\n  transform: rotateY(180deg);\n  background: var(--db-bone);\n}\n.dangdai-b1l1-vocab-embed .db-fc-front .db-hanzi { font-size: 4rem !important; }\n.dangdai-b1l1-vocab-embed .db-flashcard-wrap rt { font-size: 1.2rem !important; }\n.dangdai-b1l1-vocab-embed .db-fc-back .db-meaning {\n  font-style: italic;\n  color: var(--db-oxblood-dark);\n  font-size: 1.725rem;\n}\n.dangdai-b1l1-vocab-embed .db-fc-back .db-pos { margin-top: 8px; }\n.dangdai-b1l1-vocab-embed .db-flashcard-controls {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 14px;\n  margin-bottom: 28px;\n}\n.dangdai-b1l1-vocab-embed .db-quiz {\n  background: #fff;\n  border: 1px solid var(--db-line);\n  border-radius: 12px;\n  padding: 20px 22px;\n  margin-top: 8px;\n}\n.dangdai-b1l1-vocab-embed .db-quiz-progress { font-size: 0.82rem; color: var(--db-sage); margin: 0 0 10px; font-family: 'IBM Plex Mono', monospace; }\n.dangdai-b1l1-vocab-embed .db-quiz-prompt { font-size: 1.1rem; margin: 0 0 14px; }\n.dangdai-b1l1-vocab-embed .db-quiz-options { display: flex; flex-direction: column; gap: 8px; margin: 0 0 10px; }\n.dangdai-b1l1-vocab-embed .db-quiz-opt {\n  text-align: left;\n  border: 1px solid var(--db-line);\n  background: var(--db-bone);\n  border-radius: 8px;\n  padding: 10px 14px;\n  cursor: pointer;\n  font-size: 0.98rem;\n  color: var(--db-ink);\n}\n.dangdai-b1l1-vocab-embed .db-quiz-opt:hover { background: #f0e6d2; }\n.dangdai-b1l1-vocab-embed .db-quiz-opt.correct { background: #e3efdd; border-color: #7fae6d; color: #3d5c34; }\n.dangdai-b1l1-vocab-embed .db-quiz-opt.incorrect { background: #f5e0dc; border-color: var(--db-oxblood); color: var(--db-oxblood-dark); }\n.dangdai-b1l1-vocab-embed .db-quiz-opt[disabled] { cursor: default; }\n.dangdai-b1l1-vocab-embed .db-quiz-input-row { display: flex; gap: 8px; margin: 0 0 10px; flex-wrap: wrap; }\n.dangdai-b1l1-vocab-embed .db-quiz-input { flex: 1 1 200px; border: 1px solid var(--db-line); border-radius: 8px; padding: 9px 12px; font-size: 0.98rem; }\n.dangdai-b1l1-vocab-embed .db-quiz-submit,\n.dangdai-b1l1-vocab-embed .db-quiz-next,\n.dangdai-b1l1-vocab-embed .db-quiz-retake {\n  border: none;\n  background: var(--db-oxblood);\n  color: #fff;\n  border-radius: 20px;\n  padding: 8px 18px;\n  font-size: 0.9rem;\n  cursor: pointer;\n}\n.dangdai-b1l1-vocab-embed .db-quiz-submit:hover,\n.dangdai-b1l1-vocab-embed .db-quiz-next:hover,\n.dangdai-b1l1-vocab-embed .db-quiz-retake:hover { background: var(--db-oxblood-dark); }\n.dangdai-b1l1-vocab-embed .db-quiz-feedback { font-size: 0.95rem; margin: 0 0 10px; min-height: 1.4em; }\n.dangdai-b1l1-vocab-embed .db-quiz-feedback.correct { color: #3d5c34; }\n.dangdai-b1l1-vocab-embed .db-quiz-feedback.incorrect { color: var(--db-oxblood-dark); }\n.dangdai-b1l1-vocab-embed .db-quiz-score { text-align: center; }\n.dangdai-b1l1-vocab-embed .db-quiz-score .db-quiz-score-num { font-size: 2.2rem; font-weight: 700; color: var(--db-oxblood-dark); display: block; margin-bottom: 8px; font-family: 'Bitter', serif; }\n<\/style>\n\n<p class=\"db-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=\"db-lede\">\n<b><span class=\"lang-zh-TW\">\u7576\u4ee3\u4e2d\u6587\u8ab2\u7a0b<\/span><span class=\"lang-zh-CN\">\u5f53\u4ee3\u4e2d\u6587\u8bfe\u7a0b<\/span> Book 1 \u00b7 Lesson 1\u300c<span class=\"lang-zh-TW\">\u6b61\u8fce\u4f60\u4f86\u81fa\u7063\uff01<\/span><span class=\"lang-zh-CN\">\u6b22\u8fce\u4f60\u6765\u53f0\u6e7e\uff01<\/span>\u300dWelcome to Taiwan<\/b> \u2014 every word from \u751f\u8a5e\u4e00 and \u751f\u8a5e\u4e8c (Vocabulary I &amp; II), including the Names and Phrases sections, transcribed from the textbook, with pinyin, part of speech, meaning, and an original example sentence for every word, segmented word by word.\n<\/p>\n\n<div class=\"db-sec-eyebrow\">00 \u2014 PEOPLE IN THE DIALOGUE \u4eba\u7269<\/div>\n<div id=\"db-people-list\"><\/div>\n\n<div class=\"db-sec-eyebrow\">01 \u2014 VOCABULARY I \u751f\u8a5e\u4e00<\/div>\n<div id=\"db-word-list-1\"><\/div>\n\n<div class=\"db-sec-eyebrow\">02 \u2014 NAMES &amp; PHRASES I \u5c08\u6709\u540d\u8a5e\u3001\u8a5e\u7d44<\/div>\n<div id=\"db-word-list-2\"><\/div>\n\n<div class=\"db-sec-eyebrow\">03 \u2014 VOCABULARY II \u751f\u8a5e\u4e8c<\/div>\n<div id=\"db-word-list-3\"><\/div>\n\n<div class=\"db-sec-eyebrow\">04 \u2014 NAMES &amp; PHRASES II \u5c08\u6709\u540d\u8a5e\u3001\u8a5e\u7d44<\/div>\n<div id=\"db-word-list-4\"><\/div>\n\n<div class=\"db-sec-eyebrow\">05 \u2014 PUT IT TOGETHER \u5c0d\u8a71\u7df4\u7fd2<\/div>\n<p class=\"db-dialogue-note\"><em>Note: this dialogue is NOT from the textbook \u2014 the textbook&#8217;s own Dialogue I and Dialogue II are copyrighted, so I wrote a short original conversation below using only vocabulary from this lesson&#8217;s word list, so you can see the words used together. For the real Lesson 1 dialogues, please use your own copy of the textbook.<\/em><\/p>\n<div class=\"db-dialogue\" id=\"db-dialogue\"><\/div>\n\n<div class=\"db-sec-eyebrow\">06 \u2014 FLASHCARDS<\/div>\n<p class=\"db-fc-hint\">Tap the card to flip it, then use the arrows to move through the deck.<\/p>\n<div class=\"db-flashcard-wrap\">\n  <div class=\"db-flashcard\" id=\"db-flashcard\">\n    <div class=\"db-fc-face db-fc-front\" id=\"db-fc-front\"><\/div>\n    <div class=\"db-fc-face db-fc-back\" id=\"db-fc-back\"><\/div>\n  <\/div>\n<\/div>\n<div class=\"db-flashcard-controls\">\n  <button class=\"db-game-btn\" id=\"db-fc-prev\">\u2039 Prev<\/button>\n  <span class=\"db-game-status\" id=\"db-fc-progress\">1 \/ 40<\/span>\n  <button class=\"db-game-btn\" id=\"db-fc-next\">Next \u203a<\/button>\n<\/div>\n\n<div class=\"db-sec-eyebrow\">07 \u2014 MATCH IT<\/div>\n<p style=\"font-size:0.9rem;color:#6b5f52;margin:0 0 10px;\">Tap a Chinese word, then tap the English meaning that matches it. Get all 8 pairs to finish the round.<\/p>\n<div class=\"db-game-bar\">\n  <button class=\"db-game-btn\" id=\"db-game-new\">New Round<\/button>\n  <span class=\"db-game-status\" id=\"db-game-status\">0 \/ 8 matched<\/span>\n<\/div>\n<div class=\"db-game-board\">\n  <div class=\"db-game-col\" id=\"db-game-col-zh\"><\/div>\n  <div class=\"db-game-col\" id=\"db-game-col-en\"><\/div>\n<\/div>\n<div class=\"db-game-win\" id=\"db-game-win\">\ud83c\udf89 All matched! Nice work.<\/div>\n\n<div class=\"db-sec-eyebrow\">08 \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-answer.<\/p>\n<div class=\"db-quiz\" id=\"db-quiz\"><\/div>\n\n<script>\n(function () {\n  var root = document.getElementById('dangdai-b1l1-vocab-embed-2');\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\n  \/\/ People in the dialogue (not quizzed\/flashcarded \u2014 proper names)\n  var PEOPLE = [\n    { t: '\u9673\u6708\u7f8e', s: '\u9648\u6708\u7f8e', p: 'Ch\u00e9n Yu\u00e8m\u011bi', meaning: 'a woman from Vietnam' },\n    { t: '\u674e\u660e\u83ef', s: '\u674e\u660e\u534e', p: 'L\u01d0 M\u00ednghu\u00e1', meaning: 'a man from Taiwan' },\n    { t: '\u738b\u958b\u6587', s: '\u738b\u5f00\u6587', p: 'W\u00e1ng K\u0101iw\u00e9n', meaning: 'a man from the US' }\n  ];\n\n  \/\/ Word entries: { t, s, p, pos, meaning, ex: [W(...), '\uff0c', W(...), ...], exEn }\n  \/\/ Every example below uses ONLY vocabulary confirmed to be in this\n  \/\/ lesson's word list (see the note in the embed header).\n  var GROUPS = {\n    'db-word-list-1': [\n      { t: '\u4f60', s: '\u4f60', p: 'n\u01d0', pos: 'N', meaning: 'you',\n        ex: [W('\u4f60','\u4f60','N\u01d0'), W('\u662f','\u662f','sh\u00ec'), W('\u7f8e\u570b','\u7f8e\u56fd','M\u011bigu\u00f3'), W('\u4eba','\u4eba','r\u00e9n'), W('\u55ce','\u5417','ma'), '\uff1f'],\n        exEn: 'Are you American?' },\n      { t: '\u4f86', s: '\u6765', p: 'l\u00e1i', pos: 'V', meaning: 'to come',\n        ex: [W('\u6b61\u8fce','\u6b22\u8fce','Hu\u0101ny\u00edng'), W('\u4f60','\u4f60','n\u01d0'), W('\u4f86','\u6765','l\u00e1i'), W('\u81fa\u7063','\u53f0\u6e7e','T\u00e1iw\u0101n'), '\u3002'],\n        exEn: 'Welcome to Taiwan.' },\n      { t: '\u662f', s: '\u662f', p: 'sh\u00ec', pos: 'Vst', meaning: 'to be',\n        ex: [W('\u4ed6','\u4ed6','T\u0101'), W('\u662f','\u662f','sh\u00ec'), W('\u4e0d','\u4e0d','b\u00fa'), W('\u662f','\u662f','sh\u00ec'), W('\u65e5\u672c','\u65e5\u672c','R\u00ecb\u011bn'), W('\u4eba','\u4eba','r\u00e9n'), '\uff1f'],\n        exEn: 'Is he Japanese?' },\n      { t: '\u5c0f\u59d0', s: '\u5c0f\u59d0', p: 'xi\u01ceoji\u011b', pos: 'N', meaning: 'Miss, Ms.',\n        ex: [W('\u738b','\u738b','W\u00e1ng'), W('\u5c0f\u59d0','\u5c0f\u59d0','xi\u01ceoji\u011b'), W('\u662f','\u662f','sh\u00ec'), W('\u7f8e\u570b','\u7f8e\u56fd','M\u011bigu\u00f3'), W('\u4eba','\u4eba','r\u00e9n'), '\u3002'],\n        exEn: 'Miss Wang is American.' },\n      { t: '\u55ce', s: '\u5417', p: 'ma', pos: 'Ptc', meaning: 'sentence final particle',\n        ex: [W('\u4f60','\u4f60','N\u01d0'), W('\u597d','\u597d','h\u01ceo'), W('\u55ce','\u5417','ma'), '\uff1f'],\n        exEn: 'How are you?' },\n      { t: '\u63a5', s: '\u63a5', p: 'ji\u0113', pos: 'V', meaning: 'to pick sb up',\n        ex: [W('\u6211','\u6211','W\u01d2'), W('\u4f86','\u6765','l\u00e1i'), W('\u63a5','\u63a5','ji\u0113'), W('\u4f60','\u4f60','n\u01d0'), '\u3002'],\n        exEn: \"I'll come pick you up.\" },\n      { t: '\u6211\u5011', s: '\u6211\u4eec', p: 'w\u01d2men', pos: 'N', meaning: 'we, us',\n        ex: [W('\u6211\u5011','\u6211\u4eec','W\u01d2men'), W('\u8981','\u8981','y\u00e0o'), W('\u559d','\u559d','h\u0113'), W('\u8336','\u8336','ch\u00e1'), '\u3002'],\n        exEn: 'We want to drink tea.' },\n      { t: '\u6211', s: '\u6211', p: 'w\u01d2', pos: 'N', meaning: 'I, me',\n        ex: [W('\u6211','\u6211','W\u01d2'), W('\u59d3','\u59d3','x\u00ecng'), W('\u738b','\u738b','W\u00e1ng'), '\u3002'],\n        exEn: 'My surname is Wang.' },\n      { t: '\u9019', s: '\u8fd9', pt: 'zh\u00e8', ps: 'zh\u00e8', pos: 'Det', meaning: 'this',\n        ex: [W('\u9019','\u8fd9','Zh\u00e8'), W('\u662f','\u662f','sh\u00ec'), W('\u8336','\u8336','ch\u00e1'), W('\u55ce','\u5417','ma'), '\uff1f'],\n        exEn: 'Is this tea?' },\n      { t: '\u5148\u751f', s: '\u5148\u751f', p: 'xi\u0101nsh\u0113ng', pos: 'N', meaning: 'Mr.',\n        ex: [W('\u738b','\u738b','W\u00e1ng'), W('\u5148\u751f','\u5148\u751f','xi\u0101nsh\u0113ng'), W('\u8981','\u8981','y\u00e0o'), W('\u559d','\u559d','h\u0113'), W('\u5496\u5561','\u5496\u5561','k\u0101f\u0113i'), '\u3002'],\n        exEn: 'Mr. Wang wants to drink coffee.' },\n      { t: '\u597d', s: '\u597d', p: 'h\u01ceo', pos: 'Vs', meaning: 'fine, well',\n        ex: [W('\u4f60','\u4f60','N\u01d0'), W('\u597d','\u597d','h\u01ceo'), '\uff0c', W('\u6b61\u8fce','\u6b22\u8fce','hu\u0101ny\u00edng'), W('\u4f60','\u4f60','n\u01d0'), W('\u4f86','\u6765','l\u00e1i'), W('\u81fa\u7063','\u53f0\u6e7e','T\u00e1iw\u0101n'), '\u3002'],\n        exEn: 'Hello, welcome to Taiwan.' },\n      { t: '\u59d3', s: '\u59d3', p: 'x\u00ecng', pos: 'Vst', meaning: 'to be surnamed',\n        ex: [W('\u6211','\u6211','W\u01d2'), W('\u59d3','\u59d3','x\u00ecng'), W('\u9673','\u9648','Ch\u00e9n'), '\uff0c', W('\u4f60','\u4f60','n\u01d0'), W('\u5462','\u5462','ne'), '\uff1f'],\n        exEn: 'My surname is Chen, and yours?' },\n      { t: '\u53eb', s: '\u53eb', p: 'ji\u00e0o', pos: 'Vst', meaning: 'to be called, i.e., to have the first name xx',\n        ex: [W('\u6211','\u6211','W\u01d2'), W('\u53eb','\u53eb','ji\u00e0o'), W('\u5982\u7389','\u5982\u7389','R\u00fay\u00f9'), '\u3002'],\n        exEn: 'My first name is Ruyu.' },\n      { t: '\u4f60\u5011', s: '\u4f60\u4eec', p: 'n\u01d0men', pos: 'N', meaning: 'you (plural)',\n        ex: [W('\u4f60\u5011','\u4f60\u4eec','N\u01d0men'), W('\u597d','\u597d','h\u01ceo'), '\uff0c', W('\u6b61\u8fce','\u6b22\u8fce','hu\u0101ny\u00edng'), W('\u4f60\u5011','\u4f60\u4eec','n\u01d0men'), '\uff01'],\n        exEn: 'Hello, welcome!' }\n    ],\n    'db-word-list-2': [\n      { t: '\u81fa\u7063', s: '\u53f0\u6e7e', p: 'T\u00e1iw\u0101n', pos: 'Names', meaning: 'Taiwan (=\u53f0\u7063)',\n        ex: [W('\u6b61\u8fce','\u6b22\u8fce','Hu\u0101ny\u00edng'), W('\u4f60','\u4f60','n\u01d0'), W('\u4f86','\u6765','l\u00e1i'), W('\u81fa\u7063','\u53f0\u6e7e','T\u00e1iw\u0101n'), '\uff01'],\n        exEn: 'Welcome to Taiwan!' },\n      { t: '\u6b61\u8fce', s: '\u6b22\u8fce', p: 'hu\u0101ny\u00edng', pos: 'Phrase', meaning: 'welcome',\n        ex: [W('\u4ed6','\u4ed6','T\u0101'), W('\u6b61\u8fce','\u6b22\u8fce','hu\u0101ny\u00edng'), W('\u6211\u5011','\u6211\u4eec','w\u01d2men'), W('\u4f86','\u6765','l\u00e1i'), '\u3002'],\n        exEn: 'He welcomes us to come.' },\n      { t: '\u8acb\u554f', s: '\u8bf7\u95ee', p: 'q\u01d0ngw\u00e8n', pos: 'Phrase', meaning: 'May I ask you\u2026; Excuse me,\u2026',\n        ex: [W('\u8acb\u554f','\u8bf7\u95ee','Q\u01d0ngw\u00e8n'), '\uff0c', W('\u4f60','\u4f60','n\u01d0'), W('\u662f','\u662f','sh\u00ec'), W('\u738b','\u738b','W\u00e1ng'), W('\u5c0f\u59d0','\u5c0f\u59d0','xi\u01ceoji\u011b'), W('\u55ce','\u5417','ma'), '\uff1f'],\n        exEn: 'Excuse me, are you Miss Wang?' },\n      { t: '\u662f\u7684', s: '\u662f\u7684', p: 'sh\u00ecde', pos: 'Phrase', meaning: 'yes',\n        ex: [W('\u662f\u7684','\u662f\u7684','Sh\u00ecde'), '\uff0c', W('\u6211','\u6211','w\u01d2'), W('\u662f','\u662f','sh\u00ec'), '\u3002'],\n        exEn: 'Yes, I am.' },\n      { t: '\u8b1d\u8b1d', s: '\u8c22\u8c22', p: 'xi\u00e8xie', pos: 'Phrase', meaning: 'Thank you.',\n        ex: [W('\u8b1d\u8b1d','\u8c22\u8c22','Xi\u00e8xie'), W('\u4f60','\u4f60','n\u01d0'), '\uff0c', W('\u4f60','\u4f60','n\u01d0'), W('\u4eba','\u4eba','r\u00e9n'), W('\u5f88','\u5f88','h\u011bn'), W('\u597d','\u597d','h\u01ceo'), '\u3002'],\n        exEn: \"Thank you, you're a nice person.\" },\n      { t: '\u4e0d\u5ba2\u6c23', s: '\u4e0d\u5ba2\u6c14', p: 'b\u00fak\u00e8qi', pos: 'Phrase', meaning: \"You're welcome.\",\n        ex: [W('\u4e0d\u5ba2\u6c23','\u4e0d\u5ba2\u6c14','B\u00fak\u00e8qi'), '\uff0c', W('\u6b61\u8fce','\u6b22\u8fce','hu\u0101ny\u00edng'), W('\u4f60','\u4f60','n\u01d0'), '\u3002'],\n        exEn: \"You're welcome, welcome to you.\" },\n      { t: '\u4f60\u597d', s: '\u4f60\u597d', p: 'n\u01d0 h\u01ceo', pos: 'Phrase', meaning: 'How are you? Hello.',\n        ex: [W('\u4f60\u597d','\u4f60\u597d','N\u01d0 h\u01ceo'), '\uff01', W('\u6211','\u6211','w\u01d2'), W('\u53eb','\u53eb','ji\u00e0o'), W('\u6708\u7f8e','\u6708\u7f8e','Yu\u00e8m\u011bi'), '\u3002'],\n        exEn: \"Hello! My name is Yuemei.\" }\n    ],\n    'db-word-list-3': [\n      { t: '\u8acb', s: '\u8bf7', p: 'q\u01d0ng', pos: 'V', meaning: 'please',\n        ex: [W('\u8acb','\u8bf7','Q\u01d0ng'), W('\u559d','\u559d','h\u0113'), W('\u5496\u5561','\u5496\u5561','k\u0101f\u0113i'), '\u3002'],\n        exEn: 'Please have some coffee.' },\n      { t: '\u559d', s: '\u559d', p: 'h\u0113', pos: 'V', meaning: 'to drink',\n        ex: [W('\u4f60','\u4f60','N\u01d0'), W('\u8981','\u8981','y\u00e0o'), W('\u559d','\u559d','h\u0113'), W('\u4ec0\u9ebc','\u4ec0\u4e48','sh\u00e9nme'), '\uff1f'],\n        exEn: 'What would you like to drink?' },\n      { t: '\u8336', s: '\u8336', p: 'ch\u00e1', pos: 'N', meaning: 'tea',\n        ex: [W('\u9019','\u8fd9','Zh\u00e8'), W('\u662f','\u662f','sh\u00ec'), W('\u4ec0\u9ebc','\u4ec0\u4e48','sh\u00e9nme'), W('\u8336','\u8336','ch\u00e1'), '\uff1f'],\n        exEn: 'What kind of tea is this?' },\n      { t: '\u5f88', s: '\u5f88', p: 'h\u011bn', pos: 'Adv', meaning: 'very',\n        ex: [W('\u5496\u5561','\u5496\u5561','K\u0101f\u0113i'), W('\u5f88','\u5f88','h\u011bn'), W('\u597d\u559d','\u597d\u559d','h\u01ceoh\u0113'), '\u3002'],\n        exEn: 'The coffee tastes very good.' },\n      { t: '\u597d\u559d', s: '\u597d\u559d', p: 'h\u01ceoh\u0113', pos: 'Vs', meaning: '(lit. good to drink) to taste good',\n        ex: [W('\u70cf\u9f8d\u8336','\u4e4c\u9f99\u8336','W\u016bl\u00f3ngch\u00e1'), W('\u5f88','\u5f88','h\u011bn'), W('\u597d\u559d','\u597d\u559d','h\u01ceoh\u0113'), '\u3002'],\n        exEn: 'Oolong tea tastes very good.' },\n      { t: '\u4ec0\u9ebc', s: '\u4ec0\u4e48', p: 'sh\u00e9nme', pos: 'N', meaning: 'what',\n        ex: [W('\u9019','\u8fd9','Zh\u00e8'), W('\u662f','\u662f','sh\u00ec'), W('\u4ec0\u9ebc','\u4ec0\u4e48','sh\u00e9nme'), '\uff1f'],\n        exEn: 'What is this?' },\n      { t: '\u4eba', s: '\u4eba', p: 'r\u00e9n', pos: 'N', meaning: 'person, people',\n        ex: [W('\u4ed6','\u4ed6','T\u0101'), W('\u662f','\u662f','sh\u00ec'), W('\u7f8e\u570b','\u7f8e\u56fd','M\u011bigu\u00f3'), W('\u4eba','\u4eba','r\u00e9n'), '\u3002'],\n        exEn: 'He is American.' },\n      { t: '\u559c\u6b61', s: '\u559c\u6b22', p: 'x\u01d0hu\u0101n', pos: 'Vst', meaning: 'to like',\n        ex: [W('\u6211','\u6211','W\u01d2'), W('\u559c\u6b61','\u559c\u6b22','x\u01d0hu\u0101n'), W('\u559d','\u559d','h\u0113'), W('\u8336','\u8336','ch\u00e1'), '\uff0c', W('\u4e0d','\u4e0d','b\u00f9'), W('\u559c\u6b61','\u559c\u6b22','x\u01d0hu\u0101n'), W('\u559d','\u559d','h\u0113'), W('\u5496\u5561','\u5496\u5561','k\u0101f\u0113i'), '\u3002'],\n        exEn: 'I like tea, not coffee.' },\n      { t: '\u5462', s: '\u5462', p: 'ne', pos: 'Ptc', meaning: 'sentence final particle',\n        ex: [W('\u6211','\u6211','W\u01d2'), W('\u8981','\u8981','y\u00e0o'), W('\u559d','\u559d','h\u0113'), W('\u8336','\u8336','ch\u00e1'), '\uff0c', W('\u4f60','\u4f60','n\u01d0'), W('\u5462','\u5462','ne'), '\uff1f'],\n        exEn: 'I want tea, and you?' },\n      { t: '\u4ed6', s: '\u4ed6', p: 't\u0101', pos: 'N', meaning: 'he, him',\n        ex: [W('\u4ed6','\u4ed6','T\u0101'), W('\u4e0d','\u4e0d','b\u00fa'), W('\u662f','\u662f','sh\u00ec'), W('\u65e5\u672c','\u65e5\u672c','R\u00ecb\u011bn'), W('\u4eba','\u4eba','r\u00e9n'), '\u3002'],\n        exEn: 'He is not Japanese.' },\n      { t: '\u4e0d', s: '\u4e0d', p: 'b\u00f9', pos: 'Adv', meaning: 'not',\n        ex: [W('\u6211','\u6211','W\u01d2'), W('\u4e0d','\u4e0d','b\u00f9'), W('\u559d','\u559d','h\u0113'), W('\u5496\u5561','\u5496\u5561','k\u0101f\u0113i'), '\u3002'],\n        exEn: \"I don't drink coffee.\" },\n      { t: '\u54ea', s: '\u54ea', pt: 'n\u01ce', ps: 'n\u01ce', pos: 'Det', meaning: 'which',\n        ex: [W('\u4f60','\u4f60','N\u01d0'), W('\u662f','\u662f','sh\u00ec'), W('\u54ea','\u54ea','n\u01ce'), W('\u570b','\u56fd','gu\u00f3'), W('\u4eba','\u4eba','r\u00e9n'), '\uff1f'],\n        exEn: 'Which country are you from?' },\n      { t: '\u8981', s: '\u8981', p: 'y\u00e0o', pos: 'Vaux', meaning: 'to want to',\n        ex: [W('\u4f60','\u4f60','N\u01d0'), W('\u8981','\u8981','y\u00e0o'), W('\u4e0d','\u4e0d','b\u00fa'), W('\u8981','\u8981','y\u00e0o'), W('\u559d','\u559d','h\u0113'), W('\u8336','\u8336','ch\u00e1'), '\uff1f'],\n        exEn: 'Do you want to drink tea?' },\n      { t: '\u5496\u5561', s: '\u5496\u5561', p: 'k\u0101f\u0113i', pos: 'N', meaning: 'coffee',\n        ex: [W('\u6211','\u6211','W\u01d2'), W('\u4e0d','\u4e0d','b\u00f9'), W('\u559d','\u559d','h\u0113'), W('\u5496\u5561','\u5496\u5561','k\u0101f\u0113i'), '\uff0c', W('\u6211','\u6211','w\u01d2'), W('\u559c\u6b61','\u559c\u6b22','x\u01d0hu\u0101n'), W('\u559d','\u559d','h\u0113'), W('\u8336','\u8336','ch\u00e1'), '\u3002'],\n        exEn: \"I don't drink coffee, I like tea.\" }\n    ],\n    'db-word-list-4': [\n      { t: '\u70cf\u9f8d\u8336', s: '\u4e4c\u9f99\u8336', p: 'W\u016bl\u00f3ngch\u00e1', pos: 'Names', meaning: 'Oolong tea',\n        ex: [W('\u9019','\u8fd9','Zh\u00e8'), W('\u662f','\u662f','sh\u00ec'), W('\u70cf\u9f8d\u8336','\u4e4c\u9f99\u8336','W\u016bl\u00f3ngch\u00e1'), '\uff0c', W('\u5f88','\u5f88','h\u011bn'), W('\u597d\u559d','\u597d\u559d','h\u01ceoh\u0113'), '\u3002'],\n        exEn: \"This is Oolong tea, it's delicious.\" },\n      { t: '\u65e5\u672c', s: '\u65e5\u672c', p: 'R\u00ecb\u011bn', pos: 'Names', meaning: 'Japan',\n        ex: [W('\u4ed6','\u4ed6','T\u0101'), W('\u4e0d','\u4e0d','b\u00fa'), W('\u662f','\u662f','sh\u00ec'), W('\u65e5\u672c','\u65e5\u672c','R\u00ecb\u011bn'), W('\u4eba','\u4eba','r\u00e9n'), '\u3002'],\n        exEn: \"He's not Japanese.\" },\n      { t: '\u7f8e\u570b', s: '\u7f8e\u56fd', p: 'M\u011bigu\u00f3', pos: 'Names', meaning: 'America',\n        ex: [W('\u6211','\u6211','W\u01d2'), W('\u662f','\u662f','sh\u00ec'), W('\u7f8e\u570b','\u7f8e\u56fd','M\u011bigu\u00f3'), W('\u4eba','\u4eba','r\u00e9n'), '\u3002'],\n        exEn: 'I am American.' },\n      { t: '\u5c0d\u4e0d\u8d77', s: '\u5bf9\u4e0d\u8d77', p: 'du\u00ecb\u00f9q\u01d0', pos: 'Phrase', meaning: \"I'm sorry.\",\n        ex: [W('\u5c0d\u4e0d\u8d77','\u5bf9\u4e0d\u8d77','Du\u00ecb\u00f9q\u01d0'), '\uff0c', W('\u6211','\u6211','w\u01d2'), W('\u4e0d','\u4e0d','b\u00f9'), W('\u559d','\u559d','h\u0113'), W('\u5496\u5561','\u5496\u5561','k\u0101f\u0113i'), '\u3002'],\n        exEn: \"Sorry, I don't drink coffee.\" },\n      { t: '\u54ea\u570b', s: '\u54ea\u56fd', pt: 'n\u01ce gu\u00f3', ps: 'n\u01ce gu\u00f3', pos: 'Phrase', meaning: 'Which country?',\n        ex: [W('\u4f60','\u4f60','N\u01d0'), W('\u662f','\u662f','sh\u00ec'), W('\u54ea\u570b','\u54ea\u56fd','n\u01ce gu\u00f3'), W('\u4eba','\u4eba','r\u00e9n'), '\uff1f'],\n        exEn: 'Which country are you from?' }\n    ]\n  };\n\n  \/\/ Original dialogue (NOT from the textbook) using only this lesson's vocabulary\n  var DIALOGUE = [\n    { speakerT: '\u958b\u6587', speakerS: '\u5f00\u6587',\n      tokens: [W('\u4f60\u597d','\u4f60\u597d','N\u01d0 h\u01ceo'), '\uff0c', W('\u6211','\u6211','w\u01d2'), W('\u59d3','\u59d3','x\u00ecng'), W('\u738b','\u738b','W\u00e1ng'), '\uff0c', W('\u53eb','\u53eb','ji\u00e0o'), W('\u958b\u6587','\u5f00\u6587','K\u0101iw\u00e9n'), '\u3002', W('\u4f60','\u4f60','n\u01d0'), W('\u5462','\u5462','ne'), '\uff1f'],\n      en: 'Hello, my surname is Wang, my name is Kaiwen. And you?' },\n    { speakerT: '\u6708\u7f8e', speakerS: '\u6708\u7f8e',\n      tokens: [W('\u4f60\u597d','\u4f60\u597d','N\u01d0 h\u01ceo'), '\uff0c', W('\u6211','\u6211','w\u01d2'), W('\u59d3','\u59d3','x\u00ecng'), W('\u9673','\u9648','Ch\u00e9n'), '\uff0c', W('\u53eb','\u53eb','ji\u00e0o'), W('\u6708\u7f8e','\u6708\u7f8e','Yu\u00e8m\u011bi'), '\u3002'],\n      en: 'Hello, my surname is Chen, my name is Yuemei.' },\n    { speakerT: '\u958b\u6587', speakerS: '\u5f00\u6587',\n      tokens: [W('\u8acb\u554f','\u8bf7\u95ee','Q\u01d0ngw\u00e8n'), '\uff0c', W('\u4f60','\u4f60','n\u01d0'), W('\u662f','\u662f','sh\u00ec'), W('\u54ea','\u54ea','n\u01ce'), W('\u570b','\u56fd','gu\u00f3'), W('\u4eba','\u4eba','r\u00e9n'), '\uff1f'],\n      en: 'Excuse me, which country are you from?' },\n    { speakerT: '\u6708\u7f8e', speakerS: '\u6708\u7f8e',\n      tokens: [W('\u6211','\u6211','W\u01d2'), W('\u662f','\u662f','sh\u00ec'), W('\u65e5\u672c','\u65e5\u672c','R\u00ecb\u011bn'), W('\u4eba','\u4eba','r\u00e9n'), '\u3002', W('\u4f60','\u4f60','n\u01d0'), W('\u662f','\u662f','sh\u00ec'), W('\u4e0d','\u4e0d','b\u00fa'), W('\u662f','\u662f','sh\u00ec'), W('\u7f8e\u570b','\u7f8e\u56fd','M\u011bigu\u00f3'), W('\u4eba','\u4eba','r\u00e9n'), '\uff1f'],\n      en: \"I'm Japanese. Are you American?\" },\n    { speakerT: '\u958b\u6587', speakerS: '\u5f00\u6587',\n      tokens: [W('\u662f\u7684','\u662f\u7684','Sh\u00ecde'), '\uff0c', W('\u6211','\u6211','w\u01d2'), W('\u662f','\u662f','sh\u00ec'), W('\u7f8e\u570b','\u7f8e\u56fd','M\u011bigu\u00f3'), W('\u4eba','\u4eba','r\u00e9n'), '\u3002', W('\u4f60','\u4f60','n\u01d0'), W('\u559c','\u559c','x\u01d0'), W('\u4e0d','\u4e0d','b\u00f9'), W('\u559c\u6b61','\u559c\u6b22','x\u01d0hu\u0101n'), W('\u559d','\u559d','h\u0113'), W('\u5496\u5561','\u5496\u5561','k\u0101f\u0113i'), '\uff1f'],\n      en: 'Yes, I am American. Do you like coffee?' },\n    { speakerT: '\u6708\u7f8e', speakerS: '\u6708\u7f8e',\n      tokens: [W('\u6211','\u6211','W\u01d2'), W('\u4e0d','\u4e0d','b\u00f9'), W('\u559c\u6b61','\u559c\u6b22','x\u01d0hu\u0101n'), W('\u559d','\u559d','h\u0113'), W('\u5496\u5561','\u5496\u5561','k\u0101f\u0113i'), '\uff0c', W('\u6211','\u6211','w\u01d2'), W('\u559c\u6b61','\u559c\u6b22','x\u01d0hu\u0101n'), W('\u559d','\u559d','h\u0113'), W('\u8336','\u8336','ch\u00e1'), '\u3002', W('\u9019','\u8fd9','Zh\u00e8'), W('\u662f','\u662f','sh\u00ec'), W('\u70cf\u9f8d\u8336','\u4e4c\u9f99\u8336','W\u016bl\u00f3ngch\u00e1'), '\uff0c', W('\u5f88','\u5f88','h\u011bn'), W('\u597d\u559d','\u597d\u559d','h\u01ceoh\u0113'), '\uff0c', W('\u4f60','\u4f60','n\u01d0'), W('\u8981','\u8981','y\u00e0o'), W('\u4e0d','\u4e0d','b\u00fa'), W('\u8981','\u8981','y\u00e0o'), W('\u559d','\u559d','h\u0113'), '\uff1f'],\n      en: \"I don't like coffee, I like tea. This is Oolong tea, it's delicious \u2014 would you like some?\" },\n    { speakerT: '\u958b\u6587', speakerS: '\u5f00\u6587',\n      tokens: [W('\u597d','\u597d','H\u01ceo'), '\uff0c', W('\u8b1d\u8b1d','\u8c22\u8c22','xi\u00e8xie'), W('\u4f60','\u4f60','n\u01d0'), '\uff01'],\n      en: 'Great, thank you!' }\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 rubyWord(w) {\n    return '<span class=\"db-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=\"db-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  \/\/ People section\n  var peopleEl = root.querySelector('#db-people-list');\n  if (peopleEl) {\n    var pHtml = '';\n    PEOPLE.forEach(function (p) {\n      pHtml += '<div class=\"db-people-card\">' +\n        '<span class=\"db-hanzi\">' + headwordRuby(p.t, p.s, p.p, p.p) + '<\/span>' +\n        '<span class=\"db-meaning\">' + p.meaning + '<\/span>' +\n      '<\/div>';\n    });\n    peopleEl.innerHTML = pHtml;\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=\"db-word-card\">' +\n        '<div class=\"db-word-top\">' +\n          '<span class=\"db-num\">' + num + '<\/span>' +\n          '<span class=\"db-hanzi\">' + headwordRuby(w.t, w.s, w.pt || w.p, w.ps || w.p) + '<\/span>' +\n          '<span class=\"db-pos\">' + w.pos + '<\/span>' +\n          '<span class=\"db-meaning\">' + w.meaning + '<\/span>' +\n          '<button class=\"db-speaker\" data-trad=\"' + w.t + '\" data-simp=\"' + w.s + '\" aria-label=\"Play pronunciation\">' + SPEAKER_SVG + '<\/button>' +\n        '<\/div>' +\n        '<div class=\"db-example\">' +\n          renderTokens(w.ex) +\n          '<span class=\"db-en\">' + w.exEn + '<\/span>' +\n        '<\/div>' +\n      '<\/div>';\n    });\n    container.innerHTML = html;\n  });\n\n  var dialogueEl = root.querySelector('#db-dialogue');\n  if (dialogueEl) {\n    var dHtml = '';\n    DIALOGUE.forEach(function (line) {\n      dHtml += '<div class=\"db-line\">' +\n        '<span class=\"db-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=\"db-line-body\">' +\n          renderTokens(line.tokens) +\n          '<span class=\"db-line-en\">' + line.en + '<\/span>' +\n        '<\/span>' +\n      '<\/div>';\n    });\n    dialogueEl.innerHTML = dHtml;\n  }\n\n  \/\/ ---- Flashcards ----\n  var fcCard = root.querySelector('#db-flashcard');\n  var fcFront = root.querySelector('#db-fc-front');\n  var fcBack = root.querySelector('#db-fc-back');\n  var fcProgress = root.querySelector('#db-fc-progress');\n  var fcPrevBtn = root.querySelector('#db-fc-prev');\n  var fcNextBtn = root.querySelector('#db-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=\"db-hanzi\">' + headwordRuby(w.t, w.s, w.pt || w.p, w.ps || w.p) + '<\/span>';\n    fcBack.innerHTML = '<span class=\"db-meaning\">' + w.meaning + '<\/span><span class=\"db-pos\">' + w.pos + '<\/span>';\n    if (fcProgress) fcProgress.textContent = (fcIndex + 1) + ' \/ ' + ALL_WORDS.length;\n    if (fcCard) fcCard.classList.remove('db-flipped');\n    fcFlipped = false;\n  }\n\n  if (fcCard) {\n    fcCard.addEventListener('click', function () {\n      fcFlipped = !fcFlipped;\n      fcCard.classList.toggle('db-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('#db-game-col-zh');\n  var gameColEn = root.querySelector('#db-game-col-en');\n  var gameStatus = root.querySelector('#db-game-status');\n  var gameWin = root.querySelector('#db-game-win');\n  var gameNewBtn = root.querySelector('#db-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('db-show');\n\n    var zhOrder = shuffle(gameRound);\n    var enOrder = shuffle(gameRound);\n\n    gameColZh.innerHTML = zhOrder.map(function (w, i) {\n      return '<button class=\"db-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=\"db-tile-py\">' + w.p + '<\/span>' +\n      '<\/button>';\n    }).join('');\n\n    gameColEn.innerHTML = enOrder.map(function (w) {\n      return '<button class=\"db-tile\" data-id=\"' + w.t + '\" data-side=\"en\">' + 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('db-matched')) return;\n    var side = tile.getAttribute('data-side');\n\n    if (side === 'zh') {\n      if (gameSelectedZh) gameSelectedZh.classList.remove('db-selected');\n      gameSelectedZh = tile;\n      tile.classList.add('db-selected');\n    } else {\n      if (gameSelectedEn) gameSelectedEn.classList.remove('db-selected');\n      gameSelectedEn = tile;\n      tile.classList.add('db-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('db-selected');\n          gameSelectedEn.classList.remove('db-selected');\n          gameSelectedZh.classList.add('db-matched');\n          gameSelectedEn.classList.add('db-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('db-show');\n            }\n          }\n        } else {\n          gameBusy = true;\n          var z = gameSelectedZh, en = gameSelectedEn;\n          z.classList.add('db-wrong');\n          en.classList.add('db-wrong');\n          setTimeout(function () {\n            z.classList.remove('db-selected', 'db-wrong');\n            en.classList.remove('db-selected', 'db-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('.db-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 ----\n  var quizRoot = root.querySelector('#db-quiz');\n  var QUIZ_DATA = [\n    { type: 'mc', prompt: '<span class=\"lang-zh-TW\">\u5148\u751f<\/span><span class=\"lang-zh-CN\">\u5148\u751f<\/span> means...', options: ['Mr.', 'Miss, Ms.', 'you', 'we, us'], answer: 0 },\n    { type: 'type', prompt: 'Type the pinyin for <span class=\"lang-zh-TW\">\u5c0f\u59d0<\/span><span class=\"lang-zh-CN\">\u5c0f\u59d0<\/span>.', accept: ['xiaojie'] },\n    { type: 'mc', prompt: '<span class=\"lang-zh-TW\">\u63a5<\/span><span class=\"lang-zh-CN\">\u63a5<\/span> means...', options: ['to pick sb up', 'to come', 'to be surnamed', 'to be called'], answer: 0 },\n    { type: 'type', prompt: 'Type the English word for <span class=\"lang-zh-TW\">\u6b61\u8fce<\/span><span class=\"lang-zh-CN\">\u6b22\u8fce<\/span>.', accept: ['welcome'] },\n    { type: 'mc', prompt: 'Which word means \"excuse me \/ may I ask\"?', options: ['<span class=\"lang-zh-TW\">\u8acb\u554f<\/span><span class=\"lang-zh-CN\">\u8bf7\u95ee<\/span>', '<span class=\"lang-zh-TW\">\u662f\u7684<\/span><span class=\"lang-zh-CN\">\u662f\u7684<\/span>', '<span class=\"lang-zh-TW\">\u4e0d\u5ba2\u6c23<\/span><span class=\"lang-zh-CN\">\u4e0d\u5ba2\u6c14<\/span>', '<span class=\"lang-zh-TW\">\u8b1d\u8b1d<\/span><span class=\"lang-zh-CN\">\u8c22\u8c22<\/span>'], answer: 0 },\n    { type: 'mc', prompt: '<span class=\"lang-zh-TW\">\u4e0d\u5ba2\u6c23<\/span><span class=\"lang-zh-CN\">\u4e0d\u5ba2\u6c14<\/span> means...', options: [\"You're welcome.\", 'Thank you.', 'Hello.', \"I'm sorry.\"], answer: 0 },\n    { type: 'type', prompt: 'Type the pinyin for <span class=\"lang-zh-TW\">\u8acb<\/span><span class=\"lang-zh-CN\">\u8bf7<\/span>.', accept: ['qing'] },\n    { type: 'mc', prompt: '<span class=\"lang-zh-TW\">\u597d\u559d<\/span><span class=\"lang-zh-CN\">\u597d\u559d<\/span> means...', options: ['to taste good (of a drink)', 'to be delicious (of food)', 'to like', 'very'], answer: 0 },\n    { type: 'type', prompt: 'Type the English word for <span class=\"lang-zh-TW\">\u559c\u6b61<\/span><span class=\"lang-zh-CN\">\u559c\u6b22<\/span>.', accept: ['like', 'to like'] },\n    { type: 'mc', prompt: 'Which word means \"which\"?', options: ['<span class=\"lang-zh-TW\">\u54ea<\/span><span class=\"lang-zh-CN\">\u54ea<\/span>', '<span class=\"lang-zh-TW\">\u9019<\/span><span class=\"lang-zh-CN\">\u8fd9<\/span>', '<span class=\"lang-zh-TW\">\u4ec0\u9ebc<\/span><span class=\"lang-zh-CN\">\u4ec0\u4e48<\/span>', '<span class=\"lang-zh-TW\">\u8ab0<\/span><span class=\"lang-zh-CN\">\u8c01<\/span>'], answer: 0 },\n    { type: 'type', prompt: 'Type the pinyin for <span class=\"lang-zh-TW\">\u8981<\/span><span class=\"lang-zh-CN\">\u8981<\/span>.', accept: ['yao'] },\n    { type: 'mc', prompt: '<span class=\"lang-zh-TW\">\u5c0d\u4e0d\u8d77<\/span><span class=\"lang-zh-CN\">\u5bf9\u4e0d\u8d77<\/span> means...', options: [\"I'm sorry.\", \"You're welcome.\", 'Excuse me, may I ask...', 'Thank you.'], answer: 0 },\n    { type: 'type', prompt: 'Type the English word for <span class=\"lang-zh-TW\">\u70cf\u9f8d\u8336<\/span><span class=\"lang-zh-CN\">\u4e4c\u9f99\u8336<\/span>.', accept: ['oolong tea', 'oolong'] },\n    { type: 'mc', prompt: 'Which word means \"coffee\"?', options: ['<span class=\"lang-zh-TW\">\u5496\u5561<\/span><span class=\"lang-zh-CN\">\u5496\u5561<\/span>', '<span class=\"lang-zh-TW\">\u8336<\/span><span class=\"lang-zh-CN\">\u8336<\/span>', '<span class=\"lang-zh-TW\">\u70cf\u9f8d\u8336<\/span><span class=\"lang-zh-CN\">\u4e4c\u9f99\u8336<\/span>', '<span class=\"lang-zh-TW\">\u597d\u559d<\/span><span class=\"lang-zh-CN\">\u597d\u559d<\/span>'], answer: 0 },\n    { type: 'type', prompt: 'Type the pinyin for <span class=\"lang-zh-TW\">\u59d3<\/span><span class=\"lang-zh-CN\">\u59d3<\/span>.', accept: ['xing'] }\n  ];\n\n  if (quizRoot) {\n    var quizCurrent = 0;\n    var quizScore = 0;\n    var quizAnswered = false;\n\n    function quizStripTones(s) {\n      return s.normalize('NFD').replace(\/[\\u0300-\\u036f]\/g, '').toLowerCase().replace(\/[^a-z0-9]\/g, '');\n    }\n\n    function renderQuiz() {\n      if (quizCurrent >= QUIZ_DATA.length) { renderQuizScore(); return; }\n      var q = QUIZ_DATA[quizCurrent];\n      quizAnswered = false;\n      var html = '<p class=\"db-quiz-progress\">Question ' + (quizCurrent + 1) + ' of ' + QUIZ_DATA.length + '<\/p>';\n      html += '<p class=\"db-quiz-prompt\">' + q.prompt + '<\/p>';\n      if (q.type === 'mc') {\n        html += '<div class=\"db-quiz-options\">';\n        for (var i = 0; i < q.options.length; i++) {\n          html += '<button type=\"button\" class=\"db-quiz-opt\" data-i=\"' + i + '\">' + q.options[i] + '<\/button>';\n        }\n        html += '<\/div>';\n      } else {\n        html += '<div class=\"db-quiz-input-row\">';\n        html += '<input type=\"text\" class=\"db-quiz-input\" placeholder=\"Type your answer\">';\n        html += '<button type=\"button\" class=\"db-quiz-submit\">Submit<\/button>';\n        html += '<\/div>';\n      }\n      html += '<p class=\"db-quiz-feedback\"><\/p>';\n      html += '<button type=\"button\" class=\"db-quiz-next\" style=\"display:none;\">Next<\/button>';\n      quizRoot.innerHTML = html;\n\n      if (q.type === 'mc') {\n        var quizOpts = quizRoot.querySelectorAll('.db-quiz-opt');\n        quizOpts.forEach(function (btn) {\n          btn.addEventListener('click', function () {\n            if (quizAnswered) return;\n            quizAnswered = true;\n            var i = parseInt(this.getAttribute('data-i'), 10);\n            var correct = i === q.answer;\n            if (correct) quizScore++;\n            quizOpts.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            showQuizFeedback(correct);\n          });\n        });\n      } else {\n        var quizInput = quizRoot.querySelector('.db-quiz-input');\n        var quizSubmitBtn = quizRoot.querySelector('.db-quiz-submit');\n        var submitQuizAnswer = function () {\n          if (quizAnswered) return;\n          quizAnswered = true;\n          var val = quizStripTones(quizInput.value || '');\n          var correct = q.accept.indexOf(val) !== -1;\n          if (correct) quizScore++;\n          quizInput.setAttribute('disabled', 'disabled');\n          quizSubmitBtn.setAttribute('disabled', 'disabled');\n          showQuizFeedback(correct, q.accept[0]);\n        };\n        quizSubmitBtn.addEventListener('click', submitQuizAnswer);\n        quizInput.addEventListener('keydown', function (e) {\n          if (e.key === 'Enter') submitQuizAnswer();\n        });\n      }\n\n      function showQuizFeedback(correct, correctAnswer) {\n        var fb = quizRoot.querySelector('.db-quiz-feedback');\n        if (correct) {\n          fb.textContent = 'Correct!';\n        } else if (correctAnswer) {\n          fb.textContent = 'Not quite \u2014 the answer is \"' + correctAnswer + '\".';\n        } else {\n          fb.textContent = 'Not quite \u2014 check the highlighted answer above.';\n        }\n        fb.className = 'db-quiz-feedback ' + (correct ? 'correct' : 'incorrect');\n        var quizNextBtn = quizRoot.querySelector('.db-quiz-next');\n        quizNextBtn.style.display = 'inline-block';\n        quizNextBtn.addEventListener('click', function () {\n          quizCurrent++;\n          renderQuiz();\n        });\n      }\n    }\n\n    function renderQuizScore() {\n      quizRoot.innerHTML =\n        '<div class=\"db-quiz-score\">' +\n        '<span class=\"db-quiz-score-num\">' + quizScore + ' \/ ' + QUIZ_DATA.length + '<\/span>' +\n        '<p>Nice work! Want to try again?<\/p>' +\n        '<button type=\"button\" class=\"db-quiz-retake\">Retake Quiz<\/button>' +\n        '<\/div>';\n      quizRoot.querySelector('.db-quiz-retake').addEventListener('click', function () {\n        quizCurrent = 0;\n        quizScore = 0;\n        renderQuiz();\n      });\n    }\n\n    renderQuiz();\n  }\n\n  \/\/ Speaker buttons (event delegation, Web Speech API)\n  root.addEventListener('click', function (e) {\n    var btn = e.target.closest('.db-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<\/script>\n<\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignright size-medium is-resized\"><a href=\"https:\/\/ko-fi.com\/tiffanystalk\" target=\"_blank\" rel=\"noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"58\" src=\"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2022\/06\/fcacd-buymeacoffee_red402x-300x58.png\" alt=\"\" class=\"wp-image-570\" style=\"width:150px;height:29px\" srcset=\"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2022\/06\/fcacd-buymeacoffee_red402x-300x58.png 300w, https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2022\/06\/fcacd-buymeacoffee_red402x-600x115.png 600w, https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2022\/06\/fcacd-buymeacoffee_red402x-1024x197.png 1024w, https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2022\/06\/fcacd-buymeacoffee_red402x-768x148.png 768w, https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2022\/06\/fcacd-buymeacoffee_red402x-1536x296.png 1536w, https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2022\/06\/fcacd-buymeacoffee_red402x-2048x394.png 2048w, https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2022\/06\/fcacd-buymeacoffee_red402x-850x164.png 850w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption class=\"wp-element-caption\">Do you like it? \ud83d\ude42<\/figcaption><\/figure>\n<\/div>\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-medium is-resized\"><a href=\"https:\/\/tiffanysmandarin.com\/index.php\/contemporary-chinese-book-1\/\"><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=\"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":10970,"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":false,"_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":[1099],"tags":[],"class_list":["post-12874","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-1099"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>B1 L1 Vocabulary and Practice - OneDotDot Chinese<\/title>\n<meta name=\"description\" content=\"Strengthen your vocabulary \u7576\u4ee3\u4e2d\u6587\u7b2c\u4e00\u518a\u7b2c\u4e00\u8ab2 \u55ae\u8a5e\u7df4\u7fd2 \u8907\u7fd2 \u8003\u8a66 Contemporary Chinese Vocabulary Practice Book 1 \u2013 Lesson 1\" \/>\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\/2025\/07\/15\/contemporary-chinese-vocabulary-practice-b1l1\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"B1 L1 Vocabulary and Practice - OneDotDot Chinese\" \/>\n<meta property=\"og:description\" content=\"Strengthen your vocabulary \u7576\u4ee3\u4e2d\u6587\u7b2c\u4e00\u518a\u7b2c\u4e00\u8ab2 \u55ae\u8a5e\u7df4\u7fd2 \u8907\u7fd2 \u8003\u8a66 Contemporary Chinese Vocabulary Practice Book 1 \u2013 Lesson 1\" \/>\n<meta property=\"og:url\" content=\"https:\/\/tiffanysmandarin.com\/index.php\/2025\/07\/15\/contemporary-chinese-vocabulary-practice-b1l1\/\" \/>\n<meta property=\"og:site_name\" content=\"OneDotDot Chinese\" \/>\n<meta property=\"article:published_time\" content=\"2025-07-15T15:43:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-07T21:34:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2024\/09\/\u7576\u4ee3\u4e2d\u6587.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\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\\\/2025\\\/07\\\/15\\\/contemporary-chinese-vocabulary-practice-b1l1\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2025\\\/07\\\/15\\\/contemporary-chinese-vocabulary-practice-b1l1\\\/\"},\"author\":{\"name\":\"tiffany\",\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/#\\\/schema\\\/person\\\/3556e1160fac98b190d03b8aa8604d99\"},\"headline\":\"B1 L1 Vocabulary and Practice\",\"datePublished\":\"2025-07-15T15:43:42+00:00\",\"dateModified\":\"2026-09-07T21:34:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2025\\\/07\\\/15\\\/contemporary-chinese-vocabulary-practice-b1l1\\\/\"},\"wordCount\":9,\"publisher\":{\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/#\\\/schema\\\/person\\\/3556e1160fac98b190d03b8aa8604d99\"},\"image\":{\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2025\\\/07\\\/15\\\/contemporary-chinese-vocabulary-practice-b1l1\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/tiffanysmandarin.com\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/\u7576\u4ee3\u4e2d\u6587.jpg\",\"articleSection\":[\"\u7576\u4ee3\u4e2d\u6587 1\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2025\\\/07\\\/15\\\/contemporary-chinese-vocabulary-practice-b1l1\\\/\",\"url\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2025\\\/07\\\/15\\\/contemporary-chinese-vocabulary-practice-b1l1\\\/\",\"name\":\"B1 L1 Vocabulary and Practice - OneDotDot Chinese\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2025\\\/07\\\/15\\\/contemporary-chinese-vocabulary-practice-b1l1\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2025\\\/07\\\/15\\\/contemporary-chinese-vocabulary-practice-b1l1\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/tiffanysmandarin.com\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/\u7576\u4ee3\u4e2d\u6587.jpg\",\"datePublished\":\"2025-07-15T15:43:42+00:00\",\"dateModified\":\"2026-09-07T21:34:16+00:00\",\"description\":\"Strengthen your vocabulary \u7576\u4ee3\u4e2d\u6587\u7b2c\u4e00\u518a\u7b2c\u4e00\u8ab2 \u55ae\u8a5e\u7df4\u7fd2 \u8907\u7fd2 \u8003\u8a66 Contemporary Chinese Vocabulary Practice Book 1 \u2013 Lesson 1\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2025\\\/07\\\/15\\\/contemporary-chinese-vocabulary-practice-b1l1\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2025\\\/07\\\/15\\\/contemporary-chinese-vocabulary-practice-b1l1\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2025\\\/07\\\/15\\\/contemporary-chinese-vocabulary-practice-b1l1\\\/#primaryimage\",\"url\":\"https:\\\/\\\/tiffanysmandarin.com\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/\u7576\u4ee3\u4e2d\u6587.jpg\",\"contentUrl\":\"https:\\\/\\\/tiffanysmandarin.com\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/\u7576\u4ee3\u4e2d\u6587.jpg\",\"width\":800,\"height\":300,\"caption\":\"\u7576\u4ee3\u4e2d\u65871\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2025\\\/07\\\/15\\\/contemporary-chinese-vocabulary-practice-b1l1\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9801\",\"item\":\"https:\\\/\\\/tiffanysmandarin.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"B1 L1 Vocabulary and Practice\"}]},{\"@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":"B1 L1 Vocabulary and Practice - OneDotDot Chinese","description":"Strengthen your vocabulary \u7576\u4ee3\u4e2d\u6587\u7b2c\u4e00\u518a\u7b2c\u4e00\u8ab2 \u55ae\u8a5e\u7df4\u7fd2 \u8907\u7fd2 \u8003\u8a66 Contemporary Chinese Vocabulary Practice Book 1 \u2013 Lesson 1","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\/2025\/07\/15\/contemporary-chinese-vocabulary-practice-b1l1\/","og_locale":"en_US","og_type":"article","og_title":"B1 L1 Vocabulary and Practice - OneDotDot Chinese","og_description":"Strengthen your vocabulary \u7576\u4ee3\u4e2d\u6587\u7b2c\u4e00\u518a\u7b2c\u4e00\u8ab2 \u55ae\u8a5e\u7df4\u7fd2 \u8907\u7fd2 \u8003\u8a66 Contemporary Chinese Vocabulary Practice Book 1 \u2013 Lesson 1","og_url":"https:\/\/tiffanysmandarin.com\/index.php\/2025\/07\/15\/contemporary-chinese-vocabulary-practice-b1l1\/","og_site_name":"OneDotDot Chinese","article_published_time":"2025-07-15T15:43:42+00:00","article_modified_time":"2026-09-07T21:34:16+00:00","og_image":[{"width":800,"height":300,"url":"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2024\/09\/\u7576\u4ee3\u4e2d\u6587.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\/2025\/07\/15\/contemporary-chinese-vocabulary-practice-b1l1\/#article","isPartOf":{"@id":"https:\/\/tiffanysmandarin.com\/index.php\/2025\/07\/15\/contemporary-chinese-vocabulary-practice-b1l1\/"},"author":{"name":"tiffany","@id":"https:\/\/tiffanysmandarin.com\/#\/schema\/person\/3556e1160fac98b190d03b8aa8604d99"},"headline":"B1 L1 Vocabulary and Practice","datePublished":"2025-07-15T15:43:42+00:00","dateModified":"2026-09-07T21:34:16+00:00","mainEntityOfPage":{"@id":"https:\/\/tiffanysmandarin.com\/index.php\/2025\/07\/15\/contemporary-chinese-vocabulary-practice-b1l1\/"},"wordCount":9,"publisher":{"@id":"https:\/\/tiffanysmandarin.com\/#\/schema\/person\/3556e1160fac98b190d03b8aa8604d99"},"image":{"@id":"https:\/\/tiffanysmandarin.com\/index.php\/2025\/07\/15\/contemporary-chinese-vocabulary-practice-b1l1\/#primaryimage"},"thumbnailUrl":"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2024\/09\/\u7576\u4ee3\u4e2d\u6587.jpg","articleSection":["\u7576\u4ee3\u4e2d\u6587 1"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/tiffanysmandarin.com\/index.php\/2025\/07\/15\/contemporary-chinese-vocabulary-practice-b1l1\/","url":"https:\/\/tiffanysmandarin.com\/index.php\/2025\/07\/15\/contemporary-chinese-vocabulary-practice-b1l1\/","name":"B1 L1 Vocabulary and Practice - OneDotDot Chinese","isPartOf":{"@id":"https:\/\/tiffanysmandarin.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/tiffanysmandarin.com\/index.php\/2025\/07\/15\/contemporary-chinese-vocabulary-practice-b1l1\/#primaryimage"},"image":{"@id":"https:\/\/tiffanysmandarin.com\/index.php\/2025\/07\/15\/contemporary-chinese-vocabulary-practice-b1l1\/#primaryimage"},"thumbnailUrl":"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2024\/09\/\u7576\u4ee3\u4e2d\u6587.jpg","datePublished":"2025-07-15T15:43:42+00:00","dateModified":"2026-09-07T21:34:16+00:00","description":"Strengthen your vocabulary \u7576\u4ee3\u4e2d\u6587\u7b2c\u4e00\u518a\u7b2c\u4e00\u8ab2 \u55ae\u8a5e\u7df4\u7fd2 \u8907\u7fd2 \u8003\u8a66 Contemporary Chinese Vocabulary Practice Book 1 \u2013 Lesson 1","breadcrumb":{"@id":"https:\/\/tiffanysmandarin.com\/index.php\/2025\/07\/15\/contemporary-chinese-vocabulary-practice-b1l1\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/tiffanysmandarin.com\/index.php\/2025\/07\/15\/contemporary-chinese-vocabulary-practice-b1l1\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/tiffanysmandarin.com\/index.php\/2025\/07\/15\/contemporary-chinese-vocabulary-practice-b1l1\/#primaryimage","url":"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2024\/09\/\u7576\u4ee3\u4e2d\u6587.jpg","contentUrl":"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2024\/09\/\u7576\u4ee3\u4e2d\u6587.jpg","width":800,"height":300,"caption":"\u7576\u4ee3\u4e2d\u65871"},{"@type":"BreadcrumbList","@id":"https:\/\/tiffanysmandarin.com\/index.php\/2025\/07\/15\/contemporary-chinese-vocabulary-practice-b1l1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9801","item":"https:\/\/tiffanysmandarin.com\/"},{"@type":"ListItem","position":2,"name":"B1 L1 Vocabulary and Practice"}]},{"@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\/2024\/09\/\u7576\u4ee3\u4e2d\u6587.jpg","_links":{"self":[{"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/posts\/12874","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=12874"}],"version-history":[{"count":9,"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/posts\/12874\/revisions"}],"predecessor-version":[{"id":16737,"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/posts\/12874\/revisions\/16737"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/media\/10970"}],"wp:attachment":[{"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/media?parent=12874"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/categories?post=12874"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/tags?post=12874"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}