/* תוקף — единая система оформления. Собрано build_css.py,
   направление «קו מידה» (04.09.2026). Руками не править:
   правится генератор, файл пересобирается. */
@font-face{font-family:"Frank Ruhl Libre";font-style:normal;font-weight:400 700;font-display:swap;src:url("/fonts/frank-ruhl-libre-var-hebrew.woff2") format("woff2");unicode-range:U+0307-0308, U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F}
@font-face{font-family:"Frank Ruhl Libre";font-style:normal;font-weight:400 700;font-display:swap;src:url("/fonts/frank-ruhl-libre-var-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:"Noto Serif Hebrew";font-style:normal;font-weight:400 600;font-display:swap;src:url("/fonts/noto-serif-hebrew-var-hebrew.woff2") format("woff2");unicode-range:U+0307-0308, U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F}
@font-face{font-family:"Noto Serif Hebrew";font-style:normal;font-weight:400 600;font-display:swap;src:url("/fonts/noto-serif-hebrew-var-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:"IBM Plex Sans Hebrew";font-style:normal;font-weight:400;font-display:swap;src:url("/fonts/ibm-plex-sans-hebrew-400-hebrew.woff2") format("woff2");unicode-range:U+0307-0308, U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F}
@font-face{font-family:"IBM Plex Sans Hebrew";font-style:normal;font-weight:400;font-display:swap;src:url("/fonts/ibm-plex-sans-hebrew-400-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:"IBM Plex Sans Hebrew";font-style:normal;font-weight:600;font-display:swap;src:url("/fonts/ibm-plex-sans-hebrew-600-hebrew.woff2") format("woff2");unicode-range:U+0307-0308, U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F}
@font-face{font-family:"IBM Plex Sans Hebrew";font-style:normal;font-weight:600;font-display:swap;src:url("/fonts/ibm-plex-sans-hebrew-600-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:"IBM Plex Mono";font-style:normal;font-weight:500;font-display:swap;src:url("/fonts/ibm-plex-mono-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{
  --serif:"Frank Ruhl Libre",Georgia,serif;
  --canon:"Noto Serif Hebrew","Frank Ruhl Libre",Georgia,serif;
  --sans:"IBM Plex Sans Hebrew","Segoe UI",system-ui,-apple-system,sans-serif;
  --mono:"IBM Plex Mono","IBM Plex Sans Hebrew",ui-monospace,"Consolas",monospace;

  --fs-meta:13px; --fs-sec:14px; --fs-ui:15px; --fs-body:16px;
  --fs-us:18px; --fs-canon:19px; --fs-val:20px;
  --fs-h3:22px; --fs-h2:24px; --fs-h1:clamp(28px,3.2vw,34px);
  --fs-lat:12px;

  --lh-canon:1.7; --lh-body:1.6; --lh-ui:1.55; --lh-tight:1.45; --lh-h:1.3;

  --sp-1:4px; --sp-2:8px; --sp-3:12px; --sp-4:16px;
  --sp-5:24px; --sp-6:32px; --sp-7:40px; --sp-8:56px;

  --r-0:0; --r-1:2px; --r-2:4px;

  --w-hair:1px; --w-thin:1.5px; --w-obj:2px; --w-cut:3px;

  --focus-w:2px; --focus-off:2px; --focus-c:var(--accent);

  --bg:#E4E8E6; --paper:#FAFBFA; --paper-2:#EDF0EE;
  --ink:#101715; --muted:#47544F; --faint:#5A6863; --annot:#4E5B56;
  --line:#C6CFCB; --rule:#74837D; --line-field:#6F7E79; --line-2:#74837D;
  --line-strong:#74837D;
  --accent:#0C5E5C; --accent-ink:#084644; --on-accent:#FAFBFA;
  --hi:#FBE9A8;
  --ok:#1F5E3D; --ok-bg:#DDE9E1;
  --warn:#7A4F0A; --warn-bg:#F0E6D2;
  --crit:#97281A; --crit-bg:#F2DED9;
  --muni:#1D4E77; --muni-bg:#DEE7EE;
  --lock:#4E3E85; --lock-bg:#E4E0EE;
  --sec:#7A4F0A; --sec-bg:#F0E6D2;
  --resolved:#47544F; --resolved-bg:#EDF0EE;
  --surface:#FAFBFA; --surface-2:#EDF0EE;
  --sh:none; --shadow:none;
}

/* Тёмная тема была во всех семи шаблонах, но с тремя разными фонами.
   Здесь она сведена в один набор. Явный выбор читателя (data-theme)
   побеждает системную настройку в обе стороны. */
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){
  --bg:#0E1413; --paper:#161E1C; --paper-2:#111917;
  --ink:#E3E9E6; --muted:#A0AFAA; --faint:#8B9A95; --annot:#93A29D;
  --line:#26312E; --rule:#5F6E69; --line-field:#6E7D78; --line-2:#5F6E69;
  --line-strong:#5F6E69;
  --accent:#4FB3AE; --accent-ink:#7FCEC9; --on-accent:#06201F;
  --hi:#4A3F12;
  --ok:#4FB07C; --ok-bg:#12281D;
  --warn:#D2A249; --warn-bg:#2A2113;
  --crit:#E8806C; --crit-bg:#2E1712;
  --muni:#62A6DC; --muni-bg:#12222F;
  --lock:#A493E0; --lock-bg:#1B1730;
  --sec:#D2A249; --sec-bg:#2A2113;
  --resolved:#A0AFAA; --resolved-bg:#111917;
  --surface:#161E1C; --surface-2:#111917;
  --sh:none; --shadow:none;
}}
:root[data-theme="dark"]{
  --bg:#0E1413; --paper:#161E1C; --paper-2:#111917;
  --ink:#E3E9E6; --muted:#A0AFAA; --faint:#8B9A95; --annot:#93A29D;
  --line:#26312E; --rule:#5F6E69; --line-field:#6E7D78; --line-2:#5F6E69;
  --line-strong:#5F6E69;
  --accent:#4FB3AE; --accent-ink:#7FCEC9; --on-accent:#06201F;
  --hi:#4A3F12;
  --ok:#4FB07C; --ok-bg:#12281D;
  --warn:#D2A249; --warn-bg:#2A2113;
  --crit:#E8806C; --crit-bg:#2E1712;
  --muni:#62A6DC; --muni-bg:#12222F;
  --lock:#A493E0; --lock-bg:#1B1730;
  --sec:#D2A249; --sec-bg:#2A2113;
  --resolved:#A0AFAA; --resolved-bg:#111917;
  --surface:#161E1C; --surface-2:#111917;
  --sh:none; --shadow:none;
}

/* ---------- основание ---------- */
*,*::before,*::after{box-sizing:border-box}

html{-webkit-text-size-adjust:100%}

body{
  margin:0;
  background:var(--bg);
  color:var(--ink);
  font-family:var(--sans);
  font-size:var(--fs-ui);
  line-height:var(--lh-ui);
  /* Сглаживание НЕ трогаем: -webkit-font-smoothing:antialiased стоял во всех
     семи шаблонах и утончал ивритские штрихи до потери читаемости на
     недорогих панелях — а именно на них смотрят на стройке. */
}

/* Числа в колонках должны стоять столбиком, а не плясать по ширине. */
.mono,.num,td.v,.mv-n{font-variant-numeric:tabular-nums}

/* Кольцо фокуса видно всегда: до этого его не было ни на одной странице,
   и пройти сайт с клавиатуры было нельзя. */
:where(a,button,input,select,textarea,[tabindex]):focus-visible{
  outline:var(--focus-w) solid var(--focus-c);
  outline-offset:var(--focus-off);
  border-radius:var(--r-1);
}

/* Ссылка «к содержимому» для клавиатуры и программ чтения. */
.skip{position:absolute;inset-inline-start:-9999px;top:0;z-index:100;
  background:var(--paper);color:var(--accent-ink);padding:var(--sp-2) var(--sp-4);
  border:var(--w-obj) solid var(--accent)}
.skip:focus{inset-inline-start:var(--sp-4)}

.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}

/* ---------- иврит ---------- */
/* У иврита нет заглавных и почти нет выносных: интерлиньяж нужен больше,
   а трекинг — нулевой. Разрядка ивритских букв ломает слово. */
:lang(he),[lang="he"]{letter-spacing:0}

h1,h2,h3{font-family:var(--serif);line-height:var(--lh-h);text-wrap:balance;
  margin:0 0 var(--sp-3);font-weight:700}
h1{font-size:var(--fs-h1)}
h2{font-size:var(--fs-h2)}
h3{font-size:var(--fs-h3)}

/* Текст нормы — канон источника, отдельная гарнитура и своя мера строки. */
.ustmt,.canon{font-family:var(--canon);font-size:var(--fs-canon);
  line-height:var(--lh-canon);max-width:34em}

/* ---------- числовой атом ---------- */
/* Значение всегда собирается на сервере (core_val_html) и всегда
   изолировано: «0.90–1.20 מ׳» в RTL-абзаце без изоляции показывается
   перевёрнутым, а это число инженер переписывает в проект. */
.num{font-family:var(--mono);font-weight:500;direction:ltr;unicode-bidi:isolate}
.unit{font-family:var(--sans);color:var(--muted);font-size:.88em}
.vword{font-family:var(--sans);font-weight:600}

/* ---------- линия меры: подпись направления ---------- */
/* Числовое требование стоит на линии с засечками по краям — так на
   чертеже подписывают размер. Линия не украшение: она отделяет
   извлечённую базой величину от текста источника. */
.mv{display:inline-flex;align-items:baseline;gap:.34em;white-space:nowrap}
.mv-n{font-family:var(--mono);font-weight:500;color:var(--ink);
  position:relative;padding-bottom:.20em;
  border-bottom:var(--w-thin) solid var(--rule)}
.mv-n::before,.mv-n::after{content:"";position:absolute;bottom:0;width:0;
  height:.34em;border-inline-start:var(--w-thin) solid var(--rule)}
.mv-n::before{inset-inline-start:0}
.mv-n::after{inset-inline-end:0}
.mv-u{font-family:var(--sans);font-weight:400;color:var(--muted);font-size:.85em}

/* ---------- поверхности ---------- */
/* Ни теней, ни скруглений, ни градиентов: прибор, а не карточка-виджет. */
.ubox,.panel,.tcard,.ucard{background:var(--paper);border-radius:var(--r-0);
  box-shadow:none}

/* Действия под карточкой: копирование ссылки и печать. */
.uact{display:flex;gap:var(--sp-2);margin-top:var(--sp-4);flex-wrap:wrap}
.uact button{font-family:var(--sans);font-size:var(--fs-sec);
  padding:var(--sp-2) var(--sp-4);min-height:32px;cursor:pointer;
  background:var(--paper);color:var(--ink);
  border:var(--w-obj) solid var(--line-field);border-radius:var(--r-1)}
.uact button:hover{border-color:var(--accent);color:var(--accent-ink)}

/* ---------- сведённые составные части ----------
   Шесть имён значили на разных страницах ОДНО И ТО ЖЕ и расходились
   только числами и цветом: подвал был то серым, то приглушённым, то по
   центру, то по краю; метка — то пилюлей, то прямоугольником. Разводить
   их по именам было бы неправдой: это один элемент. Поэтому они сведены
   к одному определению и живут здесь. */

.foot{border-top:var(--w-hair) solid var(--line);margin-top:var(--sp-5);
  padding:var(--sp-4) 0 var(--sp-7);font-size:var(--fs-meta);
  color:var(--muted);line-height:1.8}

.hero{padding:var(--sp-7) 0 var(--sp-1);text-align:center}

/* «Ничего не найдено» — не ошибка и не пустое место: это ответ, и он
   должен выглядеть как ответ. */
.empty{background:var(--paper);border:var(--w-hair) solid var(--line);
  border-radius:var(--r-0);padding:var(--sp-7) var(--sp-5);text-align:center;
  color:var(--muted);font-size:var(--fs-ui)}

/* Метка — прямоугольная: пилюли ушли вместе со скруглениями. */
.tag{font-size:var(--fs-meta);color:var(--muted);
  border:var(--w-hair) solid var(--line);border-radius:var(--r-1);
  padding:2px var(--sp-2);white-space:nowrap}

/* Шапка секции. Градиент снят — он был на всех страницах и делал
   заголовок мягче, чем предмет. */
.top{background:var(--paper);border-bottom:var(--w-hair) solid var(--line)}

/* Текст нормы в выдаче поиска: канон, но на ступень мельче карточки. */
.us{font-family:var(--canon);font-size:var(--fs-us);line-height:var(--lh-body)}

/* ---------- линия сечения ----------
   Граница между текстом источника и тем, что база из него ИЗВЛЕКЛА.
   Это главное обещание продукта, и оно должно быть видно глазом, а не
   только пониматься из подписи. */
.cut{border-top:var(--w-cut) solid var(--rule);margin:var(--sp-5) 0 0}
.cut-l{display:block;font-size:var(--fs-meta);font-weight:600;color:var(--annot);
  padding-top:var(--sp-2)}

/* ---------- штамп ----------
   Основная надпись: восемь ячеек в неизменном порядке на всех 9290
   карточках. Штамп не борется за внимание — он лежит в одной и той же
   точке, чтобы дату съёма находили не читая. */
.stamp-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
  gap:var(--w-hair);background:var(--line);border:var(--w-hair) solid var(--line);
  margin:var(--sp-5) 0 0}
.stamp-grid>div{background:var(--paper);padding:var(--sp-2) var(--sp-3);
  display:flex;flex-direction:column;gap:2px;min-width:0}
.stamp-grid dt{font-size:var(--fs-lat);color:var(--muted);font-weight:400;
  letter-spacing:.02em}
.stamp-grid dd{margin:0;font-size:var(--fs-sec);color:var(--ink);
  overflow-wrap:anywhere}
.stamp-grid dd.ok{color:var(--ok);font-weight:600}
.stamp-grid dd.warn{color:var(--warn);font-weight:600}
.stamp-grid dd.crit{color:var(--crit);font-weight:600}
/* Постоянный идентификатор переписывают в чертёж — он не бледный. */
.uid{font-family:var(--mono);font-size:var(--fs-lat);color:var(--muted);
  direction:ltr;unicode-bidi:isolate}

/* ---------- печать ----------
   Печатный лист ведётся наравне с экранным: инженер подшивает распечатку
   в проект, и на бумаге должны остаться текст нормы, её величины, штамп
   целиком, оговорка и полный адрес — но ни навигации, ни поиска. */
@media print{
  .topnav,.hsearch,.skip,.uact,.hub,.tools,.exs,.themetog,.chips,.filters,
  .search,.bar,.kpis,.counters{display:none!important}
  body{background:#fff;color:var(--print-ink,#000);font-size:11pt}
  .mast{border-bottom:1pt solid var(--print-rule,#666);padding:0 0 6pt}
  .wrap{max-width:none;padding:0}
  .ubox,.panel,.ucard,.card{border:none;break-inside:avoid;padding:0}
  .ustmt{font-size:12pt;line-height:1.55;max-width:none}
  /* Штамп на бумаге — таблица с видимыми линиями, как основная надпись. */
  .stamp-grid{gap:0;border:1pt solid var(--print-rule,#666);background:none}
  .stamp-grid>div{background:none;border:.5pt solid var(--print-rule,#666);
    padding:3pt 5pt}
  .stamp-grid dt{font-size:7.5pt;color:#444}
  .stamp-grid dd{font-size:9pt}
  .cut{border-top-width:1.5pt}
  /* Адрес нормы должен уехать на бумагу: со стены его не скопируешь. */
  .uid::after{content:"  ·  https://tokef.co.il" attr(data-path)}
  a[href^="http"]::after{content:" (" attr(href) ")";font-size:8pt;color:#444}
  a{text-decoration:none;color:#000}
  h1,h2,h3{break-after:avoid}
  .dlist li{break-inside:avoid}
  @page{margin:14mm 12mm}
}

/* ---------- общие составные части ----------
   Тридцать классов, которые до этого были продублированы слово в слово
   в четырёх–семи шаблонах, плюс четыре, расходившиеся только числами.
   Здесь они не просто перенесены, а приведены к направлению: тени сняты,
   скругления убраны (лист и таблица — прямоугольные), отступы посажены
   на шкалу 4px, размеры — на шкалу кегля.
   Всё, что под одним именем значило на разных страницах РАЗНОЕ (.bar —
   и полоса прогресса, и липкая шапка), намеренно оставлено в шаблонах:
   вынести их значило бы сломать одну страницу другой. */

.wrap{max-width:1140px;margin:0 auto;padding:0 var(--sp-5)}

/* Шапка: полоса, а не панель с подсветкой. Градиент снят — он был на всех
   семи страницах и делал заголовок мягче, чем предмет. */
.mast{background:var(--paper);border-bottom:var(--w-obj) solid var(--rule);
  padding:var(--sp-4) 0}
.mrow{display:flex;align-items:flex-end;gap:var(--sp-4);flex-wrap:wrap}
.mtitle{font-size:var(--fs-h3);font-weight:600;letter-spacing:0;
  font-family:var(--serif)}
.msub{color:var(--muted);font-size:var(--fs-sec);margin-top:var(--sp-1);
  max-width:70em}
.topnav{display:flex;gap:var(--sp-1) var(--sp-5);margin-top:var(--sp-4);
  flex-wrap:wrap;font-size:var(--fs-sec)}

/* Лист. Один вид поверхности на весь сайт: раньше .card, .panel, .about
   и .health отличались радиусом и тенью, хотя значили одно и то же. */
.card,.panel,.about,.health,.tool,.cnt,.flag{
  background:var(--paper);border:var(--w-hair) solid var(--line);
  border-radius:var(--r-0);box-shadow:none;padding:var(--sp-4) var(--sp-5)}
.tool,.cnt{display:block;text-decoration:none;color:inherit}
.tool:hover,.cnt:hover,.kpi:hover{background:var(--paper-2)}
.flag{background:var(--paper-2);padding:var(--sp-3)}

.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));
  gap:var(--sp-3);margin:var(--sp-6) 0 var(--sp-2)}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(330px,1fr));
  gap:var(--sp-4);padding-bottom:var(--sp-3)}
.tools{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));
  gap:var(--sp-3);margin-bottom:var(--sp-6)}
.flags{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
  gap:var(--sp-2);margin-top:var(--sp-3)}

/* Счётчики: сетка в один пиксель линии — таблица чисел, а не набор плиток. */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(132px,1fr));
  gap:var(--w-hair);background:var(--line);border:var(--w-hair) solid var(--line)}
.kpi{display:block;text-decoration:none;color:inherit;background:var(--paper);
  padding:var(--sp-3) var(--sp-4);position:relative}
.counters{display:flex;gap:var(--sp-3);flex-wrap:wrap;justify-content:center;
  margin:var(--sp-6) 0 var(--sp-1)}

.rows{display:flex;flex-direction:column}
.row{display:grid;grid-template-columns:1fr auto;gap:var(--sp-2);
  align-items:center;padding:var(--sp-2) 0;
  border-bottom:var(--w-hair) solid var(--line)}
.hh{display:flex;align-items:baseline;gap:var(--sp-2);margin-bottom:var(--sp-3)}
.ph{display:flex;align-items:baseline;gap:var(--sp-2);
  border-bottom:var(--w-hair) solid var(--line);
  padding-bottom:var(--sp-2);margin-bottom:var(--sp-3)}
.pnote{font-size:var(--fs-meta);color:var(--muted);margin:0 0 var(--sp-3)}

.chips,.cloud{display:flex;gap:var(--sp-2);flex-wrap:wrap}
.cl{display:inline-flex;align-items:baseline;gap:var(--sp-1);
  border:var(--w-hair) solid var(--line);background:var(--paper);
  border-radius:var(--r-1);padding:2px var(--sp-2);font-size:var(--fs-meta)}
.dot{width:8px;height:8px;border-radius:var(--r-1);display:inline-block}
.legend{display:flex;gap:var(--sp-4);flex-wrap:wrap;margin-top:var(--sp-2);
  font-size:var(--fs-meta);color:var(--muted)}
.live{display:inline-flex;align-items:center;gap:var(--sp-1);color:var(--ok);
  font-weight:600}

/* Штамп времени и происхождения — моноширинный, слева, как в основной
   надписи чертежа. */
.stamp{margin-inline-start:auto;font-family:var(--mono);
  font-size:var(--fs-lat);color:var(--muted);direction:ltr;
  unicode-bidi:isolate;text-align:left}

.hero-hint{color:var(--muted);font-size:var(--fs-meta);margin-top:var(--sp-2)}
.hero-s{display:flex;align-items:center;gap:var(--sp-2);background:var(--paper);
  border:var(--w-obj) solid var(--line-field);border-radius:var(--r-2);
  padding:var(--sp-2) var(--sp-3)}

/* Кнопка смены темы. Стоит в навигации последней и намеренно не кричит:
   это удобство, а не действие продукта. */
.themetog{margin-inline-start:auto;background:none;border:var(--w-hair) solid var(--line-field);
  color:var(--muted);border-radius:var(--r-1);cursor:pointer;
  font-size:var(--fs-sec);line-height:1;padding:var(--sp-1) var(--sp-2);min-height:24px}
.themetog:hover{color:var(--ink);border-color:var(--rule)}

/* ---------- уважение к настройкам читателя ---------- */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;
    animation-iteration-count:1!important;transition-duration:.01ms!important;
    scroll-behavior:auto!important}
}
@media (prefers-contrast:more){
  :root{--muted:#2C3733;--faint:#3A4642;--line:#8D9A95;--rule:#4A5854}
}
@media (forced-colors:active){
  .mv-n{border-bottom-color:CanvasText}
  .utag,.chip,.chip-f{border:1px solid CanvasText}
}
