/* Grammar Journey. Layout and components follow the Word Game: a gray page, and every piece of
   readable content inside a white, bordered card. Nothing is set directly on the gray.

   Spacing uses one 4-point scale: --s1 4, --s2 8, --s3 12, --s4 16, --s5 24.
     between cards ............... --s3
     card padding ................ --pad (16, or 24 on wide screens)
     label to the content it names  --s2
     between related controls .... --s2
     between a heading and what follows --s2; between sections inside a card --s4 */
body.grammar-mode #search-container { display: none; }
body.grammar-mode #results-container { box-sizing: border-box; display: block; width: min(720px, 100%); margin: 0 auto; padding: 16px 12px 120px; }
/* While a lesson step is on screen the bottom tab bar steps aside (as in a Word Game round) so the
   action bar can sit at the bottom edge. */
@media (max-width: 1024px) {
  body.grammar-mode.grammar-lesson #mode-nav { display: none; }
  body.grammar-mode.grammar-lesson { padding-bottom: 0; }
  body.grammar-mode.grammar-lesson #results-container { padding-bottom: 24px; }
}

.grammar-app {
  --s1: 4px; --s2: 8px; --s3: 12px; --s4: 16px; --s5: 24px; --pad: 16px;
  --g-ink: var(--color-ink, #0d3a69);
  --g-text: var(--color-text);
  --g-muted: var(--color-text-muted);
  --g-line: var(--color-border);
  --g-line-soft: var(--color-border);
  --g-accent: var(--color-ink);
  --g-wash: var(--color-wash-blue, #eaf1fb);
  --g-radius: var(--radius-card);
  display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--s3); color: var(--g-text); text-align: left;
  font-family: 'Source Sans 3', 'PingFang TC', 'Microsoft JhengHei', 'Noto Sans TC', 'Noto Sans CJK TC', 'Noto Sans', sans-serif;
  font-size: 17px; line-height: 1.55; overflow-wrap: anywhere;
}
@media (min-width: 701px) { .grammar-app { --pad: 24px; } }
.grammar-app *, .grammar-app *::before, .grammar-app *::after { box-sizing: border-box; }
/* The shell styles a bare <label> as an absolutely positioned input overlay; undo that inside Grammar. */
.grammar-app label { position: static; top: auto; left: auto; transform: none; pointer-events: auto; color: inherit; }
.grammar-app [hidden] { display: none !important; }
.grammar-app h1, .grammar-app h2, .grammar-app h3, .grammar-app p, .grammar-app ul, .grammar-app ol, .grammar-app dl, .grammar-app dd { margin: 0; text-align: left; }
.grammar-app h1, .grammar-app h2, .grammar-app h3 { font-family: inherit; font-weight: 600; color: var(--g-ink); line-height: 1.25; }
.grammar-app h1 { font-size: 26px; }
.grammar-app h2 { font-size: 22px; }
.grammar-app h3 { font-size: 19px; }
.grammar-app h1 em { color: var(--g-accent); font-weight: 400; }
.grammar-app p + p { margin-top: var(--s2); }
.grammar-app h2:focus, .grammar-app h1:focus { outline: none; }
.grammar-caption { font-size: 15px; color: var(--g-muted); }
.grammar-sr { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }

/* Cards */
.grammar-home-card, .grammar-course-card, .grammar-unit, .grammar-notebook, .grammar-samples, .grammar-glossary,
.grammar-panel, .grammar-complete, .grammar-progress-card, .grammar-goals, .grammar-activity, .grammar-display, .grammar-alert, .grammar-audio-note, .grammar-loading {
  background: #fff; border: 1px solid var(--g-line); border-radius: var(--g-radius); padding: var(--pad);
}
.grammar-audio-note { padding: var(--s3) var(--s4); font-size: 15px; color: var(--g-muted); }
.grammar-audio-note:empty, .grammar-alert-slot:empty { display: none; }
.grammar-alert { border-left: 6px solid var(--color-danger); border-color: var(--color-danger-border) var(--color-danger-border) var(--color-danger-border) var(--color-danger); color: var(--color-danger-text); }

/* Tags */
.grammar-tags { display: flex; flex-wrap: wrap; gap: var(--s2); margin-bottom: var(--s3); }
.grammar-tag { display: inline-block; font: 600 13px/1.2 'Source Sans 3', sans-serif; letter-spacing: .04em; text-transform: uppercase; padding: 6px var(--s3); border-radius: 6px; background: var(--color-surface-subtle); color: var(--color-text-strong); }
.grammar-tag.is-topic { background: var(--g-wash); color: var(--g-ink); }

/* Buttons */
.grammar-button { appearance: none; display: inline-flex; align-items: center; justify-content: center; gap: var(--s2); min-height: 44px; padding: var(--s2) var(--s4); border-radius: var(--radius-control); border: 1px solid var(--color-border); background: var(--color-surface-hover); color: var(--color-ink); font: 600 16px/1.25 'Source Sans 3', sans-serif; text-align: center; cursor: pointer; }
.grammar-button:hover { background: var(--color-wash-blue); border-color: var(--color-border); }
.grammar-button.grammar-primary { background: var(--g-ink); border-color: var(--g-ink); color: #fff; text-transform: uppercase; letter-spacing: var(--letter-spacing-caps); font-size: 14px; border-radius: var(--radius-control); }
.grammar-button.grammar-primary:hover { background: var(--color-ink-active, #092c50); }
.grammar-button.grammar-wide { width: 100%; min-height: 56px; }
.grammar-button:disabled, .grammar-button.grammar-primary:disabled { background: #e4e9ee; border-color: #d3dbe2; color: var(--color-text-muted); cursor: not-allowed; }
.grammar-button svg { flex: none; }
.grammar-button[aria-pressed='true'] { background: var(--g-wash); border-color: var(--g-ink); color: var(--g-ink); }
.grammar-app a:focus-visible, .grammar-app button:focus-visible, .grammar-app input:focus-visible, .grammar-app select:focus-visible, .grammar-app summary:focus-visible { outline: 3px solid var(--color-interactive); outline-offset: 2px; }
.grammar-actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s2); margin-top: var(--s4); }

/* Audio buttons sit directly beside the text they play */
.grammar-speak { appearance: none; flex: none; display: inline-grid; place-items: center; width: 44px; height: 44px; border-radius: var(--radius-control); border: 1px solid var(--color-border); background: #fff; color: var(--g-ink); cursor: pointer; padding: 0; }
.grammar-speak:hover { background: var(--g-wash); }
.grammar-speak.is-speaking, .grammar-button.is-speaking { background: var(--g-accent); border-color: var(--g-accent); color: #fff; }

/* Overview: one recommended action, compact review, then the course map.
   Structure and state treatments follow the Word Game's practice dashboard. */
.grammar-heading h1, .grammar-next h2, .grammar-course-heading h2, .grammar-unit-heading h3 { font-family: 'Source Serif 4', Georgia, 'Times New Roman', serif; }
.grammar-heading h1 { font-size: clamp(28px, 5vw, 34px); margin: var(--s2) 0; }
.grammar-heading > p { color: var(--g-muted); max-width: 60ch; }
.grammar-eyebrow { color: var(--color-text-slate); font-size: 13px; font-weight: 600; letter-spacing: var(--letter-spacing-caps-heading); text-transform: uppercase; }
.grammar-home-meta { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: var(--s1) var(--s3); }
.grammar-home-meta > span { font-size: 13px; color: var(--g-muted); }
.grammar-home-progress { margin-top: var(--s4); }
.grammar-progress-heading { display: flex; justify-content: space-between; align-items: baseline; gap: var(--s3); font-size: 14px; color: var(--color-text-slate); }
.grammar-progress-heading strong { color: var(--g-ink); font-weight: 600; }
.grammar-course-progress { height: 6px; background: var(--color-surface-strong); border-radius: 99px; overflow: hidden; margin: var(--s2) 0; }
.grammar-course-progress > span { display: block; height: 100%; background: var(--color-success); }
.grammar-home-progress .grammar-caption { font-size: 13px; }
.grammar-next { padding: 18px; margin-top: var(--s4); background: var(--color-wash-blue-pale); border: 1px solid var(--color-wash-blue-border); border-radius: var(--radius-card); }
.grammar-next h2 { font-size: 24px; margin: var(--s1) 0 var(--s2); }
.grammar-next > p:not(.grammar-eyebrow) { color: var(--color-text-slate); }
.grammar-next .grammar-caption { display: block; font-size: 14px; margin-top: var(--s2); }
.grammar-next .grammar-button { margin: var(--s4) 0 0; }
.grammar-review-card { display: flex; align-items: center; justify-content: space-between; gap: var(--s4); border-top: 1px solid var(--g-line); padding-top: var(--s4); margin-top: var(--s4); }
.grammar-review-copy { min-width: 0; }
.grammar-review-copy h2 { font-size: 18px; margin: 0 0 var(--s1); }
.grammar-review-copy p { color: var(--g-muted); font-size: 14px; }
.grammar-review-card .grammar-button { flex: none; font-size: 14px; background: var(--color-surface); }
.grammar-course-heading { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: baseline; gap: var(--s2); }
.grammar-course-heading h2 { font-size: 22px; }
.grammar-course-heading > span { font-size: 14px; color: var(--g-muted); }
.grammar-levels { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 6px; margin: var(--s4) 0 var(--s3); }
.grammar-levels .grammar-button { min-width: 0; min-height: 48px; padding: var(--s2) 4px; background: var(--color-surface); border-color: var(--color-border); }
.grammar-levels .grammar-cefr { gap: 4px; }
.grammar-levels .fa-signal { width: 14px; height: 14px; }
.grammar-levels .cefr-value { min-width: 16px; padding: 3px 5px; }
.grammar-levels .grammar-button:hover { background: var(--color-wash-blue); border-color: var(--color-interactive-muted); }
.grammar-levels .grammar-button[aria-pressed='true'] { background: var(--color-wash-blue-active); color: var(--g-ink); border-color: var(--color-wash-blue-active-border); box-shadow: inset 0 0 0 1px var(--color-wash-blue-active-border); }
.grammar-course-card > p { font-size: 15px; color: var(--g-muted); }
.grammar-course-card > .grammar-caption { margin-top: var(--s2); font-size: 13px; }
.grammar-units { display: grid; gap: var(--s3); }
.grammar-planned-units { background: #fff; border: 1px solid var(--g-line); border-radius: var(--g-radius); padding: var(--s4); }
.grammar-planned-units summary { min-height: 44px; cursor: pointer; font-weight: 600; color: var(--g-ink); }
.grammar-planned-units .grammar-unit { margin-top: var(--s3); }
.grammar-unit { padding: var(--s2) var(--s2) var(--s1); }
.grammar-unit-heading { display: flex; align-items: center; justify-content: space-between; gap: var(--s3); padding: var(--s3) var(--s3) var(--s4); }
.grammar-unit-heading h3 { margin-top: var(--s1); }
.grammar-unit-heading .grammar-unit-count { flex: none; font-size: 13px; color: var(--g-muted); white-space: nowrap; }
.grammar-unit ol { list-style: none; padding: 0; }
.grammar-lesson-row { display: grid; grid-template-columns: 44px minmax(0, 1fr); align-items: center; gap: var(--s4); width: 100%; min-height: 76px; padding: var(--s3); text-align: left; background: #fff; border: 0; border-top: 1px solid var(--g-line-soft); border-radius: 0; color: var(--g-text); font: inherit; cursor: pointer; }
.grammar-lesson-row.has-status { grid-template-columns: 44px minmax(0, 1fr) auto; }
.grammar-lesson-row:hover { background: var(--color-surface-hover); }
.grammar-lesson-text { display: grid; gap: var(--s1); min-width: 0; }
.grammar-lesson-text strong { font-size: 17px; color: var(--g-ink); }
.grammar-lesson-text small { font-size: 14px; color: var(--g-muted); line-height: 1.4; }
.grammar-number { display: grid; place-items: center; width: 40px; height: 40px; border-radius: var(--radius-control); background: var(--color-surface-subtle); color: var(--color-text-strong); font-weight: 700; font-size: 15px; }
.grammar-status { display: inline-flex; align-items: center; justify-content: flex-end; gap: 6px; font-size: 13px; font-weight: 500; color: var(--g-muted); white-space: nowrap; }
.grammar-status.is-complete { color: var(--color-success-text); font-weight: 600; }
.grammar-status.is-started { color: var(--g-ink); font-weight: 600; }
.grammar-completed-icon { display: inline-flex; flex: none; }
.grammar-fold > summary { display: flex; align-items: center; justify-content: space-between; gap: var(--s3); min-height: 44px; list-style: none; }
.grammar-fold > summary::-webkit-details-marker { display: none; }
.grammar-fold > summary::after { content: '+'; flex: none; font-size: 22px; font-weight: 400; color: var(--g-muted); }
.grammar-fold[open] > summary::after { content: '−'; }
.grammar-notebook summary, .grammar-samples summary, .grammar-glossary summary, .grammar-planned-focus summary, .grammar-why summary { cursor: pointer; font-weight: 600; color: var(--g-ink); min-height: 32px; }
.grammar-notebook summary span { font-weight: 400; color: var(--g-muted); margin-left: var(--s2); }
.grammar-notebook > p, .grammar-samples > p { margin-top: var(--s2); color: var(--g-muted); }
.grammar-notebook label { display: block; margin-top: var(--s4); font-weight: 600; }
.grammar-reference-search, .grammar-support select { display: block; width: 100%; font: inherit; min-height: 44px; padding: var(--s2) var(--s3); margin-top: var(--s2); border: 1px solid var(--color-border-input); border-radius: var(--radius-control); background: #fff; color: var(--g-text); }
.grammar-point-list { display: grid; margin-top: var(--s3); }
.grammar-point { padding: var(--s3) 0; border-top: 1px solid var(--g-line-soft); }
.grammar-point summary { min-height: 44px; cursor: pointer; }
.grammar-point-title { font-weight: 600; color: var(--g-ink); }
.grammar-point summary .grammar-caption { display: block; padding-left: 20px; }
.grammar-point[open] > .grammar-explanation, .grammar-point[open] > .grammar-button { margin-top: var(--s3); }
.grammar-point > .grammar-button { justify-self: start; }
.grammar-reference-filter { font: inherit; width: 100%; min-height: 44px; padding: var(--s2); border: 1px solid var(--color-border-input); border-radius: var(--radius-control); color: var(--g-text); background: #fff; }
.grammar-search-status { min-height: 27px; margin-top: var(--s3) !important; }
.grammar-point strong { display: block; color: var(--g-ink); }
.grammar-point small { color: var(--g-muted); font-size: 14px; }

/* Lesson player: progress card */
.grammar-card-top { display: grid; grid-template-columns: auto minmax(0,1fr) 44px; align-items: center; gap: var(--s2); }
.grammar-card-top h1 { min-width: 0; font-size: 17px; line-height: 1.3; text-align: center; white-space: normal; overflow: visible; text-overflow: clip; }
.grammar-progress-card { min-height: 0; }
.grammar-quiet-btn { min-height: 44px; padding: var(--s2) var(--s3); }
.grammar-icon-btn { appearance: none; display: grid; place-items: center; width: 44px; height: 44px; padding: 0; border-radius: var(--radius-control); border: 1px solid var(--color-border); background: var(--color-surface-hover); color: var(--color-ink); cursor: pointer; }
.grammar-icon-btn:hover, .grammar-icon-btn[aria-expanded='true'] { background: var(--g-wash); }
.grammar-lesson-context { display: flex; align-items: center; gap: var(--s2); margin-top: var(--s2); color: var(--g-muted); font-size: 12px; font-weight: 600; letter-spacing: var(--letter-spacing-caps); }
.grammar-lesson-context > span:last-child { min-width: 0; }
.grammar-progress-label { display: flex; align-items: center; justify-content: space-between; gap: var(--s2); margin-top: var(--s1); color: var(--g-muted); font-size: 13px; line-height: 1.4; }
.grammar-part-title { min-width: 0; }
.grammar-step-nav { display: inline-flex; align-items: center; flex: none; gap: 2px; }
#grammar-step-label { display: inline-block; width: 60px; flex: none; white-space: nowrap; text-align: center; font-variant-numeric: tabular-nums; color: var(--g-ink); font-weight: 600; }
.grammar-step { appearance: none; display: inline-grid; place-items: center; flex: none; width: 44px; height: 44px; padding: 0; border: 0; border-radius: var(--radius-control); background: transparent; color: var(--g-ink); font: 600 22px/1 'Source Sans 3', sans-serif; cursor: pointer; }
.grammar-step:hover:not(:disabled) { background: var(--g-wash); }
.grammar-step:disabled { color: var(--color-text-faint); cursor: default; }
.grammar-step[data-action='forward']:disabled { visibility: hidden; }
@media (max-width: 520px) {
  .grammar-progress-label { display: grid; grid-template-columns: minmax(0,1fr); gap: 0; }
  .grammar-step-nav { justify-self: end; }
}
.grammar-progress { height: 6px; background: var(--color-surface-strong); border-radius: 99px; overflow: hidden; }
.grammar-progress > span { display: block; height: 100%; background: var(--g-accent); transition: width .3s ease; }
.grammar-milestone { min-height: 20px; margin-top: var(--s1); font-size: 13px; font-weight: 600; color: var(--g-accent); }
.grammar-display { padding: var(--s3) var(--s4); }
.grammar-support { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s2) var(--s5); font-size: 16px; }
.grammar-support label { display: flex; align-items: center; gap: var(--s3); min-height: 44px; cursor: pointer; }
.grammar-support select { width: auto; min-width: 190px; margin-top: 0; }
.grammar-support input[type='checkbox'] { accent-color: var(--g-accent); width: 20px; height: 20px; margin: 0; }
.grammar-goals h2 { font-size: 19px; margin-bottom: var(--s2); }
.grammar-goals ul { padding-left: 22px; }
.grammar-goals li + li { margin-top: var(--s1); }
.grammar-goals .grammar-button { margin-top: var(--s4); }

/* Lesson player: the activity card */
.grammar-activity h2 { font-size: clamp(22px, 4.5vw, 28px); margin-bottom: var(--s2); line-height: 1.3; }
.grammar-explanation { color: var(--color-text); }
.grammar-dialogue { display: grid; gap: var(--s1); }
.grammar-speaker { display: block; margin-top: var(--s3); font-size: 14px; font-weight: 700; color: var(--g-accent); text-align: center; }
.grammar-example { border: 1px solid var(--g-line-soft); border-radius: var(--radius-card); padding: var(--s3) var(--s4); margin-top: var(--s2); text-align: center; background: #fff; }
.grammar-example p { text-align: center; margin: var(--s1) 0 0; }
.grammar-example > .grammar-pinyin, .grammar-example > .grammar-zhuyin, .grammar-example > .grammar-kana, .grammar-example > .grammar-romaji { display: block; text-align: center; margin-top: var(--s1); }
.grammar-reading-guide { display: block; }
.grammar-reading-guide .grammar-pinyin, .grammar-reading-guide .grammar-zhuyin, .grammar-reading-guide .grammar-kana, .grammar-reading-guide .grammar-romaji { display: block; font: 14px/1.4 'Source Sans 3', sans-serif; color: var(--g-muted); margin-top: 4px; }
.grammar-choice-mark { flex: none; width: 28px; min-height: 28px; }
.grammar-answer-audio { display: inline-flex; margin-left: auto; width: 44px; min-height: 44px; }
.grammar-audio-placeholder { display: block; width: 44px; height: 44px; visibility: hidden; }
.grammar-line { display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: var(--s1) var(--s3); }
.grammar-chinese { font-size: clamp(26px, 6vw, 34px); line-height: 1.5; color: var(--g-ink); }
.grammar-pinyin, .grammar-zhuyin, .grammar-kana, .grammar-romaji { color: var(--g-muted); font-size: 17px; }
.grammar-zhuyin { letter-spacing: .08em; }
.grammar-translation { color: var(--g-text); font-size: 17px; }

.grammar-listen { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: var(--s3); margin-top: var(--s4); padding: var(--s5) var(--s3); border: 1px solid var(--g-line-soft); border-radius: var(--radius-card); }
.grammar-play { appearance: none; display: inline-flex; align-items: center; gap: var(--s3); min-height: 60px; padding: 0 30px; border-radius: var(--radius-control); border: 0; background: var(--g-ink); color: #fff; font: 600 20px/1 'Source Sans 3', sans-serif; cursor: pointer; }
.grammar-play svg { width: 26px; height: 26px; }
.grammar-play.is-speaking { background: var(--g-accent); }

.grammar-choices { display: grid; gap: var(--s2); margin-top: var(--s4); }
.grammar-choice-row { display: flex; align-items: center; gap: var(--s2); min-height: 64px; padding: var(--s1) var(--s3) var(--s1) var(--s2); background: #fff; border: 1px solid var(--color-border); border-radius: var(--radius-control); }
.grammar-choice-row:hover { background: var(--color-surface-hover); }
.grammar-choice-row.is-selected { border-color: var(--g-ink); background: var(--g-wash); box-shadow: inset 0 0 0 1px var(--g-ink); }
.grammar-choice-row.is-wrong { border-color: var(--color-danger); box-shadow: inset 0 0 0 1px var(--color-danger); background: #fff; }
.grammar-choice-row.is-right { border-color: var(--color-success); box-shadow: inset 0 0 0 2px var(--color-success); background: #fff; }
.grammar-choice { appearance: none; flex: 1; min-width: 0; min-height: 52px; padding: var(--s3) var(--s2); background: transparent; border: 0; border-radius: var(--radius-control); color: var(--g-text); font: 500 18px/1.4 'Source Sans 3', 'PingFang TC', 'Microsoft JhengHei', 'Noto Sans TC', sans-serif; text-align: left; cursor: pointer; }
.grammar-choice:disabled { color: var(--g-text); cursor: default; }
.grammar-choice-row.is-wrong .grammar-choice { text-decoration: line-through; text-decoration-color: var(--color-danger); }
.grammar-choice [lang='zh-TW'] { font-size: 22px; }

.grammar-build-answer { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s2); min-height: 76px; padding: var(--s3); margin-top: var(--s4); border: 2px dashed var(--color-border-input); border-radius: var(--radius-card); background: #fff; }
.grammar-build-answer.is-wrong { border: 2px solid var(--color-danger); }
.grammar-placeholder { color: var(--g-muted); font-size: 16px; }
.grammar-tiles { display: flex; flex-wrap: wrap; gap: var(--s2); margin-top: var(--s3); }
.grammar-build-answer button:not(.grammar-speak), .grammar-tiles button { appearance: none; background: #fff; color: var(--g-ink); font: 24px/1.4 'PingFang TC', 'Microsoft JhengHei', 'Noto Sans TC', 'Noto Sans CJK TC', 'Noto Sans', sans-serif; padding: var(--s2) var(--s4); min-width: 52px; min-height: 52px; border: 1px solid var(--color-border-input); border-radius: var(--radius-control); cursor: pointer; }
.grammar-build-answer button:not(.grammar-speak):hover, .grammar-tiles button:hover:not(:disabled) { background: var(--g-wash); }
.grammar-tiles button:disabled { background: #fff; color: transparent; border: 2px dashed var(--color-border); cursor: default; }
.grammar-tiles button:disabled .grammar-reading-guide { visibility: hidden; }
.grammar-build-answer button:disabled { color: var(--g-ink); cursor: default; }
.grammar-build-answer .grammar-speak { margin-left: var(--s1); }
.grammar-tiles + .grammar-button { margin-top: var(--s3); }

.grammar-cloze { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s1) var(--s3); margin-top: var(--s4); padding: var(--s4); border: 1px solid var(--g-line-soft); border-radius: var(--radius-card); font-size: clamp(26px, 6vw, 32px); line-height: 1.5; color: var(--g-ink); font-family: 'PingFang TC', 'Microsoft JhengHei', 'Noto Sans TC', 'Noto Sans CJK TC', 'Noto Sans', sans-serif; }
.grammar-slot { display: inline-flex; align-items: center; justify-content: center; min-width: 76px; min-height: 52px; padding: 2px var(--s4); border: 2px dashed var(--color-border-input); border-radius: var(--radius-control); background: #fff; color: var(--color-text-muted); font: inherit; }
.grammar-slot.is-filled { border-style: solid; border-color: var(--g-ink); background: var(--g-wash); color: var(--g-ink); cursor: pointer; }
.grammar-slot.is-filled.is-wrong { border-color: var(--color-danger); background: #fff; }
.grammar-slot:disabled { cursor: default; }

.grammar-activity-actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s2); margin-top: var(--s4); }
.grammar-activity-actions:empty { display: none; margin: 0; min-height: 0; }
.grammar-activity-actions > span { color: var(--g-muted); font-size: 15px; }

/* Action bar: stays at the bottom of the screen so the answer button and the feedback never scroll away */
.grammar-bar { position: sticky; bottom: 0; z-index: 5; margin: var(--s4) calc(-1 * var(--pad)) calc(-1 * var(--pad)); padding: var(--s3) var(--pad) max(var(--s3), env(safe-area-inset-bottom)); background: #fff; border-top: 1px solid var(--g-line); border-radius: 0 0 var(--g-radius) var(--g-radius); box-shadow: 0 -6px 14px rgba(13, 58, 105, .08); display: grid; gap: var(--s2); }
.grammar-feedback { display: flex; align-items: flex-start; gap: var(--s2); background: #fff; border: 1px solid var(--color-danger-border); border-left: 6px solid var(--color-danger); border-radius: var(--radius-control); padding: var(--s3) var(--s4); color: var(--color-danger-text); }
.grammar-feedback.is-correct { border-color: var(--color-success-border); border-left-color: var(--color-success); color: var(--color-success-text); font-weight: 600; }
.grammar-feedback:empty { display: none; }
.grammar-feedback-slot { min-height: 50px; margin-top: var(--s3); }
.grammar-feedback-placeholder { min-height: 50px; visibility: hidden; }
/* Reserve invisible space in ready activities. Skeleton bars belong only to actual loading frames. */
.grammar-explanation-placeholder { height: var(--grammar-explanation-height,0px); margin-top: var(--s2); }
.grammar-why { min-height: var(--grammar-explanation-height,0px); margin-top: var(--s2); }
.grammar-why h3 { font-size: 17px; }
.grammar-activity { min-height: 0; position: relative; }
.grammar-activity button, .grammar-activity h2 { scroll-margin-top: 12px; scroll-margin-bottom: 130px; }
.grammar-bar { min-height: 112px; }
.grammar-bar-hint { min-height: 24px; }
.grammar-support select { max-width: 100%; }
.grammar-primary { width: 100%; }
.grammar-speaking { margin-top: var(--s4); padding-top: var(--s4); border-top: 1px solid var(--g-line); }
.grammar-speaking ul { padding-left: 24px; margin: var(--s2) 0; }
.grammar-why { font-size: 16px; }
.grammar-why p { margin-top: var(--s2); color: var(--color-text); }
.grammar-bar-hint { font-size: 15px; color: var(--g-muted); text-align: center; }
.grammar-bar .grammar-wide { margin: 0; }

.grammar-glossary h2 { font: 600 22px/1.25 'Source Serif 4', Georgia, serif; }
.grammar-glossary dl { display: grid; grid-template-columns: 1fr 1fr; column-gap: var(--s5); margin-top: var(--s3); }
.grammar-glossary .grammar-vocabulary-row { min-width: 0; border: 0; border-top: 1px solid var(--g-line); border-radius: 0; padding: var(--s2) 0 var(--s3); }
.grammar-glossary dt { display: flex; align-items: center; gap: var(--s2); min-width: 0; font-size: 24px; color: var(--g-ink); }
.grammar-word-controls { display: inline-flex; flex: none; align-items: center; gap: 4px; margin-left: auto; }
.grammar-glossary dd { display: grid; gap: 2px; font-size: 14px; line-height: 1.4; color: var(--g-muted); margin-top: 0; }
.grammar-gloss-sound { color: var(--color-text-slate); }
.grammar-glossary .grammar-word-link { min-width: 44px; padding: 0; color: var(--g-ink); text-align: left; text-decoration: none; }
.grammar-glossary .grammar-word-link:hover { color: var(--color-interactive); }
.grammar-glossary .grammar-speak, .grammar-glossary .grammar-save { width: 44px; height: 44px; margin: 0; border: 0; border-radius: 50%; background: transparent; color: var(--color-text-muted); }
.grammar-glossary .grammar-speak:hover, .grammar-glossary .grammar-save:hover { background: var(--color-wash-blue); }
.grammar-glossary .grammar-speak.is-speaking { background: var(--g-ink); color: var(--color-surface); }
.grammar-glossary .grammar-save[aria-pressed='true'] { color: var(--color-favorite); }
.grammar-glossary .grammar-speak svg, .grammar-glossary .grammar-save svg { width: 20px; height: 20px; }
.grammar-save-placeholder { display: block; flex: none; width: 44px; height: 44px; }

/* Panels and completion */
.grammar-panel h1, .grammar-complete h1 { font-size: clamp(26px, 5vw, 34px); margin: var(--s3) 0 var(--s2); }
.grammar-panel p, .grammar-complete p { color: var(--color-text); }
.grammar-note { background: #fff; border: 1px solid var(--g-line-soft); border-left: 6px solid var(--g-accent); border-radius: var(--radius-control); padding: var(--s3) var(--s4); margin: var(--s4) 0; }
.grammar-planned-focus { margin: var(--s3) 0; }
.grammar-planned-focus p { margin-top: var(--s2); color: var(--g-muted); }
.grammar-complete { padding: var(--s5); }
.grammar-complete-seal { display: grid; place-items: center; width: 76px; height: 76px; border-radius: 50%; border: 2px solid var(--g-accent); color: var(--g-accent); font-size: 26px; margin-bottom: var(--s3); }
.grammar-cando-title { margin-top: var(--s4); font-size: 20px; }
.grammar-cando { list-style: none; padding: 0; margin-top: var(--s2); display: grid; gap: var(--s2); }
.grammar-cando li { display: flex; gap: var(--s3); align-items: baseline; }
.grammar-complete .grammar-caption { margin-top: var(--s3); }

@media (max-width: 700px) {
  .grammar-tag.is-topic { display: none; }
  .grammar-glossary dl { grid-template-columns: 1fr; }
}
@media (max-width: 520px) {
  .grammar-lesson-row, .grammar-lesson-row.has-status { grid-template-columns: 40px minmax(0, 1fr); }
  .grammar-lesson-row .grammar-status { grid-column: 2; justify-self: start; }
  .grammar-support select { width: 100%; }
  .grammar-quiet-btn { padding: var(--s2); }
  .grammar-review-card { align-items: stretch; flex-direction: column; gap: var(--s3); }
  .grammar-review-card .grammar-button { width: 100%; }
  .grammar-home-meta { align-items: flex-start; flex-direction: column; }
  .grammar-next { padding: var(--s4); }
}
@media (prefers-reduced-motion: reduce) { .grammar-progress > span { transition: none; } }

/* Missions sit between lessons in the course map */
.grammar-lesson-row.is-mission { border-top-style: dashed; margin-top: var(--s2); }
.grammar-lesson-row.is-mission:hover { background: #eaf1fb; }
.grammar-lesson-row.is-mission .grammar-number { border-radius: var(--radius-control); background: var(--g-ink); color: #fff; }
.grammar-partbreak h1 { margin-top: var(--s3); }

/* Before the player starts (grammarBoot.js adds html.grammar-boot on a Grammar address): hide the dictionary's landing card and
   search bar, and lay out the results area exactly as the finished page will. */
html.grammar-boot #landing-card, html.grammar-boot #search-container { display: none; }
html.grammar-boot #results-container { box-sizing: border-box; display: block; width: min(720px, 100%); margin: 0 auto; padding: 16px 12px 120px; }
html.grammar-boot, html:has(body.grammar-mode) { scrollbar-gutter: stable; }
@media (max-width: 1024px) {
  html.grammar-boot-lesson #mode-nav { display: none; }
  html.grammar-boot-lesson body { padding-bottom: 0; }
  html.grammar-boot-lesson #results-container { padding-bottom: 24px; }
}

/* Skeleton frames: gray placeholders sized like the real cards so nothing moves when the content arrives. */
.grammar-skeleton .sk { display: block; border-radius: var(--radius-control); background: linear-gradient(90deg, #e6ebf0 25%, #f4f7fa 37%, #e6ebf0 63%); background-size: 400% 100%; animation: grammar-shimmer 1.4s ease infinite; }
@keyframes grammar-shimmer { 0% { background-position: 100% 50%; } 100% { background-position: 0 50%; } }
@media (prefers-reduced-motion: reduce) { .grammar-skeleton .sk { animation: none; } }
.sk-card { box-sizing: border-box; display: grid; align-content: start; gap: var(--s3); background: #fff; border: 1px solid var(--g-line); border-radius: var(--g-radius); padding: var(--pad); overflow: hidden; }
.sk-tag { height: 25px; width: 260px; max-width: 80%; } .sk-title { height: 40px; width: 78%; } .sk-line { height: 20px; width: 100%; }
.sk-h2 { height: 30px; width: 100%; } .sk-btn { height: 46px; width: 170px; border-radius: var(--radius-control); } .sk-pill { height: 44px; width: 76px; border-radius: var(--radius-control); }
.sk-dot { flex: none; width: 40px; height: 40px; border-radius: 50%; }
.sk-w20 { width: 20%; } .sk-w30 { width: 30%; } .sk-w45 { width: 45%; } .sk-w60 { width: 60%; } .sk-w70 { width: 70%; } .sk-w80 { width: 80%; }
.sk-units { display: grid; gap: var(--s3); } .sk-unit { height: 604px; gap: 0; padding: var(--s2); }
.sk-unit-head { height: 44px; display: flex; align-items: center; padding: 0 var(--s3); }
.sk-row { display: flex; align-items: center; gap: var(--s4); height: 76px; padding: var(--s3); border-top: 1px solid var(--g-line-soft); }
.sk-lines { flex: 1; display: grid; gap: var(--s2); }
.sk-progress { height: 188px; } .sk-topbar { display: flex; align-items: center; gap: var(--s2); height: 44px; }
.sk-goals { height: 158px; }
.sk-feedback { min-height: 84px; display: grid; gap: var(--s2); align-content: center; }
.sk-chip { flex: none; width: 86px; height: 44px; border-radius: var(--radius-control); } .sk-chip.sk-square { width: 44px; } .sk-mid { flex: 1; margin: 0 auto; }
.sk-labelrow { display: flex; justify-content: space-between; align-items: center; height: 20px; margin-top: var(--s1); }
.sk-barline { height: 8px; border-radius: 99px; }
.sk-activity { min-height: 560px; display: flex; flex-direction: column; }
.sk-tags { display: flex; gap: var(--s2); } .sk-choice { height: 64px; border-radius: var(--radius-control); } .sk-grow { flex: 1; } .sk-wide { height: 56px; width: 100%; border-radius: var(--radius-control); }
@media (max-width: 700px) {
  .sk-unit { height: 898px; } .sk-progress { height: 174px; } .sk-activity { min-height: 590px; }
  .sk-goals { height: 177px; }
}

/* The dictionary's own loading spinner flashes in above the results while it loads in the background; Grammar has its own frames. */
html.grammar-boot #loading-spinner, body.grammar-mode #loading-spinner { display: none !important; }

.sk-fold { height: 82px; align-content: center; }
@media (max-width: 700px) { .sk-fold { height: 66px; } }

/* Grammar consumes the app's existing CEFR signal icon and badge classes. */
.grammar-cefr { display: inline-flex; flex: none; align-items: center; gap: 6px; font-size: 14px; }
.grammar-cefr .cefr-value { box-sizing: content-box; display: inline-block; width: auto; min-width: 18px; }
.grammar-cefr .fa-signal { color: var(--color-text-strong); }
.grammar-progress-label .grammar-cefr { font-size: 12px; vertical-align: middle; margin-right: var(--s1); }
.grammar-actions > .grammar-primary, .grammar-next > .grammar-primary { width: 100%; }
.grammar-word-link { appearance: none; background: transparent; border: 0; border-radius: var(--radius-control); padding: 4px 0; min-width: 44px; min-height: 44px; color: var(--color-interactive); font: inherit; text-decoration: none; cursor: pointer; }
.grammar-save { appearance: none; display: inline-grid; place-items: center; flex: none; width: 44px; height: 44px; padding: 0; border: 1px solid var(--color-border); border-radius: var(--radius-control); background: var(--color-surface); color: var(--color-text-muted); font-size: 18px; cursor: pointer; }
.grammar-save[aria-pressed='true'] { color: var(--color-favorite); }
.grammar-save:hover { background: var(--color-surface-hover); }
.grammar-save-status:empty { display: none; }
.grammar-dictionary { width: min(560px, calc(100% - 24px)); max-height: calc(100dvh - 32px); box-sizing: border-box; margin: auto; padding: var(--pad); overflow-y: auto; border: 1px solid var(--g-line); border-radius: var(--g-radius); background: var(--color-surface); color: var(--g-text); font: inherit; }
.grammar-dictionary::backdrop { background: rgba(0,0,0,.45); }
.grammar-dictionary h2 { font-size: 28px; }
.grammar-dictionary > p, .grammar-dictionary > .grammar-dictionary-meta { margin-top: var(--s3); }
.grammar-dictionary .grammar-dictionary-meta { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s2); }
.grammar-dictionary .grammar-button { text-decoration: none; }
.grammar-dictionary > .grammar-wide { margin-top: var(--s4); }
.grammar-dictionary .grammar-line { font-size: 22px; }
.grammar-dictionary [role='status']:empty { display: none; }

/* Loading mirrors the new overview hierarchy, including the narrow-screen stack. */
.sk-home { gap: var(--s4); }
.sk-home-heading { display: grid; gap: var(--s2); }
.sk-home-heading .sk-title { height: 42px; }
.sk-home-progress { display: grid; gap: var(--s2); }
.sk-home-next { height: 214px; padding: 18px; gap: var(--s2); }
.sk-home-next .sk-wide { margin-top: auto; min-height: 44px; height: 44px; }
.sk-home-review { display: flex; align-items: center; gap: var(--s4); border-top: 1px solid var(--g-line); padding-top: var(--s4); min-height: 64px; }
.sk-home-review .sk-btn { height: 44px; width: 196px; }
.sk-course { height: 156px; }
.sk-pills { display: grid; grid-template-columns: repeat(5, minmax(0,1fr)); gap: 6px; }
.sk-pills .sk-pill { width: 100%; height: 48px; }
@media (max-width: 520px) {
  .sk-home-heading { min-height: 137px; align-content: start; }
  .sk-home-review { flex-direction: column; align-items: stretch; min-height: 122px; }
  .sk-home-review .sk-lines { width: 100%; }
  .sk-home-review .sk-btn { width: 100%; }
  .sk-home-next { padding: var(--s4); }
}
@media (max-width: 360px) { .grammar-levels .fa-signal { display: none; } }

/* Lesson layouts reserve only the space needed by the current activity. */
.grammar-build-answer { position: relative; align-content: flex-start; align-items: flex-start; min-height: 0; }
.grammar-build-answer > button, .grammar-tiles > button { flex: none; max-width: 100%; box-sizing: border-box; }
.grammar-build-answer .grammar-placeholder { position: absolute; left: var(--s3); right: 64px; top: var(--s3); pointer-events: none; }
.grammar-build-answer .grammar-speak { margin-left: 0; }
.grammar-build-measure, .grammar-feedback-measure { position: absolute; top: 0; left: var(--pad); right: var(--pad); visibility: hidden; pointer-events: none; height: auto; margin: 0; min-height: 0; }
.grammar-build-measure { right: auto; }
.grammar-feedback .grammar-completed-icon { margin-top: 1px; }
.grammar-choice-mark { width: 24px; min-height: 24px; }
.grammar-choice-row.is-right { border-color: var(--color-success-border); box-shadow: inset 0 0 0 1px var(--color-success-border); }
.grammar-activity[data-type='notice'] .grammar-feedback-slot, .grammar-activity[data-type='notice'] .grammar-explanation-placeholder { display: none; }
.grammar-activity[data-type='notice'] .grammar-activity-actions:empty { display: none; }
.grammar-activity .grammar-goals { padding: var(--s3) 0 0; margin-top: var(--s4); border: 0; border-top: 1px solid var(--g-line); border-radius: 0; }

.grammar-feedback.is-support { border-color: var(--color-wash-blue-border); border-left-color: var(--color-interactive); color: var(--color-text-slate); }
.grammar-complete-seal { width: auto; height: auto; border: 0; border-radius: 0; margin-bottom: var(--s4); }
.grammar-complete-seal .game-teaching-outcome-icon { flex: 0 0 42px; width: 42px; height: 42px; }
.grammar-complete-seal svg { width: 22px; height: 22px; }
.grammar-cando li { align-items: flex-start; }
.grammar-cando .grammar-completed-icon { margin-top: 1px; }

/* Completion screen: one clear next step, a secondary exit, then quiet tertiary actions centered below. */
.grammar-complete .grammar-actions { flex-direction: column; align-items: stretch; gap: var(--s3); margin-top: var(--s5); }
.grammar-complete .grammar-actions > .grammar-button { width: 100%; min-height: 52px; }
.grammar-actions-minor { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--s2) var(--s4); padding-top: var(--s3); border-top: 1px solid var(--g-line); }
.grammar-button.grammar-quiet { background: transparent; border-color: transparent; color: var(--g-ink); font-weight: 600; text-decoration: underline; text-underline-offset: 3px; padding-inline: var(--s3); }
.grammar-button.grammar-quiet:hover { background: var(--color-wash-blue); }

/* Six destinations must remain visible when Grammar joins the mobile tab bar. */
@media (max-width: 1024px) {
  #mode-nav:has([data-mode="grammar"]) .mode-tab {
    flex: 1 1 0;
    min-width: 0;
    padding-left: 2px;
    padding-right: 2px;
  }
  #mode-nav:has([data-mode="grammar"]) .mode-tab-label {
    align-items: center;
    display: flex;
    font-size: 11.5px;
    justify-content: center;
    letter-spacing: 0;
    line-height: 1.15;
    min-height: 26px;
    text-align: center;
    white-space: normal;
    width: 100%;
  }
}
