/* 20-typography.css — накладной типографский слой капсулы TeamON One.
   Подключается ПОСЛЕ app.css и перебивает её типографику, не трогая ни одного
   существующего файла. Задача слоя ровно одна: перевести шрифтовую систему
   капсулы на язык публичного лендинга team-on.io — поднять пол кегля до брендовых
   значений (TEAMON-BRAND-SYSTEM.md: машинные подписи >= 9px, пояснительный текст
   >= 11px, лейблы/навигация/ключевые значения >= 12px), сузить 13 весов до
   рабочей сетки 400/500/600/700, убрать uppercase-разрядку и свести 22 значения
   межстрочного интервала к пяти ступеням.
   Цвет, поверхности, радиусы, тени и мобильные ширины здесь НЕ трогаются — это
   чужие зоны. Ни одного !important в файле нет: все селекторы скопированы из
   app.css один-в-один, поэтому побеждает порядок подключения, а не вес.
   Все имена классов взяты грепом из боевых app.css / index.html / app.js. */

/* ─────────────────────────────────────────────────────────────────────────
   1. ТОКЕНЫ
   В app.css токенов кегля, веса и интерлиньяжа нет вообще (15 токенов в 1–19
   и 12 в teamon-workspace-shell.css — все цветовые). Заводим их здесь, чтобы
   дальнейшие правки шли через шкалу, а не через 339 разрозненных font-size.
   ───────────────────────────────────────────────────────────────────────── */
@font-face {
  font-family: "Rubik";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("/assets/fonts/rubik/rubik-cyrillic-ext-v31.woff2") format("woff2");
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF,
    U+A640-A69F, U+FE2E-FE2F;
}

@font-face {
  font-family: "Rubik";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("/assets/fonts/rubik/rubik-cyrillic-v31.woff2") format("woff2");
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}

@font-face {
  font-family: "Rubik";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("/assets/fonts/rubik/rubik-latin-v31.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
    U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122,
    U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

:root {
  /* Rubik хранится внутри web-public и не требует сетевого запроса к Google.
     Системные лица остаются резервом на время загрузки и для старых браузеров. */
  --font-text: "Rubik", ui-sans-serif, -apple-system, BlinkMacSystemFont, "SF Pro Text",
    "Segoe UI Variable Text", "Segoe UI", Onest, system-ui, sans-serif;
  --font-display: "Rubik", ui-sans-serif, -apple-system, BlinkMacSystemFont,
    "SF Pro Display", "SF Pro Text", "Segoe UI Variable Display", "Segoe UI",
    Onest, system-ui, sans-serif;
  /* Consolas стоит до Menlo намеренно: на Windows ui-monospace/SFMono/Menlo
     не резолвятся, и без явного Consolas браузер уходит в дефолтный monospace. */
  --font-mono: ui-monospace, SFMono-Regular, "SF Mono", Consolas,
    "Cascadia Mono", Menlo, monospace;

  /* Кегль. Три нижних ступени — это брендовые полы, а не «красивые» числа. */
  --fs-machine: 10px; /* машинные подписи: время, счётчики, коды, статусы (пол 9px) */
  --fs-note: 11px;    /* пояснительный текст (пол 11px) */
  --fs-label: 12px;   /* лейблы, навигация, кнопки, ключевые значения (пол 12px) */
  --fs-body: 13px;    /* первое объяснение результата */
  --fs-copy: 15px;    /* базовый текст, как в app.css:25 */

  /* Вес. Системный стек невариативен на большинстве машин: 750/760/780/850/900
     округляются браузером до ближайшего реального начертания, поэтому четыре
     разных «жирных» в исходнике рисуются одинаково. Держим четыре реальных. */
  --fw-regular: 400;
  --fw-medium: 500;
  --fw-semi: 600;
  --fw-bold: 700; /* потолок: бренд просит medium-регистр, а не постерную жирность */

  /* Интерлиньяж — пять ступеней вместо 22 значений в app.css. */
  --lh-display: 1.06;
  --lh-heading: 1.2;
  --lh-tight: 1.35;
  --lh-text: 1.45;
  --lh-relaxed: 1.55;

  /* Корневое сглаживание: бренд просит держать системный стек оптически ровным. */
  font-synthesis: none;
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* ─────────────────────────────────────────────────────────────────────────
   2. ШРИФТОВЫЕ СТЕКИ
   app.css:25 задаёт семейство внутри шорткода `font: 15px/1.55 …`, поэтому
   перебиваем именно font-family — кегль и интерлиньяж базы остаются те же.
   app.css:29 (`button, input, select, textarea { font: inherit }`) сам донесёт
   новое семейство до всех контролов.
   ───────────────────────────────────────────────────────────────────────── */
body {
  font-family: var(--font-text);
}

/* Заголовочные уровни уходят на display-стек: на Apple это SF Pro Display,
   на современной Windows — Segoe UI Variable Display. */
h1, h2, h3, h4 {
  font-family: var(--font-display);
}

/* Машинные блоки: три шорткода в app.css:401, 576, 1508 несут собственное
   моно-семейство без Consolas. Возвращаем их в общий моно-стек. */
.activity-entry-details p {
  font-family: var(--font-mono);
  font-size: var(--fs-machine); /* было 9px внутри шорткода app.css:401 */
  line-height: var(--lh-text);
}
.bubble code {
  font-family: var(--font-mono); /* app.css:576 */
}
.panel pre {
  font-family: var(--font-mono);
  line-height: var(--lh-relaxed); /* было 1.6, app.css:1508 */
}

/* ─────────────────────────────────────────────────────────────────────────
   3. UPPERCASE-РАЗРЯДКА
   13 объявлений `text-transform: uppercase` с трекингом .07–.18em. В новом
   языке лендинга этого приёма нет вообще: капслок с разрядкой на кириллице
   читается хуже строчных и тянет в старый «тех-дэшборд». Снимаем и регистр,
   и разрядку одной группой.
   ───────────────────────────────────────────────────────────────────────── */
.eyebrow,                                   /* app.css:42–44 (.18em) */
.account-menu-header .eyebrow,              /* app.css:243 (.12em) */
.studio-operation-copy small,               /* app.css:296 (.1em) */
.work-surface-rail-core > span,             /* app.css:616–619 (.13em) */
.world-member-add-separator,                /* app.css:728 */
.academy-family-grid h5,                    /* app.css:867 (.09em) */
.academy-family-stage-row legend,           /* app.css:925 (.07em) */
.academy-path-step-copy small,              /* app.css:1007–1010 (.08em) */
.academy-prompt-label,                      /* app.css:1064–1067 (.08em) */
.academy-card-kicker,
.space-surface-group > h4,                  /* app.css:1227–1230 (.11em) */
.space-winner-badge,                        /* app.css:1242–1245 (.08em) */
.mission-card-heading span,                 /* app.css:1496–1502 (.12em) */
.journey-focus > span {                     /* app.css:2443 (.11em) */
  text-transform: none;
  letter-spacing: normal;
}

/* Тот же .eyebrow в сжатом состоянии канваса — у него собственный трекинг
   .13em в app.css:2612–2615, регистр наследуется от базового правила. */
.workbench.canvas-full .journey-canvas.studio.has-live-site .journey-progress-rail .eyebrow {
  letter-spacing: normal;
}

/* Разрядка без капслока. Лого-подпись «ONE» остаётся деталью локапа, поэтому
   у неё сохраняется минимальный трекинг; у версии продукта его нет. */
.brand-lockup small,
.brand-name small {
  letter-spacing: .06em; /* было .22em, app.css:62 */
}
.product-version {
  letter-spacing: normal; /* было .04em, app.css:1787 */
}

/* Машинные коды — единственное место, где разрядка помогает читать посимвольно.
   Оставляем, но приводим к одному значению вместо двух разных .08em. */
.browser-pairing code,   /* app.css:1657 */
.chatgpt-device code {   /* app.css:1744 */
  letter-spacing: .04em;
}

/* ─────────────────────────────────────────────────────────────────────────
   4. ВЕСА
   В app.css 13 разных весов: 400, 560, 600, 650, 680, 700, 720, 750, 760,
   780, 800, 850, 900. Ниже — сведение к 400/500/600/700.
   ───────────────────────────────────────────────────────────────────────── */

/* 560 → 500 */
.academy-passage {                                    /* app.css:1071 */
  font-weight: var(--fw-medium);
}

/* 650 и 680 → 600 */
.activity-entry-title,                                /* app.css:380 (650) */
.mission-card-heading span,                           /* app.css:1499 (650) */
.journal-state,                                       /* app.css:1600 (650) */
.team-rail-space-trigger > #team-rail-space-name,     /* app.css:1889 (650) */
.studio-dialogue-header strong,                       /* app.css:2843 (650) */
.conversation-lane,                                   /* app.css:420 (680) */
.bubble h1,                                           /* app.css:540 (680) */
.bubble h2,
.bubble h3,
.space-surface-tab {                                  /* app.css:685 (680) */
  font-weight: var(--fw-semi);
}

/* 720 / 750 / 760 / 780 / 800 / 850 / 900 → 700.
   Все эти значения поверх невариативного системного лица дают одно и то же
   реальное начертание, так что разница существовала только в исходнике. */
.shared-message-meta strong,                          /* app.css:459 (720) */
.academy-family-dialog label,                         /* app.css:899 (720) */
.space-item-action,                                   /* app.css:1250 (720) */
.workbench.canvas-full .journey-canvas.studio.has-live-site .journey-progress-rail h3, /* app.css:2618 (720) */
.soft-pill,                                           /* app.css:285 (750) */
.work-tab,                                            /* app.css:802 (750) */
.academy-cycle-state,                                 /* app.css:821 (750) */
.academy-family-stage-heading button,                 /* app.css:916 (750) */
.academy-family-dialog footer button,
.academy-family-stage-row button,
.academy-focus-control,                               /* app.css:938 (750) */
.academy-order-token,                                 /* app.css:1103 (750) */
.academy-order-controls button,
.academy-voice-controls button,
.academy-judgment-fields legend,                      /* app.css:1145 (750) */
.shared-message-avatar,                               /* app.css:450 (760) */
.memory-receipt-mark,                                 /* app.css:557 (760) */
.academy-family-actions button,                       /* app.css:861 (760) */
.academy-family-item button,
.academy-question,                                    /* app.css:1073 (760) */
.journey-open,                                        /* app.css:2413 (760) */
.journey-fields-count,                                /* app.css:2473 (760) */
.journey-field-row dt,                                /* app.css:2481 (760) */
.world-member-avatar,                                 /* app.css:707 (780) */
.studio-input-mode button,                            /* app.css:752 (780) */
.eyebrow,                                             /* app.css:42 (800) */
.brand-lockup small,                                  /* app.css:62 (800) */
.brand-name small,
.primary,                                             /* app.css:139 (800) */
.studio-operation-copy small,                         /* app.css:296 (800) */
.work-surface-rail-core > span,                       /* app.css:618 (800) */
.academy-family-item-heading span,                    /* app.css:877 (800) */
.academy-family-stage-row legend,                     /* app.css:925 (800) */
.space-surface-group > h4,                            /* app.css:1228 (800) */
.space-winner-badge,                                  /* app.css:1244 (800) */
.onboarding-progress,                                 /* app.css:1304 (800) */
.onboarding-complete,                                 /* app.css:1330 (800) */
.team-project-monogram,                               /* app.css:2024 (800) */
.journey-stage span,                                  /* app.css:2424 (800) */
.journey-focus > span,                                /* app.css:2443 (800) */
.conversation-lane-badge,                             /* app.css:433 (850) */
.team-project-unread,
.academy-path-step-copy small,                        /* app.css:1009 (850) */
.academy-prompt-label,                                /* app.css:1066 (850) */
.academy-card-kicker,
.academy-path-history-node::before,                   /* app.css:984 (900) */
.academy-revision-mark {                              /* app.css:1153 (900) */
  font-weight: var(--fw-bold);
}

/* ─────────────────────────────────────────────────────────────────────────
   5. ПОЛ КЕГЛЯ — МАШИННЫЕ ПОДПИСИ (>= 9px, ставим 10px)
   Время, счётчики, коды, значки-числа, статусные пилюли, служебные `small`.
   Всё, что в app.css было 6/7/8/9px и относится к машинному слою, поднято
   до 10px: это даёт запас над брендовым полом и не расширяет плотные ряды.
   Селекторы, которые уже стоят на 10px, здесь не повторяются.
   ───────────────────────────────────────────────────────────────────────── */
.brand-lockup small,                        /* 8px  — app.css:62 */
.brand-name small,
.session-copy small,                        /* 8px  — app.css:227 */
.profile-settings small,                    /* 9px  — app.css:270 */
.button-count,                              /* 9px  — app.css:279 */
.studio-operation-copy small,               /* 7px  — app.css:296 */
.activity-sheet-heading .soft-pill,         /* 8px  — app.css:349 */
.activity-entry-meta .soft-pill,
.activity-entry-meta time,                  /* 9px  — app.css:366 */
.conversation-lane-badge,                   /* 8px  — app.css:433 */
.team-project-unread,
.shared-message-meta time,                  /* 9px  — app.css:460 */
.shared-message-files small,                /* 9px  — app.css:492 */
.world-member-copy small,                   /* 9px  — app.css:710 */
.world-member-add-path > small,             /* 9px  — app.css:726 */
.world-member-add-separator,                /* 9px  — app.css:728 */
.studio-input-mode > small,                 /* 9px  — app.css:761 */
.space-item-meta,                           /* 8px  — app.css:1240 */
.space-winner-badge,                        /* 8px  — app.css:1244 */
.space-surface-status,                      /* 9px  — app.css:1270 */
.canvas-result header span,                 /* 9px  — app.css:1275 */
.onboarding-card-header small,              /* 8px  — app.css:1322 */
.shared-reply small,                        /* 8px  — app.css:1452 */
.studio-selection-chip small,               /* 8px  — app.css:1463 */
.nav-item span,                             /* 9px  — app.css:1478 (счётчик в кружке) */
.journal-state,                             /* 8px  — app.css:1600 */
.native-module-card .soft-pill,             /* 8px  — app.css:1640 */
.browser-route small,                       /* 8px  — app.css:1651 */
.browser-request small,                     /* 8px  — app.css:1668 */
.context-source-receipt,                    /* 8px  — app.css:1694 */
.continuity-scale,                          /* 8px  — app.css:1761 */
.product-version,                           /* 9px  — app.css:1786 */
.team-space-option-copy small,              /* 8px  — app.css:1972 */
.team-project small,                        /* 9px  — app.css:2032 */
.journey-stage span,                        /* 8px  — app.css:2424 */
.journey-fields-label small,                /* 9px  — app.css:2467 */
.journey-fields-count,                      /* 9px  — app.css:2473 */
.builder-live-status,                       /* 9px  — app.css:2501 */
.builder-health,                            /* 9px  — app.css:2511 */
.workbench.canvas-full .composer-status {   /* 9px  — app.css:2892 */
  font-size: var(--fs-machine);
}

/* Сжатое состояние канваса (app.css:2611–2637) держало 6px и 8px — это ниже
   любого читаемого предела. Поднимаем, сохраняя исходную иерархию слоёв. */
.workbench.canvas-full .journey-canvas.studio.has-live-site .journey-stage span {
  font-size: var(--fs-machine); /* было 6px, app.css:2633 */
}

/* ─────────────────────────────────────────────────────────────────────────
   6. ПОЛ КЕГЛЯ — ПОЯСНИТЕЛЬНЫЙ ТЕКСТ (>= 11px)
   Всё, что человек читает предложениями: подписи под заголовками, помощь,
   описания, цитаты, сводки. В app.css это сидело на 8–10px.
   ───────────────────────────────────────────────────────────────────────── */
.eyebrow,                                   /* 10px — app.css:42 */
.account-menu-header .eyebrow,              /* 8px  — app.css:243 */
.studio-operation-copy strong,              /* 9px  — app.css:297 */
.task-form-actions .muted,                  /* 10px — app.css:319 */
.activity-entry-result,                     /* 10px — app.css:386 */
.shared-message-meta strong,                /* 10px — app.css:459 */
.shared-message-quote,                      /* 10px — app.css:479 */
.message.action-receipt .bubble,            /* 10px — app.css:547 */
.memory-receipt-copy small,                 /* 10px — app.css:563 */
.memory-receipt-status,
.artifact-proof,                            /* 10px — app.css:588 */
.work-surface-rail-core > span,             /* 9px  — app.css:618 */
.work-event-copy small,                     /* 10px — app.css:1208 */
.work-event-state,                          /* 10px — app.css:1209 */
.space-surface-group > h4,                  /* 9px  — app.css:1228 */
.space-item small,                          /* 10px — app.css:1239 */
.space-item p,
.onboarding-card-copy,                      /* 9px  — app.css:1326 */
.work-surface-note,                         /* 10px — app.css:1334 */
.shared-reply strong,                       /* 10px — app.css:1453 */
.studio-selection-chip strong,              /* 10px — app.css:1464 */
.attachment-chip,                           /* 10px — app.css:1466 */
.mission-card-heading span,                 /* 9px  — app.css:1498 */
.mission-card small,                        /* 10px — app.css:1505 */
.identity-form > small,                     /* 10px — app.css:1521 */
.identity-actions .muted,                   /* 10px — app.css:1523 */
.knowledge-readiness > span:last-child,     /* 10px — app.css:1532 */
.knowledge-help,                            /* 9px  — app.css:1544 */
.knowledge-sources .list > .muted,          /* 10px — app.css:1547 */
.knowledge-journal-summary,                 /* 9px  — app.css:1549 */
.knowledge-view .timeline-empty,            /* 10px — app.css:1579 */
.memory-card small,                         /* 10px — app.css:1605 */
.memory-evidence,                           /* 10px — app.css:1607 */
.connection-section-heading p,              /* 10px — app.css:1631 */
.native-module-card strong,                 /* 10px — app.css:1638 */
.native-module-card p,                      /* 9px  — app.css:1639 */
.browser-control .panel-heading small,      /* 9px  — app.css:1643 */
.browser-route strong,                      /* 9px  — app.css:1650 */
.browser-pairing span,                      /* 9px  — app.css:1658 */
.browser-request strong,                    /* 9px  — app.css:1666 */
.connection-row strong,                     /* 10px — app.css:1684 */
.connection-row small,                      /* 9px  — app.css:1685 */
.capability-list li,                        /* 10px — app.css:1713 */
.credential-field small,                    /* 9px  — app.css:1724 */
.provider-note,
.chatgpt-auth-status,                       /* 10px — app.css:1741 */
.chatgpt-device span,                       /* 10px — app.css:1743 */
.provider-actions .muted,                   /* 10px — app.css:1751 */
.continuity-panel .panel-heading small,     /* 9px  — app.css:1756 */
.world-empty-cta small,                     /* 9px  — app.css:2068 */
.journey-field-row dt,                      /* 9px  — app.css:2481 */
.journey-focus > span,                      /* 9px  — app.css:2443 */
.builder-panel header p,                    /* 10px — app.css:2496 */
.builder-panel > footer,                    /* 10px — app.css:2507 */
.studio-dialogue-header strong {            /* 10px — app.css:2843 */
  font-size: var(--fs-note);
}

/* Те же поясняющие слои в сжатом канвасе (app.css:2611–2637). */
.workbench.canvas-full .journey-canvas.studio.has-live-site .journey-progress-rail .eyebrow,
.workbench.canvas-full .journey-canvas.studio.has-live-site .journey-stage strong {
  font-size: var(--fs-note); /* было 8px */
}

/* ─────────────────────────────────────────────────────────────────────────
   7. ПОЛ КЕГЛЯ — ЛЕЙБЛЫ, НАВИГАЦИЯ, ДЕЙСТВИЯ, КЛЮЧЕВЫЕ ЗНАЧЕНИЯ (>= 12px)
   Всё, на что можно нажать или что подписывает поле: кнопки, ссылки, табы,
   summary-раскрывашки, label/legend, select, а также значения в парах
   «термин — значение».
   ───────────────────────────────────────────────────────────────────────── */
.session-logout,                            /* 9px  — app.css:253 */
.task-tab,                                  /* 10px — app.css:307 */
.activity-entry-details summary,            /* 9px  — app.css:395 */
.text-button,                               /* 10px — app.css:405 */
.shared-message-reply,                      /* 9px  — app.css:462 */
.world-member-role,                         /* 10px — app.css:715 */
.world-member-add select,
.studio-input-mode button,                  /* 10px — app.css:752 */
.academy-family-stage-row legend,           /* 10px — app.css:925 */
.work-expand,                               /* 10px — app.css:1212 */
.space-item-action,                         /* 9px  — app.css:1250 */
.space-rating button,                       /* 9px  — app.css:1258 */
.space-winner-choice,                       /* 10px — app.css:1266 */
.ask-teamon,                                /* 10px — app.css:1395 */
.identity-actions .primary,                 /* 10px — app.css:1524 */
.knowledge-add,                             /* 9px  — app.css:1545 */
.journal-filters button,                    /* 9px  — app.css:1561 */
.learning-editor label,                     /* 10px — app.css:1616 */
.memory-actions button,                     /* 9px  — app.css:1627 */
.browser-control .secondary,                /* 9px  — app.css:1644 */
.browser-pairing a,                         /* 9px  — app.css:1659 */
.browser-request-actions button,            /* 8px  — app.css:1675 */
.browser-request-actions a,
.skill-review summary,                      /* 10px — app.css:1708 */
.provider-form label,                       /* 10px — app.css:1717 */
.credential-field,
.provider-access summary,                   /* 10px — app.css:1728 */
.chatgpt-device a,                          /* 10px — app.css:1745 */
.chatgpt-button,                            /* 10px — app.css:1747 */
.provider-actions .primary,                 /* 10px — app.css:1752 */
.continuity-form label,                     /* 10px — app.css:1758 */
.segmented button,                          /* 9px  — app.css:1777 */
.team-rail-space-trigger > #team-rail-space-name, /* 10px — app.css:1888 */
.journey-open,                              /* 10px — app.css:2413 */
.journey-stage strong,                      /* 9px  — app.css:2426 */
.journey-field-row dd,                      /* 10px — app.css:2483 (ключевое значение) */
.app-shell.studio-has-section-tabs .space-surface-tab { /* 9px — app.css:2763 */
  font-size: var(--fs-label);
}

/* Действие в сжатом канвасе — app.css:2622 держало 8px на кнопке с целью
   касания 44px. Возвращаем читаемую подпись. */
.workbench.canvas-full .journey-canvas.studio.has-live-site .journey-open {
  font-size: var(--fs-label);
}

/* ─────────────────────────────────────────────────────────────────────────
   8. ИНТЕРЛИНЬЯЖ
   22 разных значения в app.css сводим к пяти ступеням. Значения, уже
   совпадающие со ступенью (1.2, 1.35, 1.45, 1.55), не переобъявляются.
   ───────────────────────────────────────────────────────────────────────── */

/* .98 и 1.08 → 1.06 (крупные заголовки) */
.login-copy h1,                             /* .98  — app.css:129 */
.academy-activity h4,                       /* .98  — app.css:1037 */
.welcome-card h1,                           /* 1    — app.css:510 */
.onboarding-canvas h3 {                     /* 1.08 — app.css:1300 */
  line-height: var(--lh-display);
}

/* 1.08 и 1.1 → 1.2 (компактные двухстрочные шапки) */
.session-copy,                              /* 1.08 — app.css:218 */
.team-rail-brand strong {                   /* 1.1  — app.css:1858 */
  line-height: var(--lh-heading);
}

/* 1.3 и 1.42 → 1.35 (плотные заголовки строк) */
.activity-entry-title,                      /* 1.42 — app.css:381 */
.team-space-option-copy small {             /* 1.3  — app.css:1972 */
  line-height: var(--lh-tight);
}

/* 1.4 / 1.48 / 1.5 / 1.52 → 1.45 (основной текстовый интерлиньяж) */
.message.memory-update-receipt .bubble,     /* 1.4  — app.css:551 */
.browser-pairing span,                      /* 1.4  — app.css:1658 */
.connection-row small,                      /* 1.4  — app.css:1685 */
.academy-question,                          /* 1.48 — app.css:1073 */
.onboarding-card-copy,                      /* 1.48 — app.css:1326 */
.task-form textarea,                        /* 1.5  — app.css:316 */
.world-members > header p,                  /* 1.5  — app.css:701 */
.world-invite-result code,                  /* 1.5  — app.css:730 */
.academy-family-item p,                     /* 1.5  — app.css:879 */
.academy-family-dialog input,               /* 1.5  — app.css:904 */
.academy-family-dialog textarea,
.academy-family-dialog select,
.academy-choice-option,                     /* 1.5  — app.css:1078 */
.academy-voice-status,                      /* 1.5  — app.css:1123 */
.space-item small,                          /* 1.5  — app.css:1239 */
.space-item p,
.mission-card p,                            /* 1.5  — app.css:1504 */
.chatgpt-auth-status,                       /* 1.5  — app.css:1741 */
.builder-panel header p,                    /* 1.5  — app.css:2496 */
.shared-message-bubble,                     /* 1.52 — app.css:473 */
.workbench.canvas-full .bubble {            /* 1.52 — app.css:2873 */
  line-height: var(--lh-text);
}

/* 1.58 / 1.6 / 1.62 → 1.55 (длинные читаемые абзацы) */
.bubble,                                    /* 1.58 — app.css:530 */
.academy-stage-header > div > p:last-child, /* 1.58 — app.css:816 */
.academy-onboarding > p:last-child,         /* 1.58 — app.css:963 */
.academy-instruction,                       /* 1.58 — app.css:1038 */
.academy-voice-copy,                        /* 1.58 — app.css:1116 */
.academy-card p,                            /* 1.58 — app.css:1179 */
.academy-revision p:last-child,             /* 1.6  — app.css:1156 */
.journey-focus > p,                         /* 1.6  — app.css:2445 */
.welcome-card > p:not(.eyebrow),            /* 1.62 — app.css:511 */
.academy-passage {                          /* 1.62 — app.css:1071 */
  line-height: var(--lh-relaxed);
}

/* ─────────────────────────────────────────────────────────────────────────
   9. МОБИЛЬНЫЕ ПОВТОРЫ
   В app.css мобильные правила расщеплены: блок @media (max-width: 900px)
   в 2215–2249 весь про .app-shell.team-edition, а безусловные мобильные
   правила лежат отдельно от 2292. Ниже — только те мобильные объявления,
   которые задают собственный кегль/интерлиньяж ниже нашего пола. Обёртка в
   ту же медиа-границу обязательна: без неё плоское правило из этого файла
   победило бы мобильное значение на всех ширинах.
   ───────────────────────────────────────────────────────────────────────── */
@media (max-width: 760px) {
  /* Подсказка режима студии: 9px/1.25 — app.css:2273–2275. */
  .studio-mode-toggle .control-tooltip {
    font-size: var(--fs-note);
    line-height: var(--lh-tight);
  }

  /* Имя пользователя в мобильной шапке: 10px при max-width 72px —
     app.css:2298. Ставим 11px, а не 12px: ширина шапки не наша зона,
     а на 12px обрезка стала бы заметно агрессивнее. */
  .session-copy strong {
    font-size: var(--fs-note);
  }

  /* Тело сообщения: 1.58 — app.css:2313. */
  .bubble {
    line-height: var(--lh-relaxed);
  }
}

/* ─────────────────────────────────────────────────────────────────────────
   ЧТО СОЗНАТЕЛЬНО НЕ ТРОНУТО

   1. Цвета, поверхности, границы, тени, радиусы, backdrop-filter, градиенты.
      Чужие зоны; типографский слой не должен конкурировать с ними за каскад.
   2. Ширины, отступы, grid/flex-раскладки и мобильные брейкпоинты как таковые.
      Поднятый кегль сам чуть расширит плотные ряды — это ожидаемое следствие,
      чинить его должен слой раскладки, а не этот файл.
   3. `color-scheme: dark` (app.css:2), `body { overflow: hidden }` (app.css:24),
      `.app-shell { height: 100dvh; overflow: hidden }` (app.css:146–147),
      глобальный `outline: none` (app.css:30) и его замена через box-shadow
      (app.css:32–34). Это не типографика.
   4. Декоративные слои .boot-cosmos i, .login-orbit, .ambient-grid,
      .app-shell::after и #particle-canvas — текста не несут.
   5. Отрицательный трекинг (-.005em … -.055em, 30 объявлений). В новом языке
      лендинга он тоже есть и работает как оптическая компенсация крупного
      кегля; менять его без визуальной проверки смысла нет.
   6. Все font-size от 11px и выше, включая clamp()-шкалу заголовков (20 штук)
      и одиночный 15.5px в app.css:2313. Они уже над брендовым полом; сведение
      их в единую шкалу — отдельная работа, требующая визуальной приёмки.
   7. Глубоко вложенные фокус-режимы академии
      (`.academy-space-view[data-academy-focus="activity"|"feedback"] …`,
      app.css:2688–2728 и 3056–3066) с интерлиньяжем 1, 1.42, 1.45, 1.56.
      Отклонение от шкалы там не больше 0.03, а повторение их пятиуровневой
      специфичности добавило бы шум без видимой разницы.
   8. Три моно-шорткода сохранили свой кегль (12px в app.css:576 и 11px
      в app.css:1508) — они и так над полом; заменено только семейство.
   9. index.html не изменялся: подключение
      `<link rel="stylesheet" href="/redesign/20-typography.css">` после
      строки 13 (`app.css?v=106`) должен добавить владелец разметки.
   ───────────────────────────────────────────────────────────────────────── */
