/* ── Studio picker at / ─────────────────────────────────────────────────────
   Standalone on purpose: the landings' styles.css is 57 KB of sections this
   page does not have, and this page is the one that must paint before the
   visitor decides which brand they came for.

   ⚠ ТАБЛИЦА НЕПОЛНАЯ. Карточки красятся токенами --st-*, и в этом файле их
   объявлений НЕТ. Капсулы [data-palette="<слаг>"] дописывает в конец
   build.py::tile_palettes(), вычитывая литералы прямо из src/<слаг>/theme.css
   по карте TILE_PALETTE (там же расписаны роли). Копии чужих палитр здесь нет
   намеренно: копия расходится с темой молча, а вычитанное значение разойтись
   не может — перекрасили студию, плитка перекрасилась вместе с ней.
   Тот же порядок, что у лендингов: build.py склеивает правила и палитру, и
   проверки контраста считаются по СКЛЕЕННОМУ файлу, а не по этому.
   Забытый токен не «подставит белый»: --st-* читаются без запасного значения,
   и сборка падает на check_tile_palette() до всякого браузера.

   Хаб нейтрален. Фон, заголовок, шапка и подвал не принадлежат ни одной
   студии — иначе выбор из двух сделан за посетителя ещё до клика. Цвет на
   этой странице приносят ТОЛЬКО карточки, каждая своей палитрой.
   ────────────────────────────────────────────────────────────────────────── */
@font-face{font-family:"Kenao";src:url(/fonts/kenao.woff2) format("woff2");font-weight:400 700;font-display:swap}
@font-face{font-family:"Cormorant";font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/cormorant-500-cyrillic.woff2) format("woff2");unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116}
@font-face{font-family:"Cormorant";font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/cormorant-500-latin.woff2) format("woff2");unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:"DM Sans";font-style:normal;font-weight:400 500;font-display:swap;src:url(/fonts/dmsans-400-500-latin-ext.woff2) format("woff2");unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:"DM Sans";font-style:normal;font-weight:400 500;font-display:swap;src:url(/fonts/dmsans-400-500-latin.woff2) format("woff2");unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}

:root{
  /* ── Нейтральная оболочка ────────────────────────────────────────────────
     Графит без цветного подмеса: он стоит ровно между сиреневой Яшей и тёплым
     Шафраном и не подыгрывает ни одной. До этого здесь была палитра Яши —
     #1c1726 в тексте и сиреневые ореолы на фоне, — и корень домена выглядел
     страницей Яши со ссылкой на вторую студию. */
  --paper:#ffffff;
  /* Два веса текста, и оба читаются. Третьего, «совсем тихого», здесь нет
     намеренно: самый мелкий кегль на странице — 0.72rem (11.5 px), а на нём
     WCAG AA требует те же 4.5:1, что и на основном. Прежняя тихая заливка
     rgba(28,23,38,0.4) давала 2.52:1 в шапке и в подвале. */
  --ink:#1d1b1c;--ink-soft:rgba(29,27,28,0.66);
  --line:rgba(29,27,28,0.16);        /* волосяные разделители              */
  --line-ctl:rgba(29,27,28,0.34);    /* рамка переключателя языка          */
  --focus:#1d1b1c;                   /* кольцо фокуса ОБОЛОЧКИ; у карточек
                                        своё, --st-focus, цвета своей студии */
  /* Фирменный тёмно-зелёный Marketerra (Botanical Garden) — наведение на
     подпись разработчика. Единственный цвет чужого бренда на плитке, и виден
     он только под курсором. */
  --made-by-hover:#12403C;
  --radius-lg:26px;--radius-pill:100px;
  --font-display:"Kenao",Georgia,serif;--font-body:"DM Sans",sans-serif;
  --gutter:clamp(1.5rem, 1rem + 2vw, 3rem);
  --container:1240px;
  --pad-x:max(var(--gutter), calc((100% - var(--container)) / 2));
}
body.lang-ru{--font-display:"Cormorant","Cormorant Garamond",Georgia,serif}

*{margin:0;padding:0;box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  min-height:100vh;display:flex;flex-direction:column;
  font-family:var(--font-body);color:var(--ink);background:var(--paper);
  /* Ореолы остались, но обесцвечены до дымки: страница не должна быть плоской
     и не должна быть сиреневой. */
  background-image:
    radial-gradient(ellipse 60% 50% at 82% 0%, rgba(29,27,28,0.055) 0%, transparent 62%),
    radial-gradient(ellipse 55% 45% at 8% 92%, rgba(29,27,28,0.045) 0%, transparent 58%);
  background-attachment:fixed;
}
body.lang-lv [data-lang="ru"],body.lang-ru [data-lang="lv"]{display:none}

/* ── Top bar ─────────────────────────────────────────────────────────────── */
.home-top{
  display:flex;justify-content:space-between;align-items:center;
  padding:1.25rem var(--pad-x);
}
.home-brand{
  font-size:0.72rem;letter-spacing:0.2em;text-transform:uppercase;color:var(--ink-soft);
}
.home-brand em{font-style:normal;color:var(--ink)}
.lang-toggle{display:flex}
.lang-btn{
  background:transparent;border:1px solid var(--line-ctl);color:var(--ink-soft);
  padding:0.35rem 0.9rem;font-family:var(--font-body);font-size:0.7rem;cursor:pointer;
  transition:background 0.2s,border-color 0.2s,color 0.2s;
}
.lang-btn:first-child{border-radius:var(--radius-pill) 0 0 var(--radius-pill)}
.lang-btn:last-child{border-radius:0 var(--radius-pill) var(--radius-pill) 0;border-left:none}
.lang-btn:hover{color:var(--ink)}
.lang-btn.active{background:var(--ink);border-color:var(--ink);color:#fff}
.lang-btn:focus-visible{outline:2px solid var(--focus);outline-offset:2px}

/* ── Intro ───────────────────────────────────────────────────────────────── */
.home-wrap{flex:1;padding:clamp(1.5rem,1rem + 3vw,4rem) var(--pad-x) clamp(3rem,2rem + 3vw,5rem)}
.home-intro{
  display:grid;gap:clamp(1rem,0.5rem + 2vw,3rem);align-items:end;
  grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);
  margin-bottom:clamp(2.25rem,1.25rem + 3vw,3.5rem);
}
.home-title{
  font-family:var(--font-display);font-weight:500;line-height:0.94;
  font-size:clamp(2.6rem,1.2rem + 5.4vw,5rem);letter-spacing:-0.01em;
}
/* Вторая строка заголовка была акцентной (сиреневой). Акцент на хабе теперь
   принадлежит карточкам, поэтому иерархия держится весом, а не цветом. */
.home-title em{font-style:normal;color:var(--ink-soft)}
.home-lede{
  font-size:clamp(0.9rem,0.85rem + 0.2vw,1rem);line-height:1.75;color:var(--ink-soft);
  max-width:34ch;padding-bottom:0.45rem;
}

/* ── Cards ───────────────────────────────────────────────────────────────
   Всё ниже красится ТОЛЬКО токенами --st-*, то есть палитрой той студии, про
   которую карточка. Ни одного литерала и ни одной ссылки на оболочку: стоит
   вернуть сюда --ink или --accent, и на выборе снова обе студии одного цвета.

   Подписи написаны потомками .studio-card (`.studio-card .card-tag`), а не
   одиночными селекторами. Это не стиль, а работоспособность гейта: contrast.py
   находит пару «текст × заливка» только там, где автор сам написал «B внутри
   A». Одинокий .card-tag сверялся бы с фоном СТРАНИЦЫ — то есть с белым,
   которого под ним нет.
   ────────────────────────────────────────────────────────────────────────── */
.home-grid{display:grid;gap:clamp(1.25rem,0.5rem + 2vw,2.25rem);grid-template-columns:repeat(2,minmax(0,1fr))}
/* Плитка — это ДВЕ ссылки в разные места: карточка ведёт на лендинг студии,
   врезка карты внизу — в Google Maps. Вложить одну в другую невозможно, и
   поэтому рамку, скругление, тень и подъём при наведении держит обёртка, а не
   карточка. Карточка внутри осталась без рамки и без своей геометрии. */
.studio-tile{
  display:flex;flex-direction:column;
  color:var(--st-ink);background:var(--st-card-bg);
  border:1px solid var(--st-line);border-radius:var(--radius-lg);
  overflow:hidden;position:relative;isolation:isolate;
  box-shadow:0 1px 2px rgb(var(--st-shadow-rgb) / 0.07);
  transition:transform 0.35s cubic-bezier(0.16,1,0.3,1),box-shadow 0.35s cubic-bezier(0.16,1,0.3,1),border-color 0.35s;
}
/* Наведение и фокус — цветом своей студии. --st-edge затемнён ровно настолько,
   чтобы граница состояния держала 3:1 к бумаге карточки: шафран заливкой
   (#e18518) даёт 2.77 и на роль видимой рамки не годится, хотя в пилюле он же
   безупречен под тёмной подписью.
   :focus-within, а не :focus-visible на самой карточке: фокус может стоять на
   любой из двух ссылок, а поднимается плитка целиком. */
.studio-tile:hover,.studio-tile:focus-within{
  transform:translateY(-6px);border-color:var(--st-edge);
  box-shadow:0 22px 48px -24px rgb(var(--st-shadow-rgb) / 0.45);
}
/* Заливка здесь ПОВТОРЕНА за обёрткой намеренно, и снимать её нельзя. Гейт
   контраста (contrast.py) ищет фон подписи у предка, ЗАПИСАННОГО В СЕЛЕКТОРЕ:
   `.studio-card .card-tag` спрашивает про `.studio-card`. Перестань карточка
   красить поверхность — и десяток подписей начнёт сверяться с белым фоном
   страницы, которого под ними нет. Проверка при этом останется зелёной. */
.studio-card{
  display:flex;flex-direction:column;flex:1;text-decoration:none;
  color:var(--st-ink);background:var(--st-card-bg);
}
/* Отрицательный offset: карточка прижата к рамке плитки, и кольцо наружу
   срезалось бы её overflow:hidden. */
.studio-card:focus-visible{outline:2px solid var(--st-focus);outline-offset:-3px}
.card-media{display:block;position:relative;aspect-ratio:5/4;overflow:hidden;background:var(--st-media-bg)}
/* Студия, чья страница ещё не собрана: карточка остаётся на месте (студия
   существует, и это правда), но она не ссылка — build.py рендерит её <div>'ом.
   Стиль обязан это показывать, иначе посетитель кликает в пустоту.
   Врезка карты у такой студии остаётся живой: адрес подтверждён, а ведёт она
   в Google Maps, а не на несобранную страницу. */
.studio-tile.is-soon{box-shadow:none;border-style:dashed}
.studio-tile.is-soon .card-media img{filter:saturate(0.5)}
.studio-card .card-flag{
  position:absolute;top:0.85rem;left:0.85rem;z-index:1;
  padding:0.3rem 0.75rem;border-radius:var(--radius-pill);
  font-size:0.65rem;letter-spacing:0.14em;text-transform:uppercase;
  background:var(--st-card-bg);color:var(--st-accent);border:1px solid var(--st-line);
}
.studio-card .card-soon{
  display:inline-flex;align-items:center;gap:0.6rem;margin-top:1.6rem;
  font-size:0.75rem;letter-spacing:0.1em;text-transform:uppercase;color:var(--st-ink-soft);
}
.card-soon::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--st-edge)}
/* on a laptop the whole card must fit above the fold — the name and the CTA are
   the point of this page, not the photo */
@media (min-width:821px){.card-media{aspect-ratio:16/10}}
.card-media img{width:100%;height:100%;object-fit:cover;display:block;
  transition:transform 0.6s cubic-bezier(0.16,1,0.3,1)}
.studio-card:hover .card-media img{transform:scale(1.035)}
/* <i data-lang> — это переключатель языка, а не курсив. Забыть здесь новый
   селектор — значит получить наклонную подпись ровно в одном месте страницы;
   так уже случилось с заголовком врезки карты. */
.card-where i,.card-tag i,.card-meta i,.card-go i,.card-flag i,.card-soon i,
.card-map-go i,.card-map-title i,.mm-pin i,.mm-fact i{font-style:normal}
/* Полоска фирменного цвета во всю ширину карточки, между фото и текстом. Самый
   дешёвый способ показать стилистику на расстоянии, с которого подписи ещё не
   читаются: сиреневая у Яши, шафрановая у Шафрана. Заливка, не текст, — 3:1 к
   ней не предъявляется. */
.card-body{display:block;padding:clamp(1.25rem,0.75rem + 1.5vw,2rem);
  border-top:3px solid var(--st-fill)}
.studio-card .card-name{
  display:block;font-family:var(--font-display);font-weight:500;line-height:1;
  font-size:clamp(1.9rem,1.2rem + 2vw,3rem);letter-spacing:0.01em;color:var(--st-ink);
}
.studio-card .card-where{display:block;margin-top:0.5rem;font-size:0.68rem;letter-spacing:0.16em;
  text-transform:uppercase;color:var(--st-accent)}
.studio-card .card-tag{display:block;margin-top:0.9rem;font-size:0.88rem;line-height:1.7;color:var(--st-ink-soft)}
.card-meta{display:flex;flex-wrap:wrap;gap:0.5rem;margin-top:1.25rem}
.studio-card .card-meta b{
  font-weight:400;font-size:0.72rem;letter-spacing:0.04em;padding:0.34rem 0.85rem;
  border-radius:var(--radius-pill);background:var(--st-media-bg);color:var(--st-ink-soft);
  border:1px solid var(--st-line);
}
/* Ценовая пилюля — единственная сплошная заливка на карточке. Подпись на ней
   приходит из темы (--st-on-fill): у Яши это белый, у Шафрана тёмный эспрессо,
   потому что белым по шафрану выходит 2.73. */
.studio-card .card-meta .card-price{background:var(--st-fill);border-color:var(--st-fill);color:var(--st-on-fill)}
.studio-card .card-go{
  display:inline-flex;align-items:center;gap:0.6rem;margin-top:1.6rem;
  font-size:0.75rem;letter-spacing:0.1em;text-transform:uppercase;color:var(--st-accent);
}
.card-go svg{transition:transform 0.3s cubic-bezier(0.16,1,0.3,1)}
.studio-card:hover .card-go svg{transform:translateX(5px)}

/* ── Врезка «где это в Риге» ───────────────────────────────────────────────
   Город целиком — 10,6 × 5,6 км, — нарисованный из снимка OpenStreetMap
   (assets/maps/riga.json, см. build.py::mini_map). Ни одного запроса наружу:
   SVG приезжает в самой странице. Ни одного литерала цвета: карта красится теми
   же --st-*, что и карточка над ней, и поэтому Яша здесь сиреневая, а Шафран
   шафрановый — двух картинок на две палитры не нужно.

   ⚠ ВЫСОТУ НЕ ЗАДАВАТЬ РУКАМИ, и вот почему. До 25.08 здесь стояло
   `height:clamp(88px,…,124px)` при квадратном viewBox и `preserveAspectRatio=
   "slice"`. Арифметика этой пары: карта 1000 × 1000 м, влезающая в полосу
   600 × 124 px, показывает 1000 × 207 м — четыре пятых кадра уезжали под обрез
   молча. Клиентка увидела результат раньше нас: «карты обрезаны слишком
   сильно, по ним невозможно понять даже примерно, где студии».
   Теперь пропорцию кадра диктует сам снимок (--mm-ratio приезжает из
   build.py), `slice` убран, и обрезать нечего в принципе.

   Кадр общий у обеих карточек, и это главное. Две карты в разных масштабах
   сравнить нельзя, две одинаковые — сравниваются сами: Яша светится у центра,
   Шафран на другом конце города, и разница видна раньше, чем прочитан текст.
   ────────────────────────────────────────────────────────────────────────── */
.card-map{
  position:relative;display:block;background:var(--st-media-bg);
  border-top:1px solid var(--st-line);
  padding:clamp(0.9rem,0.6rem + 1vw,1.35rem);
}
.card-map .card-map-title{
  margin-bottom:0.7rem;
  font-size:0.62rem;letter-spacing:0.18em;text-transform:uppercase;
  color:var(--st-ink-soft);
}
/* Пропорция кадра — из снимка, а не из вкуса. Ширина карточки задаёт высоту,
   поэтому карта не обрезается ни на одной ширине; max-width держит её от
   раздувания на широкой одноколоночной раскладке (планшет 768). */
.card-map-frame{
  position:relative;aspect-ratio:var(--mm-ratio);
  max-width:min(100%,560px);margin-inline:auto;
  border-radius:12px;overflow:hidden;
  border:1px solid var(--st-line);
}
.card-map-link{position:absolute;inset:0;display:block;text-decoration:none}
.card-map-canvas{position:absolute;inset:0;width:100%;height:100%;display:block}
/* Подпись лежит НА карте, поэтому под ней сплошная плашка бумаги карточки, а
   не прозрачность: иначе контраст зависел бы от того, прошла ли под буквой
   улица. Пара «--st-accent на --st-card-bg» — та же, что у «Открыть студию»
   выше, и считается гейтом так же.
   Угол правый нижний: левый нижний занят булавкой центра, правый верхний —
   Шафраном. Единственный угол, где ничего не перекрывается. */
.card-map .card-map-go{
  position:absolute;right:0;bottom:0;
  display:flex;align-items:center;gap:0.35rem;
  padding:0.32rem 0.5rem;border-radius:9px 0 0 0;
  font-size:0.56rem;letter-spacing:0.07em;text-transform:uppercase;
  color:var(--st-accent);background:var(--st-card-bg);
}
/* Видно только диктору: имя студии внутри ссылки на карту. Не display:none и
   не visibility:hidden — оба вычёркивают текст из доступного имени, то есть
   ровно из того, ради чего он здесь. */
.sr-only{
  position:absolute;width:1px;height:1px;margin:-1px;padding:0;
  overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0;
}
.card-map .card-map-go::after{
  content:"↗";font-size:0.9em;line-height:1;
  transition:transform 0.3s cubic-bezier(0.16,1,0.3,1);
}
.card-map-link:hover .card-map-go::after{transform:translate(3px,-3px)}
.card-map-link:focus-visible{outline:2px solid var(--st-focus);outline-offset:-2px}
/* Атрибуция ODbL. Стоит СНАРУЖИ ссылки, чтобы не попасть в её доступное имя,
   и не убирается: это условие лицензии на геометрию, а не украшение. */
.card-map .card-map-credit{
  position:absolute;left:0.45rem;top:0.35rem;
  font-size:0.55rem;letter-spacing:0.02em;color:var(--st-ink-soft);
  /* Лежит поверх ссылки и обязана её пропускать: иначе верхний левый угол
     карты молча перестаёт кликаться. Раньше подпись висела за пределами
     кадра, и вопрос не стоял. */
  pointer-events:none;
}

/* ── Булавки ───────────────────────────────────────────────────────────────
   Разметкой, а не <text> внутри SVG, и это не стилистика. Текст в SVG
   масштабируется вместе с картинкой: кегль, читаемый на карточке шириной
   600 px, на 340 px превращается в шесть пикселей. HTML-подпись набирается
   обычным rem, живёт в обычном потоке языковых <i data-lang> и проверяется
   гейтом контраста как всякая другая подпись на странице.

   Булавки лежат ПОВЕРХ ссылки на Google Maps и обязаны её пропускать —
   pointer-events:none. Без него дырки в кликабельной карте, и находит их
   не тест, а посетитель. */
/* ⚠ Булавка — это ТОЧКА НУЛЕВОГО РАЗМЕРА, а подпись висит рядом абсолютом.
   Очевидная запись — flex-строка «точка + подпись» с transform:translate(-50%,
   -50%) — выглядит правильно и врёт: центрируется вся строка ЦЕЛИКОМ, вместе с
   подписью, поэтому сама точка уезжает от своих координат на половину ширины
   слова. Замерено: YASHA стояла на 36 % ширины вместо 51,6 % — полтора
   километра мимо на карте, вся ценность которой в том, где стоит точка.
   Длина слова не имеет права двигать географию: подпись смещается от точки,
   а не точка от подписи. */
.mm-pin{
  position:absolute;width:0;height:0;pointer-events:none;
  --mm-off:11px;                       /* полдиаметра точки + воздух */
  font-size:0.63rem;letter-spacing:0.08em;text-transform:uppercase;
}
.mm-pin .mm-label{
  position:absolute;left:0;top:0;transform:translate(var(--mm-off),-50%);
  font-style:normal;white-space:nowrap;
  padding:0.1rem 0.28rem;border-radius:4px;background:var(--st-card-bg);
}
/* Булавка правее PIN_FLIP_X (build.py) разворачивает подпись внутрь кадра:
   у Шафрана точка на 80 % ширины, и подпись справа уехала бы за рамку. */
.mm-pin.is-left .mm-label{
  left:auto;right:0;transform:translate(calc(var(--mm-off) * -1),-50%);
}
.mm-pin .mm-dot{
  position:absolute;left:0;top:0;transform:translate(-50%,-50%);
  width:9px;height:9px;border-radius:50%;
  border:2px solid var(--st-ink-soft);background:var(--st-card-bg);
}
/* Своя студия: заливка фирменного цвета и двойной ореол — единственная
   горящая точка в кадре. Соседняя студия и центр остаются колечками, поэтому
   «чья это карточка» читается без единого слова. */
.mm-pin-me{z-index:2;--mm-off:16px}
.mm-pin-me .mm-label{color:var(--st-accent);font-weight:500}
.mm-pin-me .mm-dot{
  width:14px;height:14px;border:3px solid var(--st-card-bg);
  background:var(--st-fill);
  /* Два кольца, а не одно: тонкая обводка бумагой отрывает точку от улиц под
     ней, широкий полупрозрачный ореол делает её единственной горящей в кадре.
     С одним кольцом своя студия и чужая различались только заливкой — на
     карточке шириной 340 px этой разницы уже не видно. */
  box-shadow:0 0 0 4px var(--st-card-bg),0 0 0 11px rgb(var(--st-shadow-rgb) / 0.22);
}
.mm-pin-other .mm-label,.mm-pin-centre .mm-label{color:var(--st-ink-soft)}

/* ── Факты под картой ──────────────────────────────────────────────────────
   Две строки, которые отвечают на вопрос быстрее любой карты: сколько до
   центра и сколько до здания, которое в Риге знают не глядя. Числа считает
   build.py из тех же координат, что и булавки, — разойтись им нечем.
   Расстояния по прямой, поэтому «от», а не «ехать»: обещать минуты, не считая
   маршрут, нельзя. */
.card-map .card-map-facts{
  list-style:none;display:flex;flex-wrap:wrap;gap:0.3rem 1.1rem;
  margin-top:0.75rem;font-size:0.72rem;color:var(--st-ink-soft);
}
.card-map .mm-fact{display:flex;align-items:baseline;gap:0.32rem}
.card-map .mm-fact b{font-weight:500;color:var(--st-ink)}
.card-map .mm-fact i{font-style:normal}

/* Слои карты. Обводки не масштабируются вместе с viewBox, поэтому толщины
   заданы в его единицах: одна единица снимка = 10 метров (unit в riga.json).
   Магистраль в 4,6 единицы — это 46 м, то есть 2,6 px на карточке шириной
   600 px. Меняешь окно в refresh.py — пересматриваешь и эти пять чисел. */
.mm-paper{fill:var(--st-media-bg)}
.mm-green{fill:var(--st-edge);opacity:0.15}
.mm-water{fill:var(--st-edge);opacity:0.3}
.mm-minor{fill:none;stroke:var(--st-edge);stroke-opacity:0.3;stroke-width:2.6}
.mm-major{fill:none;stroke:var(--st-edge);stroke-opacity:0.6;stroke-width:4.6;stroke-linejoin:round;stroke-linecap:round}
.mm-rail{fill:none;stroke:var(--st-edge);stroke-opacity:0.26;stroke-width:1.6;stroke-dasharray:7 5.5}

/* ── Footer ──────────────────────────────────────────────────────────────── */
.home-foot{
  display:flex;flex-wrap:wrap;gap:0.75rem 1.5rem;justify-content:space-between;align-items:center;
  padding:1.5rem var(--pad-x) 2rem;border-top:1px solid var(--line);
  font-size:0.72rem;color:var(--ink-soft);
}
/* Одно правило на все ссылки подвала: юридические появились здесь позже
   WhatsApp, и разъехавшийся стиль читался бы как разный вес. */
.home-foot a{color:var(--ink-soft);text-decoration:none;border-bottom:1px solid var(--line)}
.home-foot a:hover{color:var(--ink);border-color:var(--ink-soft)}
.home-foot a:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
.foot-legal{display:flex;flex-wrap:wrap;gap:0.5rem 1.25rem}

/* Подпись разработчика уходит на свою строку: в ряду со space-between четвёртым
   элементом она встала бы вплотную к WhatsApp, а на узком экране разорвала бы
   пару «© — реквизиты». Второй волосяной линии здесь нет намеренно: подвал
   плитки и так отбит от страницы, а на минимальной странице два разделителя
   подряд читаются как таблица.
   Цвет пишем здесь, а не в made-by.css, — чтобы пара с фоном страницы стояла
   через предка и попадала в гейт контраста. Подчёркивание снимаем явно:
   .home-foot a (0-2-0) сильнее .made-by и подчеркнул бы логотип целиком. */
.home-foot .made-by{
  flex:0 0 100%;justify-content:center;padding-top:1.1rem;
  color:var(--ink-soft);border-bottom:0;
}
.home-foot .made-by:hover,.home-foot .made-by:focus-visible{color:var(--made-by-hover);border-color:transparent}

@media (max-width:820px){
  /* На узком экране подвал перестаёт быть рядом и складывается в левую
     колонку — подпись обязана встать на ту же ось, иначе она читается как
     чужая вставка по центру под левым текстом. */
  .home-foot .made-by{justify-content:flex-start}
  .home-intro{grid-template-columns:1fr;align-items:start}
  .home-lede{max-width:46ch}
  .home-grid{grid-template-columns:1fr}
}
/* Несобранная студия не подпрыгивает от карточки — там некуда идти. Но врезка
   карты у неё живая, и от фокуса на ней плитка приподняться обязана, иначе
   клавиатура теряет место. Поэтому гасится только :hover. */
.studio-tile.is-soon:hover{transform:none;border-color:var(--st-line);box-shadow:none}
.studio-tile.is-soon:hover .card-media img{transform:none}

@media (prefers-reduced-motion:reduce){
  .studio-tile,.card-media img,.card-go svg,.card-map-go::after{transition:none}
  .studio-tile:hover,.studio-tile:focus-within{transform:none}
  .studio-card:hover .card-media img{transform:none}
  .card-map-link:hover .card-map-go::after{transform:none}
}
/* Подпись разработчика в подвале. Разметка — src/shared/made-by.html.

   Здесь только геометрия. Цвет намеренно не назначен: логотип залит
   currentColor, а currentColor приходит от поверхности — `footer .made-by`
   в shared/styles.css для тёмного подвала студий, `.home-foot .made-by`
   в home/home.css для светлого подвала плитки. Так пара «цвет × фон»
   оказывается написанной через предка, и её видит гейт контраста; цвет,
   объявленный здесь, для гейта был бы парой без фона, то есть тишиной. */
.made-by{
  display:inline-flex;align-items:center;gap:0.5rem;
  text-decoration:none;transition:color 0.25s ease;
}
.made-by-label{
  font-size:0.6rem;letter-spacing:0.2em;text-transform:uppercase;
  white-space:nowrap;line-height:1;
}
/* Ширина задана, высота — из viewBox: пропорцию держит сам логотип, и подпись
   не поедет, если контур когда-нибудь переобведут с другой рамкой. */
.made-by-mark{width:94px;height:auto;display:block;flex:0 0 auto}
.made-by:focus-visible{outline:2px solid currentColor;outline-offset:5px;border-radius:3px}

@media (prefers-reduced-motion:reduce){
  .made-by{transition:none}
}

/* ── Палитры карточек ─────────────────────────────────────────
   Дописано build.py::tile_palettes() из src/<слаг>/theme.css по карте
   TILE_PALETTE. Править здесь бесполезно — правится тема студии.
   ────────────────────────────────────────────────────────────── */
[data-palette="yasha"]{
  --st-card-bg:#f8f5fe;  /* = yasha --paper2 */
  --st-media-bg:#f2edfb;  /* = yasha --card-bg */
  --st-ink:#1c1726;  /* = yasha --ink */
  --st-ink-soft:rgba(28,23,38,0.65);  /* = yasha --ink-soft */
  --st-accent:#4a3580;  /* = yasha --purple-900 */
  --st-fill:#7a56bb;  /* = yasha --purple-cta */
  --st-on-fill:#fff;  /* = yasha --on-accent */
  --st-edge:#7a56bb;  /* = yasha --purple-cta */
  --st-line:rgba(155,130,210,0.22);  /* = yasha --line */
  --st-focus:#7a56bb;  /* = yasha --focus */
  --st-shadow-rgb:74 53 128;  /* = yasha --shadow-tint-deep */
}

[data-palette="saffron"]{
  --st-card-bg:#faf4e9;  /* = saffron --paper2 */
  --st-media-bg:#f6e9d8;  /* = saffron --sand */
  --st-ink:#321813;  /* = saffron --ink */
  --st-ink-soft:#69524c;  /* = saffron --ink-soft */
  --st-accent:#6e2827;  /* = saffron --oxblood */
  --st-fill:#e18518;  /* = saffron --saffron */
  --st-on-fill:#2b100d;  /* = saffron --on-accent */
  --st-edge:#c36d19;  /* = saffron --saffron-deep */
  --st-line:#e0cdbe;  /* = saffron --line */
  --st-focus:#6e2827;  /* = saffron --focus */
  --st-shadow-rgb:110 40 39;  /* = saffron --shadow-tint */
}
