/* ui.css — панели знания поверх 3D-канваса живой карты компании.
   ПРАВКА ВЛАДЕЛЬЦА 05.09 (вечер): колонна — ТЕХНИЧЕСКИЙ РЕЛЬЕФ.
   Никакого стекла и летающих плашек слева: во всю высоту экрана, вплотную
   к левому краю (0;0, отступа от края больше НЕТ) стоит СПЛОШНАЯ серая
   полоса-рельеф 292, непрозрачная, без blur (тон глуше фона сцены #ededef —
   читается «мы под контентом»). Разделы лежат на ней ПЛОСКИМ текстом с
   волосяными разделителями; сцена — слой ПОВЕРХ рельефа: по правому краю
   серого ЕДИНСТВЕННАЯ мягкая тень, падающая от контента (inset справа).
   СЕТКА СПИСКА ОБЪЕКТОВ SOMACORE сохранена до числа:
     · ширина 292, левое поле текста 13.5; один столбец-маркер 16 слева
       на всех — имена строк начинаются на одной вертикали (39.5);
     · строки 44 (заголовки/объекты) и 34 (меню); зазор групп 9;
     · кегли: заголовок 11/500(600)/−0.18, пункт 11/400/−0.224,
       счётчики 10/500 tabular; чернила пятью ступенями цвета;
     · включённое — ЛИНИЯ СЛЕВА, не заливка; hover — на ступень темнее
       серого; хроника и листы-досье — плоско на рельефе, сплошным.
   Меняется МАТЕРИАЛ, не сетка. Стекло осталось только у модалок каталога
   (они не колонна). Все классы с префиксом gc-.
   ПРАВКА ВЛАДЕЛЬЦА 06.09: колонна ВЕРНУЛАСЬ ВЛЕВО и стала шире на 25%
   (--gc-col-w 292→366). Новый объём отдан НЕ длине строк, а ВОЗДУХУ:
   боковые поля контента теперь одинаковые слева и справа (--gc-pad 26,
   было 13.5 слева / 22 справа — «ощущение дефицита и нищеты»). Вертикаль
   имён едина по-прежнему: все производные отступы считаются calc'ом от
   --gc-pad (шаг вложенности + 28 с 06.09: маркер 18 + зазор 10), чтобы
   ничего не разъехалось.
   Канвас three.js рисуется под этим слоем; САМ РЕЛЬЕФ указатель ЛОВИТ —
   сцена под непрозрачным серым не должна получать фантомные клики; пустое
   место правее колонны пропускает клики дальше (pointer-events:none).
   ПРАВКА ВЛАДЕЛЬЦА 06.09 (реф Synapse, «реф для меню слева»): язык колонны —
   СВЕТЛЫЙ И ВОЗДУШНЫЙ сайдбар референса. Что взято из рефа:
     · светлый фон рельефа ДНЁМ, но ВСЕГДА чуть темнее фона сцены (железное
       правило владельца: техническое меню никогда не светлее фона; ночь
       темнеет теми же токенами);
     · СЕКЦИИ с маленькими серыми заголовками-капсом (.gc-sechead) и воздухом
       между секциями ВМЕСТО кликабельных строк-заголовков и волосяных черт;
     · строка: тонкая линейная иконка слева, подпись, счётчик серым справа;
     · раскрываемые строки с шевронами;
     · фильтры «Сотрудников» с цветными точками — наш аналог секции Tags.
   Сетка вертикалей едина: имена ВСЕХ строк на pad+28 (иконка в
   столбце-маркере слева, шеврон раскрываемых — справа, на месте счётчика).
   РАЗВОРОТ ВЛАДЕЛЬЦА 06.09 (вечер): «меню должно быть ТЕХНИЧЕСКИМ, а не
   сладеньким — убираем матовость, пилюльность и стиль облака над фоном».
   От рефа осталась СТРУКТУРА (секции-капс, иконки, счётчики, точки),
   формы — технический рельеф 05.09: сплошная полоса без blur/прозрачности,
   активное — ЛИНИЯ СЛЕВА чернилами, без карточек, радиусов и теней.
   ГНЕВНАЯ ПРАВКА ВЛАДЕЛЬЦА 06.09: «меню перекошено в сторону пустого
   пространства; технический стиль лаконичен, и всё в нём оправдано
   эффективностью». Перекос в пустоту убран — ПЛОТНАЯ ТЕХНИЧЕСКАЯ СЕТКА:
   строки 44→32, пункты 34→28, поле --gc-pad 28.6→18, зазор колонки 9→4,
   низ шапок секций пересчитан под правило ритма. Кегли (11/10), цвета,
   ширина колонны и порядок — НЕ тронуты: уплотнён только воздух.
   РИТМ ОТСТУПОВ — РЕФ AMPLITUDE (владелец 06.09): уплотнение вышло
   «нищенством». Владелец дал реф сайдбара Amplitude ТОЛЬКО НА ОТСТУПЫ
   («пример отступов, всё остальное не бери»): никаких пилюль активного,
   линий-разделителей и скруглений рефа — берётся один ритм, язык остаётся
   техническим (сплошной рельеф, линия слева, капс секций). Числа выведены
   пропорцией к нашему кеглю 11: поле --gc-pad 18→30, строки 32→36 (поля
   8→11), пункты 28→30, шапки секций 22 сверху / 12 снизу, зазор колонки
   4→6, вертикаль хроники 8→10 — между «пустотой» и «нищенством». Кегли
   (11/10), цвета, ширина 366, линия активного, нативная прокрутка — НЕ
   тронуты.
   ПАКЕТ ПРАВОК ВЛАДЕЛЬЦА 06.09 (кегль/иконки/цвета): «перестань делать всё
   милипиздрическим, нищета, нормальный размер текста». КЕГЛИ ПОДНЯТЫ по
   всему меню: основной 11→13 (фикс line-height 13→16), счётные/вторичные
   10→11, заголовки 12→14 и 11→13; строки 36→38, пункты 30→32 — плотный
   ритм (шаг ≈ 2.8 кегля) сохранён. Иконки на 15% больше: столбец-маркер
   16→18, штрих 15→17, вертикаль имён pad+26 → pad+28. Ширина колонны
   366→320 (владелец назвал число сам). «Дешёвые цветные кругляшки» удалены
   вовсе (точки хроники, точки статуса, severity-точки модалок) — цвет
   несёт сам текст. Смысловые цвета переведены с «ебантяйства из Windows 98»
   на палитру Somacore X — см. блок токенов. Кегли модалок каталога (не
   меню) не тронуты. */

:root{
  /* Пять ступеней чернил эталона. */
  --gc-ink:#1d1d1f;                              /* основной текст */
  --gc-muted:#6e6e73;                            /* значения, вторые строки */
  --gc-grey:#86868b;                             /* значки и шевроны в покое */
  --gc-pale:#b0b0b5;                             /* сноски, погашенные строки */
  --gc-pbg:#f5f5f7;                              /* вывернутый штрих значка */
  /* ═══ ЕДИНАЯ ТЕМА ПОДЛОЖЕК (правка владельца 06.09): «если ночь — то и
     подложки объектов тёмные, и они едины с меню, и это меняется в ОДНОМ
     месте». Один источник цвета для ВСЕХ подложек кампуса: рельеф меню,
     бирки-пилюли объектов и их раскрытая карточка (badges.js берёт эти же
     переменные), хроника и панели-листы. Ночь переопределяет ТОЛЬКО этот
     набор в .gc-night ниже — и всё перекрашивается разом. Здесь — ДЕНЬ. */
  --surface-bg:#c2c5c9;                          /* сплошная подложка: ЧУТЬ темнее
                                                    ЭКРАННОГО цвета земли. УРОК:
                                                    равняться на номинал материала
                                                    газона (0xdcdee1) НЕЛЬЗЯ — под
                                                    светом сцены (hemi .95 + amb
                                                    .25) газон на экране ≈ #c6c9c6,
                                                    и «темнее номинала» #d5d7db
                                                    оказался СВЕТЛЕЕ земли (гнев
                                                    владельца, 4-й раз). ЖЕЛЕЗНОЕ
                                                    ПРАВИЛО: светлая тема — меню
                                                    темнее ЗЕМЛИ НА ЭКРАНЕ (не
                                                    тропинок), сверять по пикселю */
  --surface-ink:#1d1d1f;                         /* основной текст подложек */
  --surface-muted:#6e6e73;                       /* вторые строки, счётчики */
  --surface-grey:#86868b;                        /* значки и шевроны в покое */
  --surface-pale:#b0b0b5;                        /* сноски, погашенное */
  --surface-line:rgba(96,96,102,.16);            /* волосяной разделитель */
  --surface-glass:rgba(255,255,255,.62);         /* стекло сущностной пилюли */
  --surface-solid:rgba(249,249,251,.97);         /* плотная плашка карточки-бирки */
  --surface-tint:rgba(102,102,102,.55);          /* серое стекло титулов/заметок */
  --surface-tint-ink:#fff;                       /* текст на сером стекле */
  /* ТЕХНИЧЕСКИЙ РЕЛЬЕФ колонны (правка владельца 05.09): сплошной тусклый
     серый, глуше фона сцены — колонна читается ПОД контентом. Тень одна
     на весь рельеф: мягкая, вдоль правой кромки, изнутри.
     ЦВЕТ РЕЛЬЕФА ЖИВЁТ ПО ТЕМЕ СЦЕНЫ (дополнение владельца: «фон меню
     соответствует теме»): день — глуше DAY_BG #ededef, ночь — в тон
     NIGHT_BG #2f3238, чтобы меню не било белым по ночной сцене. Класс
     .gc-night на <html> ставит setClock (ui.js) из фазы движка (tickClock,
     ?t=day|night или переключатель темы). С 06.09 рельеф — ПСЕВДОНИМ
     единых токенов подложек выше: двух правд о цвете больше нет. */
  /* Рельеф — СУПЕР-МАТОВОЕ СТЕКЛО (правка владельца 06.09, вдогонку рефу:
     «не меняй их цвет — сделай прозрачнее на 50% и дай супер матового
     стекла»): цвет остаётся ЕДИНЫМ токеном подложек, прозрачность даёт
     color-mix (50% на прозрачном), мат — крупный blur на .gc-root::before.
     Ночь отдельной строки не требует: mix следует за --surface-bg сам. */
  /* РАЗВОРОТ ВЛАДЕЛЬЦА 06.09 (вечер): «меню должно быть техническим, а не
     сладеньким — убираем матовость, пилюльность и стиль облака над фоном».
     Рельеф снова СПЛОШНОЙ, без прозрачности и без blur: полупрозрачное
     стекло (35% + супер-мат) прожило полдня и снято. Прозрачные варианты
     не хранить — при возврате считать от --surface-bg заново. */
  --rail-bg:var(--surface-bg);                   /* сам рельеф — сплошной */
  --rail-ink:var(--surface-ink);                 /* основной текст рельефа */
  --rail-muted:var(--surface-muted);             /* счётчики, вторые строки */
  --rail-grey:var(--surface-grey);               /* шевроны и значки в покое */
  --rail-pale:var(--surface-pale);               /* погашенные строки */
  --rail-line:var(--surface-line);               /* волосяной разделитель */
  --rail-hover:rgba(0,0,0,.04);                  /* hover — ступень темнее */
  --rail-hilite:rgba(0,0,0,.075);                /* пункт под курсором */
  --rail-tone:rgba(0,0,0,.035);                  /* тихая зона (развороты) */
  --rail-input:rgba(255,255,255,.7);             /* поля ввода на рельефе */
  --rail-input-focus:#fff;
  --rail-action:#325cc8;                         /* действия/ссылки на рельефе */
  --rail-action-hot:#3961c9;
  --rail-shadow:inset -14px 0 16px -8px rgba(0,0,0,.2); /* тень контента */
  --rail-brand:var(--rail-ink);                  /* знак наверху ПОЛНЫМИ ЧЕРНИЛАМИ,
                                                    без приглушения (владелец 06.09:
                                                    «лого в меню без прозрачности»).
                                                    Прежний #5e5e61 читался блёклым.
                                                    /* прежняя пометка: «логотип
                                                    темнее на 30%» (правка
                                                    владельца 06.09) — 0.7 от
                                                    серого #86868b. Ночь
                                                    возвращает серый: на
                                                    тёмном рельефе темнить
                                                    нечего, знак обязан
                                                    читаться. */
  /* Карточки-«пилюли» активных строк СНЯТЫ (разворот владельца 06.09:
     «убираем пилюльность»): активное отмечает ЛИНИЯ СЛЕВА чернилами —
     технический язык правки 05.09. Карточных токенов больше нет. */
  /* Светлое стекло плашек. Грань-блик СНЯТА ВОВСЕ (девятая правка
     владельца: «убери засвет») — объём держит только blur+тон; токен
     оставлен, чтобы вернуть блик одной строкой, если передумает. */
  --gc-plate:rgba(255,255,255,.5);
  --gc-plate-hover:rgba(255,255,255,.6);
  /* Листочек хроники — СПЛОШНАЯ плашка, не стекло-витрина (правка владельца
     05.09: «хроника нечитаема»). Полупрозрачные .5 над серой и тем более
     тёмной сценой убивали контраст текста; путь эталонного тоста (main.html
     800-841: тост — сплошной rgb(29,29,31), НЕ стекло) — плашка плотная,
     мир сквозь текст не просвечивает. Взят светлый плотный тон + чернила:
     он читается и над серой, и над ночной сценой одинаково.
     mix-blend-mode:multiply НЕ применён намеренно: над тёмной сценой
     умноженный текст гаснет вместе с фоном, а на плотной плашке множить
     уже не на что. */
  --gc-leaf:rgba(255,255,255,.92);
  --gc-leaf-hover:rgba(255,255,255,.97);
  --gc-edge:none;
  --gc-glass18:blur(18px) saturate(140%);
  --gc-glass165:blur(16.5px) saturate(140%);
  /* Тёмное стекло больших пилюль. На наведение НЕ меняется. */
  --gc-dark-glass:rgba(0,0,0,.03);
  /* Один серо-синий даёт ступени плотности, наведение = ровно один шаг. */
  --gc-pill:rgba(120,120,128,.10);
  --gc-pill-hover:rgba(120,120,128,.16);
  --gc-row-hover:rgba(0,0,0,.04);                /* ховер строки списка */
  --gc-hilite:rgba(0,0,0,.075);                  /* строка меню под курсором */
  --gc-line:rgba(96,96,102,.16);                 /* волосяной разделитель */
  --gc-ring:#8f8f94;                             /* окантовка включённого */
  --gc-pick:rgba(47,124,246,.16);                /* выбранное, синим тоном */
  --gc-accent:#2f7cf6;                           /* синий кабинета */
  --gc-action:#325cc8;                           /* главное действие */
  --gc-action-hot:#3961c9;                       /* оно же под курсором */
  --gc-input:rgba(255,255,255,.7);               /* фон поля ввода */
  --gc-input-focus:#fff;
  /* Кривая всего движения кабинета и геометрия колонки. */
  --gc-curve:cubic-bezier(.2,.9,.28,1);
  --gc-col-w:320px;   /* 320 — владелец назвал число сам (правка 06.09).
                         История по живому: 292 → 366 (×1.25) → 311 (−15%,
                         не прижилось, откатили к 366) → 320. */
  /* Колонна «ПАРИТ» с отступом от краёв экрана (правка владельца 06.09:
     «меню поверх фона лучше не на весь размер, а как будто отступ от
     края — посмотри размер этого отступа у меню переключения дня и ночи +
     небольшое закругление»): отступ РОВНО как у пилюли темы (.gc-theme:
     top/right 12), скругление небольшое — 16, радиус исторических плашек. */
  --gc-float:0px;     /* вплотную к краю (владелец: отступа не надо) */
  --gc-round:0px;     /* рельеф вплотную — без скругления */
  /* Единое боковое поле контента колонны: ОДИНАКОВОЕ слева и справа
     (владелец: «новый объём отдай не длине строки, а отступам»). Все
     производные отступы (вертикаль имён, вложенность, счётчики) считаются
     calc'ом от этого токена — меняется одним числом, не разъезжается. */
  --gc-pad:30px; /* отступы по рефу Amplitude 06.09, только ритм: боковое
                    поле рефа ≈ 2.8 тогдашнего кегля (11px) → 30. История:
                    26 → 28.6 («пустота») → 18 («нищенство») → 30. Вся сетка
                    по-прежнему считается calc'ом от токена (вертикаль имён
                    pad+28, поля разворотов, вылеты строк-действий) —
                    пересчиталась сама, ничего не разъехалось. */
  --gc-field-pad:51px;
  /* Смысловые цвета — палитра Somacore X (правка владельца 06.09: «замени
     дешёвые цвета на модные — бери из somacore, а не это ебантяйство из
     Windows 98»). Откуда взято (somacorex/source/viewer/):
       · зелёный  #0f9e7c — tools/35colors.css (col-mark: зелёный UI вьюера
         на светлом, «притушен»; сценический #40e673 для текста кислотен);
       · коралл   #ff6f5e — main.html --коралл («отказ: Отмена в карточке»);
       · синий    #2f7cf6 — main.html --акцент («синий кабинета», он же
         --gc-accent кампуса — синих правд снова одна);
       · золото   #f0c96a — viewer.html (плашка замера и «Линейка»): вместо
         жёлтого W98 взят ТЁПЛЫЙ АКЦЕНТ вьюера, а НЕ красный #f24a4a —
         красный сливался бы с кораллом тревоги, и «доска почёта» из
         торжественной стала бы второй тревогой. Золото остаётся золотом.
     Производные (пастели тегов, чернильные тексты статусов) пересчитаны
     ниже от этих же значений. */
  --gc-gold:#f0c96a;
  --gc-ok:#0f9e7c;
  --gc-bad:#ff6f5e;
  --gc-blue:#2f7cf6;
  --gc-sleep:#a1a1a6;
  --gc-font:-apple-system,system-ui,"Inter",sans-serif;
}

/* НОЧНОЙ набор: в тон ночной сцены NIGHT_BG #2f3238, сам рельеф чуть глуше
   и темнее её («мы под контентом» держится в обеих темах). Класс на <html>
   ставит и снимает setClock (ui.js) по фазе движка. Переопределяются
   ЕДИНЫЕ токены подложек — рельеф, бирки, карточка и хроника темнеют
   разом из этого одного места (правка владельца 06.09). */
.gc-night{
  --surface-bg:#363a41;                          /* ЧУТЬ СВЕТЛЕЕ ночной сцены
                                                    NIGHT_BG #2f3238 (гневная
                                                    правка владельца 06.09:
                                                    темнее фона меню обязано
                                                    быть в СВЕТЛОЙ теме, в
                                                    тёмной — наоборот, светлее;
                                                    прежний #2b2f35 «темнее
                                                    сцены» был ошибкой) */
  --surface-ink:#e6e8ea;
  --surface-muted:#9ba1a8;
  --surface-grey:#878d94;
  --surface-pale:#5d646c;
  --surface-line:rgba(230,232,235,.13);
  --surface-glass:rgba(45,49,55,.6);             /* пилюли — тёмное стекло в тон меню, ~20% темнее фона */
  --surface-solid:rgba(46,50,56,.96);            /* карточка-бирка — плотная, ~15% темнее фона */
  --surface-tint:rgba(39,43,49,.72);             /* титулы — ~20% темнее фона, а не почти чёрные */
  --surface-tint-ink:#e6e8ea;
  --rail-hover:rgba(255,255,255,.055);
  --rail-hilite:rgba(255,255,255,.09);
  --rail-tone:rgba(255,255,255,.045);
  --rail-input:rgba(255,255,255,.1);
  --rail-input-focus:rgba(255,255,255,.17);
  --rail-action:#8ab0ff;
  --rail-action-hot:#a3c1ff;
  --rail-shadow:inset -14px 0 16px -8px rgba(0,0,0,.5);
  --rail-brand:var(--surface-ink);  /* ночью знак тоже полными чернилами */
}

/* корень: на весь экран, сам ничего не ловит — ловят только дети-панели,
   центр канваса остаётся кликабельным для орбит-контролов сцены */
.gc-root{
  position:fixed; inset:0; z-index:40;
  font-family:var(--gc-font); color:var(--gc-ink); font-size:16px;
  -webkit-font-smoothing:antialiased;
  pointer-events:none;
  min-width:1100px; /* мобильную адаптацию не делаем по условию задачи */
}
.gc-root *{ box-sizing:border-box }
.gc-root button{ font-family:inherit }

/* ═══════════════ ЛЕВАЯ КОЛОННА, ЯЗЫК СПИСКА ОБЪЕКТОВ SOMACORE ═══════════════
   Десятая правка владельца: колонна — НЕ набор кнопок-пилюль, а стопка
   плашек-СПИСКОВ, снятых со списка объектов вьювера (main.html: .list со
   строками .prow/.grow). Каждый раздел — одна стеклянная плашка радиуса 16;
   первой строкой — заголовок в манере строки КОНТЕЙНЕРА (.grow: жирнее,
   шеврон в левом столбце, счётчик справа), клик по нему сворачивает и
   раскрывает всю плашку; ниже — строки списка с волосяными разделителями.
   292 в ширину, 51 от верхнего-левого края, зазор плашек 9 (стопка
   инструментов эталона: #меню{gap:9px}).
   Ни колонка, ни группа указателя не ловят — ловят ТОЛЬКО сами строки.
   Колонка НЕ имеет нативного скролла: прокрутка — это обрезка, а плашка
   обязана всегда кончаться скруглением. Листается вся, transform'ом
   (см. wireColumnWheel в ui.js). */
/* ── СЕРАЯ ПОЛОСА-РЕЛЬЕФ — ЭТО САМА КОЛОННА ──
   Отдельного слоя больше нет (см. .gc-col ниже): фон, скругление и ловля
   указателя живут на самом блоке. Прежнее разделение держалось на том, что
   колонну листали transform'ом; прокрутка стала нативной, и надобность
   отпала. */
/* Слой-рельеф СНЯТ (владелец 06.09: «подложки отдельно не быть — это часть
   блока колонки»). Фон и ловля указателя переехали на саму .gc-col; здесь
   остаётся пусто, чтобы у полосы не было второго хозяина. */
.gc-root::before{ content:none; }
.gc-col{
  /* Вплотную к краю экрана: 0;0, отступа-поля 51 больше нет (владелец:
     «отступ от края как сейчас не нужен»). Небольшое внутреннее поле
     сверху/снизу — воздух рельефа, сетка строк не меняется. */
  /* Чернила и служебные тона колонны переведены на рельефные токены:
     внутри колонны пять ступеней цвета следуют теме дня/ночи, а модалки
     каталога (не колонна) остаются на своих светлых значениях. */
  --gc-ink:var(--rail-ink); --gc-muted:var(--rail-muted);
  --gc-grey:var(--rail-grey); --gc-pale:var(--rail-pale);
  --gc-line:var(--rail-line);
  --gc-row-hover:var(--rail-hover); --gc-hilite:var(--rail-hilite);
  --gc-input:var(--rail-input); --gc-input-focus:var(--rail-input-focus);
  --gc-action:var(--rail-action); --gc-action-hot:var(--rail-action-hot);
  color:var(--gc-ink); transition:color .4s ease;
  /* z-index:2 — над стеклом ::before (явный порядок; бленд-текстов в
     колонне НЕТ — см. урок «почему тексты не мультиплай» ниже, они
     ломали мат-стекло). Контент едет вместе с «парящим» стеклом: тот же
     отступ 12 от углов. */
  /* max(…, env(safe-area-inset-*)) — страница теперь занимает ВЕСЬ экран
     телефона (viewport-fit=cover в index.html): сцене под вырезами самое
     место, а строкам колонны — нет, их бы срезал Dynamic Island. На десктопе
     env() = 0 и max возвращает прежний --gc-float, ничего не сдвигая. */
  position:absolute;
  top:max(var(--gc-float), env(safe-area-inset-top, 0px));
  left:max(var(--gc-float), env(safe-area-inset-left, 0px));
  z-index:2;
  /* ширину держит КОЛОННА (292): разделы растянуты на неё, и разросшееся
     содержимое разворотов не имеет права раздувать список вширь */
  width:var(--gc-col-w);
  /* ФОН — ЧАСТЬ САМОЙ КОЛОННЫ (владелец 06.09: «подложки отдельно не быть,
     это часть блока колонки»). Отдельный слой .gc-root::before снят: он
     существовал, пока колонну листали transform'ом и рельеф уезжал бы вместе
     со строками. Прокрутка теперь НАТИВНАЯ (overflow-y ниже) — фон держится
     сам, а свернуть меню стало одним движением одного блока. */
  bottom:max(var(--gc-float), env(safe-area-inset-bottom, 0px));
  background:var(--rail-bg);
  border-radius:var(--gc-round);
  transition:transform .55s var(--gc-curve), background .4s ease;
  /* зазор групп 4→6 — ритм отступов, реф Amplitude (владелец 06.09):
     между «пустотой» (9) и «нищенством» (4) */
  display:flex; flex-direction:column; align-items:stretch; gap:6px;
  /* Колонка стоит от верха до низа окна: между группами и хроникой —
     растяжка (.gc-spacer), поэтому пока группы коротки, хроника прижата
     к нижнему краю, а разросшаяся группа честно теснит её за экран. */
  /* ── НАТИВНАЯ ПРОКРУТКА КАК У КАРТОЧКИ-БИРКИ (правка владельца 06.09:
     «такой же эффект прокрутки, как у меню курсора при клике на объект»).
     Ровно механика .gc-badge-card-in из badges.js: overflow-y:auto +
     overscroll-behavior:contain + спрятанный скроллбар. Самодельного
     transform-листания больше НЕТ (wireColumnWheel теперь только хелперы) —
     резину на пределах даёт браузер, как и требовал владелец. Указатель
     колонна ловит ЦЕЛИКОМ (иначе нативному скроллу не жить): полоса и так
     глушила сцену под собой, пустоты меню ничего не теряют, а зум сцены
     слушает wheel на КАНВАСЕ (input.js), не на window — не конфликтуют. */
  height:calc(100vh - var(--gc-float) * 2); padding:8px 0 10px;
  overflow-y:auto; overscroll-behavior:contain;
  scrollbar-width:none;                 /* полос прокрутки в кабинете нет */
  pointer-events:auto;
}
.gc-col::-webkit-scrollbar{ width:0 }
/* Дети колонки НЕ сжимаются: колонна теперь фикс-высоты скролл-контейнер,
   и дефолтный flex-shrink при разросшемся контенте ужимал секции — у
   «Управления» с открытым разворотом overflow:hidden плашки молча съедал
   последнюю строку («Сессии» пропадала). Переполнение обязано уходить в
   нативный скролл, а не в сжатие. Растяжку сохраняет .gc-spacer ниже. */
.gc-col>*{ flex-shrink:0 }

/* ── МАРКА НАВЕРХУ МЕНЮ (возврат 06.09: «логотип зачем убрал? верни») ──
   Отступы шапки ЩЕДРЫЕ (24 сверху / 14 снизу) — владелец: «кажется, что всё
   забито вверх», шапка обязана дышать; вместе с padding-top:22 первой
   .gc-sechead верх колонны получает воздух. Знак — CSS-mask по
   gorskycorp.svg, красится фоном. Цвет — --rail-brand: днём темнее серого
   на 30% («логотип наверху темнее на 30%» — правка владельца 06.09; прежнее
   правило «логотип не ярче заголовка секции» не нарушено — он стал ТЕМНЕЕ
   заголовка, так велел сам владелец), ночью — обычный серый, чтобы знак
   читался на тёмном рельефе. */
.gc-brand{ display:flex; align-items:center; padding:24px var(--gc-pad) 14px; pointer-events:none }
.gc-brand-mark{
  width:62px; height:27px; background:var(--rail-brand);
  -webkit-mask:url("gorskycorp.svg") no-repeat left center/contain;
  mask:url("gorskycorp.svg") no-repeat left center/contain;
  transition:background .4s ease;
}

.gc-spacer{ flex:1 1 auto; min-height:8px; pointer-events:none }
.gc-group{ position:relative; pointer-events:none }
.gc-stack{ pointer-events:none }
.gc-stack button,.gc-stack input,.gc-stack label,
.gc-stack .gc-navbody{ pointer-events:auto }

/* Блеклая подложка мира за колонкой: слой шире колонки во всю высоту, мир
   сквозь него угадывается примерно на 20%, правый край уходит в прозрачное
   ПЛАВНО (маска-градиент ~90px), резкой кромки нет. Указатель не ловит:
   колонка не имеет права перехватывать сцену собой (правило эталона). */
/* Подложки за колонкой НЕТ ВООБЩЕ (приказ владельца 05.09: «убери
   вообще эту белую херабору») — мир под плашками живёт в полный цвет. */
.gc-shade{ display:none; }

/* ═══ РАЗДЕЛ КОЛОННЫ — ПЛОСКО НА РЕЛЬЕФЕ ═══
   Плашки-стекла больше нет (правка владельца 05.09): раздел — просто кусок
   серой полосы, без своего фона, радиуса, blur и теней. Сетка строк .list
   эталона сохранена, скруглять больше нечего. Короб указателя не ловит —
   ловят строки. */
.gc-plate{
  width:100%; display:flex; flex-direction:column;
  border-radius:0; background:transparent;
  -webkit-backdrop-filter:none; backdrop-filter:none;
  box-shadow:none; overflow:hidden;
  pointer-events:none;
}
/* Секции делит ВОЗДУХ, а не черта (реф Synapse 06.09): волосяная линия под
   разделом снята, отбивку даёт верхнее поле заголовка-надписи .gc-sechead. */
.gc-group>.gc-grow{ pointer-events:auto }

/* ── ЗАГОЛОВОК-НАДПИСЬ СЕКЦИИ (реф: «Folders» / «Neuralink Space» / «Tags») ──
   Не строка и не кнопка: маленькая серая надпись КАПСОМ над группой строк.
   Секции колонны всегда раскрыты (сворачивались раньше — реф этого языка
   не знает); счётчик секции — тем же счётным кеглем справа. */
.gc-sechead{
  display:flex; align-items:baseline; gap:10px;
  /* Ритм отступов — реф Amplitude (владелец 06.09): между «пустотой» и
     «нищенством». Верх 22 — межсекционный воздух рефа ≈ полтора шага
     строки. ЖЕЛЕЗНОЕ ПРАВИЛО владельца: зазор «шапка → первый пункт»
     ОБЯЗАН быть не меньше межпунктового. Пересчёт под кегль 13 (06.09):
     строки 38 с вертикальными полями (38−16)/2 = 11 — межпунктовый видимый
     зазор = 11+11 = 22; у шапки снизу 12: 12+11 = 23 ≥ 22 — правило
     держится, ниже 11 низ шапки опускать нельзя. */
  padding:22px var(--gc-pad) 12px;
  /* капс 11 (был 10 — подъём кеглей 06.09); трекинг .66 → .3: «избыточное
     расстояние между буквами убрано» (правка владельца 06.09) — капс 11px
     с прежним трекингом разъезжался */
  font-size:11px; font-weight:600; letter-spacing:.3px; text-transform:uppercase;
  color:var(--gc-grey);
}
.gc-sechead .gc-nm{ flex:1; min-width:0 }

/* ── ПОЧЕМУ ТЕКСТЫ НЕ МУЛЬТИПЛАЙ (проверено вживую 06.09) ──
   Владелец просил mix-blend-mode:multiply для текстов колонны. Сделано
   было — и МОЛЧА УБИЛО МАТ-СТЕКЛО: по спеке Filter Effects 2 любой потомок
   с mix-blend-mode превращает корневой stacking context (.gc-root) в
   backdrop root, и backdrop-filter рельефа перестаёт видеть сцену — blur
   размывает пустоту, панель становится голой плёнкой, бирки сцены лезут в
   меню кашей. Настоящий multiply и backdrop-blur в одном дереве в Chromium
   НЕ ЖИВУТ — выбран мат (он и есть читаемость): текст плотными чернилами
   на размытом стекле визуально и так «впечатан». Вернуть multiply ценой
   потери размытия можно одной строкой на спанах .gc-nm/.gc-val/.gc-mark. */

/* ── СТРОКА-ЗАГОЛОВОК И СТРОКА ОБЪЕКТА — .grow/.prow эталона ──
   У эталона 44 в высоту с полями 10; уплотнение до 32 вышло «нищенством».
   Подъём кеглей 06.09 («нормальный размер текста»): подпись 13/500/−0.18,
   строка 36 → 38 с полями (38−16)/2 = 11 — плотный ритм (шаг ≈ 2.8 кегля)
   сохранён. У заголовка (контейнера) начертание 600 — он читается как
   заголовок своего куска списка, а не как ещё одна строка. Один столбец
   слева на всех (18): у заголовка в нём шеврон, у объекта — иконка; имена
   всех строк начинаются на одной вертикали — список читается столбцами. */
.gc-grow,.gc-prow{
  /* Иконка НА 2px БЛИЖЕ к имени (gap 10→8), и обе НА 2px ПРАВЕЕ (владелец
     06.09): левое поле строки = pad+2, дальше всё считается от него. */
  position:relative; display:flex; align-items:center; gap:8px;
  width:100%; height:38px;
  padding:11px var(--gc-pad) 11px calc(var(--gc-pad) + 2px);
  border:none; border-radius:0; background:transparent; cursor:pointer;
  text-align:left; font-family:inherit;
  font-size:13px; font-weight:500; letter-spacing:-.18px; color:var(--gc-ink);
  transition:background .15s ease;
}
.gc-grow{ font-weight:600 }
/* Полосы во всю ширину при наведении больше нет — её заменила пилюля выше. */
.gc-grow:hover,.gc-prow:hover{ background:transparent }
/* Раскрываемая строка секции «Управление»: иконка в столбце-маркере,
   подпись на общей вертикали pad+28, ШЕВРОН СПРАВА (правка владельца
   06.09: стрелка слева перед иконкой — «тупейшее», уехала на правый край,
   где у остальных строк счётчик). Кегль строки — 500, как у обычных строк:
   жирность бережём для раскрытой. */
.gc-grow--sub{ padding-left:var(--gc-pad); font-weight:500 }
/* ── АКТИВНАЯ/РАСКРЫТАЯ СТРОКА — ЛИНИЯ СЛЕВА (разворот владельца 06.09:
   «убираем пилюльность», технический язык 05.09): включённое отмечает
   линия чернилами по левой кромке, НЕ заливка и НЕ карточка. Никаких
   радиусов, теней и врезок — сетка строк не шевелится. */
/* АКТИВНАЯ СТРОКА — ПИЛЮЛЯ (владелец 06.09: «не от и до, а пилюлей с немного
   закруглёнными углами»). Прежняя чернильная линия слева во всю ширину снята.
   Радиус БОЛЬШЕ, чем у выборок (12), и МЕНЬШЕ, чем у поля ввода (16) — 14.
   Рисуем фоном на ::before с боковым вылетом внутрь поля, чтобы пилюля не
   липла к кромке и не ломала сетку строк. */
/* ВЫДЕЛЕНИЕ — ТОЛЬКО ПРИ НАВЕДЕНИИ, И ТОЛЬКО ПИЛЮЛЕЙ ПО РАЗМЕРУ ПУНКТА
   (владелец 06.09: «при выборе не остаётся никаких пилюль, а при наведении
   пилюля есть — но не полоса»). У выбранной строки фона НЕТ вовсе: её
   отмечает жирность имени и чернильная иконка, а не плашка.
   Пилюля рисуется на самом ИМЕНИ — только оно знает, где текст кончается;
   полоса во всю ширину колонны отсюда невозможна в принципе.
   z-index:-1 уводит её под текст, но не под колонну: у той своя стопка. */
/* ЗАКОН ОДИН НА ВСЕ СТРОКИ КОЛОННЫ: заголовок раздела, пункт каталога,
   строка сессии — везде при наведении одна и та же пилюля по размеру имени.
   Полос во всю ширину в меню не осталось нигде. */
.gc-grow .gc-nm, .gc-prow .gc-nm, .gc-item .gc-nm{ position:relative }
.gc-grow:hover .gc-nm::before,
.gc-prow:hover .gc-nm::before,
.gc-item:hover .gc-nm::before{
  content:""; position:absolute; z-index:-1;
  left:-34px; right:-12px; top:-6px; bottom:-6px;
  border-radius:14px;
  background:color-mix(in srgb, var(--gc-hilite) 50%, transparent);
}
.gc-prow--on:hover{ background:transparent }
/* раскрытая строка-раздел читается заголовком своего куска: чернила гуще,
   иконка и шеврон — чернилами, не серым */
.gc-group--open>.gc-grow--sub{ font-weight:600 }
.gc-group--open>.gc-grow--sub .gc-mark{ color:var(--gc-ink) }

/* Левый столбец строки: 18 на всех (было 16 — «иконки на 15% больше»,
   правка владельца 06.09), содержимое по центру. */
.gc-mark{
  flex:0 0 18px; width:18px; height:18px; padding:0; border:none;
  background:transparent; display:flex; align-items:center; justify-content:center;
  /* ИКОНКИ — ЦВЕТА ТЕКСТА (владелец 06.09: «иконки цвета текста, все — это
     единое»). Наследуем чернила строки, а не служебный серый: строка читается
     одним целым, а не подписью с блёклой картинкой сбоку. */
  color:inherit;
}
.gc-mark svg{
  display:block; width:17px; height:17px; fill:none; stroke:currentColor;
  stroke-width:1.15; stroke-linecap:round; stroke-linejoin:round;
}
/* Кружков цвета (.gc-pdot) больше НЕТ (правка владельца 06.09: «дешёвые
   цветные круги убери») — фильтры сотрудников живут в строке-выборке. */

/* ── СТРОКА-ВЫБОРКА СЛОЯ «Сотрудников» — второе из двух полей секции
   (правка владельца 06.09: «всего два поля: с поиском и с выборкой»).
   Та же сетка, что у строки-поиска: 38, воронка в столбце-маркере,
   НАТИВНЫЙ select без украшательств — выбранного показывает он сам. */
.gc-frow{
  display:flex; align-items:center; gap:10px; width:100%; height:38px;
  padding:11px var(--gc-pad); cursor:pointer; transition:background .18s ease;
}
/* Поисковая и фильтрующая строки — не полоса, а тот же лёгкий тон, но
   собранный в скруглённое поле по ширине строки минус поля колонны. */
.gc-frow:hover,.gc-frow:focus-within{ background:transparent }
.gc-frow{ position:relative }
.gc-frow:hover::before,.gc-frow:focus-within::before{
  content:""; position:absolute; z-index:0; inset:2px calc(var(--gc-pad) - 16px);
  border-radius:14px; background:color-mix(in srgb, var(--gc-hilite) 50%, transparent);
}
.gc-frow>*{ position:relative; z-index:1 }
.gc-fselect{
  flex:1; min-width:0; height:100%; padding:0; border:none; border-radius:0;
  background:transparent; outline:none; font-family:inherit; cursor:pointer;
  font-size:13px; font-weight:500; letter-spacing:-.18px; color:var(--gc-ink);
}
/* Шеврон довернём, а не подменим: свёрнутая плашка держит его на −90°,
   тем же ходом .18s, что у контейнеров кабинета. */
.gc-chev svg{ transition:transform .18s ease }
/* У ЗАКРЫТОГО раздела шеврона НЕТ ВОВСЕ (владелец 06.09) — он появляется
   только когда раздел раскрыт и показывает, чем свернуть. */
.gc-group:not(.gc-group--open)>.gc-grow .gc-chev{ visibility:hidden }

/* Имя — свою ширину, счётчик — счётным кеглем справа (11/500/−0.1 tabular:
   число меняется, и без моноширинных цифр строка дёргалась бы вслед). */
.gc-nm{ flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap }
.gc-val{
  flex:none; font-size:11px; font-weight:500; letter-spacing:-.1px;
  color:var(--gc-muted); font-variant-numeric:tabular-nums;
}

/* ── ТЕЛО ПЛАШКИ (стек): строки под заголовком, флаш, без своих полей.
   Раскрытая плашка РАЗДВИГАЕТ соседей — стек в потоке, ход даёт slideStack.
   Волосяных разделителей между строками БОЛЬШЕ НЕТ (реф Synapse 06.09:
   строки стоят на воздухе, черты остались только у списков-выпадашек и
   внутренностей листов — они не колонна). */
.gc-stack{
  position:static; margin-top:0; display:none; flex-direction:column;
  align-items:stretch; width:100%; padding:0;
}
/* Ровно СВОЙ стек, не потомковые: внутри «Управления» лежат вложенные
   группы-вкладки, и потомковый селектор раскрывал бы их закрытые тела
   вместе с родителем. */
.gc-group--open>.gc-stack{ display:flex }
.gc-stack>*{ position:relative; max-width:100% }

/* ── СТРОКА-ПОЛЕ ПОИСКА — первая строка листа «Сотрудники»: та же строка
   38 (подъём кеглей 06.09) с левым столбцом (лупа на месте кружка), не
   пилюля. Отклик — лёгкий тон на фокусе, как у поля кабинета. */
.gc-srow{
  display:flex; align-items:center; gap:10px; width:100%; height:38px;
  padding:11px var(--gc-pad); cursor:text; transition:background .18s ease;
}
/* фокус поля — та же ступень темнее серого, что и hover строк: на рельефе
   светлеть некуда, светлый тон читался бы плашкой */
.gc-srow:focus-within{ background:transparent }
.gc-srow{ position:relative }
.gc-srow:hover::before,.gc-srow:focus-within::before{
  content:""; position:absolute; z-index:0; inset:2px calc(var(--gc-pad) - 16px);
  border-radius:14px; background:color-mix(in srgb, var(--gc-hilite) 50%, transparent);
}
.gc-srow>*{ position:relative; z-index:1 }
.gc-sfield{
  flex:1; min-width:0; height:100%; padding:0; border:none; border-radius:0;
  background:transparent; outline:none; font-family:inherit;
  font-size:13px; font-weight:500; letter-spacing:-.18px; color:var(--gc-ink);
}
/* Подсказка поля — muted, как у поля эталона (#завершение .search::placeholder
   {color:var(--muted)}): pale на светлом стекле не читался вовсе. */
.gc-sfield::placeholder{ color:var(--gc-muted); font-weight:400 }
/* подсказки поиска — строки того же листа, свой потолок и прокрутка;
   текст на вертикали имён даёт само поле .gc-item (39.5) */
.gc-sugg{
  display:flex; flex-direction:column;
  max-height:170px; overflow-y:auto; overscroll-behavior:contain;
  scrollbar-width:none;
}
.gc-sugg::-webkit-scrollbar{ width:0 }
.gc-sugg .gc-item{ position:relative }
.gc-sugg .gc-item+.gc-item::after{
  content:""; position:absolute; left:0; right:0; top:0; height:.5px;
  background:var(--gc-line); pointer-events:none;
}

/* ── РАЗДЕЛ ЕДЕТ, А НЕ МИГАЕТ ──
   Высоту на время хода задаёт код (см. slideStack): max-height, оба поля,
   отступ и альфа — одной кривой и за одно время. Приход 260, уход 220.
   overflow прячется ТОЛЬКО на время хода. */
.gc-group--moving>.gc-stack{
  overflow:hidden;
  transition:max-height var(--gc-move,.26s) var(--gc-curve),
             padding-top var(--gc-move,.26s) var(--gc-curve),
             padding-bottom var(--gc-move,.26s) var(--gc-curve),
             margin-top var(--gc-move,.26s) var(--gc-curve),
             opacity calc(var(--gc-move,.26s) * .75) ease;
}

/* скрытая часть листа (подсказки без совпадений) — просто не занимает места */
.gc-list--hidden{ display:none }

/* ── ПРОСТОЙ ПУНКТ — строка меню эталона (main.html 637-643): у эталона
   34 в высоту; 28 вышло «нищенством» → 30 → 32 (подъём кеглей 06.09);
   кегль 13/16/400/−0.224. Подсветка ВО ВСЮ ширину плашки, без
   своего скругления (углы подрежет плашка) и БЕЗ перехода: ползущая
   подсветка читается как задержка. Поле слева — --gc-pad + 28 (= пустой
   столбец-маркер 18 + зазор 10): маркера у пункта нет, но его СТОЛБЕЦ
   зарезервирован, и текст стоит на той же вертикали, что имена строк
   списка (правило эталона «один столбец слева на всех» — иначе пункты
   каталога начинались бы на --gc-pad и разъезжались с именами объектов
   ровно на ступень, 28). */
.gc-item{
  display:flex; align-items:center; gap:10px; width:100%; height:32px;
  padding:0 var(--gc-pad) 0 calc(var(--gc-pad) + 2px); border:none; border-radius:0; background:transparent;
  cursor:pointer; text-align:left;
  font-size:13px; font-weight:400; line-height:16px; letter-spacing:-.224px;
  color:var(--gc-ink); white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
/* Полоса у пункта каталога снята — её место заняла пилюля выше. */
.gc-item:hover{ background:transparent }
/* активная подсказка — линия слева, как у всех включённых строк
   (технический язык; карточка-пилюля снята разворотом владельца 06.09) */
.gc-item--active{ box-shadow:inset 2px 0 0 var(--gc-ink) }
.gc-item-note{
  padding:8px var(--gc-pad) 8px calc(var(--gc-pad) + 2px); font-size:13px; font-weight:400; line-height:16px;
  letter-spacing:-.224px; color:var(--gc-pale);
}

/* ── Каскад въезда колонки: слева, сверху вниз, 520мс, шаг 60мс.
   Блок идёт невидимым и проступает на последних 15% пути. backwards
   прячет начальный кадр на время задержки, но стиль после не держит. */
@keyframes gc-sec-in{
  /* колонна слева — каскад снова въезжает СЛЕВА (минус, откат 06.09) */
  0%{opacity:0;transform:translateX(-42px)}
  85%{opacity:0;transform:translateX(-6.3px)}
  100%{opacity:1;transform:none}
}
@media (prefers-reduced-motion:no-preference){
  .gc-col>*{ animation:gc-sec-in .52s var(--gc-curve) backwards }
  .gc-col>*:nth-child(1){ animation-delay:.05s }
  .gc-col>*:nth-child(2){ animation-delay:.11s }
  .gc-col>*:nth-child(3){ animation-delay:.17s }
  .gc-col>*:nth-child(4){ animation-delay:.23s }
  .gc-col>*:nth-child(5){ animation-delay:.29s }
  .gc-col>*:nth-child(6){ animation-delay:.35s }
  .gc-col>*:nth-child(7){ animation-delay:.41s }
  .gc-col>*:nth-child(8){ animation-delay:.47s }
  .gc-col>*:nth-child(9){ animation-delay:.53s }
  .gc-col>*:nth-child(10){ animation-delay:.53s }
}

/* ══════════════════ ХРОНИКА: ХВОСТ ЛЕВОЙ КОЛОННЫ ══════════════════
   Часть того же потока, что и группы (как кнопки сдачи и переключатель
   языка в кабинете): раскрытая группа выше сдвигает листочки за край
   экрана, достать их — прокруткой всей колонки. Всегда не больше семи.
   Записи лежат ПЛОСКО на сером рельефе (технический язык 05.09): без
   плашек, стекла и радиусов, каждую отбивает волосяная черта сверху.
   Читаемость держит сам рельеф — он сплошной, мир сквозь текст не
   просвечивает (та же цель, что у прежней плотной плашки). */
.gc-chronicle{
  /* зазор записей 9→4 — в ритме уплотнённой колонки (правка 06.09) */
  width:var(--gc-col-w); display:flex; flex-direction:column; gap:4px;
  pointer-events:none; /* лента не мешает канвасу, ловят сами записи */
}
.gc-chronicle-item{
  /* вертикаль записи 8→10 — ритм отступов, реф Amplitude (владелец 06.09):
     между «пустотой» и «нищенством» */
  background:transparent; border-radius:0; padding:10px var(--gc-pad);
  border-top:.5px solid var(--gc-line);
  font-size:13px; font-weight:400; line-height:1.35; letter-spacing:-.224px;
  color:var(--gc-ink);
  animation:gc-leaf-in .28s var(--gc-curve);
  transition:opacity .35s ease, background .18s ease;
  pointer-events:auto; outline:none;
}
.gc-chronicle-line{ display:flex; align-items:flex-start; gap:8px }
/* Приход — снизу из альфы, тем же движением, что тост эталона. */
@keyframes gc-leaf-in{
  from{ opacity:0; transform:translateY(15px) }
  to{ opacity:1; transform:translateY(0) }
}
/* максимум 7 листочков (JS их не пускает больше), тают по нарастающей —
   считаем от начала, новые сверху */
.gc-chronicle-item:nth-child(2){ opacity:.92 }
.gc-chronicle-item:nth-child(3){ opacity:.8 }
.gc-chronicle-item:nth-child(4){ opacity:.68 }
.gc-chronicle-item:nth-child(5){ opacity:.55 }
.gc-chronicle-item:nth-child(6){ opacity:.42 }
.gc-chronicle-item:nth-child(7){ opacity:.3 }
/* Точек-кругляшков у записей БОЛЬШЕ НЕТ (правка владельца 06.09: «убери
   дешёвые цветные кругляшки»): класс события живёт на самой записи
   (.gc-chronicle-item--info/--warn/--bad, ставит chronicle() в ui.js),
   а видимый цвет несёт паспорт события текстом. */
/* текст тянется и переносится; штамп времени — счётным кеглем, справа */
.gc-chronicle-text{ flex:1; min-width:0; overflow-wrap:anywhere }
/* Штамп времени и все вторичные строки паспорта — muted (#6e6e73), не pale:
   призрачный b0b0b5 на плашке не читался вовсе (та же правка владельца). */
.gc-chronicle-time{
  flex:none; margin-left:2px; font-size:11px; font-weight:500;
  letter-spacing:-.1px; font-variant-numeric:tabular-nums; color:var(--gc-muted);
}

/* ── паспорт события: раскрывается ВНИЗ только под курсором ──
   Свёрнутое — нулевая высота без отступов; ход — той же кривой и тем же
   временем, что аккордеон колонки (260 приход / 220 уход). */
.gc-chronicle-fold{
  max-height:0; overflow:hidden; opacity:0;
  transition:max-height .22s var(--gc-curve), opacity .16s ease;
}
.gc-chronicle-item:hover .gc-chronicle-fold,
.gc-chronicle-item:focus-within .gc-chronicle-fold{
  max-height:300px; opacity:1;
  transition:max-height .26s var(--gc-curve), opacity .2s ease .05s;
}
/* наведённая запись не тает вместе с соседями; отклик — ступень темнее
   серого, как у всех строк рельефа, БЕЗ теней */
.gc-chronicle-item:hover,.gc-chronicle-item:focus-within{
  opacity:1 !important; background:var(--gc-row-hover);
}
.gc-chronicle-fold-in{ padding-top:7px; margin-top:6px; border-top:.5px solid var(--gc-line) }
.gc-chronicle-src{ font-size:11px; font-weight:400; line-height:1.45; letter-spacing:-.1px; color:var(--gc-muted) }
.gc-chronicle-src b{ font-weight:600; color:var(--gc-ink) }
/* охра — тёмный тон золота Somacore #f0c96a (чистое золото на светлом
   рельефе #d5d7db не читается текстом); ночью — светлый тон того же золота */
.gc-chronicle-src--none{ color:#7a5c14; font-weight:500 }
.gc-night .gc-chronicle-src--none{ color:#ecd08a }
.gc-chronicle-file{ font-size:11px; letter-spacing:-.1px; overflow-wrap:anywhere; color:var(--gc-muted); font-variant-numeric:tabular-nums }
.gc-chronicle-facts{ margin-top:5px; display:flex; flex-direction:column; gap:2px }
.gc-chronicle-fact{ display:flex; gap:6px; font-size:11px; letter-spacing:-.1px; line-height:1.4 }
.gc-chronicle-fact-k{ flex:none; max-width:46%; color:var(--gc-muted) }
.gc-chronicle-fact-v{ flex:1; min-width:0; color:var(--gc-ink); overflow-wrap:anywhere; font-variant-numeric:tabular-nums }
/* «штатно» — цвет несёт САМ ТЕКСТ (кругляшок ::before снят правкой
   владельца 06.09 вместе с остальными точками). Тона — тёмные/светлые
   производные зелёного #0f9e7c и коралла #ff6f5e Somacore X: чистые
   значения текстом не читаются на рельефе, ночная пара — светлая. */
.gc-chronicle-state{ margin-top:6px; font-size:11px; letter-spacing:-.1px; display:flex; align-items:center; gap:6px }
.gc-chronicle-state--ok{ color:#0b6f57 }
.gc-chronicle-state--bad{ color:#a4402e }
.gc-night .gc-chronicle-state--ok{ color:#3fe0b8 }
.gc-night .gc-chronicle-state--bad{ color:#ffa294 }
.gc-chronicle-note{ margin-top:5px; font-size:11px; letter-spacing:-.1px; color:var(--gc-muted); font-style:italic }
/* «Проект →» — тихая строка-действие паспорта: без подложки, цветом
   действия; отклик — подсветка строки во всю ширину листочка. */
.gc-chronicle-corp{
  margin:6px calc(var(--gc-pad) * -1) 0; text-align:left; cursor:pointer;
  background:transparent; border:none; border-radius:0;
  border-top:.5px solid var(--gc-line); padding:6px var(--gc-pad) 2px;
  width:calc(100% + var(--gc-pad) * 2);
  font:inherit; font-size:11px; font-weight:500; letter-spacing:-.1px;
  color:var(--gc-action); transition:background .15s ease;
}
.gc-chronicle-corp:hover{ background:var(--gc-hilite) }

/* ══════════════════════ тост ══════════════════════
   Чёрная плашка эталона: высота 33, кегль 12, трекинг −0.374, поля 0 25.
   Приход 280мс кривой кабинета, уход 220мс РАЗВЁРНУТОЙ кривой прихода —
   пришла снизу из альфы, туда же и уходит. */
.gc-toast{
  position:absolute; left:50%; bottom:98px; z-index:5;
  transform:translate(-50%,15px);
  height:33px; display:flex; align-items:center; white-space:nowrap;
  background:rgba(29,29,31,0); color:rgba(255,255,255,0);
  border-radius:9999px; padding:0 25px;
  font-size:12px; font-weight:400; letter-spacing:-.374px; line-height:1;
  transition:transform .22s cubic-bezier(.72,0,.8,.1),
             background .22s cubic-bezier(.72,0,.8,.1),
             color .22s cubic-bezier(.72,0,.8,.1);
  pointer-events:none;
}
.gc-toast--on{
  transform:translate(-50%,0); background:rgb(29,29,31); color:#fff;
  transition:transform .28s var(--gc-curve), background .28s var(--gc-curve),
             color .28s var(--gc-curve);
}

/* ══════ листы-досье: досье / шкаф / корпорация / вопросы ══════
   Десятая правка владельца: НЕ вторая колонка справа, а лист В ТОМ ЖЕ
   ПОТОКЕ колонны — стоит сразу под разделами (перед растяжкой) и,
   раскрывшись, честно теснит хронику вниз, как любой раскрытый список.
   Материал — рельеф (05.09): лист лежит плоско на сером, без стекла и
   радиуса, его границы — волосяные черты сверху и снизу. Шрифтовые роли
   после подъёма кеглей 06.09: титул 14/600/−0.24, строка 13/400/−0.224,
   счётчики 11/500/−0.1. Длинное листается ВНУТРИ себя (потолок ниже), полос
   прокрутки в кабинете нет. Закрытие — крестик и Esc. */
.gc-dossier{
  position:relative; width:100%;
  max-height:clamp(220px, 56vh, 560px); overflow-y:auto;
  overscroll-behavior:contain;
  background:transparent; border-radius:0; padding:14px var(--gc-pad) 12px;
  border-top:.5px solid var(--gc-line); border-bottom:.5px solid var(--gc-line);
  display:none; pointer-events:auto;
  scrollbar-width:none; /* полос прокрутки в кабинете нет */
}
.gc-dossier::-webkit-scrollbar{ width:0 }
.gc-dossier--on{ display:block }
/* Каскад въезда колонки листам-досье не принадлежит: спрятанный лист не
   играет вовсе, раскрывшийся приходит листочком хроники — снизу из альфы. */
.gc-col>.gc-dossier{ animation:none }
.gc-col>.gc-dossier.gc-dossier--on{ animation:gc-leaf-in .28s var(--gc-curve) }
/* Закрыть — круглая кнопка 29, тон + шаг тона, как .round эталона. */
.gc-dossier-close{
  position:absolute; top:10px; right:10px; border:none; cursor:pointer;
  width:29px; height:29px; border-radius:9999px;
  background:rgba(120,120,128,.12); color:var(--gc-ink);
  font-size:13px; font-weight:400; line-height:1;
  transition:background .16s ease;
}
.gc-dossier-close:hover{ background:rgba(120,120,128,.20) }
.gc-dossier-head{ display:flex; align-items:center; gap:13px }
.gc-dossier-face{ font-size:34px; line-height:1 }
.gc-dossier-name{ font-size:14px; font-weight:600; letter-spacing:-.24px; line-height:16px }
.gc-dossier-path{
  font-size:11px; font-weight:500; letter-spacing:-.1px; line-height:16px;
  color:var(--gc-muted); margin-top:3px; word-break:break-all;
  font-variant-numeric:tabular-nums;
}

.gc-tags{ display:flex; flex-wrap:wrap; gap:5px; margin:12px 0 2px }
.gc-tag{
  font-size:11px; font-weight:500; letter-spacing:-.1px; border-radius:9999px;
  padding:4px 10px; background:var(--gc-pill); color:var(--gc-ink);
}
/* Пастели пересчитаны от палитры Somacore X (правка владельца 06.09, см.
   блок токенов в :root): фон — тон токена, чернила — его тёмная производная,
   читаемая на светлом #d5d7db. Синий rgba(47,124,246) и был #2f7cf6. */
.gc-tag--gold{ background:rgba(240,201,106,.32); color:#6f5716 }
.gc-tag--ok{ background:rgba(15,158,124,.14); color:#0b6f57 }
.gc-tag--bad{ background:rgba(255,111,94,.15); color:#a4402e }
.gc-tag--sleep{ background:rgba(120,120,128,.14); color:var(--gc-muted) }
/* синий — «в работе»: тот же цвет, что горит полосой над входом в комнату */
.gc-tag--info{ background:rgba(47,124,246,.12); color:#0f5cae }
/* Ночь единой темы (06.09): смысловые пастели тегов держат читаемость на
   тёмной подложке #363a41 — чернила светлеют (зелёный — #3fe0b8, ночной
   зелёный самого вьюера, 35colors.css). Одно место на обе точки показа
   досье: лист колонны и карточка-бирка (badges.js). */
.gc-night .gc-tag--gold{ background:rgba(240,201,106,.17); color:#ecd08a }
.gc-night .gc-tag--ok{ background:rgba(15,158,124,.26); color:#3fe0b8 }
.gc-night .gc-tag--bad{ background:rgba(255,111,94,.2); color:#ffa294 }
.gc-night .gc-tag--info{ background:rgba(47,124,246,.24); color:#9cc0ff }

.gc-sec{ margin-top:12px; padding-top:11px; border-top:.5px solid var(--gc-line) }
.gc-sec h4{
  margin:0 0 4px; font-size:13px; font-weight:500; letter-spacing:-.18px;
  color:var(--gc-ink);
}
.gc-sec p{ margin:0; font-size:13px; font-weight:400; letter-spacing:-.224px; line-height:1.45; color:var(--gc-muted) }

/* ── ОБУЧЕНИЕ В ДОСЬЕ (правка владельца 06.09): записи школы с отчётом
   «было → стало». Пометка в шапке — существующий тег gc-tag--info
   («повышение квалификации», когда учился сам, не из-за ошибок; иначе
   «обучен в школе»). Язык технический: ключи счётным кеглем, «было» —
   muted (прошлое), «стало» — чернилами (действующее), без плашек.
   Данные — поле education сотрудника, контракт в dossierHTML (ui.js). */
.gc-edu{ display:flex; flex-direction:column; gap:9px; margin-top:2px }
.gc-edu-rec{ display:flex; flex-direction:column; gap:3px }
.gc-edu-line{ display:flex; align-items:baseline; gap:8px; font-size:13px; letter-spacing:-.18px }
.gc-edu-line b{ font-weight:600 }
.gc-edu-when{ font-size:11px; font-weight:500; letter-spacing:-.1px; color:var(--gc-muted); font-variant-numeric:tabular-nums }
.gc-edu-what{ margin:0; font-size:13px; line-height:1.45; letter-spacing:-.224px; color:var(--gc-ink) }
.gc-edu-row{ display:flex; gap:6px; font-size:11px; letter-spacing:-.1px; line-height:1.4 }
.gc-edu-row>span{ flex:none; width:34px; color:var(--gc-muted) }
.gc-edu-row>p{ margin:0; flex:1; min-width:0; color:var(--gc-muted); overflow-wrap:anywhere }
.gc-edu-row--now>p{ color:var(--gc-ink) }

.gc-facts{ display:flex; flex-wrap:wrap; gap:5px; margin-top:6px }
.gc-fact{
  font-size:11px; font-weight:500; letter-spacing:-.1px;
  background:var(--gc-pill); border-radius:9999px; padding:3px 9px;
  color:var(--gc-muted); font-variant-numeric:tabular-nums;
}

.gc-mates{ display:flex; flex-wrap:wrap; gap:5px; margin-top:6px }
.gc-mate{
  border:none; font-family:inherit; cursor:pointer; font-size:11px;
  font-weight:500; letter-spacing:-.1px; border-radius:9999px; padding:4px 10px;
  background:var(--gc-pill); color:var(--gc-action);
  transition:background .18s ease;
}
.gc-mate:hover{ background:var(--gc-pill-hover) }
.gc-mate--flat{ cursor:default; background:var(--gc-pill); color:var(--gc-muted) }

.gc-verdict{
  margin-top:14px; border-radius:16px; padding:11px 14px;
  font-size:13px; font-weight:500; letter-spacing:-.18px; line-height:1.45;
}
/* пастели вердиктов — от той же палитры Somacore X, что и теги (06.09) */
.gc-verdict--keep{ background:rgba(15,158,124,.12); color:#0b6f57 }
.gc-verdict--teach{ background:rgba(47,124,246,.10); color:#0f5cae }
.gc-verdict--swap{ background:rgba(240,201,106,.3); color:#6f5716 }
.gc-verdict--fire{ background:rgba(255,111,94,.14); color:#a4402e }
/* ночь единой темы — как у тегов: светлые чернила на тёмной подложке */
.gc-night .gc-verdict--keep{ background:rgba(15,158,124,.2); color:#3fe0b8 }
.gc-night .gc-verdict--teach{ background:rgba(47,124,246,.16); color:#a9c8ff }
.gc-night .gc-verdict--swap{ background:rgba(240,201,106,.15); color:#ecd08a }
.gc-night .gc-verdict--fire{ background:rgba(255,111,94,.18); color:#ffa294 }

/* ══════════════════ панель «шкаф» — досье полки библиотеки ══════════════════
   Узел несёт базовый класс .gc-dossier; здесь только своё: чекбоксы,
   кнопка выдачи и блок результата. */
.gc-shelf-note{ margin:14px 0 0; font-size:13px; letter-spacing:-.224px; line-height:1.45; color:var(--gc-muted) }
.gc-shelf-note--bad{ color:#a4402e } /* тёмный тон коралла Somacore #ff6f5e */

.gc-shelf-list{ margin-top:14px; display:flex; flex-direction:column }
.gc-shelf-item{
  display:flex; align-items:center; gap:8px; padding:7px 8px;
  cursor:pointer; transition:background .15s ease;
}
.gc-shelf-item:hover{ background:var(--gc-row-hover) }
/* Вложенность аккордеона — раздел внутри раздела (глубже трёх не отличаем). */
.gc-shelf-item[data-depth="1"]{ padding-left:24px }
.gc-shelf-item[data-depth="2"]{ padding-left:40px }
.gc-shelf-item[data-depth="3"]{ padding-left:56px }
p.gc-shelf-note[data-depth]{ padding-left:8px }
p.gc-shelf-note[data-depth="1"]{ padding-left:24px }
p.gc-shelf-note[data-depth="2"]{ padding-left:40px }
p.gc-shelf-note[data-depth="3"]{ padding-left:56px }
.gc-shelf-check{ flex:none; width:15px; height:15px; accent-color:var(--gc-ink) }
.gc-shelf-check:indeterminate{ opacity:.45 }
.gc-shelf-emoji{ flex:none; font-size:13px; line-height:1 }
.gc-shelf-name{ flex:1; min-width:0; font-size:13px; font-weight:400; letter-spacing:-.224px; color:var(--gc-ink); overflow-wrap:anywhere }
/* Раздел (папка) — без иконки: имя весом заголовка, счётчик справа, стрелка. */
.gc-shelf-sec .gc-shelf-name{ font-weight:600 }
.gc-shelf-arrow{
  flex:none; font-size:11px; color:var(--gc-grey);
  transition:transform .18s ease;
}
.gc-shelf-sec--open .gc-shelf-arrow{ transform:rotate(90deg) }
.gc-shelf-count{ flex:none; font-size:11px; font-weight:500; letter-spacing:-.1px; color:var(--gc-muted); font-variant-numeric:tabular-nums }

/* Действие шкафа — СТРОКОЙ, языком пунктов карточки кабинета: высота 34,
   подсветка во всю ширину, никакой заливной кнопки внутри плашки.
   Недоступность — цветом (пятая ступень чернил), не прозрачностью. */
.gc-shelf-go{
  margin:12px calc(var(--gc-pad) * -1) 0; width:auto; display:flex; align-items:center;
  justify-content:space-between; height:34px; padding:0 var(--gc-pad);
  border:none; border-radius:0; border-top:.5px solid var(--gc-line);
  background:transparent; cursor:pointer; text-align:left;
  font-family:inherit; font-size:13px; font-weight:500; letter-spacing:-.18px;
  color:var(--gc-ink); transition:background .15s ease;
}
.gc-shelf-go::after{ content:"→"; color:var(--gc-grey) }
.gc-shelf-go:hover:not(:disabled){ background:var(--gc-hilite) }
.gc-shelf-go:disabled{ color:var(--gc-pale); cursor:not-allowed }
.gc-shelf-go:disabled::after{ color:var(--gc-pale) }

.gc-shelf-result{
  margin-top:12px; padding:13px 16.5px; border-radius:16px;
  background:var(--gc-pill);
}
.gc-shelf-link code{
  display:block; font-family:inherit; font-size:11px; letter-spacing:-.1px;
  line-height:1.5; color:var(--gc-ink); word-break:break-all;
  font-variant-numeric:tabular-nums;
}
.gc-shelf-meta{ margin-top:7px; font-size:11px; letter-spacing:-.1px; color:var(--gc-muted) }
.gc-shelf-meta b{ color:var(--gc-ink); font-weight:600; font-variant-numeric:tabular-nums }
.gc-shelf-copy{
  margin-top:10px; border:none; cursor:pointer; font-family:inherit;
  font-size:11px; font-weight:500; letter-spacing:-.1px; border-radius:9999px;
  padding:6px 12px; background:var(--gc-pill); color:var(--gc-action);
  transition:background .18s ease;
}
.gc-shelf-copy:hover{ background:var(--gc-pill-hover) }

/* ══════════════════ панель корпорации (registry.json) ══════════════════
   Своей ширины у листа больше нет: в потоке колонны все листы — 292. */
.gc-corp-stats{
  margin-top:10px; font-size:13px; font-weight:400; letter-spacing:-.224px;
  color:var(--gc-muted); font-variant-numeric:tabular-nums;
}
/* инпут фильтра — то же поле-пилюля, что в колонке */
.gc-corp-search{ display:block; width:100%; margin-top:12px }

.gc-corp-floors{ margin-top:12px; display:flex; flex-direction:column; gap:4px }
.gc-corp-floor{ border-radius:16px; background:rgba(120,120,128,.06); overflow:hidden }
.gc-corp-floor-head{
  display:flex; align-items:center; gap:8px; width:100%; border:none; cursor:pointer;
  background:transparent; padding:9px 12px; text-align:left; font:inherit;
  font-size:13px; color:var(--gc-ink); transition:background .15s ease;
}
.gc-corp-floor-head:hover{ background:var(--gc-row-hover) }
.gc-corp-floor-arrow{
  flex:none; font-size:9px; color:var(--gc-grey); transition:transform .18s ease;
}
.gc-corp-floor--open > .gc-corp-floor-head .gc-corp-floor-arrow,
.gc-corp-floor--force-open > .gc-corp-floor-head .gc-corp-floor-arrow{ transform:rotate(90deg) }
.gc-corp-floor-name{ flex:1; min-width:0; font-size:13px; font-weight:600; letter-spacing:-.18px; overflow-wrap:anywhere }
/* счётчик этажа — счётным кеглем справа, БЕЗ чипа-пилюли: язык счётчиков
   списка объектов (правка владельца «счётчики tabular справа») */
.gc-corp-floor-count{
  flex:none; font-size:11px; font-weight:500; letter-spacing:-.1px;
  color:var(--gc-muted); font-variant-numeric:tabular-nums;
}
.gc-corp-floor-body{ display:none; flex-direction:column; padding:0 8px 8px }
.gc-corp-floor--open .gc-corp-floor-body,
.gc-corp-floor--force-open .gc-corp-floor-body{ display:flex }

.gc-corp-unit{
  display:flex; align-items:baseline; gap:7px; padding:6px 8px;
  transition:background .15s ease;
}
.gc-corp-unit--clickable{ cursor:pointer }
.gc-corp-unit--clickable:hover{ background:var(--gc-row-hover) }
.gc-corp-unit-emoji{ flex:none; font-size:12px; line-height:1.4 }
.gc-corp-unit-name{
  flex:none; max-width:46%; font-size:13px; font-weight:600; letter-spacing:-.18px;
  color:var(--gc-ink); overflow-wrap:anywhere;
}
.gc-corp-unit--clickable .gc-corp-unit-name{ color:var(--gc-action) }
.gc-corp-unit-does{ flex:1; min-width:0; font-size:11px; letter-spacing:-.1px; color:var(--gc-muted); line-height:1.4 }

/* Мосты — СТРОКИ списка, не карточки: подсветка во всю ширину листа,
   волосяные разделители, никаких вторых плашек внутри плашки. */
.gc-corp-bridges{ display:flex; flex-direction:column; margin-top:4px }
.gc-corp-bridge{
  display:flex; flex-direction:column; align-items:flex-start; gap:1px;
  width:auto; border:none; cursor:pointer; text-align:left; font:inherit;
  border-radius:0; margin:0 calc(var(--gc-pad) * -1); padding:7px var(--gc-pad); background:transparent;
  transition:background .15s ease;
}
.gc-corp-bridge+.gc-corp-bridge{ border-top:.5px solid var(--gc-line) }
.gc-corp-bridge:hover{ background:var(--gc-hilite) }
.gc-corp-bridge-name{ font-size:13px; font-weight:500; letter-spacing:-.18px; color:var(--gc-ink) }
.gc-corp-bridge-via{ font-size:11px; letter-spacing:-.1px; color:var(--gc-muted); line-height:1.4 }

/* ══════════════════ панель комнаты вопросов (questions.json) ══════════════════ */
.gc-q-note{ margin:12px 0 0; font-size:13px; letter-spacing:-.224px; line-height:1.45; color:var(--gc-muted) }
.gc-q-note--lead{ margin-top:10px }
.gc-q-none{ color:var(--gc-pale) }

.gc-q-list{ margin-top:12px; display:flex; flex-direction:column; gap:5px }
.gc-q-row{ display:flex; align-items:stretch; gap:5px }
.gc-q-open{
  flex:1; min-width:0; display:flex; flex-direction:column; align-items:flex-start; gap:5px;
  border:none; cursor:pointer; text-align:left; font:inherit;
  border-radius:16px; padding:9px 12px; background:var(--gc-pill);
  transition:background .18s ease;
}
.gc-q-open:hover{ background:var(--gc-pill-hover) }
.gc-q-row-title{ font-size:13px; font-weight:500; letter-spacing:-.18px; color:var(--gc-ink); line-height:1.35; overflow-wrap:anywhere }
.gc-q-row-meta{ display:flex; flex-wrap:wrap; align-items:center; gap:5px }
.gc-q-row-date{ font-size:11px; letter-spacing:-.1px; color:var(--gc-muted); font-variant-numeric:tabular-nums }
.gc-q-row-house{ font-size:11px; font-weight:500; letter-spacing:-.1px; color:var(--gc-action); overflow-wrap:anywhere }
/* стрелка «перелететь к комнате» — только в реестре Правительства */
.gc-q-goto{
  flex:none; width:34px; border:none; cursor:pointer; font:inherit; font-size:13px;
  border-radius:16px; background:var(--gc-pill); color:var(--gc-action);
  transition:background .18s ease;
}
.gc-q-goto:hover{ background:var(--gc-pill-hover) }

.gc-q-done{
  margin-top:12px; padding-top:11px; border-top:.5px solid var(--gc-line);
  font-size:11px; font-weight:500; letter-spacing:-.1px; color:var(--gc-muted);
  font-variant-numeric:tabular-nums;
}

/* «← назад к списку» стоит НАД шапкой карточки: возврат туда, откуда пришли */
.gc-q-back{
  display:block; margin:0 0 12px; border:none; cursor:pointer; font:inherit;
  font-size:11px; font-weight:500; letter-spacing:-.1px; border-radius:9999px;
  padding:4px 10px; background:var(--gc-pill); color:var(--gc-muted);
  transition:background .18s ease;
}
.gc-q-back:hover{ background:var(--gc-pill-hover) }
/* «К зданию →» — та же кнопка-мост, что у корпораций, только на всю ширину */
.gc-q-fly{ margin-top:14px; align-items:center; font-size:13px; font-weight:500; color:var(--gc-action) }

/* ══════════════════════ модалки каталога ══════════════════════
   Вуаль — только чтобы щелчок мимо закрывал лист; без черноты и размытия. */
.gc-veil{
  position:absolute; inset:0; z-index:10; background:rgba(20,20,22,.12);
  opacity:0; pointer-events:none; transition:opacity .22s ease;
}
.gc-veil--on{ opacity:1; pointer-events:auto }
.gc-modal{
  position:absolute; z-index:11; left:50%; top:50%; transform:translate(-50%,-46%);
  width:min(552px,calc(100vw - 64px)); max-height:84vh; overflow-y:auto;
  background:var(--gc-plate); border-radius:16px; padding:24px 26px;
  -webkit-backdrop-filter:var(--gc-glass18); backdrop-filter:var(--gc-glass18);
  box-shadow:var(--gc-edge);
  opacity:0; pointer-events:none;
  transition:opacity .21s ease, transform .28s var(--gc-curve);
  scrollbar-width:none;
}
.gc-modal::-webkit-scrollbar{ width:0 }
.gc-modal--on{ opacity:1; pointer-events:auto; transform:translate(-50%,-50%) }
.gc-modal-close{
  position:absolute; top:14px; right:14px; z-index:2; /* выше липкой шапки таблицы */
  border:none; cursor:pointer;
  width:29px; height:29px; border-radius:9999px; background:rgba(120,120,128,.12);
  color:var(--gc-ink); font-size:13px; font-weight:400; line-height:1;
  transition:background .16s ease;
}
.gc-modal-close:hover{ background:rgba(120,120,128,.20) }
.gc-modal-body{ margin-top:4px }

/* — Личные дела: инструменты и таблица — */
.gc-arctools{ display:flex; gap:8px; flex-wrap:wrap; margin-bottom:14px; align-items:center }
.gc-arc-count{ font-size:10px; font-weight:500; letter-spacing:-.1px; color:var(--gc-muted); font-variant-numeric:tabular-nums }
/* поле поиска в модалке и фильтр корпорации — то же поле-пилюля; класс
   живёт и в листе корпорации В МЕНЮ, потому кегль поднят вместе с меню
   (11→13, правка владельца 06.09) — модалка едет следом за общим классом */
.gc-search-input{
  height:32.5px; padding:0 18.25px; border:none; border-radius:9999px;
  background:var(--gc-input); color:var(--gc-ink);
  font-family:inherit; font-size:13px; font-weight:500; letter-spacing:-.18px;
  outline:none; transition:background .18s ease;
}
.gc-search-input:focus{ background:var(--gc-input-focus) }
.gc-search-input::placeholder{ color:var(--gc-pale); font-weight:400 }
.gc-tablewrap{ overflow-x:auto; border-radius:16px }
.gc-table{ border-collapse:collapse; width:100%; font-size:11px; letter-spacing:-.224px }
/* липкая шапка: фон плотнее стекла, чтобы строки не просвечивали при прокрутке */
.gc-th{
  position:sticky; top:0; z-index:1; background:rgba(245,245,247,.92);
  text-align:left; font-size:10px; font-weight:500; letter-spacing:-.1px;
  color:var(--gc-muted); padding:10px 10px 6px;
  cursor:pointer; white-space:nowrap;
}
.gc-th--active::after{ content:"▲"; margin-left:4px; font-size:8px; color:var(--gc-ink) }
.gc-th--active[data-dir="desc"]::after{ content:"▼" }
.gc-td{ padding:8px 10px; border-top:.5px solid var(--gc-line); vertical-align:top; transition:background .15s ease }
.gc-td-nm{ font-weight:600; white-space:nowrap }
/* личное дело открывает клик где угодно по строке */
.gc-table tbody tr{ cursor:pointer }
.gc-table tbody tr:nth-child(even) .gc-td{ background:rgba(120,120,128,.045) }
.gc-table tbody tr:hover .gc-td{ background:var(--gc-hilite) }
.gc-table tbody tr:focus-visible{ outline:2px solid var(--gc-accent); outline-offset:-2px }
/* Точки статуса .gc-dot в строке переписи СНЯТЫ (правка владельца 06.09:
   «убери дешёвые цветные кругляшки») — статус и так стоит текстом в своей
   колонке той же строки. */
/* Путь одной строкой: в узком листе (552) таблица листается по горизонтали
   внутри .gc-tablewrap, и перенос пути раздувал бы строки в пять этажей. */
.gc-td-path{ font-size:10px; letter-spacing:-.1px; color:var(--gc-muted); white-space:nowrap; font-variant-numeric:tabular-nums }

/* — Бардак / Маршрут / Цифры: общий лист —
   Второй плашки внутри плашки не рисуем: лист — просто разбежка полей. */
.gc-sheet{ padding:4px 2px 18px; margin-bottom:6px }
.gc-sheet+.gc-sheet{ border-top:.5px solid var(--gc-line); padding-top:18px }
.gc-sheet h2{ font-size:16px; font-weight:600; letter-spacing:-.32px; margin:0 0 4px }
.gc-sheet-lead{ font-size:11px; letter-spacing:-.224px; color:var(--gc-muted); margin:0 0 12px }

.gc-mrow{ display:flex; gap:12px; padding:10px 0; border-top:.5px solid var(--gc-line); align-items:flex-start }
.gc-mrow:first-of-type{ border-top:none }
/* severity-точки .gc-mdot СНЯТЫ (правка владельца 06.09: «убери дешёвые
   цветные кругляшки») — важность несёт цвет заголовка находки (renderMessPage
   в ui.js красит <b> производными палитры Somacore X). */
.gc-mrow b{ font-size:11px; font-weight:600; letter-spacing:-.18px }
.gc-mrow p{ margin:2px 0 0; font-size:11px; letter-spacing:-.224px; color:var(--gc-muted); line-height:1.45 }
.gc-mrow code{ font-family:inherit; font-size:10px; letter-spacing:-.1px; color:var(--gc-muted); font-variant-numeric:tabular-nums }

.gc-step{ display:flex; gap:13px; padding:10px 0; border-top:.5px solid var(--gc-line); align-items:flex-start }
.gc-step:first-of-type{ border-top:none }
.gc-sic{ font-size:17px; flex:none; width:24px; text-align:center }
.gc-step b{ font-size:11px; font-weight:600; letter-spacing:-.18px }
.gc-step p{ margin:2px 0 0; font-size:11px; letter-spacing:-.224px; color:var(--gc-muted); line-height:1.45 }

.gc-numgrid{ display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:10px }
.gc-num{ background:var(--gc-pill); border-radius:16px; padding:14px 16px }
.gc-num b{ display:block; font-size:19px; font-weight:600; letter-spacing:-.5px; font-variant-numeric:tabular-nums }
.gc-num span{ font-size:10px; font-weight:500; letter-spacing:-.1px; color:var(--gc-muted) }

.gc-zonerow{ display:flex; gap:10px; align-items:baseline; padding:8px 0; border-top:.5px solid var(--gc-line); font-size:11px }
.gc-zonerow:first-of-type{ border-top:none }
.gc-zonerow b{ width:160px; flex:none; font-weight:600; letter-spacing:-.18px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis }
.gc-zonebar{ flex:1; height:6px; border-radius:9999px; background:var(--gc-pill); overflow:hidden }
.gc-zonebar-fill{ display:block; height:100%; border-radius:9999px; background:var(--gc-ink) }
.gc-zonerow span{ font-size:10px; letter-spacing:-.1px; color:var(--gc-muted); width:90px; text-align:right; font-variant-numeric:tabular-nums }

/* ══════════ строка-действие листа (подвал досье/корпорации) ══════════
   Язык пунктов карточки кабинета: 34 в высоту, подсветка во всю ширину
   листа, волосяная черта сверху. Не кнопка-таблетка: действие читается по
   стрелке и подсветке, а не по заливке. */
.gc-act{
  display:flex; align-items:center; justify-content:space-between; gap:10px;
  /* поля и вылет — от --gc-pad листа-носителя: в колонне это 26, в
     карточке-бирке (badges.js переопределяет --gc-pad у себя) — её поле */
  width:auto; margin:14px calc(var(--gc-pad) * -1) -12px; padding:0 var(--gc-pad); height:34px;
  border:none; border-radius:0; border-top:.5px solid var(--gc-line);
  background:transparent; cursor:pointer; text-align:left;
  font-family:inherit; font-size:13px; font-weight:500; letter-spacing:-.18px;
  color:var(--gc-ink); transition:background .15s ease;
}
.gc-act:hover{ background:var(--gc-hilite) }
.gc-act-arrow{ flex:none; color:var(--gc-grey) }

/* ══════════ ВКЛАДКИ ЦЕНТРА УПРАВЛЕНИЯ — РАЗВОРОТЫ ВНУТРИ ПЛАШКИ ══════════
   Содержимое рисует control.js в хост .gc-navbody; своей подложки у хоста
   НЕТ — он лежит в общей плашке «Управления» под своей строкой-разделом,
   от неё его отделяет волосяная черта стека. Роли после подъёма кеглей
   06.09: титул 14/600/−0.24, строки 13/400/−0.224, счётчики 11/500/−0.1
   tabular. Действия — СТРОКАМИ пунктов (34px, подсветка во всю ширину),
   формы столбиком под ширину колонки. */
.gc-navbody{
  width:100%; display:flex; flex-direction:column; gap:8px;
  background:transparent;
  /* вертикальные поля 10→8 (уплотнение 06.09). СЛЕВА — pad+28 (закон
     владельца 06.09 «подменю не может стоять ближе к левому краю, чем
     меню»): тексты пунктов стоят на pad+28 (маркер 18 + зазор 10), и
     содержимое разворота не имеет права начинаться левее их вертикали;
     справа — обычный --gc-pad. Строки-действия и строки-сессии вылетают
     на полную ширину колонны своим отрицательным margin ниже — но их
     ТЕКСТ тоже стоит на pad+28. */
  padding:8px var(--gc-pad) 8px calc(var(--gc-pad) + 2px);
  font-size:13px; font-weight:400; letter-spacing:-.224px; line-height:1.45;
  color:var(--gc-ink);
}
.gc-navbody .gc-control-eyebrow{ font-size:11px; font-weight:500; letter-spacing:-.1px; color:var(--gc-muted) }
.gc-navbody h2{ margin:0; font-size:14px; font-weight:600; letter-spacing:-.24px; line-height:16px }
.gc-navbody h3{ margin:6px 0 0; font-size:13px; font-weight:600; letter-spacing:-.18px }
.gc-navbody p{ margin:0; color:var(--gc-muted) }
.gc-navbody a{ color:var(--gc-action) }
.gc-navbody .gc-control-path{ font-size:11px; letter-spacing:-.1px; color:var(--gc-muted); overflow-wrap:anywhere; font-variant-numeric:tabular-nums }
.gc-navbody .gc-control-hint{ font-size:11px; letter-spacing:-.1px; color:var(--gc-pale) }
/* поля форм: подпись счётным кеглем, ввод — светлая пилюля/лист */
.gc-navbody .gc-control-field{ display:flex; flex-direction:column; gap:5px; font-size:11px; font-weight:500; letter-spacing:-.1px; color:var(--gc-muted); min-width:0 }
.gc-navbody .gc-control-field>span{ font-weight:400; color:var(--gc-pale) }
/* Поля формы (закон лаконичности владельца 06.09): радиус у ВСЕХ полей и
   выборок ОДИН — 12, «среднее между пилюлей (9999) и листом (16)»; высота
   выборок +15% от прежних 29 после подъёма кегля: 29 × 1.15 ≈ 33. */
.gc-navbody select{
  /* ОКАНТОВКА ВМЕСТО БЕЛОЙ ЗАЛИВКИ — приём Somacore (владелец 06.09):
     поле держит не плашка, а тонкий обвод внутрь, фон остаётся рельефом. */
  width:100%; height:33px; padding:0 14.5px; border:none; border-radius:12px;
  background:transparent;
  box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--gc-ink) 16%, transparent);
  color:var(--gc-ink); font-family:inherit;
  font-size:13px; font-weight:500; letter-spacing:-.18px; outline:none;
}
.gc-navbody textarea{
  /* Поле ввода — ТОТ ЖЕ радиус, что у выборок (12): поля одной семьи, одна
     форма. Разводить их было моей самодеятельностью. */
  width:100%; border:none; border-radius:12px; background:transparent;
  box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--gc-ink) 16%, transparent);
  color:var(--gc-ink); font-family:inherit; font-size:13px; font-weight:400;
  letter-spacing:-.224px; line-height:1.45; padding:9px 14.5px; resize:vertical;
  outline:none; transition:background .18s ease;
}
/* Фокус — тот же обвод, только гуще: заливки по-прежнему нет. */
.gc-navbody textarea:focus,.gc-navbody select:focus{
  background:transparent;
  box-shadow:inset 0 0 0 1.5px color-mix(in srgb, var(--gc-ink) 42%, transparent);
}
/* Радио «Кому поручить» и отдельный селект модели СНЯТЫ (закон лаконичности
   владельца 06.09): исполнителя выбирает один объединённый селект без
   надписи (agentSelect в control.js) — правил .gc-control-providers и
   .gc-control-model больше нет. */
/* действия вкладки — строки пунктов во всю ширину КОЛОННЫ: вылет и поле
   слева считаются от pad+28 (закон Г), текст кнопок — на вертикали меню */
.gc-navbody .gc-control-actions{ display:flex; flex-direction:column; margin:4px calc(var(--gc-pad) * -1) 0 calc((var(--gc-pad) + 2px) * -1) }
.gc-navbody .gc-control-actions button{
  display:flex; align-items:center; justify-content:space-between;
  /* Кегль НА ДВА РАЗМЕРА МЕНЬШЕ (13→11) и текст ВРОВЕНЬ С ТЕКСТОМ ПОЛЯ ВВОДА
     (владелец 06.09): поле начинается на pad+2, его собственное внутреннее
     поле 14.5 — значит буквы стоят на pad+2+14.5, туда же ставим и кнопку. */
  height:34px; border:none; border-radius:0;
  padding:0 var(--gc-pad) 0 calc(var(--gc-pad) + 16.5px);
  border-top:.5px solid var(--gc-line); background:transparent; cursor:pointer;
  text-align:left; font-family:inherit; font-size:11px; font-weight:500;
  letter-spacing:-.14px; color:var(--gc-ink); transition:background .15s ease;
}
.gc-navbody .gc-control-actions button::after{ content:"→"; color:var(--gc-grey) }
.gc-navbody .gc-control-actions button:hover:not(:disabled){ background:var(--gc-hilite) }
.gc-navbody button:disabled{ color:var(--gc-pale); cursor:default }
.gc-navbody .gc-control-actions button:disabled::after{ color:var(--gc-pale) }
/* последний ряд действий прижат к нижней кромке разворота — без лишнего
   воздуха под строкой (правка владельца про «неадекватный отступ»);
   вылет = нижнее поле .gc-navbody, меняются парой */
.gc-navbody .gc-control-actions:last-child{ margin-bottom:-8px }
/* Хвост «Проектов» (закон лаконичности владельца 06.09): кнопка «Открыть
   в рабочем окне» прижата к полю БЕЗ разделителя, а ПОСЛЕ неё —
   разделитель и отступ В ДВА РАЗА больше обычного нижнего поля (8):
   8 маржи + 8 поля навбоди = 16 до следующего пункта меню. */
.gc-navbody .gc-control-actions--tail button{ border-top:none }
.gc-navbody .gc-control-actions--tail{ border-bottom:.5px solid var(--gc-line) }
.gc-navbody .gc-control-actions--tail:last-child{ margin-bottom:8px }
/* Отступ ПОД кнопкой до разделителя равен верхнему (8) — симметрия, как
   просил владелец 06.09: «сделай отступ между ним и разделителем такой же
   как сверху». */
.gc-navbody .gc-control-actions--tail button{ margin-bottom:8px }
/* ── СТРОКИ, РАСКРЫВАЮЩИЕСЯ НА МЕСТЕ (проекты, сессии) ──
   Строка 34px во всю ширину плашки; разворот .gc-inline встаёт ПОД ней и
   приезжает той же кривой (см. slideInline в control.js). */
.gc-navbody .gc-control-rows{ display:flex; flex-direction:column; margin:2px calc(var(--gc-pad) * -1) 0 calc((var(--gc-pad) + 2px) * -1) }
.gc-navbody .gc-control-prow{
  display:flex; align-items:center; justify-content:space-between; gap:10px;
  min-height:34px; padding:0 var(--gc-pad) 0 calc(var(--gc-pad) + 2px); border:none; border-radius:0;
  border-top:.5px solid var(--gc-line); background:transparent; cursor:pointer;
  text-align:left; font-family:inherit; font-size:13px; font-weight:500;
  letter-spacing:-.18px; color:var(--gc-ink); transition:background .15s ease;
}
.gc-navbody .gc-control-prow:hover{ background:var(--gc-hilite) }
.gc-navbody .gc-control-prow.on{ background:var(--gc-hilite) }
.gc-navbody .gc-control-prow-name{ flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap }
.gc-navbody .gc-control-prow-n{ flex:none; font-size:11px; font-weight:500; letter-spacing:-.1px; color:var(--gc-muted); font-variant-numeric:tabular-nums }
.gc-navbody .gc-inline{
  /* левое поле — pad+28 (закон Г): текст разворота не левее текстов меню */
  display:flex; flex-direction:column; gap:8px; padding:8px var(--gc-pad) 10px calc(var(--gc-pad) + 2px);
  /* разворот — тихая тональная зона рельефа (днём темнее, ночью светлее):
     светлая плашка на рельефе запрещена (правка 05.09) */
  border-top:.5px solid var(--gc-line); background:var(--rail-tone);
}
/* внутри таблицы переписи разворот живёт в своей ячейке */
.gc-navbody .gc-control-unitrow td{ padding:0; border-top:none }
.gc-navbody .gc-control-unitrow .gc-inline{ margin:0; border-top:none; padding:4px 6px 8px }
/* Закон Г карточек и таблицы НЕ касается: внутри карточки отчёта и
   разворота жителя строка-действие вылетает ровно на СВОЁ поле (12 и 6),
   а не на поле колонны — иначе полный вылет pad+28 пробивал бы их короб. */
.gc-navbody .gc-control-report .gc-control-actions{ margin:4px -12px 0 }
.gc-navbody .gc-control-report .gc-control-actions button{ padding:0 12px }
.gc-navbody .gc-control-unitrow .gc-control-actions{ margin:4px -6px -8px }
.gc-navbody .gc-control-unitrow .gc-control-actions button{ padding:0 6px }
/* мини-лента переписки сессии: тихие строки, автор счётным кеглем */
.gc-navbody .gc-control-feed{ display:flex; flex-direction:column; gap:5px; max-height:180px; overflow-y:auto; overscroll-behavior:contain; scrollbar-width:none }
.gc-navbody .gc-control-feed::-webkit-scrollbar{ width:0 }
.gc-navbody .gc-control-feed-msg{ display:flex; gap:6px; font-size:11px; letter-spacing:-.1px; line-height:1.4 }
.gc-navbody .gc-control-feed-who{ flex:none; width:44px; color:var(--gc-pale); font-weight:500 }
.gc-navbody .gc-control-feed-text{ flex:1; min-width:0; color:var(--gc-ink); overflow-wrap:anywhere; white-space:pre-wrap }
/* явная кнопка разворота окна в уведомлении о начатой сессии */
.gc-navbody .gc-control-notice button{
  border:none; background:transparent; padding:0 0 0 6px; cursor:pointer;
  font:inherit; font-size:11px; font-weight:500; color:var(--gc-action);
}
.gc-navbody .gc-control-links{ display:flex; flex-direction:column; margin:2px calc(var(--gc-pad) * -1) 0 calc((var(--gc-pad) + 2px) * -1) }
.gc-navbody .gc-control-links button{
  display:flex; align-items:center; height:34px; padding:0 var(--gc-pad) 0 calc(var(--gc-pad) + 2px); border:0;
  border-top:.5px solid var(--gc-line); background:transparent; cursor:pointer;
  text-align:left; font:inherit; font-size:13px; font-weight:400;
  letter-spacing:-.224px; color:var(--gc-ink); transition:background .15s ease;
}
.gc-navbody .gc-control-links button:hover{ background:var(--gc-hilite) }
/* перепись: строки-счётчики, цифры справа моноширинными */
.gc-navbody .gc-control-stats{ display:flex; flex-direction:column; margin:2px 0 }
.gc-navbody .gc-control-stats>div{ display:flex; align-items:center; justify-content:space-between; gap:10px; height:29px }
.gc-navbody .gc-control-stats>div:not(:first-child){ border-top:.5px solid var(--gc-line) }
.gc-navbody .gc-control-stats strong{ order:2; font-size:13px; font-weight:600; letter-spacing:-.18px; font-variant-numeric:tabular-nums }
.gc-navbody .gc-control-stats span{ order:1; font-size:13px; color:var(--gc-muted) }
.gc-navbody .gc-control-update{ display:flex; justify-content:space-between; align-items:center; gap:10px; font-size:11px; letter-spacing:-.1px; color:var(--gc-pale) }
.gc-navbody .gc-control-update button{ flex:none; border:none; background:transparent; padding:4px 0; color:var(--gc-action); cursor:pointer; font:inherit; font-size:11px; font-weight:500; transition:color .15s ease }
.gc-navbody .gc-control-update button:hover{ color:var(--gc-action-hot) }
/* таблица жителей: своя прокрутка после ~7 строк, полосы скрыты */
.gc-navbody .gc-control-population{ max-height:238px; overflow-y:auto; overscroll-behavior:contain; scrollbar-width:none }
.gc-navbody .gc-control-population::-webkit-scrollbar{ width:0 }
.gc-navbody table{ border-collapse:collapse; width:100%; font-size:11px; letter-spacing:-.1px; text-align:left }
/* липкая шапка таблицы — плотный тон САМОГО рельефа: строки под ней не
   просвечивают, светлой плашки не появляется */
.gc-navbody th{ position:sticky; top:0; background:var(--rail-bg); font-size:11px; font-weight:500; color:var(--gc-muted); padding:6px 6px 4px; z-index:1 }
.gc-navbody td{ padding:7px 6px; vertical-align:top; border-top:.5px solid var(--gc-line); overflow-wrap:anywhere }
.gc-navbody td button{ background:transparent; border:0; padding:0; text-align:left; cursor:pointer; font:inherit; font-size:11px; font-weight:500; color:var(--gc-action) }
.gc-navbody small{ display:block; margin-top:3px; font-size:9px; color:var(--gc-pale) }
.gc-navbody .gc-control-badge{ display:inline-block; padding:2px 7px; border-radius:9999px; background:var(--gc-pill); color:var(--gc-muted); font-size:9px; font-weight:500 }
.gc-navbody .gc-control-badge.warn{ background:rgba(240,201,106,.3); color:#6f5716 }
/* отчёты школы и сессии: тихие карточки-тона радиуса 16 */
.gc-navbody .gc-control-report,.gc-navbody .gc-control-session{ border-radius:16px; background:var(--gc-pill); padding:10px 12px; font-size:11px; letter-spacing:-.1px }
.gc-navbody .gc-control-report-meta{ font-size:9px; color:var(--gc-pale); margin-bottom:5px }
.gc-navbody .gc-control-report strong{ font-size:13px; font-weight:600; letter-spacing:-.18px }
.gc-navbody .gc-control-report p{ margin:3px 0 0; white-space:pre-wrap; overflow-wrap:anywhere; color:var(--gc-ink) }
.gc-navbody .gc-control-report details{ margin-top:6px }
.gc-navbody .gc-control-report summary{ cursor:pointer; color:var(--gc-action) }
.gc-navbody .gc-control-report a{ overflow-wrap:anywhere }
.gc-navbody .gc-control-pre{ white-space:pre-wrap }
.gc-navbody .gc-control-session{ display:flex; justify-content:space-between; align-items:flex-start; gap:10px }
.gc-navbody .gc-control-session strong{ font-size:13px; font-weight:600; letter-spacing:-.18px }
.gc-navbody .gc-control-session p{ font-size:9px; color:var(--gc-muted); margin:3px 0 5px }
.gc-navbody .gc-control-session>button{ flex:none; border:none; background:transparent; padding:0; color:var(--gc-action); cursor:pointer; font:inherit; font-size:11px; font-weight:500; transition:color .15s ease }
.gc-navbody .gc-control-session>button:hover:not(:disabled){ color:var(--gc-action-hot) }
.gc-navbody .gc-control-empty{ padding:8px 0; color:var(--gc-pale); font-size:11px }
/* ошибка/уведомление — пастели коралла и зелёного Somacore X (06.09) */
.gc-navbody .gc-control-error{ border-radius:16px; padding:8px 12px; background:rgba(255,111,94,.14); color:#a4402e; font-size:11px }
.gc-navbody .gc-control-notice{ border-radius:16px; padding:8px 12px; background:rgba(15,158,124,.12); color:#0b6f57; font-size:11px }

/* Рабочее окно сессии (workspace.js) — единственный крупный оверлей;
   короб доводим до токенов: радиус 16, грань вместо наружной тени. */
.gc-workspace{ border-radius:16px !important; border:none !important;
  box-shadow:var(--gc-edge) !important }

/* ══════════════════════ доступность и движение ══════════════════════ */
.gc-root button:focus-visible,
.gc-root [tabindex]:focus-visible{
  outline:2px solid var(--gc-accent); outline-offset:2px;
}
.gc-table tbody tr:focus-visible{ outline-offset:-2px }

@media (prefers-reduced-motion:reduce){
  .gc-root, .gc-root *{
    animation-duration:.001ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.001ms !important;
    scroll-behavior:auto !important;
  }
}

/* ═══════ НОВАЯ СЕКЦИЯ: переключатель темы (верхний угол) ═══════
   Задуман был в ЛЕВОМ верхнем углу («колонна переехала вправо — левый
   верх свободен»), но колонна тем же днём вернулась влево (откат 06.09) —
   переключатель живёт в свободном углу, теперь ПРАВОМ верхнем.
   Компактная пилюля-сегменты в языке бирок кампуса (стекло с blur, цвет —
   из ЕДИНЫХ токенов подложек, темнеет ночью вместе со всем): солнце =
   день, луна = ночь, «авто» = по реальным часам (умолчание). Логика —
   E.setThemeMode в engine.js; тут только вид. Указатель ловит ТОЛЬКО сама
   пилюля (root — pointer-events:none), сцена вокруг живёт. */
.gc-theme{
  /* fixed, не absolute: у .gc-root min-width:1100 — в окне уже 1100 его
     правый край уходит за вьюпорт и absolute-угол срезало бы экраном */
  position:fixed; top:12px; right:12px; z-index:30;
  display:flex; gap:2px; padding:3px; border-radius:9999px;
  background:var(--surface-glass);
  -webkit-backdrop-filter:blur(8px) saturate(140%);
  backdrop-filter:blur(8px) saturate(140%);
  pointer-events:auto;
  transition:background .4s ease;   /* смена темы — мягко, как рельеф */
}
.gc-theme-seg{
  border:none; cursor:pointer; height:27px; min-width:27px; padding:0;
  border-radius:9999px; display:flex; align-items:center; justify-content:center;
  background:transparent; color:var(--surface-muted);
  transition:background .18s ease, color .18s ease;
}
.gc-theme-seg:hover{ background:rgba(120,120,128,.14) }
.gc-theme-seg svg{ width:16px; height:16px; display:block }
/* Активный сегмент — вывернутый: чернила подложки фоном, подложка значком.
   Ночью выворачивается сам — токены единой темы, отдельного правила нет. */
.gc-theme-seg--on{ background:var(--surface-ink); color:var(--surface-bg) }
.gc-theme-seg--on:hover{ background:var(--surface-ink) }
.gc-theme-auto{
  font-size:9px; font-weight:600; letter-spacing:.3px; text-transform:uppercase;
  padding:0 8px; line-height:1;
}

/* ═══ ВЫЕЗД И СВЁРТЫВАНИЕ КОЛОННЫ (владелец 06.09) ═══
   Колонна выезжает ПОСЛЕ наезда камеры (класс снимает движок по окончании
   кино) и может быть свёрнута язычком у кромки. Уезжает целиком за левый
   край — рельеф не мнётся и ничего не перекомпоновывается. */
.gc-col--away{ transform:translateX(-100%); }

/* Язычок остаётся на месте всегда: свёрнутую колонну иначе нечем вернуть. */
.gc-railtab{
  position:fixed; left:0; top:50%; transform:translateY(-50%);
  width:22px; height:64px; padding:0; border:none; cursor:pointer;
  display:flex; align-items:center; justify-content:center;
  background:var(--rail-bg); color:var(--rail-grey);
  border-radius:0 8px 8px 0; pointer-events:auto; z-index:2;
  transition:transform .55s var(--gc-curve), color .18s ease, background .4s ease;
  transform:translate(var(--gc-col-w), -50%);   /* стоит у кромки колонны */
}
.gc-railtab:hover{ color:var(--rail-ink) }
.gc-railtab svg{ width:15px; height:15px; display:block; transition:transform .55s var(--gc-curve) }
.gc-railtab--closed{ transform:translate(0, -50%) }      /* колонна ушла — язычок к краю */
.gc-railtab--closed svg{ transform:rotate(180deg) }      /* стрелка зовёт обратно */


/* ═══ БАР ПОЛЬЗОВАТЕЛЯ — НИЗ КОЛОННЫ ═══
   Кто вошёл и выход. В языке рельефа: плоско, без карточки и скруглений,
   на той же вертикали, что имена строк. Сверху — волосяная черта: это уже
   не список, а подпись колонны. */
.gc-user{
  display:flex; align-items:center; gap:10px;
  padding:10px var(--gc-pad); margin-top:2px;
  border-top:.5px solid var(--gc-line);
  pointer-events:auto;
}
.gc-user-ava{
  position:relative; flex:0 0 26px; width:26px; height:26px; border-radius:50%;
  display:grid; place-items:center;
  background:var(--gc-hilite); color:var(--gc-ink);
  font-size:11px; font-weight:600; letter-spacing:0;
}
/* Точка «на связи» — как в референсе, у края аватарки. */
.gc-user-live{
  position:absolute; right:-1px; bottom:-1px; width:8px; height:8px;
  border-radius:50%; background:var(--gc-ok);
  box-shadow:0 0 0 2px var(--rail-bg);
}
.gc-user-nm{
  flex:1 1 auto; min-width:0; font-size:12px; font-weight:500;
  color:var(--gc-ink); letter-spacing:-.2px;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
.gc-user-out{
  flex:0 0 18px; width:18px; height:18px; padding:0; border:none;
  background:transparent; cursor:pointer; color:var(--gc-grey);
  display:flex; align-items:center; justify-content:center;
  transition:color .18s ease;
}
.gc-user-out:hover{ color:var(--gc-ink) }
.gc-user-out svg{
  width:16px; height:16px; display:block; fill:none; stroke:currentColor;
  stroke-width:1.15; stroke-linecap:round; stroke-linejoin:round;
}

/* ═══ СВОЙ ВЫКАТНОЙ СПИСОК (см. dressSelect в ui.js) ═══
   Штатный <select> остаётся в разметке ради логики панели, но не виден:
   рисуем свою кнопку и свой список в языке рельефа — окантовка Somacore,
   без белых плашек и без браузерных стрелок. */
.gc-pick{ position:relative; width:100% }
.gc-pick>select{
  position:absolute; inset:0; opacity:0; pointer-events:none; appearance:none;
}
.gc-pick-btn{
  display:flex; align-items:center; gap:8px; width:100%; height:33px;
  padding:0 12px 0 14.5px; border:none; border-radius:12px;
  background:transparent;
  box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--gc-ink) 16%, transparent);
  color:var(--gc-ink); font-family:inherit; font-size:13px; font-weight:500;
  letter-spacing:-.18px; text-align:left; cursor:pointer;
  transition:box-shadow .18s ease;
}
.gc-pick-btn:hover{ box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--gc-ink) 30%, transparent) }
.gc-pick--open>.gc-pick-btn{ box-shadow:inset 0 0 0 1.5px color-mix(in srgb, var(--gc-ink) 42%, transparent) }
.gc-pick-cur{ flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap }
.gc-pick-cur--off{ color:var(--gc-grey) }         /* «не выбрано» — тише */
.gc-pick-chev{ flex:0 0 16px; display:flex; color:var(--gc-grey);
  transition:transform .2s var(--gc-curve) }
.gc-pick-chev svg{ width:16px; height:16px; display:block }
.gc-pick--open .gc-pick-chev{ transform:rotate(180deg) }

/* Сам список: выкатывается своей кривой, не мигая. */
.gc-pick-list{
  position:absolute; left:0; right:0; top:calc(100% + 5px); z-index:30;
  display:flex; flex-direction:column; padding:4px;
  border-radius:14px; background:var(--rail-bg);
  box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--gc-ink) 14%, transparent),
             0 10px 26px -10px rgba(0,0,0,.28);
  max-height:220px; overflow-y:auto; overscroll-behavior:contain;
  opacity:0; transform:translateY(-6px) scaleY(.96); transform-origin:top;
  pointer-events:none; transition:opacity .16s ease, transform .2s var(--gc-curve);
}
/* Раскрытый список НЕ РЕЖЕТСЯ разделом: у раскрытой группы overflow:hidden —
   ею же она и выезжает, — поэтому на время показа кромку снимаем. :has()
   держит правило ровно в момент открытия и ничего не ломает в остальное время. */
.gc-group--open:has(.gc-pick--open){ overflow:visible }
.gc-pick--up>.gc-pick-list{ top:auto; bottom:calc(100% + 5px);
  transform-origin:bottom; transform:translateY(6px) scaleY(.96) }
.gc-pick--open>.gc-pick-list{ opacity:1; transform:none; pointer-events:auto }
.gc-pick-list::-webkit-scrollbar{ width:0 }
.gc-pick-opt{
  display:block; width:100%; padding:8px 10px; border:none; border-radius:10px;
  background:transparent; color:var(--gc-ink); font-family:inherit;
  /* Вес 500 — как у строк меню: список читается тем же голосом, а не бледнее. */
  font-size:13px; font-weight:500; letter-spacing:-.18px; text-align:left;
  cursor:pointer; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  transition:background .14s ease;
}
.gc-pick-opt:hover:not(:disabled){ background:var(--gc-hilite) }
.gc-pick-opt--on{ font-weight:600 }
.gc-pick-opt:disabled{ color:var(--gc-pale); cursor:default }
