
  /* ======================================================================
     Кустовка. Визуальный язык «Табло». Светлая тема.
     Дисплейный шрифт Sofia Sans Condensed, текстовый Golos Text.
     Оба лежат в Google Fonts с кириллицей. Ссылка на шрифты в <head>.
     ====================================================================== */
  :root{
    --paper:#FBFBF9;      /* фон страницы, теплый белый */
    --card:#FFFFFF;       /* поверхность строки и карточки */
    --tint:#F3F3EF;       /* заливка при наведении, подвал */
    --track:#EDEDE8;      /* дорожка шкалы */
    --ink:#14171C;        /* основной текст */
    --ink-2:#4A5160;      /* второстепенный текст, подписи */
    --line:#E4E5E1;       /* волосяная линейка */
    --line-ui:#8A8F87;    /* граница управляемого элемента, 3:1 */
    --accent:#C2410C;     /* фирменный: обожженная глина */
    --accent-deep:#9A330A;  /* глина как текст и наведение */
    --accent-soft:#FCEBE1;  /* подложка под акцентный текст */
    --good:#0B6B3A;
    --good-soft:#E4F1E9;
    --info:#1F4C86;
    --info-soft:#E6EDF7;
    --alert:#8E1B1B;      /* риск третьего уровня */
    --warn:#8A5300;
    --warn-soft:#FAEFD9;
    --display:'Sofia Sans Condensed','Golos Text','Arial Narrow',system-ui,sans-serif;
    --text:'Golos Text','Segoe UI',system-ui,-apple-system,Roboto,Arial,sans-serif;
    --r-s:4px; --r-m:8px; --r-l:14px;
    --wrap:1120px;
  }
  /* ------------------------------------------------- темная тема -------- */
  /* Переопределяем только токены, верстка та же. Каждая пара проверена
     счетом, а не на глаз: основной текст на фоне 15.4, второстепенный 7.9,
     акцент как текст 7.1, белый на кнопке 5.2, граница управления 3.6.
     Нормы 4.5 для текста и 3.0 для границ.
     Такой же блок лежит во втором файле, где объявлены токены: gen.py и
     trip_page.py. Менять оба. */
  @media (prefers-color-scheme: dark){
    :root{
      --paper:#15171A;        /* не чистый черный, он убивает глубину */
      --card:#1D2024;
      --tint:#23262B;
      --track:#2B2F35;
      --ink:#EDEEEA;          /* не чистый белый */
      --ink-2:#A6ADB8;
      --line:#2E3238;
      --line-ui:#6E7681;
      --accent:#C2410C;       /* заливка та же: белый на ней дает 5.2 */
      --accent-deep:#F0875A;  /* а как текст глина обязана светлеть */
      --accent-soft:#3A2018;
      --good:#5FD98D; --good-soft:#12301F;
      --info:#8FBCF5; --info-soft:#16233A;
      --alert:#F98A8A;
      --warn:#E5B34F; --warn-soft:#33260F;
    }
    /* accent-deep служит сразу двум делам: он текст в 36 местах и заливка
       при наведении в шести. В темноте текст обязан светлеть, а заливка под
       белой подписью обязана остаться темной, одним значением это не
       закрыть. Приставка html поднимает вес правила, чтобы оно не зависело
       от порядка склейки стилей. Белый на #A83A0C дает 6.4. */
    html .btn.big:hover,html .obtn:hover,html .sf-b:hover,
    html .kvp-btn-verh:hover,html .kvpop-geo:hover{
      background:#A83A0C;border-color:#A83A0C;color:#fff}
    /* Поверхности, вписанные цветом до того, как появились токены. */
    html .gor-k,html .sf-row,html .utp-nb,html .kvk-krug i,html .kvk-ap b,
    html .kvk-m{background:var(--card)}
    html .sf-vid-z{background:var(--card);border-color:var(--line)}
    html .kvk-ap i{border-color:var(--card)}
    /* Снимок города в темноте слепит: приглушаем яркость и насыщенность. */
    html img.hphoto,html .city img,html .pic img,html .thumb{
      filter:brightness(.86) saturate(.92)}
  }

  *{box-sizing:border-box;margin:0;padding:0}
  html{-webkit-text-size-adjust:100%}
  body{background:var(--paper);color:var(--ink);
       font:400 16px/1.55 var(--text);
       -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
  a{color:inherit;text-decoration:none}
  a:hover{text-decoration:underline;text-underline-offset:3px}
  :focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:2px}
  .wrap{max-width:var(--wrap);margin:0 auto;padding:0 20px}
  .sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
  .meta{color:var(--ink-2);font-size:13px;line-height:1.45}
  b,strong{font-weight:700}

  /* ---------------------------------------------------------- шапка --- */
  header.site{background:var(--paper);border-bottom:1px solid var(--line)}
  header.site .bar{display:flex;align-items:center;gap:20px;flex-wrap:wrap;
    padding:14px 20px;min-height:60px}
  .brand{font-family:var(--display);font-weight:800;font-size:22px;line-height:1;
    text-transform:uppercase;letter-spacing:.04em;color:var(--ink);white-space:nowrap}
  .brand:hover{text-decoration:none}
  /* Знак сайта это птица кустовка, та же геометрия, что на значке.
     Глаз на пятнадцати пикселях не читается, поэтому силуэт чистый. */
  .brand::after{content:"";display:inline-block;width:18px;height:13px;
    margin-left:7px;vertical-align:baseline;
    background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='8 18 90 64'%3E%3Cg fill='%23C2603A'%3E%3Cpolygon points='40.8,59.8 27.2,66.2 11.4,26.4 19.6,22.6'/%3E%3Cellipse cx='46' cy='58' rx='22' ry='18.5'/%3E%3Ccircle cx='62' cy='40' r='14.5'/%3E%3Cpolygon points='75.5,37.5 93,41.5 75.5,45.5'/%3E%3C/g%3E%3C/svg%3E") no-repeat center/contain}
  .menu{display:flex;align-items:center;gap:18px;flex-wrap:wrap;flex:1;font-size:15px}
  /* Цель по касанию: норма 44 пикселя, а подпись ссылки 20. Растим область
     нажатия невидимой подложкой, а не отступами: шапка сейчас 79 пикселей
     при пределе 80, отступы вырастили бы ее сверх нормы.
     У логотипа берем ::before, потому что ::after занят знаком птицы.
     Ссылки внутри абзаца не трогаем: пункт 2.5.8 освобождает их, размер
     задан межстрочным расстоянием соседнего текста. */
  .brand,nav.menu a,h2 a{position:relative}
  .brand::before,nav.menu a::before,h2 a::before{content:"";position:absolute;
    left:0;right:0;top:50%;height:44px;transform:translateY(-50%)}
  .menu a{color:var(--ink-2);font-weight:500}
  .menu a:hover{color:var(--ink)}
  .menu .cur{color:var(--ink);font-weight:600;
    box-shadow:inset 0 -2px 0 0 var(--accent);padding-bottom:2px}
  .stamp{color:var(--ink-2);font-size:13px;font-variant-numeric:tabular-nums;white-space:nowrap}
  .live{display:inline-block;width:7px;height:7px;border-radius:50%;
    background:var(--good);box-shadow:0 0 0 3px rgba(11,107,58,.14);
    margin-right:9px;vertical-align:1px}

  /* ------------------------------------------------ заголовок блока --- */
  .crumbs{display:flex;flex-wrap:wrap;align-items:center;gap:8px;
    font-size:13px;color:var(--ink-2);margin:26px 0 0}
  .crumbs a{color:var(--ink-2);text-decoration:none;
    border-bottom:1px solid var(--line)}
  .crumbs a:hover{color:var(--ink);border-bottom-color:var(--ink)}
  .crumbs i{font-style:normal;opacity:.45}
  .crumbs .here{color:var(--ink);font-weight:600}
  .crumbs+h1{margin-top:14px}
  h1{font-family:var(--display);font-weight:800;text-transform:uppercase;
    font-size:clamp(32px,7.4vw,58px);line-height:1;letter-spacing:-.005em;
    margin:4px 0 6px;overflow-wrap:anywhere}
  /* Абзац идет по ширине контейнера: формы и таблицы рядом занимают ее
     целиком, и текст, обрезанный на 62 знаках, выглядел ужатым. Длинную
     строку читать тяжелее, поэтому межстрочный интервал выше. */
  .lead{color:var(--ink-2);font-size:17px;line-height:1.62;
    max-width:1080px;margin:0}
  h2{font-family:var(--display);font-weight:800;text-transform:uppercase;
    font-size:clamp(22px,3.4vw,28px);line-height:1.05;letter-spacing:.005em}
  .board>h2{margin:48px 0 14px}
  .board>h2::after{content:"";display:block;width:44px;height:3px;
    background:var(--accent);margin-top:9px}

  /* -------------------------------------------------- находка дня ----- */
  .hcard{position:relative;overflow:hidden;background:var(--card);
    border:1px solid var(--line);border-radius:var(--r-l);
    padding:26px 24px 24px;margin:24px 0 0;
    box-shadow:0 1px 2px rgba(20,23,28,.05),0 14px 30px -18px rgba(20,23,28,.28)}
  .hcard::before{content:"";position:absolute;left:0;right:0;top:0;height:4px;background:var(--accent)}
  .hkicker{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.14em;
    color:var(--accent-deep)}
  .htop{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;
    gap:16px;margin:12px 0 0}
  .hcity{font-family:var(--display);font-weight:800;text-transform:uppercase;
    font-size:clamp(30px,6.6vw,48px);line-height:1;letter-spacing:-.005em;overflow-wrap:anywhere}
  .hmeta{color:var(--ink-2);font-size:14px;margin-top:8px;
    display:flex;align-items:center;gap:8px;flex-wrap:wrap}
  .hprice{text-align:right}
  .hprice b{display:block;font-family:var(--display);font-weight:800;
    font-size:clamp(30px,6.6vw,46px);line-height:1;color:var(--ink);
    font-variant-numeric:tabular-nums;white-space:nowrap}
  .hprice span{display:block;color:var(--ink-2);font-size:13px;margin-top:6px}
  .hvalue{margin:20px 0 0;max-width:560px}
  .hdates{font-size:16px;font-variant-numeric:tabular-nums;margin:14px 0 18px}
  .hdates i{font-style:normal;color:var(--ink-2);font-size:13px;margin-left:2px}
  .arr{color:var(--accent);padding:0 4px}
  .adnote{color:var(--ink-2);font-size:12px;line-height:1.4;margin-top:14px}

  /* -------------------------------------------------- полоса цифр ----- */
  .stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(168px,1fr));
    border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin:28px 0 0}
  .stat{padding:14px 18px;border-left:1px solid var(--line)}
  .stat:first-child{border-left:0;padding-left:0}
  .stat b{display:block;font-family:var(--display);font-weight:800;font-size:26px;
    line-height:1.05;font-variant-numeric:tabular-nums;white-space:nowrap}
  .stat span{display:block;color:var(--ink-2);font-size:12.5px;line-height:1.35;margin-top:5px}

  /* ------------------------------------------------ панель фильтров --- */
  .ctl{position:absolute;opacity:0;width:1px;height:1px;pointer-events:none}
  .toolbar{position:sticky;top:0;z-index:5;background:var(--paper);
    display:flex;align-items:center;gap:8px;flex-wrap:wrap;
    padding:10px 0;border-bottom:1px solid var(--line)}
  .tlabel{color:var(--ink-2);font-size:12px;font-weight:600;text-transform:uppercase;
    letter-spacing:.08em;white-space:nowrap}
  .tlabel+.chip{margin-right:0}
  .chip{display:inline-flex;align-items:center;background:var(--card);
    border:1px solid var(--line-ui);border-radius:999px;padding:7px 14px;
    font-size:14px;line-height:1.15;color:var(--ink-2);cursor:pointer;
    user-select:none;white-space:nowrap;transition:background .12s,color .12s,border-color .12s}
  .chip:hover{border-color:var(--ink);color:var(--ink)}

  /* -------------------------------------------------------- строки ---- */
  .list{border-top:1px solid var(--line)}
  .deal{display:grid;
    grid-template-columns:28px minmax(120px,1fr) 124px minmax(200px,1.4fr) minmax(190px,1.15fr) 124px;
    gap:16px;align-items:center;background:var(--card);
    border-bottom:1px solid var(--line);padding:14px 16px;
    transition:background .12s}
  .deal:hover{background:var(--tint)}
  .deal.over{display:none}
  .rank{font-family:var(--display);font-weight:700;font-size:15px;color:var(--ink-2);
    font-variant-numeric:tabular-nums;text-align:right}
  .place h3{font-family:var(--display);font-weight:700;text-transform:uppercase;
    font-size:20px;line-height:1.1;letter-spacing:.01em;overflow-wrap:anywhere}
  .place .meta{margin-top:4px}
  .price b{display:block;font-family:var(--display);font-weight:800;font-size:23px;
    line-height:1.05;color:var(--ink);font-variant-numeric:tabular-nums;white-space:nowrap}
  .price .meta{margin-top:3px}
  .go{text-align:right}

  /* ------------------------------------------- уровень выгоды и шкала - */
  .vhead{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px}
  .tier{display:inline-flex;align-items:center;font-size:11px;font-weight:700;
    line-height:1.5;text-transform:uppercase;letter-spacing:.05em;
    border-radius:var(--r-s);padding:3px 8px;white-space:nowrap}
  .tier.t5{background:var(--good);color:#fff}
  .tier.t4{background:var(--good-soft);color:var(--good)}
  .tier.t3{background:var(--info-soft);color:var(--info)}
  .tier.t2{background:var(--track);color:#3F4653}
  .tier.t1{background:transparent;color:var(--ink-2);box-shadow:inset 0 0 0 1px var(--line-ui)}
  .value .bar,.hvalue .bar{display:block;height:8px;max-width:340px;
    background:var(--track);border-radius:999px;overflow:hidden}
  .value .bar>span,.hvalue .bar>span{display:block;height:100%;
    background:var(--accent);border-radius:999px}
  .value .meta,.hvalue .meta{margin-top:6px}
  .value b,.hvalue b{color:var(--ink);font-weight:700}
  .rkm{display:inline-block;margin-top:6px;font-size:12px;font-weight:600;
    color:var(--accent-deep);background:var(--accent-soft);
    border-radius:var(--r-s);padding:2px 7px;font-variant-numeric:tabular-nums}
  .ctxn{color:var(--ink-2);font-size:12.5px;line-height:1.4;margin-top:8px;
    padding-left:10px;border-left:2px solid var(--good)}
  .hist{display:inline-flex;align-items:center;gap:6px;color:var(--ink-2);font-size:12px}
  .hist svg{fill:none;stroke:currentColor;stroke-width:1.5;stroke-linejoin:round}
  .hist.down{color:var(--good)}
  .hist.up{color:var(--warn)}

  /* ------------------------------------------------- даты и теги ------ */
  .when .dates{font-size:16px;font-variant-numeric:tabular-nums;line-height:1.3}
  .when .dates i{font-style:normal;color:var(--ink-2);font-size:12.5px;margin-left:2px}
  .when .meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:6px}
  .tag{display:inline-flex;align-items:center;font-size:12px;line-height:1.4;
    border:1px solid var(--line-ui);border-radius:var(--r-s);padding:2px 8px;
    color:var(--ink-2);background:var(--card);white-space:nowrap}
  .tag.ok{color:var(--good);border-color:rgba(11,107,58,.45);background:var(--good-soft)}

  /* -------------------------------------------------------- кнопка ---- */
  .btn{display:inline-flex;align-items:center;justify-content:center;
    border:1px solid var(--ink);border-radius:var(--r-m);background:var(--card);
    padding:9px 16px;font:600 14px/1.15 var(--text);color:var(--ink);
    white-space:nowrap;cursor:pointer;transition:background .12s,color .12s}
  .btn:hover{background:var(--ink);color:var(--paper);text-decoration:none}
  .btn.big{background:var(--accent);border-color:var(--accent);color:#fff;
    padding:14px 26px;font-size:17px;font-weight:700;border-radius:10px}
  .btn.big:hover{background:var(--accent-deep);border-color:var(--accent-deep);color:#fff}

  /* --------------------------------------------- пустой результат ----- */
  .empty{display:none;background:var(--card);border:1px dashed var(--line-ui);
    border-radius:var(--r-l);padding:18px;color:var(--ink-2);text-align:center;margin-top:14px}
  .summary{color:var(--ink-2);font-size:14px;line-height:1.5;
    border-top:1px solid var(--line);margin-top:32px;padding-top:16px}

  /* --------------------------------------------- сортировка и фильтр -- */
  .board input[id$="-price"]:checked~.toolbar label[for$="-price"],
  .board input[id$="-val"]:checked~.toolbar label[for$="-val"],
  .board input[id$="-far"]:checked~.toolbar label[for$="-far"],
  .board input[id$="-direct"]:checked~.toolbar label[for$="-direct"],
  .board input[id$="-ow"]:checked~.toolbar label[for$="-ow"],
  .board input[id$="-rt"]:checked~.toolbar label[for$="-lv1"]
    {background:var(--ink);border-color:var(--ink);color:var(--paper);font-weight:600}
  .board input[id$="-price"]:focus-visible~.toolbar label[for$="-price"],
  .board input[id$="-val"]:focus-visible~.toolbar label[for$="-val"],
  .board input[id$="-far"]:focus-visible~.toolbar label[for$="-far"],
  .board input[id$="-direct"]:focus-visible~.toolbar label[for$="-direct"],
  .board input[id$="-ow"]:focus-visible~.toolbar label[for$="-ow"],
  .board input[id$="-rt"]:focus-visible~.toolbar label[for$="-lv1"]
    {outline:2px solid var(--accent);outline-offset:2px}
  .list{display:flex;flex-direction:column}
  .board input[id$="-price"]:checked~.list .deal{order:var(--o-price)}
  .board input[id$="-val"]:checked~.list .deal{order:var(--o-val)}
  .board input[id$="-far"]:checked~.list .deal{order:var(--o-far)}
  .board input[id$="-direct"]:checked~.list .deal[data-direct="0"]{display:none}
  .board input[id$="-ow"]:checked~.list .deal[data-round="1"]{display:none}
  .board input[id$="-rt"]:checked~.list .deal[data-round="0"]{display:none}
  @supports selector(:has(*)){
    .board input[id$="-direct"]:checked~.list:not(:has(.deal[data-direct="1"]))~.empty,
    .board input[id$="-ow"]:checked~.list:not(:has(.deal[data-round="0"]))~.empty,
    .board input[id$="-rt"]:checked~.list:not(:has(.deal[data-round="1"]))~.empty{display:block}
  }

  /* --------------------------------------------------------- подвал --- */
  footer.site{background:var(--tint);border-top:1px solid var(--line);
    margin-top:56px;padding:32px 0 48px}
  .fcols{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:24px}
  .fcols b{display:block;font-size:12px;font-weight:700;text-transform:uppercase;
    letter-spacing:.1em;color:var(--ink-2);margin-bottom:10px}
  .fcols a{display:block;font-size:15px;margin-bottom:7px;color:var(--ink)}
  .fnote{color:var(--ink-2);font-size:12px;line-height:1.45;max-width:70ch;padding-top:22px}

  /* ------------------------------------------------------- планшет ---- */
  @media (max-width:1000px){
    .deal{grid-template-columns:1fr auto;
      grid-template-areas:"place price" "value value" "when go";gap:12px 16px}
    .rank{display:none}
    .place{grid-area:place}
    .price{grid-area:price;text-align:right}
    .value{grid-area:value}
    .when{grid-area:when}
    .go{grid-area:go;align-self:end}
    .value .bar,.hvalue .bar{max-width:460px}
  }

  /* ------------------------------------------------------- телефон ---- */
  @media (max-width:640px){
    body{font-size:16px}
    .wrap{padding:0 16px}
    header.site .bar{padding:12px 16px 10px;gap:10px;min-height:0}
    .brand{order:1}
    .stamp{order:2;margin-left:auto;font-size:12.5px}
    .menu{order:3;flex:0 0 100%;flex-wrap:nowrap;overflow-x:auto;gap:16px;
      font-size:14px;scrollbar-width:none;margin:0 -16px;padding:2px 16px 0}
    /* Ссылка не ломается внутри себя. Ряд и без того прокручивается в
       сторону, а перенос «Машина напрокат» на две строки растил шапку с 79 до
       100 пикселей на страницах без формы поиска. */
    .menu a{white-space:nowrap}
    .menu::-webkit-scrollbar{display:none}
    h1{margin:26px 0 10px}
    .lead{font-size:16px}
    .board>h2{margin:38px 0 12px}
    .hcard{padding:22px 16px 20px;border-radius:12px;margin-top:20px}
    .htop{flex-direction:column;align-items:flex-start;gap:10px}
    .hprice{text-align:left}
    .hprice span{margin-top:4px}
    .hdates{font-size:15px}
    .btn.big{display:flex;width:100%;padding:14px 18px}
    .stats{grid-template-columns:repeat(2,1fr);border-top:0}
    .stat{padding:12px 14px;border-left:1px solid var(--line);border-top:1px solid var(--line)}
    .stat:first-child{border-left:1px solid var(--line);padding-left:14px}
    .stat:nth-child(odd){border-left:0;padding-left:0}
    .stat b{font-size:22px}
    .toolbar{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;
      margin:0 -16px;padding:10px 16px}
    .toolbar::-webkit-scrollbar{display:none}
    .list{margin:0 -16px}
    .deal{padding:14px 16px;
      grid-template-areas:"place price" "value value" "when when" "go go";gap:10px 12px}
    .place h3{font-size:19px}
    .price b{font-size:21px}
    .go{text-align:stretch}
    .go .btn{display:flex;width:100%;padding:11px 16px;font-size:15px}
    footer.site{margin-top:40px;padding:28px 0 40px}
    .fcols{grid-template-columns:repeat(2,1fr);gap:20px}
  }

  /* ------------------------------------------------------- 360px ------ */
  @media (max-width:380px){
    .wrap{padding:0 14px}
    header.site .bar{padding:12px 14px}
    .brand{font-size:20px}
    .menu{margin:0 -14px;padding:2px 14px 0}
    h1{font-size:30px}
    .hcard{padding:20px 14px 18px}
    .hcity{font-size:28px}
    .hprice b{font-size:30px}
    .toolbar{margin:0 -14px;padding:10px 14px}
    .list{margin:0 -14px}
    .deal{padding:13px 14px}
    .place h3{font-size:18px}
    .price b{font-size:20px}
    .stat b{font-size:20px}
    .fcols{grid-template-columns:1fr}
  }

  @media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

  /* --------------------------------------------------------- печать --- */
  @media print{
    @page{margin:14mm}
    body{background:#fff;color:#000;font-size:10.5pt;line-height:1.35}
    .menu,.toolbar,.go,.btn,.live,.hist,.adnote,footer.site .fcols{display:none!important}
    header.site,footer.site{background:#fff;border-color:#999}
    .wrap{max-width:none;padding:0}
    h1{font-size:22pt;margin:0 0 6pt}
    h2{font-size:14pt;margin:16pt 0 6pt}
    h2::after{display:none}
    .lead,.stamp,.fnote{color:#000}
    .hcard{border:1px solid #999;border-radius:0;box-shadow:none;padding:10pt;
      break-inside:avoid;page-break-inside:avoid}
    .hcard::before{display:none}
    .stats{border-color:#999}
    .stat{border-color:#999}
    .deal{border-bottom:1px solid #999;padding:6pt 0;background:#fff;
      break-inside:avoid;page-break-inside:avoid;
      grid-template-columns:1fr auto;grid-template-areas:"place price" "value value" "when when"}
    .rank{display:none}
    .tier{background:#fff!important;color:#000!important;box-shadow:inset 0 0 0 1px #666}
    .value .bar,.hvalue .bar{background:#fff;box-shadow:inset 0 0 0 1px #999}
    .value .bar>span,.hvalue .bar>span{background:#666}
    .tag,.rkm{background:#fff!important;color:#000!important;border:1px solid #999}
    .ctxn{border-left-color:#999;color:#000}
    a[href]::after{content:""}
  }

  /* ======================================================================
     СТРАНИЦА ПОЕЗДКИ /poezdka.html: маршрут из плеч, разложение цены,
     риск, ползунок цены часа. Те же токены и та же типографика.
     ====================================================================== */
  .logo{font-family:var(--display);font-weight:800;font-size:20px;line-height:1;
    text-transform:uppercase;letter-spacing:.04em;color:var(--ink)}
  .note{color:var(--ink-2);font-size:17px;line-height:1.5;max-width:62ch;margin-top:10px}
  .upd{color:var(--ink-2);font-size:12.5px;line-height:1.45;margin-top:12px}

  /* ------------------------------------------- ползунок цены часа ----- */
  .vot{position:relative;overflow:hidden;background:var(--card);
    border:1px solid var(--line);border-radius:var(--r-l);padding:18px 20px 16px;
    margin:26px 0 22px;
    box-shadow:0 1px 2px rgba(20,23,28,.05),0 14px 30px -18px rgba(20,23,28,.28)}
  .vot::before{content:"";position:absolute;left:0;right:0;top:0;height:4px;background:var(--accent)}
  .vot label{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;
    font-size:15px;font-weight:600;color:var(--ink)}
  .vot output{font-family:var(--display);font-weight:800;font-size:36px;line-height:1;
    color:var(--ink);font-variant-numeric:tabular-nums}
  .vot input[type=range]{-webkit-appearance:none;appearance:none;width:100%;
    margin:14px 0 0;background:transparent;height:28px;cursor:pointer}
  .vot input[type=range]:focus-visible{outline:2px solid var(--accent);outline-offset:4px;border-radius:999px}
  .vot input[type=range]::-webkit-slider-runnable-track{height:6px;border-radius:999px;background:var(--track)}
  .vot input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;
    width:26px;height:26px;margin-top:-10px;border-radius:50%;background:var(--accent);
    border:3px solid var(--card);box-shadow:0 1px 4px rgba(20,23,28,.35)}
  .vot input[type=range]::-moz-range-track{height:6px;border-radius:999px;background:var(--track)}
  .vot input[type=range]::-moz-range-thumb{width:20px;height:20px;border-radius:50%;
    background:var(--accent);border:3px solid var(--card);box-shadow:0 1px 4px rgba(20,23,28,.35)}
  .votscale{display:flex;justify-content:space-between;color:var(--ink-2);font-size:12px;
    font-variant-numeric:tabular-nums;margin-top:2px}
  .vot .hint{color:var(--ink-2);font-size:14px;line-height:1.5;margin-top:12px;
    padding-top:12px;border-top:1px solid var(--line)}
  .vot .hint b{color:var(--ink)}

  /* -------------------------------------------------- вариант пути ---- */
  .var{position:relative;background:var(--card);border:1px solid var(--line);
    border-radius:var(--r-l);padding:18px 20px;margin:0 0 14px}
  .var.best{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}
  .var.best::before{content:"Выгоднее при вашей цене часа";position:absolute;top:0;left:20px;
    transform:translateY(-50%);background:var(--accent);color:#fff;font-size:11px;
    font-weight:700;text-transform:uppercase;letter-spacing:.06em;
    padding:3px 9px;border-radius:var(--r-s)}
  .vh{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;
    flex-wrap:wrap;margin-bottom:14px}
  .vh b{font-family:var(--display);font-weight:800;font-size:24px;line-height:1.1;
    text-transform:uppercase;letter-spacing:.01em}
  .vp{display:flex;align-items:baseline;justify-content:flex-end;gap:16px;
    flex-wrap:wrap;margin-left:auto;text-align:right}
  .vp b{font-family:var(--display);font-weight:800;font-size:32px;line-height:1;
    color:var(--ink);font-variant-numeric:tabular-nums;white-space:nowrap}
  .vp .vt{font-size:32px;color:var(--ink)}
  .vp span{display:block;width:100%;color:var(--ink-2);font-size:12.5px;
    line-height:1.4;margin-top:2px}

  /* -------------------------------------------------------- маршрут --- */
  .legs{position:relative;margin:0 0 14px;padding-left:26px;border-top:1px solid var(--line)}
  .legs::before{content:"";position:absolute;left:4px;top:16px;bottom:16px;
    width:2px;background:var(--line)}
  .leg,.stay,.wait,.move,.night{position:relative}
  .leg::before,.stay::before,.wait::before,.move::before,.night::before{
    content:"";position:absolute;left:-26px;top:1.05em;width:10px;height:10px;
    border-radius:50%;background:var(--ink);box-shadow:0 0 0 3px var(--card)}
  .leg{display:grid;grid-template-columns:1.7fr 1fr .9fr .9fr auto;gap:10px 14px;
    align-items:center;padding:12px 0;border-bottom:1px solid var(--line);font-size:15px}
  .lr{font-weight:600;overflow-wrap:anywhere}
  .ld{color:var(--ink-2);font-size:13.5px;font-variant-numeric:tabular-nums}
  .ls{color:var(--ink-2);font-size:13.5px}
  .lp{font-family:var(--display);font-weight:800;font-size:20px;color:var(--ink);
    font-variant-numeric:tabular-nums;white-space:nowrap}
  .lg{text-align:right}
  .leg .btn{padding:7px 14px;font-size:13.5px}

  /* остановка это цель поездки, стыковка это издержка: разный вес и цвет */
  .stay,.wait,.move,.night{font-size:13.5px;line-height:1.45;padding:10px 12px;
    margin:8px 0;border-radius:var(--r-m);border:1px solid transparent}
  .stay{background:var(--good-soft);border-color:rgba(11,107,58,.28);color:var(--good);font-weight:600}
  .stay::before{background:var(--good)}
  .wait{background:var(--tint);border-color:var(--line);color:var(--ink-2)}
  .wait::before{background:var(--card);box-shadow:0 0 0 2px var(--line-ui),0 0 0 5px var(--card)}
  .move{background:var(--warn-soft);border-color:rgba(138,83,0,.28);color:var(--warn)}
  .move::before{background:var(--warn);border-radius:2px}
  .night{background:var(--info-soft);border-color:rgba(31,76,134,.22);color:var(--info)}
  .night::before{background:var(--info);border-radius:2px}
  .stay b,.wait b,.move b,.night b{font-variant-numeric:tabular-nums}

  /* ----------------------------------------------------------- риск --- */
  .risk{display:flex;align-items:flex-start;gap:10px;font-size:13.5px;line-height:1.5;
    color:var(--ink-2);border-top:1px solid var(--line);margin-top:6px;padding:12px 0 0}
  .risk::before{content:"";flex:0 0 auto;width:10px;height:10px;border-radius:50%;
    background:var(--line-ui);margin-top:5px}
  .risk b{color:var(--ink);font-variant-numeric:tabular-nums}
  .risk.r1::before{background:var(--good)}
  .risk.r2::before{background:var(--warn)}
  .risk.r3::before{background:var(--alert)}
  .risk.r3 b{color:var(--alert)}

  /* ------------------------------------------------- разложение цены -- */
  .split{display:grid;grid-template-columns:repeat(auto-fit,minmax(124px,1fr));
    border-top:1px solid var(--line);margin-top:12px}
  .si{padding:10px 14px;border-left:1px solid var(--line)}
  .si:first-child{border-left:0;padding-left:0}
  .si span{display:block;color:var(--ink-2);font-size:12px;line-height:1.3}
  .si b{display:block;font-family:var(--display);font-weight:800;font-size:19px;
    line-height:1.1;margin-top:4px;font-variant-numeric:tabular-nums}
  .si.total{background:var(--tint)}
  .si.total b{font-size:22px}
  .si.zero b{color:var(--ink-2)}
  .vf{color:var(--ink-2);font-size:13px;line-height:1.5;border-top:1px solid var(--line);
    margin-top:12px;padding-top:10px}
  .rate{font-size:15px;line-height:1.5;color:var(--ink);margin-top:12px;
    background:var(--tint);border-left:3px solid var(--accent);
    border-radius:0 var(--r-m) var(--r-m) 0;padding:11px 14px}
  .rate b{font-variant-numeric:tabular-nums}

  /* ------------------------- «показать еще»: список без длинного хвоста -- */
  .more{margin:4px 0 20px}
  .more>summary{display:inline-flex;align-items:center;justify-content:center;
    list-style:none;cursor:pointer;border:1px solid var(--ink);border-radius:var(--r-m);
    background:var(--card);padding:9px 18px;font-weight:600;font-size:14px;color:var(--ink)}
  .more>summary::-webkit-details-marker{display:none}
  .more>summary:hover{background:var(--ink);color:var(--paper)}
  .more[open]>summary{display:none}

  /* ------------------------------------------- поездка на телефоне ---- */
  @media (max-width:700px){
    .vot{padding:16px 14px 14px;border-radius:12px}
    .vot output{font-size:30px}
    .var{padding:16px 14px;border-radius:12px}
    .var.best::before{left:14px;font-size:10px}
    .vh b{font-size:20px}
    .vp{margin-left:0;gap:12px;justify-content:flex-start;text-align:left}
    .vp b,.vp .vt{font-size:26px}
    .legs{padding-left:22px}
    .legs::before{left:3px}
    .leg::before,.stay::before,.wait::before,.move::before,.night::before{left:-22px}
    .leg{grid-template-columns:1fr auto;grid-template-areas:"lr lp" "ld ls" "lg lg";
      gap:4px 12px;font-size:14.5px;align-items:baseline}
    .lr{grid-area:lr}
    .lp{grid-area:lp;text-align:right;font-size:18px}
    .ld{grid-area:ld}
    .ls{grid-area:ls;text-align:right}
    .lg{grid-area:lg;text-align:stretch;padding-top:8px}
    .leg .btn{display:flex;width:100%;padding:10px}
    .split{grid-template-columns:repeat(2,1fr)}
    .si{padding:10px 12px;border-left:1px solid var(--line);border-top:1px solid var(--line)}
    .si:nth-child(odd){border-left:0;padding-left:0}
    .si:first-child,.si:nth-child(2){border-top:0}
  }

  @media print{
    .vot,.rate,.lg{display:none!important}
    .var{border:1px solid #999;border-radius:0;box-shadow:none;margin-bottom:8pt;
      break-inside:avoid;page-break-inside:avoid}
    .var.best::before{display:none}
    .stay,.wait,.move,.night{background:#fff!important;border:1px solid #999;color:#000!important}
    .risk::before{box-shadow:inset 0 0 0 1px #000}
  }


  /* -------------------------------------------------- фотографии ------ */
  .place{display:flex;align-items:center;gap:14px;min-width:0}
  .place>div{min-width:0}
  .thumb{flex:0 0 auto;width:62px;height:47px;object-fit:cover;border-radius:var(--r-s);
    background:var(--track);border:1px solid var(--line)}
  .hcard{padding-top:0}
  .hphoto{display:block;width:calc(100% + 48px);max-width:none;height:220px;object-fit:cover;
    margin:0 -24px 20px;border-bottom:1px solid var(--line);background:var(--track)}
  @media (max-width:1000px){ .thumb{width:54px;height:41px} }
  @media (max-width:640px){
    .hphoto{width:calc(100% + 32px);margin:0 -16px 18px;height:170px}
    .thumb{width:48px;height:36px}
    .place{gap:10px}
  }
  @media (max-width:380px){ .hphoto{width:calc(100% + 28px);margin:0 -14px 16px;height:150px} }
  @media print{ .thumb,.hphoto{display:none} }

  /* --------------------------- компактная строка находки -------------- */
  .deal{display:grid;grid-template-columns:26px 62px 1fr auto;gap:14px;
    align-items:center;padding:12px 16px}
  .deal .main{min-width:0}
  .row1{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}
  .row1 h3{font-family:var(--display);font-weight:700;text-transform:uppercase;
    font-size:19px;line-height:1.1;letter-spacing:.01em;margin:0}
  .when1{font-size:15.5px;font-variant-numeric:tabular-nums;white-space:nowrap;font-weight:600}
  .when1 i{font-style:normal;color:var(--ink-2);font-size:13px;font-weight:400;margin-left:2px}
  .pricebox{margin-left:auto;text-align:right;white-space:nowrap}
  .pricebox b{font-family:var(--display);font-weight:800;font-size:22px;line-height:1.05;
    font-variant-numeric:tabular-nums;display:block}
  .pricebox span{color:var(--ink-2);font-size:12px;display:block;margin-top:1px}
  .row2{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:6px;
    color:var(--ink-2);font-size:13px;line-height:1.4}
  .row2 b{color:var(--ink);font-weight:700}
  .row2 .sep{color:var(--line-ui)}
  @media (max-width:760px){
    .deal{grid-template-columns:52px 1fr;gap:12px}
    .deal .rank{display:none}
    .deal .go{grid-column:1/-1;text-align:stretch;margin-top:8px}
    .deal .go .btn{display:flex;width:100%;padding:10px}
    .row1 h3{font-size:18px}
    .when1{flex:0 0 100%;order:3;font-size:15px}
    .pricebox b{font-size:20px}
    .thumb{width:52px;height:39px}
  }
  @media (max-width:380px){ .deal{grid-template-columns:44px 1fr} .thumb{width:44px;height:33px} }
  .board input[id$="-m1"]:checked~.list .deal:not([data-month="1"]){display:none}
  .board input[id$="-m2"]:checked~.list .deal:not([data-month="2"]){display:none}
  .board input[id$="-m3"]:checked~.list .deal:not([data-month="3"]){display:none}
  .board input[id$="-m4"]:checked~.list .deal:not([data-month="4"]){display:none}
  .board input[id$="-m5"]:checked~.list .deal:not([data-month="5"]){display:none}
  .board input[id$="-m6"]:checked~.list .deal:not([data-month="6"]){display:none}
  .board input[id$="-m7"]:checked~.list .deal:not([data-month="7"]){display:none}
  .board input[id$="-m8"]:checked~.list .deal:not([data-month="8"]){display:none}
  .board input[id$="-m9"]:checked~.list .deal:not([data-month="9"]){display:none}
  .board input[id$="-m10"]:checked~.list .deal:not([data-month="10"]){display:none}
  .board input[id$="-m11"]:checked~.list .deal:not([data-month="11"]){display:none}
  .board input[id$="-m12"]:checked~.list .deal:not([data-month="12"]){display:none}
  .board input[id$="-m1"]:checked~.toolbar label[for$="-m1"]{background:var(--ink);border-color:var(--ink);color:var(--paper);font-weight:600}
  .board input[id$="-m2"]:checked~.toolbar label[for$="-m2"]{background:var(--ink);border-color:var(--ink);color:var(--paper);font-weight:600}
  .board input[id$="-m3"]:checked~.toolbar label[for$="-m3"]{background:var(--ink);border-color:var(--ink);color:var(--paper);font-weight:600}
  .board input[id$="-m4"]:checked~.toolbar label[for$="-m4"]{background:var(--ink);border-color:var(--ink);color:var(--paper);font-weight:600}
  .board input[id$="-m5"]:checked~.toolbar label[for$="-m5"]{background:var(--ink);border-color:var(--ink);color:var(--paper);font-weight:600}
  .board input[id$="-m6"]:checked~.toolbar label[for$="-m6"]{background:var(--ink);border-color:var(--ink);color:var(--paper);font-weight:600}
  .board input[id$="-m7"]:checked~.toolbar label[for$="-m7"]{background:var(--ink);border-color:var(--ink);color:var(--paper);font-weight:600}
  .board input[id$="-m8"]:checked~.toolbar label[for$="-m8"]{background:var(--ink);border-color:var(--ink);color:var(--paper);font-weight:600}
  .board input[id$="-m9"]:checked~.toolbar label[for$="-m9"]{background:var(--ink);border-color:var(--ink);color:var(--paper);font-weight:600}
  .board input[id$="-m10"]:checked~.toolbar label[for$="-m10"]{background:var(--ink);border-color:var(--ink);color:var(--paper);font-weight:600}
  .board input[id$="-m11"]:checked~.toolbar label[for$="-m11"]{background:var(--ink);border-color:var(--ink);color:var(--paper);font-weight:600}
  .board input[id$="-m12"]:checked~.toolbar label[for$="-m12"]{background:var(--ink);border-color:var(--ink);color:var(--paper);font-weight:600}
  .board input[id$="-b1"]:checked~.list .deal:not([data-band="1"]){display:none}
  .board input[id$="-b1"]:checked~.toolbar label[for$="-b1"]{background:var(--ink);border-color:var(--ink);color:var(--paper);font-weight:600}
  .board input[id$="-b2"]:checked~.list .deal:not([data-band="1"]):not([data-band="2"]){display:none}
  .board input[id$="-b2"]:checked~.toolbar label[for$="-b2"]{background:var(--ink);border-color:var(--ink);color:var(--paper);font-weight:600}
  .board input[id$="-b3"]:checked~.list .deal:not([data-band="1"]):not([data-band="2"]):not([data-band="3"]){display:none}
  .board input[id$="-b3"]:checked~.toolbar label[for$="-b3"]{background:var(--ink);border-color:var(--ink);color:var(--paper);font-weight:600}
  .board input[id$="-b4"]:checked~.list .deal:not([data-band="1"]):not([data-band="2"]):not([data-band="3"]):not([data-band="4"]){display:none}
  .board input[id$="-b4"]:checked~.toolbar label[for$="-b4"]{background:var(--ink);border-color:var(--ink);color:var(--paper);font-weight:600}

  /* ---------------------------------- прочие партнерские предложения --- */
  .offers{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));
    gap:12px;margin:16px 0 0}
  .oc{background:var(--card);border:1px solid var(--line);border-radius:var(--r-l);
    padding:16px 18px;display:flex;flex-direction:column}
  .oc b{font-family:var(--display);font-weight:800;text-transform:uppercase;
    font-size:17px;margin-bottom:6px}
  .oc p{color:var(--ink-2);font-size:14px;line-height:1.5;flex:1}
  .obtn{display:inline-block;margin-top:12px;padding:9px 16px;border-radius:var(--r-m);
    background:var(--ink);color:var(--paper);font-weight:600;font-size:14px;text-align:center}
  .obtn:hover{text-decoration:none;background:var(--accent-deep)}
  .olab{margin-top:8px;color:var(--ink-3,#8b8b8b);font-size:11px;line-height:1.35}



  /* --------------------------------------------- ссылки на разборы ----- */
  .rlnote{color:var(--ink-2);font-size:14.5px;margin:8px 0 0}
  .rls{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:10px;margin:14px 0 0}
  .rl{display:flex;flex-direction:column;gap:4px;background:var(--card);
    border:1px solid var(--line);border-radius:var(--r-l);padding:14px 16px;color:inherit}
  .rl:hover{text-decoration:none;border-color:var(--ink)}
  .rl b{font-size:15.5px;font-weight:700}
  .rl span{color:var(--ink-2);font-size:12.5px;line-height:1.4}
  .rl em{font-style:normal;font-weight:700;font-variant-numeric:tabular-nums;margin-top:3px}
  .allreads{margin:14px 0 0;font-size:15px}
  .allreads a{color:var(--accent-deep);font-weight:600}

  /* Общий сброс обнуляет отступы, а правило ниже написано только для блока
     витрины. Здесь возвращаем отступы заголовкам основного блока: без этого
     текст прилипает к следующему разделу. */
  .wrap > h2{margin:44px 0 14px}
  .wrap > h2:first-child{margin-top:26px}
  .wrap > p + h2,
  .wrap > div + h2,
  .wrap > dl + h2,
  .wrap > ul + h2,
  .wrap > form + h2{margin-top:46px}
  .wrap > h1 + .lead{margin-top:12px}

  /* Числа и деньги не переносятся: сумма должна читаться целиком.
     Разделитель разрядов и так неразрывный, это страховка. */
  .num,.pnum,.trust b,.itog b,.kdprice,.cd b,em{white-space:nowrap}

  /* --------------------------------------------------- кнопка перехода --- */
  .btn-go{display:inline-flex;align-items:center;gap:9px;margin-top:16px;
    padding:12px 20px;border:1px solid var(--ink);border-radius:var(--r-m);
    background:var(--bg);color:var(--ink);font-weight:600;font-size:15.5px;
    transition:background .15s,color .15s}
  .btn-go:hover{text-decoration:none;background:var(--ink);color:var(--paper)}
  .btn-go svg{flex:0 0 auto}
  .btn-note{display:block;margin-top:8px;color:var(--ink-2);font-size:13px}

  /* Единая сетка строки находки: номер, содержимое, кнопка. Колонки фиксированы,
     поэтому цены и кнопки стоят по одной линии во всех строках. Превью убраны:
     на 62 пикселях силуэт города не читается, а строк на странице тридцать. */
  .deal{display:grid;grid-template-columns:30px 1fr 108px;
    gap:16px;align-items:center;padding:15px 18px}
  .deal .rank{color:var(--ink-2);font-size:13px;text-align:right;
    font-variant-numeric:tabular-nums}
  .deal .main{min-width:0;display:flex;flex-direction:column;gap:7px}
  .deal .row1{display:grid;grid-template-columns:1fr 132px;gap:14px;align-items:baseline}
  .deal .pricebox{text-align:right;white-space:nowrap;min-width:0;overflow:hidden}
  .deal .row2{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
  .deal .tier{flex:0 0 auto;min-width:104px;text-align:center}
  .deal .go{justify-self:stretch}
  .deal .go .btn{display:block;text-align:center}
  .deal .thumb{display:none}
  @media (max-width:700px){
    .deal{grid-template-columns:24px 1fr;gap:10px 12px;padding:13px 14px}
    .deal .row1{grid-template-columns:1fr;gap:4px}
    .deal .pricebox{text-align:left}
    .deal .go{grid-column:1/-1;margin-top:9px}
    .deal .tier{min-width:0}
  }

  /* Единая сетка строки: картинка, содержимое, кнопка. Колонки фиксированы,
     поэтому цены и кнопки стоят по одной линии. Подложка под картинкой держит
     колонку, даже если картинки для города нет. */
  .deal{display:grid;grid-template-columns:96px 1fr 108px;
    gap:16px;align-items:center;padding:14px 18px}
  .deal .pic{width:96px;height:72px;border-radius:var(--r-s);overflow:hidden;
    background:var(--track)}
  .deal .pic img{display:block;width:100%;height:100%;object-fit:cover}
  /* Номера скрыты: при включенном фильтре они шли 1, 3, 4, 7 и читались
     как ошибка. */
  .deal .rank{display:none}
  .deal .main{min-width:0;display:flex;flex-direction:column;gap:7px}
  .deal .row1{display:grid;grid-template-columns:1fr 138px;gap:14px;align-items:baseline}
  .deal .pricebox{text-align:right;white-space:nowrap;min-width:0;overflow:hidden}
  .deal .row2{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
  .deal .tier{flex:0 0 auto;min-width:118px;text-align:center}
  .deal .go{justify-self:stretch}
  .deal .go .btn{display:block;text-align:center}
  @media (max-width:700px){
    .deal{grid-template-columns:64px 1fr;gap:10px 12px;padding:12px 14px}
    .deal .pic{width:64px;height:48px}
    .deal .row1{grid-template-columns:1fr;gap:4px}
    .deal .pricebox{text-align:left}
    .deal .go{grid-column:1/-1;margin-top:9px}
    .deal .tier{min-width:0}
  }

  /* Отличия сайта плитками под строкой поиска. Абзац человек не читает, а
     четыре короткие строки читаются за секунду и называют то, чего у
     метапоисков нет разом. */

  /* Горячие находки: направления, ушедшие вниз от своей обычной цены. Полоса
     яркая нарочно, это единственное место на главной, где мы кричим. */
  .gor{margin:22px 0 0;padding:18px 20px 20px;border-radius:var(--r-l);
    background:var(--accent);color:#fff}
  .gor-shapka{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 14px;
    margin:0 0 14px}
  .gor-shapka h2{margin:0;font-size:clamp(19px,2.6vw,24px);color:#fff}
  .gor-shapka span{color:rgba(255,255,255,.82);font-size:13px}
  .gor-ryad{display:grid;grid-template-columns:repeat(auto-fill,minmax(226px,1fr));
    gap:10px}
  .gor-k{display:flex;flex-direction:column;gap:2px;padding:14px 16px;
    text-decoration:none;color:var(--ink);background:#fff;
    border-radius:var(--r-l);transition:transform .2s ease,box-shadow .2s ease}
  .gor-k:hover{transform:translateY(-2px);box-shadow:0 10px 24px rgba(20,23,28,.18)}
  .gor-p{align-self:flex-start;font-size:11.5px;font-weight:800;
    letter-spacing:.03em;padding:2px 8px;border-radius:999px;
    background:var(--accent-soft);color:var(--accent-deep)}
  .gor-g{font-family:var(--display);font-weight:800;font-size:18px;
    text-transform:uppercase;letter-spacing:.01em;margin:6px 0 0}
  .gor-c{display:flex;align-items:baseline;gap:8px}
  .gor-c b{font-family:var(--display);font-weight:800;font-size:20px}
  .gor-c s{color:var(--ink-2);font-size:13.5px}
  .gor-m{color:var(--ink-2);font-size:12.5px;margin:2px 0 0}
  @media (max-width:700px){
    .gor{padding:14px 14px 16px}
    .gor-ryad{grid-template-columns:repeat(auto-fill,minmax(160px,1fr))}
    .gor-g{font-size:16px}
  }
  /* Переключатель категорий над карточками городов. Работает без скриптов:
     скрытые переключатели плюс правила показа, как у фильтров по месяцу. */
  .cities-switch{display:inline-flex;gap:0;margin:14px 0 0;
    border:1px solid var(--line);border-radius:var(--r-m);overflow:hidden}
  .cities-switch label{padding:9px 18px;font-size:14.5px;font-weight:600;
    color:var(--ink-2);cursor:pointer;background:var(--card);
    border-left:1px solid var(--line)}
  .cities-switch label:first-child{border-left:0}
  #cdir-ru:checked~.cities-switch label[for="cdir-ru"],
  #cdir-ab:checked~.cities-switch label[for="cdir-ab"]{
    background:var(--ink);color:var(--paper)}
  #cdir-ru:checked~.cities-grid .c-ab{display:none}
  #cdir-ab:checked~.cities-grid .c-ru{display:none}
  .cal2-n{color:var(--ink-2);font-size:12.5px;line-height:1.5;
    margin:0 0 12px;max-width:74ch}
  /* Фильтры спрятаны за одну кнопку: десять переключателей, развернутых
     всегда, человек читает как шум и проходит мимо. */
  .flt-open{display:inline-flex;align-items:center;gap:8px;margin:14px 0 0;
    padding:9px 16px;font-size:14px;font-weight:600;cursor:pointer;
    color:var(--ink-2);background:var(--card);border:1px solid var(--line);
    border-radius:999px}
  .flt-open:hover{color:var(--ink);border-color:var(--ink-2)}
  .flt-open::after{content:"";width:7px;height:7px;border-right:1.6px solid currentColor;
    border-bottom:1.6px solid currentColor;transform:rotate(45deg) translate(-1px,-1px);
    transition:transform .25s ease}
  .board>.toolbar{display:none}
  .board>input[id$="-flt"]:checked~.toolbar{display:flex}
  .board>input[id$="-flt"]:checked~.flt-open{color:var(--ink);
    border-color:var(--ink-2)}
  .board>input[id$="-flt"]:checked~.flt-open::after{
    transform:rotate(225deg) translate(-1px,-1px)}
  /* Переключатель разделов на странице города. Оба раздела стоят на одном
     месте, видно один: до заграницы больше не нужно листать через всю Россию.
     Скрытые радио и правила показа, тот же прием, что у фильтров по месяцу. */
  .cities-switch.pdir{margin:26px 0 0}
  #pdir-ru:checked~.cities-switch label[for="pdir-ru"],
  #pdir-ab:checked~.cities-switch label[for="pdir-ab"]{
    background:var(--ink);color:var(--paper)}
  #pdir-ru:checked~#ab{display:none}
  #pdir-ab:checked~#ru{display:none}
  /* Заголовок раздела повторяет надпись на кнопке, поэтому отступ сверху
     убираем: две одинаковые строки подряд выглядят ошибкой верстки. */
  .cities-switch.pdir~.board>h2{margin-top:18px}
  /* Карточки одной высоты: раньше разъезжались из-за длины названий. */
  .cities-grid{align-items:stretch}
  .city{display:flex;flex-direction:column}
  .city .cb{flex:1;display:flex;flex-direction:column;justify-content:flex-start}

  /* Одна сетка на всю строку находки: картинка, содержимое, дата, цена, кнопка.
     Колонки фиксированы и выровнены по центру, поэтому в любой строке дата стоит
     под датой, цена под ценой, кнопка под кнопкой. */
  .deal{display:grid;
    grid-template-columns:96px minmax(0,1fr) 156px 142px 108px;
    gap:18px;align-items:center;padding:15px 18px}
  .deal .pic{width:96px;height:72px;border-radius:var(--r-s);overflow:hidden;
    background:var(--track)}
  .deal .pic img{display:block;width:100%;height:100%;object-fit:cover}
  .deal .rank{display:none}
  .deal .main{min-width:0;display:flex;flex-direction:column;gap:7px}
  .deal .main h3{font-size:17px;line-height:1.15}
  .deal .row2{display:flex;flex-wrap:wrap;align-items:center;gap:8px;
    font-size:13.5px;color:var(--ink-2)}
  .deal .tier{flex:0 0 auto;min-width:118px;text-align:center}
  .deal .dt{font-size:14.5px;line-height:1.35;text-align:right;min-width:0;
    font-variant-numeric:tabular-nums}
  .deal .dt i{font-style:normal;color:var(--ink-2)}
  .deal .pricebox{text-align:right;white-space:nowrap;min-width:0;overflow:hidden}
  .deal .pricebox b{display:block;font-family:var(--display);font-weight:800;
    font-size:22px;line-height:1.05;font-variant-numeric:tabular-nums}
  .deal .pricebox span{display:block;color:var(--ink-2);font-size:12.5px;margin-top:3px}
  .deal .go{justify-self:stretch}
  .deal .go .btn{display:block;text-align:center}
  @media (max-width:900px){
    .deal{grid-template-columns:72px minmax(0,1fr) 116px;gap:12px 14px}
    .deal .pic{width:72px;height:54px}
    .deal .dt{grid-column:2;text-align:left;font-size:13.5px}
    .deal .pricebox{grid-column:3;grid-row:1}
    .deal .go{grid-column:1/-1;margin-top:8px}
    .deal .tier{min-width:0}
  }
  @media (max-width:520px){
    .deal{grid-template-columns:1fr auto;gap:8px 12px;padding:14px}
    .deal .pic{display:none}
    .deal .dt{grid-column:1/-1}
  }

  .deal h3 .cn{font-family:var(--sans,inherit);font-weight:500;font-size:14px;
    color:var(--ink-2);text-transform:none;letter-spacing:0}

  /* Подвал одной полосой: колонки со ссылками в столбик занимали пол-экрана
     и читались как незаполненная таблица. */
  footer.site{margin-top:56px;border-top:1px solid var(--line);
    padding:26px 0 34px;background:var(--card)}
  .fline{display:flex;flex-wrap:wrap;gap:6px 18px;align-items:baseline;
    font-size:14.5px;line-height:1.5}
  .fline b{font-family:var(--display);font-weight:800;text-transform:uppercase;
    font-size:12.5px;letter-spacing:.05em;color:var(--ink-2);margin-right:2px}
  .fline a{color:var(--ink)}
  .fline + .fline{margin-top:10px}
  .fnote{margin-top:16px;color:var(--ink-2);font-size:12.5px;line-height:1.55}
  .fnote a{color:var(--ink-2);text-decoration:underline;text-underline-offset:2px}
  .fcols{display:none}

  /* Находки плитками в два столбца: список в одну колонку оставлял половину
     ширины пустой. Вся плитка это ссылка, поэтому кнопка внутри не нужна. */
  .list{display:grid !important;grid-template-columns:repeat(2,minmax(0,1fr));
    gap:12px;border-top:0 !important;padding-top:14px}
  .deal{display:grid;grid-template-columns:78px minmax(0,1fr) 118px;
    gap:14px;align-items:center;padding:14px 16px;color:inherit;
    background:var(--card);border:1px solid var(--line);border-radius:var(--r-l);
    transition:border-color .14s,box-shadow .14s}
  .deal:hover{text-decoration:none;border-color:var(--accent-deep);
    box-shadow:0 0 0 1px var(--accent-deep)}
  .deal .pic{width:78px;height:58px;border-radius:var(--r-s);overflow:hidden;
    background:var(--track)}
  .deal .pic img{display:block;width:100%;height:100%;object-fit:cover}
  .deal .rank,.deal .go{display:none}
  .deal .main{min-width:0;display:flex;flex-direction:column;gap:5px}
  .deal .main h3{font-size:16px;line-height:1.15}
  .deal .dt{font-size:13.5px;color:var(--ink-2);text-align:left;
    font-variant-numeric:tabular-nums}
  .deal .dt i{font-style:normal}
  .deal .row2{display:flex;flex-wrap:wrap;align-items:center;gap:7px;
    font-size:12.5px;color:var(--ink-2)}
  .deal .tier{flex:0 0 auto;min-width:0}
  .deal .pricebox{text-align:right;white-space:nowrap}
  .deal .pricebox b{display:block;font-family:var(--display);font-weight:800;
    font-size:21px;line-height:1.05;font-variant-numeric:tabular-nums}
  .deal .pricebox span{display:block;color:var(--ink-2);font-size:12px;margin-top:2px}
  @media (max-width:900px){
    .list{grid-template-columns:1fr}
  }
  @media (max-width:520px){
    .deal{grid-template-columns:minmax(0,1fr) auto;gap:8px 12px}
    .deal .pic{display:none}
  }

  /* Способ добраться до аэропорта: показываем одну строку цены из трех.
     Мы не знаем, как поедет человек, поэтому выбор за ним. */
    font-size:12px;margin-top:3px;white-space:nowrap}
  .board input[id$="-rt"]:checked~.toolbar label[for$="-lv1"],
  .board input[id$="-rb"]:checked~.toolbar label[for$="-lv2"],
  .board input[id$="-rn"]:checked~.toolbar label[for$="-lv3"]{
    background:var(--ink);border-color:var(--ink);color:var(--paper);font-weight:600}

  /* Уровень поездки: показываем одну строку суммы из трех и подсвечиваем
     выбранную кнопку. Правила выписаны по отдельности: группа через запятую
     разваливалась при построчных правках. */
  .deal .full{display:none;font-style:normal;color:var(--ink-2);
    font-size:12px;margin-top:3px;white-space:nowrap}
  .board input[id$="-lv1"]:checked ~ .list .full-eco{display:block}
  .board input[id$="-lv2"]:checked ~ .list .full-base{display:block}
  .board input[id$="-lv3"]:checked ~ .list .full-pro{display:block}
  .board input[id$="-lv1"]:checked ~ .toolbar label[for$="-lv1"],
  .board input[id$="-lv2"]:checked ~ .toolbar label[for$="-lv2"],
  .board input[id$="-lv3"]:checked ~ .toolbar label[for$="-lv3"]{
    background:var(--ink);border-color:var(--ink);color:var(--paper);font-weight:600}

  /* Карточка «самое дешевое сегодня». Полоса уровня выгоды и плашка оценки
     убраны: полоса без шкалы ничего не сообщала, плашка повторяла то, что
     написано словами. Вся карточка кликабельна, кнопка оставлена для тех, кто
     ищет глазами кнопку. */
  .hcard .hlink{display:block;color:inherit}
  .hcard .hlink:hover{text-decoration:none}
  .hcard .hlink:hover .hcity{color:var(--accent-deep)}
  .hcard .hmeta{color:var(--ink-2);font-size:14px;margin-top:5px}
  .hcard .hval{color:var(--ink-2);font-size:14.5px;line-height:1.5;margin-top:10px}
  .hcard .hval b{color:var(--ink)}
  .hlv{margin-top:14px}
  .hlv-tabs{display:inline-flex;border:1px solid var(--line);border-radius:var(--r-m);
    overflow:hidden}
  .hlv-tabs label{padding:7px 14px;font-size:13.5px;font-weight:600;color:var(--ink-2);
    cursor:pointer;background:var(--bg);border-left:1px solid var(--line)}
  .hlv-tabs label:first-child{border-left:0}
  #hlv-1:checked~.hlv-tabs label[for="hlv-1"],
  #hlv-2:checked~.hlv-tabs label[for="hlv-2"],
  #hlv-3:checked~.hlv-tabs label[for="hlv-3"]{background:var(--ink);color:var(--paper)}
  .hlv-sum{display:none;margin-top:9px;font-size:16px;font-weight:600}
  #hlv-1:checked~.hlv-s1,#hlv-2:checked~.hlv-s2,#hlv-3:checked~.hlv-s3{display:block}
  .hcard .btn.big{margin-top:16px}
  .hvalue,.hcard .bar,.hcard .vhead{display:none}

  /* Календарь вылетов: три месяца, под днем цена самого дешевого варианта.
     Заменил чипы месяцев: по чипам не было видно, где вообще есть находки. */
  .cal2{margin:16px 0 0;padding:16px 18px;background:var(--card);
    border:1px solid var(--line);border-radius:var(--r-l)}
  .cal2-h{display:flex;align-items:baseline;gap:14px;margin-bottom:12px;
    font-family:var(--display);font-weight:800;text-transform:uppercase;font-size:15px}
  .cal2-off{font:inherit;font-family:var(--sans,inherit);font-size:12.5px;
    font-weight:500;text-transform:none;color:var(--accent-deep);background:none;
    border:0;cursor:pointer;padding:0}
  .cal2-b{display:grid;grid-template-columns:repeat(auto-fit,minmax(232px,1fr));gap:18px}
  .cmh{display:block;width:100%;text-align:left;font:inherit;font-family:var(--display);
    font-weight:800;text-transform:uppercase;font-size:14px;background:none;border:0;
    padding:0 0 8px;cursor:pointer;color:var(--ink)}
  .cmh:hover,.cmh.on{color:var(--accent-deep)}
  .cg{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
  .cw{text-align:center;font-size:10.5px;color:var(--ink-2);padding-bottom:3px}
  .cd{display:flex;flex-direction:column;align-items:center;justify-content:center;
    min-height:38px;border-radius:6px;border:1px solid transparent;font:inherit;
    font-variant-numeric:tabular-nums;background:none;padding:2px 1px}
  .cd-x{visibility:hidden}
  .cd-n{color:var(--ink-2);opacity:.4;font-size:12px}
  .cd-y{cursor:pointer;background:var(--bg);border-color:var(--line)}
  .cd-y i{font-style:normal;font-size:11px;color:var(--ink-2);line-height:1}
  .cd-y b{font-size:10.5px;font-weight:700;line-height:1.2;margin-top:2px}
  .cd-y:hover{border-color:var(--ink)}
  .cd-y.on{background:var(--accent);border-color:var(--accent)}
  .cd-y.on i{color:rgba(0,0,0,.6)}
  @media (max-width:520px){.cal2{padding:14px}.cd{min-height:34px}}

  /* Заголовок-ссылка на полный список городов. Раньше перехода не было видно
     вовсе: человек не знал, что городов больше восьми. */
  .h2go{display:inline-flex;align-items:baseline;gap:12px;margin:46px 0 0;
    text-decoration:none;color:var(--accent-deep)}
  .h2go h2{color:inherit;margin-bottom:0}
  .h2go span{display:inline-flex;align-items:center;gap:6px;font-size:14px;
    font-weight:600;white-space:nowrap}
  .h2go svg{transition:transform .15s}
  .h2go:hover{text-decoration:none}
  .h2go:hover svg{transform:translateX(3px)}
  /* Поиск города на странице полного списка */
  .ulbar{display:flex;gap:14px;align-items:flex-end;flex-wrap:wrap;margin:18px 0 0}
  /* Ширина по самому длинному названию: «Петропавловск-Камчатский». */
  .ulf{flex:0 1 340px;max-width:340px;display:flex;flex-direction:column;
    gap:5px;min-width:0}
  .ulf b{color:var(--ink-2);font-size:12.5px;font-weight:500}
  .ulf input{width:100%;box-sizing:border-box;padding:10px 12px;font:inherit;
    font-size:15px;color:var(--ink);background:var(--bg);
    border:1px solid var(--line);border-radius:var(--r-m)}
  .ulf input:focus{outline:none;border-color:var(--ink)}
  .ulcnt{color:var(--ink-2);font-size:13px;padding-bottom:11px}
  /* Разделы полного списка: сетки две, порядок городов в них разный. */
  #cdir-ru:checked~#ul-ab{display:none}
  #cdir-ab:checked~#ul-ru{display:none}
  .city.hide{display:none}
  .ulempty{color:var(--ink-2);font-size:14px;margin:16px 0 0}

  .cities-switch{display:flex;width:fit-content}

  /* Пометки о рекламе стоят в самом низу и самым мелким: закон требует их
     видимости, а не веса. Выше них служебные ссылки и переходы по городам. */
  .fmarks{color:var(--ink-2);font-size:11px;line-height:1.45;opacity:.65;
    padding-top:10px}

  /* Подвал сеткой: три колонки с подписями, снизу тонкая линия с годом и
     пометками. Раньше это были три ряда ссылок вперемешку. */
  footer.site{margin-top:56px;padding:34px 0 30px;border-top:1px solid var(--line);
    background:var(--card)}
  .fgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));
    gap:26px 30px}
  .fcol b{display:block;font-family:var(--display);font-weight:800;font-size:12.5px;
    text-transform:uppercase;letter-spacing:.04em;color:var(--ink-2);
    margin-bottom:10px}
  .fcol a{display:block;color:var(--ink);text-decoration:none;font-size:14.5px;
    padding:3px 0}
  .fcol a:hover{color:var(--accent-deep);text-decoration:none}
  .fcities a{break-inside:avoid}
  .fcities{column-count:2;column-gap:22px}
  .fcities b{column-span:all}
  .fbot{display:flex;flex-wrap:wrap;gap:8px 20px;align-items:flex-start;
    margin-top:26px;padding-top:14px;border-top:1px solid var(--line)}
  .fyear{color:var(--ink-2);font-size:12.5px;white-space:nowrap}
  .fmarks{flex:1 1 420px;color:var(--ink-2);font-size:10.5px;line-height:1.5;
    opacity:.6}
  /* Верхняя панель закреплена: из середины списка находок раздел меняется без
     прокрутки наверх. */
  /* Закрепленная панель с плотным фоном. Полупрозрачный фон с размытием
     красив на картинках, но здесь под панелью проезжал текст заголовка и читался
     сквозь нее. */
  header.site{position:sticky;top:0;z-index:50;background:var(--bg,var(--paper,#FBFBF9));
    box-shadow:0 1px 0 var(--line)}
  @media (max-width:620px){
    .fcities{column-count:1}
    footer.site{margin-top:40px;padding:26px 0 24px}
  }

  /* ------------------------------------------------------- стекло ------
     Плитки собраны как стекло: полупрозрачная подложка с размытием, светлая
     кромка сверху и мягкая тень. На светлой бумаге сильную прозрачность брать
     нельзя, текст перестает читаться, поэтому подложка плотная. */
  .deal, .city, .reads a, .oc, .nbc, .wc, .actl a, .nbl a, .chk, .skw, .plist,
  .cal2, .rcal, .tcmp, .advice, .acta{
    background:linear-gradient(180deg, rgba(255,255,255,.92), rgba(255,255,255,.78));
    -webkit-backdrop-filter:blur(10px) saturate(1.06);
    backdrop-filter:blur(10px) saturate(1.06);
    border:1px solid rgba(23,23,23,.09);
    box-shadow:0 1px 0 rgba(255,255,255,.75) inset, 0 8px 22px rgba(23,23,23,.06);
    transition:box-shadow .16s, border-color .16s, transform .16s, background .16s}
  .deal:hover, .city:hover, .reads a:hover, .oc:hover, .nbc:hover, .wc:hover,
  .actl a:hover, .nbl a:hover{
    border-color:var(--accent);
    background:linear-gradient(180deg, rgba(255,255,255,.98), rgba(255,255,255,.88));
    box-shadow:0 1px 0 rgba(255,255,255,.9) inset, 0 14px 30px rgba(194,96,58,.14);
    transform:translateY(-1px)}
  /* Строка выдачи внутри общего списка: своей рамки не берет, иначе получается
     стекло в стекле. */
  .plist .pr{background:transparent;box-shadow:none;border-left:0;border-right:0}
  .plist .pr:hover{background:rgba(255,255,255,.6)}
  @media (prefers-reduced-motion: reduce){
    .deal, .city, .reads a, .oc, .nbc, .wc, .actl a{transition:none}
    .deal:hover, .city:hover, .reads a:hover, .oc:hover, .nbc:hover, .wc:hover,
    .actl a:hover{transform:none}
  }

  /* Плитки «дешевле из соседнего города» на страницах городов. Раньше блок брал
     класс из стилей главной, которых на этих страницах нет, и текст слипался. */
  .nbl{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));
    gap:12px;margin:16px 0 0}
  .nbl a{display:block;padding:15px 17px;color:inherit;text-decoration:none;
    border-radius:var(--r-l)}
  .nbl a:hover{text-decoration:none}
  .nbl b{display:block;font-size:15.5px;margin-bottom:5px}
  .nbl span{display:block;color:var(--ink-2);font-size:13px;line-height:1.5}

  /* Рукописный только для одного слова в заголовке. Файл свой, 45 КБ. */
  @font-face{font-family:'Caveat';font-style:normal;font-weight:700;
    font-display:swap;src:url(/fonts/caveat-700-cyr.woff2) format('woff2');
    unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}

  /* Заголовок с подменой смысла: «билетов» зачеркнуто краской, сверху рукой
     написано «путешествий». Прием держится на трех слоях: текст, мазок и
     надпись. */
  .graf{display:block;position:relative;padding-top:.34em}
  /* Браузерное зачеркивание убираем: краска и линия вместе читались как две
     разные правки. Мазок центрируем по высоте слова, иначе он уходил под него. */
  .graf-old{position:relative;display:inline-block;white-space:nowrap;
    color:var(--ink-2);text-decoration:none}
  .graf-old svg{position:absolute;left:-4%;top:50%;width:108%;height:.52em;
    transform:translateY(-50%);overflow:visible;pointer-events:none}
  .graf-new{font-family:'Caveat','Segoe Script','Bradley Hand',cursive;
    font-weight:700;font-size:1.34em;line-height:.8;color:var(--accent-deep);
    text-transform:none;letter-spacing:0;display:inline-block;
    transform:rotate(-3.2deg) translateY(-.06em);margin-left:.12em;
    text-shadow:0 1px 0 rgba(194,96,58,.18)}
  @media (max-width:640px){
    .graf-old svg{height:.5em}
    .graf-new{font-size:1.2em;transform:rotate(-2deg)}
  }
