/* Spectender UI build 2026.09.15-05; target=etp-css */

/* source: test-overrides/ui-redesign/core/tokens.css */
/* ============================================================
   ЭТП «Спецтендер» — Design System Tokens v1.0
   Единый источник истины для всех артефактов системы.
   Изменения здесь автоматически отражаются во всех документах.
   ============================================================ */

:root {
  /* ─── Brand: Спец-синий (PANTONE 300 C) ─────────────────── */
  --brand-blue-050: #F1F6FE;
  --brand-blue-100: #DDE9FB;
  --brand-blue-200: #B7D2F8;
  --brand-blue-300: #7FB2F4;
  --brand-blue-400: #3A86EE;
  --brand-blue-500: #0665E6;
  --brand-blue-600: #0553C7;
  --brand-blue-700: #0442A3;
  --brand-blue-800: #0849B3;
  --brand-blue: #0665E6;

  /* ─── Brand: Спец-оранжевый (PANTONE 1655 C, ≤10% экрана) ─ */
  --brand-orange-050: #FEF3EC;
  --brand-orange-100: #FCE3D3;
  --brand-orange-200: #F8C9B0;
  --brand-orange-500: #EA5B21;
  --brand-orange-600: #C94B17;
  --brand-orange-700: #A43E12;
  --brand-orange: #EA5B21;

  /* ─── Operational amber: сроки, ожидание, предупреждения ─ */
  --brand-amber-050: #FFF8E8;
  --brand-amber-100: #FFF1CC;
  --brand-amber-200: #FFE09A;
  --brand-amber-300: #F7C85D;
  --brand-amber-500: #D99212;
  --brand-amber-600: #B97509;
  --brand-amber-700: #8C5605;
  --brand-amber-800: #6F4100;

  /* ─── Ink ──────────────────────────────────────────────── */
  --ink-1000: #0A0E17;
  --ink-900: #1A1A1A;
  --ink-800: #22304A;
  --ink-700: #2C3E52;
  --ink-600: #425D78;
  --ink-500: #5E7A90;
  --ink-400: #8394A5;
  --ink-300: #A8BDD0;
  --ink-200: #D0DCE8;
  --ink-100: #EBF0F6;
  --ink-050: #F5F8FB;

  /* ─── Navy (институциональный слой) ─────────────────────── */
  --navy-900: #0A1735;
  --navy-800: #0C1E45;
  --navy-700: #163068;
  --navy-600: #1E4080;
  --navy-500: #2A539E;

  /* ─── Surfaces ─────────────────────────────────────────── */
  --surface-page: #FAFBFD;
  --surface-card: #FFFFFF;
  --surface: #FFFFFF;
  --surface-subtle: #F5F8FB;
  --surface-muted: #EBF0F6;
  --surface-strong: #D0DCE8;
  --surface-overlay: rgba(10,23,53,0.56);

  /* ─── Status ───────────────────────────────────────────── */
  --success-050: #F1FAF5; --success-100: #EAF6F0; --success-500: #25A365; --success-600: #1A7A4A; --success-700: #0F5A36;
  --warning-050: #FFF8E8; --warning-100: #FFF3DC; --warning-500: #D99212; --warning-600: #A85F00; --warning-700: #7A4500;
  --danger-050:  #FFF4F2; --danger-100:  #FEE8E4; --danger-500:  #E05243; --danger-600:  #C8392B; --danger-700:  #902B20;
  --info-050: var(--brand-blue-050); --info-100: var(--brand-blue-100); --info-600: var(--brand-blue-600); --info-700: var(--brand-blue-700);

  /* ─── Domain tags (для торгов) ─────────────────────────── */
  --tag-44fz-bg:       #EBF2FD; --tag-44fz-fg:       #0849B3;
  --tag-223fz-bg:      #EDFAF3; --tag-223fz-fg:      #0F6A3B;
  --tag-property-bg:   #FCE3D3; --tag-property-fg:   #A43E12;
  --tag-commercial-bg: #EEE8FB; --tag-commercial-fg: #4B2ABD;
  --tag-debtor-bg:     #FEE8E4; --tag-debtor-fg:     #8C1F15;
  --tag-msu-bg:        #E8EEF5; --tag-msu-fg:        #394D6A;

  /* ─── Typography ───────────────────────────────────────── */
  --font-display: 'Onest', 'Geologica', 'Inter', system-ui, sans-serif;
  --font-body:    'Geologica', 'Inter', system-ui, sans-serif;
  --font-mono:    'JetBrains Mono', 'IBM Plex Mono', ui-monospace, monospace;

  /* ─── Spacing (4-px base) ──────────────────────────────── */
  --space-1: 2px;  --space-2: 4px;  --space-3: 8px;  --space-4: 12px;
  --space-5: 16px; --space-6: 20px; --space-7: 24px; --space-8: 32px;
  --space-9: 40px; --space-10: 48px; --space-11: 64px; --space-12: 80px;

  /* ─── Radii ────────────────────────────────────────────── */
  --r-xs: 4px; --r-sm: 6px; --r-md: 10px; --r-lg: 14px;
  --r-xl: 22px; --r-pill: 999px;

  /* ─── Shadows ──────────────────────────────────────────── */
  --shadow-xs: 0 1px 2px rgba(15,24,42,0.06);
  --shadow-sm: 0 2px 8px rgba(15,24,42,0.08);
  --shadow-md: 0 6px 20px rgba(15,24,42,0.10);
  --shadow-lg: 0 16px 40px rgba(15,24,42,0.14);
  --shadow-focus: 0 0 0 3px rgba(6,101,230,0.22);

  /* ─── Motion ───────────────────────────────────────────── */
  --duration-instant: 80ms;
  --duration-fast:    160ms;
  --duration-base:    240ms;
  --duration-slow:    400ms;
  --easing-standard:  cubic-bezier(0.4, 0, 0.2, 1);
  --easing-emphasis:  cubic-bezier(0.2, 0, 0, 1);
  --easing-decel:     cubic-bezier(0, 0, 0.2, 1);

  /* Short aliases (used in F·08 Motion) */
  --d-instant: 80ms;
  --d-fast: 160ms;
  --d-base: 240ms;
  --d-medium: 320ms;
  --d-slow: 480ms;
  --d-cinematic: 800ms;
  --ease-standard: cubic-bezier(0.4, 0, 0.2, 1);
  --ease-out: cubic-bezier(0, 0, 0.2, 1);
  --ease-in: cubic-bezier(0.4, 0, 1, 1);
  --ease-linear: linear;

  /* Radius aliases: keep aliases stable; do not redefine base radii here. */

  /* Shadow aliases */
  --sh-sm: 0 2px 8px rgba(15,24,42,0.08);
  --sh-md: 0 6px 20px rgba(15,24,42,0.10);
  --sh-lg: 0 16px 40px rgba(15,24,42,0.14);
}

/* Reduced motion accessibility */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* ─── Полосы прокрутки широких таблиц (15.09) ───────────────────────────────
   Одна заметная полоса на ЭТП и портале: толщина ≥12px, ползунок к дорожке ≥3:1
   (WCAG 1.4.11; brand-blue-600 на ink-100 — 5,9:1). Правила — core/components.css. */
:root {
  --sp-scrollbar-size: 16px;
  --sp-scrollbar-track: var(--ink-100, #EBF0F6);
  --sp-scrollbar-thumb: var(--brand-blue-600, #0553C7);
  --sp-scrollbar-thumb-hover: var(--brand-blue-700, #0442A3);
}

/* source: test-overrides/ui-redesign/core/fonts.css */
/* Self-hosted Spectender fonts; sources and hashes: fonts.lock.json */
/* cyrillic-ext */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url(fonts/73249ccb96d45b9fb3cc.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url(fonts/a7dc739efa0c2d406616.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url(fonts/bfdc6f24e4a293fcd433.woff2) format('woff2');
  unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* vietnamese */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url(fonts/7920935f257c10fa233f.woff2) format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url(fonts/85ea5e8563c66d7fc38c.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;
}
/* latin */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url(fonts/b14f1edee95a57f8782d.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;
}
/* cyrillic-ext */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(fonts/73249ccb96d45b9fb3cc.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(fonts/a7dc739efa0c2d406616.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(fonts/bfdc6f24e4a293fcd433.woff2) format('woff2');
  unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* vietnamese */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(fonts/7920935f257c10fa233f.woff2) format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(fonts/85ea5e8563c66d7fc38c.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;
}
/* latin */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(fonts/b14f1edee95a57f8782d.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;
}
/* cyrillic-ext */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(fonts/73249ccb96d45b9fb3cc.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(fonts/a7dc739efa0c2d406616.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(fonts/bfdc6f24e4a293fcd433.woff2) format('woff2');
  unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* vietnamese */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(fonts/7920935f257c10fa233f.woff2) format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(fonts/85ea5e8563c66d7fc38c.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;
}
/* latin */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(fonts/b14f1edee95a57f8782d.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;
}
/* cyrillic-ext */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(fonts/73249ccb96d45b9fb3cc.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(fonts/a7dc739efa0c2d406616.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(fonts/bfdc6f24e4a293fcd433.woff2) format('woff2');
  unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* vietnamese */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(fonts/7920935f257c10fa233f.woff2) format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(fonts/85ea5e8563c66d7fc38c.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;
}
/* latin */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(fonts/b14f1edee95a57f8782d.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;
}
/* cyrillic-ext */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(fonts/73249ccb96d45b9fb3cc.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(fonts/a7dc739efa0c2d406616.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(fonts/bfdc6f24e4a293fcd433.woff2) format('woff2');
  unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* vietnamese */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(fonts/7920935f257c10fa233f.woff2) format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(fonts/85ea5e8563c66d7fc38c.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;
}
/* latin */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(fonts/b14f1edee95a57f8782d.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;
}
/* cyrillic-ext */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url(fonts/73249ccb96d45b9fb3cc.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url(fonts/a7dc739efa0c2d406616.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url(fonts/bfdc6f24e4a293fcd433.woff2) format('woff2');
  unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* vietnamese */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url(fonts/7920935f257c10fa233f.woff2) format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url(fonts/85ea5e8563c66d7fc38c.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;
}
/* latin */
@font-face {
  font-family: 'Geologica';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url(fonts/b14f1edee95a57f8782d.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;
}
/* cyrillic-ext */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(fonts/62213be8a78b42f1e29d.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(fonts/e17cfd15fb96909d6409.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(fonts/0a557721b1f8b36d3f3f.woff2) format('woff2');
  unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* vietnamese */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(fonts/c89b9cc0bc6262bd4f8d.woff2) format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(fonts/db5ff4db83e580426280.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;
}
/* latin */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(fonts/83c005d49d8a6a50474c.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;
}
/* cyrillic-ext */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(fonts/62213be8a78b42f1e29d.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(fonts/e17cfd15fb96909d6409.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(fonts/0a557721b1f8b36d3f3f.woff2) format('woff2');
  unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* vietnamese */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(fonts/c89b9cc0bc6262bd4f8d.woff2) format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(fonts/db5ff4db83e580426280.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;
}
/* latin */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(fonts/83c005d49d8a6a50474c.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;
}
/* cyrillic-ext */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(fonts/62213be8a78b42f1e29d.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(fonts/e17cfd15fb96909d6409.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(fonts/0a557721b1f8b36d3f3f.woff2) format('woff2');
  unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* vietnamese */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(fonts/c89b9cc0bc6262bd4f8d.woff2) format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(fonts/db5ff4db83e580426280.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;
}
/* latin */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(fonts/83c005d49d8a6a50474c.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;
}
/* cyrillic-ext */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(fonts/62213be8a78b42f1e29d.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(fonts/e17cfd15fb96909d6409.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(fonts/0a557721b1f8b36d3f3f.woff2) format('woff2');
  unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* vietnamese */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(fonts/c89b9cc0bc6262bd4f8d.woff2) format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(fonts/db5ff4db83e580426280.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;
}
/* latin */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(fonts/83c005d49d8a6a50474c.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;
}
/* cyrillic-ext */
@font-face {
  font-family: 'Onest';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(fonts/c29dea91b7e6032d32fa.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Onest';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(fonts/37bc16874135c1613467.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* latin-ext */
@font-face {
  font-family: 'Onest';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(fonts/391a9b24b5c46ebff5d2.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;
}
/* latin */
@font-face {
  font-family: 'Onest';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(fonts/67849bcc11e02177442d.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;
}
/* cyrillic-ext */
@font-face {
  font-family: 'Onest';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(fonts/c29dea91b7e6032d32fa.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Onest';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(fonts/37bc16874135c1613467.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* latin-ext */
@font-face {
  font-family: 'Onest';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(fonts/391a9b24b5c46ebff5d2.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;
}
/* latin */
@font-face {
  font-family: 'Onest';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(fonts/67849bcc11e02177442d.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;
}
/* cyrillic-ext */
@font-face {
  font-family: 'Onest';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(fonts/c29dea91b7e6032d32fa.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Onest';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(fonts/37bc16874135c1613467.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* latin-ext */
@font-face {
  font-family: 'Onest';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(fonts/391a9b24b5c46ebff5d2.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;
}
/* latin */
@font-face {
  font-family: 'Onest';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(fonts/67849bcc11e02177442d.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;
}
/* cyrillic-ext */
@font-face {
  font-family: 'Onest';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(fonts/c29dea91b7e6032d32fa.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Onest';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(fonts/37bc16874135c1613467.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* latin-ext */
@font-face {
  font-family: 'Onest';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(fonts/391a9b24b5c46ebff5d2.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;
}
/* latin */
@font-face {
  font-family: 'Onest';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(fonts/67849bcc11e02177442d.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;
}
/* cyrillic-ext */
@font-face {
  font-family: 'Onest';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url(fonts/c29dea91b7e6032d32fa.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Onest';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url(fonts/37bc16874135c1613467.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* latin-ext */
@font-face {
  font-family: 'Onest';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url(fonts/391a9b24b5c46ebff5d2.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;
}
/* latin */
@font-face {
  font-family: 'Onest';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url(fonts/67849bcc11e02177442d.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;
}

/* source: test-overrides/ui-redesign/core/foundations.css */
.sp-ui {
  --font-display: 'Onest', 'Geologica', system-ui, sans-serif;
  color: var(--ink-900);
  background: var(--surface-page);
  font-family: var(--font-body);
  font-size: 15px;
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
}
.sp-ui, .sp-ui *, .sp-ui *::before, .sp-ui *::after { box-sizing: border-box; }
.sp-ui h1, .sp-ui h2, .sp-ui h3, .sp-ui h4 {
  margin: 0;
  color: var(--navy-900);
  font-family: var(--font-display);
  line-height: 1.18;
}
.sp-ui button, .sp-ui input, .sp-ui select, .sp-ui textarea { font: inherit; }
.sp-ui :focus-visible { outline: 2px solid var(--brand-blue-500); outline-offset: 2px; box-shadow: var(--shadow-focus); }
.sp-ui [hidden] { display: none !important; }
.sp-ui .sp-sr-only {
  position: absolute !important; width: 1px !important; height: 1px !important;
  padding: 0 !important; margin: -1px !important; overflow: hidden !important;
  clip: rect(0, 0, 0, 0) !important; white-space: nowrap !important; border: 0 !important;
}
@media (prefers-reduced-motion: reduce) {
  .sp-ui *, .sp-ui *::before, .sp-ui *::after {
    scroll-behavior: auto !important;
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}

/* source: test-overrides/ui-redesign/core/components.css */
.sp-ui .sp-button {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--space-3);
  min-height: 44px; padding: 0 var(--space-5); border: 1px solid transparent;
  border-radius: var(--r-sm); background: var(--brand-blue-600); color: #fff;
  font-weight: 700; cursor: pointer;
}
.sp-ui .sp-button:hover { background: var(--brand-blue-700); }
.sp-ui .sp-button--secondary { border-color: var(--brand-blue-200); background: #fff; color: var(--brand-blue-700); }
.sp-ui .sp-button--danger { background: var(--danger-600); }
.sp-ui .sp-button[disabled], .sp-ui .sp-button[aria-disabled='true'] { opacity: .48; cursor: not-allowed; }
.sp-ui .sp-field { display: grid; gap: var(--space-2); min-width: 0; }
.sp-ui .sp-field__label { color: var(--ink-700); font-size: 13px; font-weight: 600; }
.sp-ui .sp-control {
  width: 100%; min-height: 44px; padding: 9px 12px; border: 1px solid var(--ink-200);
  border-radius: var(--r-sm); background: var(--surface-card); color: var(--ink-900);
}
.sp-ui .sp-control[aria-invalid='true'] { border-color: var(--danger-600); }
.sp-ui .sp-field__error { color: var(--danger-700); font-size: 13px; }
.sp-ui .sp-status { display: inline-flex; align-items: center; min-height: 26px; padding: 2px 9px; border-radius: var(--r-pill); font-size: 13px; font-weight: 700; }
.sp-ui .sp-status--success { background: var(--success-100); color: var(--success-700); }
.sp-ui .sp-status--warning { background: var(--warning-100); color: var(--warning-700); }
.sp-ui .sp-status--danger { background: var(--danger-100); color: var(--danger-700); }
.sp-ui .sp-panel { border: 1px solid var(--ink-100); border-radius: var(--r-md); background: var(--surface-card); box-shadow: var(--shadow-xs); }
.sp-ui .sp-card { display: grid; gap: var(--space-3); min-width: 0; padding: var(--space-4); border: 1px solid var(--ink-100); border-radius: var(--r-md); background: var(--surface-card); box-shadow: var(--shadow-xs); }
.sp-ui .sp-alert { display: grid; gap: var(--space-2); padding: var(--space-4); border: 1px solid var(--brand-blue-200); border-radius: var(--r-md); background: var(--brand-blue-050); color: var(--ink-800); }
.sp-ui .sp-alert--danger { border-color: var(--danger-100); background: var(--danger-050); color: var(--danger-700); }
.sp-ui .sp-empty { display: grid; place-items: center; gap: var(--space-3); min-height: 160px; padding: var(--space-6); text-align: center; color: var(--ink-600); }
.sp-ui .sp-skeleton { min-height: 16px; border-radius: var(--r-xs); background: linear-gradient(90deg, var(--ink-100), var(--ink-050), var(--ink-100)); background-size: 200% 100%; animation: sp-skeleton 1.2s linear infinite; }
.sp-ui .sp-qa-state { margin-block: var(--space-4); padding: var(--space-5); }
@keyframes sp-skeleton { to { background-position-x: -200%; } }

/* ── Page-load curtain ───────────────────────────────────────────────────
   Full reloads repaint in visible steps (legacy CSS, fonts, adapters, GWT),
   so navigation looked jumpy. The page is covered by an OPAQUE
   surface-coloured curtain from the very first paint and is revealed only
   after the page has FULLY loaded (window load), so layout settles invisibly.
   The curtain fades in near-instantly (.15s) and fades out just as fast; a
   pure-CSS failsafe clears it even if no script ever runs. */
@keyframes sp-veil-failsafe { from { opacity: 1; } to { opacity: 0; visibility: hidden; } }
@keyframes sp-veil-in { from { opacity: 0; } to { opacity: 1; } }
body::before {
  content: '';
  position: fixed;
  inset: 0;
  z-index: 2147482000;
  background: var(--surface-page, #FAFBFD);
  /* Fully opaque from the very first frame of a fresh page: a fade-in here
     would let the unstyled DOM flash through for a moment mid-navigation. */
  opacity: 1;
  pointer-events: none;
  animation: sp-veil-failsafe .3s linear 4.5s forwards;
}
/* Only when the runtime raises the curtain over the still-visible old page
   (navigation start) does it appear with the short fade. */
html.sp-veil-nav body::before {
  animation:
    sp-veil-in .15s ease-out both,
    sp-veil-failsafe .3s linear 4.5s forwards;
}
/* The official Spectender mark appears on the curtain only when a load is
   slow: the breath animation (transparent -> visible -> transparent) starts
   after a .45s delay, so fast navigations show just the calm blank surface
   and never flash an indicator. */
@keyframes sp-veil-pulse { 0%, 100% { opacity: 0; } 50% { opacity: 1; } }
body::after {
  content: '';
  position: fixed;
  /* vw/vh do not change when the scrollbar arrives, so the mark never
     shifts sideways mid-load the way a left: 50% box does */
  top: 50vh;
  left: 50vw;
  z-index: 2147482001;
  width: 104px;
  height: 104px;
  margin: -52px 0 0 -52px;
  background-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%202925.74%202925.74'%3E%3Cpath%20fill='%230665E6'%20d='M1462.87%200c635.01,0%201175.46,404.66%201377.72,970.15l-631.46%200c-160.04,-241.89%20-434.49,-401.48%20-746.25,-401.48%20-389.63,0%20-720.99,249.22%20-843.53,596.92l-0.04%200c-65.76,189.72%20-67.95,391.11%20-4.2,582.37l0.1%200.31%20-587.28%200c-18.25,-92.31%20-27.92,-187.72%20-27.92,-285.41%200,-807.92%20654.95,-1462.87%201462.87,-1462.87zm-754.28%201943.31c158.79,248.79%20437.25,413.76%20754.28,413.76%20394.17,0%20728.75,-255.05%20847.78,-609.11l587.24%200c-132.65,671.44%20-724.67,1177.78%20-1435.01,1177.78%20-639.6,0%20-1183.25,-410.52%20-1382.04,-982.43l627.76%200z'/%3E%3Cpath%20fill='%23EA5B21'%20d='M619.29%201165.59l2276.18%200c19.84,95.98%2030.27,195.41%2030.27,297.28%200,97.56%20-9.57,192.88%20-27.79,285.09l-1144.23%200%200%201148.83c-94,18.97%20-191.25,28.95%20-290.85,28.95%20-102.47,0%20-202.48,-10.55%20-299,-30.61l0%20-1147.16%20-548.77%200c-30.11,-89.53%20-46.43,-185.4%20-46.43,-285.09%200,-104.22%2017.84,-204.27%2050.62,-297.28z'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: center;
  background-size: contain;
  opacity: 0;
  pointer-events: none;
  animation:
    sp-veil-pulse 1.2s ease-in-out .45s infinite,
    sp-veil-failsafe .3s linear 4.5s forwards;
}
html.sp-veil-off body::before,
html.sp-veil-off body::after {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity .15s ease, visibility 0s .15s;
  animation: none;
}
@media (prefers-reduced-motion: reduce) {
  /* Opacity fades are vestibular-safe; keep a slower breath. The selectors
     with .sp-ui out-rank the global reduced-motion kill switch in
     foundations (.sp-ui * { animation-duration: 0.01ms }). */
  body::after,
  body.sp-ui::after,
  html.sp-ui body::after {
    animation:
      sp-veil-pulse 2.4s ease-in-out .45s infinite,
      sp-veil-failsafe .3s linear 4.5s forwards !important;
  }
}
@media print {
  body::before, body::after { content: none !important; }
}

/* ── Floating tooltip layer ──────────────────────────────────────────────
   Lives on <body> with fixed coordinates so no scroll container, row border
   or overflow:hidden ancestor can crop it. Positioned by the runtime. */
.sp-floating-tip {
  position: fixed;
  top: -9999px;
  left: -9999px;
  z-index: 2147482500;
  max-width: min(320px, calc(100vw - 24px));
  padding: 8px 11px;
  border-radius: var(--r-sm, 6px);
  background: var(--navy-900, #0A1735);
  color: #fff;
  font: 500 12px/1.4 var(--font-body, system-ui, sans-serif);
  letter-spacing: normal;
  text-transform: none;
  text-align: left;
  white-space: normal;
  overflow-wrap: anywhere;
  box-shadow: 0 8px 24px rgba(10, 23, 53, .18);
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity .12s ease, visibility 0s .12s;
}
.sp-floating-tip--visible {
  opacity: 1;
  visibility: visible;
  transition: opacity .12s ease, visibility 0s;
}
@media print { .sp-floating-tip { display: none !important; } }

/* ── Чат поддержки: собственная кнопка + изолированный iframe ─────────────
   Bitrix24 больше не грузится в основной документ (SER-40): его SVG с
   className=SVGAnimatedString роняли легаси-обход GWT. Здесь только наша
   кнопка и контейнер кадра; иконка — CSS-маска, а не DOM-узел <svg>. */
.sp-support-fab {
  /* !important обязателен: легаси портала переопределяет position у кнопок
     на relative, из-за чего кнопка уезжала в конец потока body (замерено:
     x=-20, y=2938 при вьюпорте 900). */
  position: fixed !important;
  right: 20px !important;
  bottom: 20px !important;
  left: auto !important;
  top: auto !important;
  z-index: 2147482000 !important;
  display: flex;
  align-items: center;
  justify-content: center;
  box-sizing: border-box;
  width: 56px;
  height: 56px;
  padding: 0;
  border: none;
  border-radius: 50%;
  background: var(--brand-blue-600, #0665E6);
  box-shadow: 0 6px 20px rgba(6, 101, 230, .35);
  cursor: pointer;
  transition: background .16s cubic-bezier(.2, 0, 0, 1), transform .16s cubic-bezier(.2, 0, 0, 1);
}
.sp-support-fab:hover { background: var(--brand-blue-700, #0442A3); }
.sp-support-fab:active { transform: scale(.94); }
.sp-support-fab:focus-visible {
  outline: 3px solid var(--brand-blue-300, #8FBEFA);
  outline-offset: 2px;
}
.sp-support-fab__glyph {
  display: block;
  width: 26px;
  height: 26px;
  background: #fff;
  -webkit-mask: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M21%2011.5a8.4%208.4%200%200%201-9%208.4%209.9%209.9%200%200%201-2.8-.4L3%2021l1.6-4.7A8.4%208.4%200%200%201%2012%203a8.4%208.4%200%200%201%209%208.5z'/%3E%3C/svg%3E") center / contain no-repeat;
  mask: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M21%2011.5a8.4%208.4%200%200%201-9%208.4%209.9%209.9%200%200%201-2.8-.4L3%2021l1.6-4.7A8.4%208.4%200%200%201%2012%203a8.4%208.4%200%200%201%209%208.5z'/%3E%3C/svg%3E") center / contain no-repeat;
}
.sp-support-fab--open .sp-support-fab__glyph {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2.4'%20stroke-linecap='round'%3E%3Cpath%20d='M6%206l12%2012M18%206L6%2018'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2.4'%20stroke-linecap='round'%3E%3Cpath%20d='M6%206l12%2012M18%206L6%2018'/%3E%3C/svg%3E");
}

/* Закрытый кадр не должен ни перехватывать клики, ни занимать место. */
.sp-support-shell {
  position: fixed !important;
  right: 20px;
  bottom: 88px;
  z-index: 2147481900 !important;
  width: 0;
  height: 0;
  /* контейнер обрезает кадр по границам панели Bitrix, которые кадр
     присылает сам: iframe внутри сдвинут на -x/-y. Без обрезки вокруг панели
     оставался пустой белый прямоугольник 400×600, и он же перехватывал
     клики по странице. */
  overflow: hidden;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  /* ни фона, ни тени, ни скругления: карточку рисует сам виджет Bitrix,
     наша добавка выглядела вторым слоем вокруг него */
  background: transparent;
  transition: opacity .16s cubic-bezier(.2, 0, 0, 1), visibility 0s .16s;
}
.sp-support-shell--open {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transition: opacity .16s cubic-bezier(.2, 0, 0, 1), visibility 0s;
}
.sp-support-frame {
  display: block;
  position: absolute;
  /* Кадр заведомо больше любой панели Bitrix: виджет позиционирует меню
     влево от своей кнопки, и в кадре 400px оно вылезало за левый край
     (замерено x = -36), а невидимую часть обрезать уже нечем. Лишнее
     всё равно скрывает контейнер, обрезая кадр по замеренным границам. */
  width: 720px;
  height: 760px;
  border: 0;
  background: transparent;
}

@media (max-width: 480px) {
  .sp-support-fab { right: 14px !important; bottom: 14px !important; width: 50px; height: 50px; }
  .sp-support-shell { right: 8px; bottom: 74px; }
}
/* На широких экранах кнопка уходит в поле справа от колонки контента
   (колонка 1440px по центру): аудит показал, что на 1440 она лежала поверх
   правой колонки таблицы результатов. Начиная с 1600px поля хватает на
   кнопку целиком, и контент под ней больше не оказывается. */
@media (min-width: 1600px) {
  .sp-support-fab { right: calc((100vw - 1440px) / 2 - 76px) !important; }
}

@media print {
  .sp-support-fab, .sp-support-shell { display: none !important; }
}

/* Кнопку чата можно перетащить; позиция сохраняется между сессиями.
   touch-action:none обязателен — иначе на тач-экране жест перехватывает
   прокрутка страницы и кнопка не двигается. */
/* !important обязателен: на телефонах правило
   @media (max-width: 768px) { .sp-etp button { touch-action: manipulation } }
   специфичнее и выигрывало. Из-за этого браузер забирал вертикальный жест
   себе, слал pointercancel, драг обрывался на первом шаге — кнопка не
   двигалась, а страница дёргалась. Замерено: touchAction = manipulation. */
.sp-support-fab { touch-action: none !important; }
.sp-support-fab--dragging {
  cursor: grabbing;
  transition: none;
  box-shadow: 0 10px 28px rgba(6, 101, 230, .45);
}

/* ── Значки как CSS-маски, а не <svg> ───────────────────────────────────
   У элемента <svg> свойство className — объект SVGAnimatedString, а не
   строка. Легаси-обход GWT (GUIGWTUIUtils.getChildByClassName /
   listChildByClassName) зовёт на каждом узле Element.hasClassName ->
   String.indexOf и на таком узле падает: «indexOf is not a function».
   Именно так Bitrix24 ронял форму сообщения (SER-40). Замер показал, что
   обход от корня документа (ConfirmationDialog) доходил и до НАШИХ иконок
   в шапке и карусели. Маска рисует ту же картинку, не создавая узла с
   объектным className. */
.sp-icon {
  display: inline-block;
  flex: none;
  background-color: currentColor;
  -webkit-mask-position: center;
  mask-position: center;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-size: contain;
  mask-size: contain;
}
.sp-icon--user {
  width: 18px;
  height: 18px;
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2.2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M20%2021v-2a4%204%200%200%200-4-4H8a4%204%200%200%200-4%204v2'/%3E%3Ccircle%20cx='12'%20cy='7'%20r='4'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2.2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M20%2021v-2a4%204%200%200%200-4-4H8a4%204%200%200%200-4%204v2'/%3E%3Ccircle%20cx='12'%20cy='7'%20r='4'/%3E%3C/svg%3E");
}
.sp-icon--logout {
  width: 18px;
  height: 18px;
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2.2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M9%2021H5a2%202%200%200%201-2-2V5a2%202%200%200%201%202-2h4'/%3E%3Cpolyline%20points='16%2017%2021%2012%2016%207'/%3E%3Cline%20x1='21'%20y1='12'%20x2='9'%20y2='12'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2.2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M9%2021H5a2%202%200%200%201-2-2V5a2%202%200%200%201%202-2h4'/%3E%3Cpolyline%20points='16%2017%2021%2012%2016%207'/%3E%3Cline%20x1='21'%20y1='12'%20x2='9'%20y2='12'/%3E%3C/svg%3E");
}
.sp-icon--filter {
  width: 16px;
  height: 16px;
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2.2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M22%203H2l8%209.46V19l4%202v-8.54L22%203z'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2.2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M22%203H2l8%209.46V19l4%202v-8.54L22%203z'/%3E%3C/svg%3E");
}
.sp-icon--chevron-prev {
  width: 20px;
  height: 20px;
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2.2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M15%205%208%2012l7%207'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2.2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M15%205%208%2012l7%207'/%3E%3C/svg%3E");
}
.sp-icon--chevron-next {
  width: 20px;
  height: 20px;
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2.2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M9%205l7%207-7%207'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2.2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M9%205l7%207-7%207'/%3E%3C/svg%3E");
}

/* ── Плашка согласия на cookie ───────────────────────────────────────────
   Показывается, пока решение не принято. Сама площадка ставит только
   JSESSIONID (строго необходимая кука), но встроенный чат Bitrix24 пишет в
   хранилище нашего домена, поэтому до согласия он не загружается вовсе.
   Разметка нарочно без <svg>: у SVG className — объект, и легаси-обход GWT
   на нём падает (SER-40). */
.sp-consent {
  position: fixed !important;
  left: 16px;
  right: 16px;
  bottom: 16px;
  z-index: 2147483000;
  display: none;
  box-sizing: border-box;
  max-width: 960px;
  margin: 0 auto;
  padding: 16px 20px;
  gap: 16px;
  align-items: center;
  border: 1px solid var(--ink-100, #EBF0F6);
  border-radius: var(--r-lg, 14px);
  background: var(--surface-card, #fff);
  box-shadow: 0 12px 40px rgba(10, 23, 53, .18);
}
.sp-consent--visible { display: flex; }

.sp-consent__body { flex: 1 1 auto; min-width: 0; }
.sp-consent__title {
  margin-bottom: 4px;
  color: var(--ink-1000, #0C1E45);
  font-family: var(--font-body, sans-serif);
  font-size: 15px;
  font-weight: 700;
  line-height: 1.3;
}
.sp-consent__text {
  color: var(--ink-700, #2C3E52);
  font-family: var(--font-body, sans-serif);
  font-size: 13px;
  line-height: 1.45;
}
.sp-consent__link { color: var(--brand-blue-700, #0442A3); text-decoration: underline; }
.sp-consent__link:hover { color: var(--brand-blue-800, #0849B3); }

.sp-consent__actions { display: flex; flex: 0 0 auto; gap: 8px; }
.sp-ui .sp-consent .sp-consent__btn {
  box-sizing: border-box;
  min-height: 40px;
  padding: 0 18px;
  border-radius: var(--r-sm, 6px);
  font-family: var(--font-body, sans-serif);
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
  white-space: nowrap;
}
.sp-ui .sp-consent .sp-consent__btn--accept {
  border: 1px solid var(--brand-blue-600, #0665E6);
  background: var(--brand-blue-600, #0665E6);
  color: #fff;
}
.sp-ui .sp-consent .sp-consent__btn--accept:hover { background: var(--brand-blue-700, #0442A3); border-color: var(--brand-blue-700, #0442A3); }
.sp-ui .sp-consent .sp-consent__btn--decline {
  border: 1px solid var(--ink-200, #D0DCE8);
  background: var(--surface-card, #fff);
  color: var(--ink-700, #2C3E52);
}
.sp-ui .sp-consent .sp-consent__btn--decline:hover { border-color: var(--ink-300, #B4C4D6); background: var(--ink-050, #F5F8FB); }
.sp-ui .sp-consent .sp-consent__btn:focus-visible { outline: 3px solid var(--brand-blue-300, #8FBEFA); outline-offset: 2px; }

@media (max-width: 720px) {
  .sp-consent { left: 8px; right: 8px; bottom: 8px; flex-direction: column; align-items: stretch; padding: 14px 16px; }
  .sp-consent__actions { justify-content: stretch; }
  .sp-consent__btn { flex: 1 1 0; }
}

@media print { .sp-consent { display: none !important; } }

/* ── Полноэкранный чат на узких экранах ──────────────────────────────────
   Маленькая панель, привязанная к кнопке, на телефоне либо не помещалась,
   либо вставала криво относительно кнопки. Здесь окно занимает весь экран
   поверх всего, с собственной кнопкой закрытия. */
/* Кнопка закрытия убрана: в полноэкранном режиме виджет показывает свою
   собственную — дублировать её нечем и незачем. Правило оставлено скрытым
   на случай старых закешированных сборок. */
.sp-support-close {
  display: none !important;
}
.sp-support-close--unused {
  position: fixed;
  top: 12px;
  right: 12px;
  z-index: 2147483200;
  display: none;
  box-sizing: border-box;
  width: 40px;
  height: 40px;
  padding: 0;
  border: 1px solid var(--ink-100, #EBF0F6);
  border-radius: 50%;
  background: var(--surface-card, #fff);
  color: var(--ink-700, #2C3E52);
  font-size: 24px;
  line-height: 1;
  cursor: pointer;
  box-shadow: 0 4px 14px rgba(10, 23, 53, .18);
}
.sp-support-close:hover { border-color: var(--ink-300, #B4C4D6); background: var(--ink-050, #F5F8FB); }
.sp-support-close:focus-visible { outline: 3px solid var(--brand-blue-300, #8FBEFA); outline-offset: 2px; }

.sp-support-backdrop {
  position: fixed;
  inset: 0;
  z-index: 2147483050;
  display: none;
  background: rgba(10, 23, 53, .55);
}
.sp-support-backdrop--visible { display: block; }

@media (max-width: 768px) {
  /* Окно остаётся обрезанным по панели Bitrix (растягивать её нельзя —
     внутренняя раскладка виджета не перестраивается), но встаёт по центру
     экрана поверх затемнения, а не подстраивается под кнопку. */
  /* Кадр получает РЕАЛЬНЫЙ размер экрана, а не сжимается трансформом.
     Прежний вариант (панель 720px, ужатая scale(~0.58) под ширину телефона)
     давал ровно то, на что жаловался пользователь: «форма не адаптивная,
     мелкий шрифт» — уменьшался весь виджет целиком, вместе с текстом.
     В натуральную величину Bitrix сам строит мобильную раскладку: шапка с
     названием отдела, собственный крестик, поле ввода снизу. */
  .sp-support-shell--full.sp-support-shell--open {
    position: fixed !important;
    inset: 0 !important;
    left: 0 !important;
    top: 0 !important;
    right: 0 !important;
    bottom: 0 !important;
    width: 100vw !important;
    height: 100dvh !important;
    max-width: none !important;
    max-height: none !important;
    transform: none !important;
    border-radius: 0 !important;
    box-shadow: none !important;
    overflow: hidden !important;
    z-index: 2147483100 !important;
    background: var(--surface-card, #fff) !important;
  }
  .sp-support-shell--full .sp-support-frame {
    position: absolute !important;
    inset: 0 !important;
    left: 0 !important;
    top: 0 !important;
    width: 100% !important;
    height: 100% !important;
  }
  /* пока чат открыт во весь экран, страница под ним не прокручивается */
  body.sp-support-locked { overflow: hidden !important; }
  /* круглая кнопка не должна торчать поверх открытого окна */
  body.sp-support-locked .sp-support-fab { display: none !important; }
}

/* Сдержанная ссылка в подвале: единственный способ пересмотреть решение по
   cookie после того, как оно принято (кнопка чата без согласия не рисуется). */
.sp-ui .sp-consent-settings,
.sp-consent-settings {
  display: inline-block;
  margin: 8px 0 0;
  padding: 0;
  border: 0;
  background: none;
  color: inherit;
  font: inherit;
  font-size: 13px;
  line-height: 1.4;
  opacity: .75;
  text-decoration: underline;
  text-underline-offset: 2px;
  cursor: pointer;
}
.sp-ui .sp-consent-settings:hover,
.sp-consent-settings:hover { opacity: 1; }
.sp-ui .sp-consent-settings:focus-visible,
.sp-consent-settings:focus-visible {
  outline: 2px solid var(--focus-ring, #2f6fed);
  outline-offset: 2px;
}

/* Чат поддержки не поднялся: показываем причину вместо невидимого окна. */
.sp-support-shell--failed {
  width: 320px !important;
  height: auto !important;
  overflow: visible !important;
  background: var(--surface-card, #fff) !important;
  border-radius: var(--r-lg, 14px) !important;
  box-shadow: 0 18px 48px rgba(10, 23, 53, .28) !important;
}
/* Кадр (position: absolute) рисуется поверх статичных соседей: без z-index
   кнопки отказа лежали под прозрачным кадром 720×760 и не нажимались. */
.sp-support-error { position: relative; z-index: 2; padding: 16px; display: grid; gap: 10px; }
.sp-support-shell--failed .sp-support-frame { visibility: hidden; }
.sp-support-error__actions { display: flex; gap: 8px; flex-wrap: wrap; }
.sp-support-error__retry {
  min-height: 36px;
  padding: 0 16px;
  border: 1px solid var(--brand-blue-600, #1E5EFF);
  border-radius: var(--r-sm, 6px);
  background: var(--brand-blue-600, #1E5EFF);
  color: #fff;
  font: inherit;
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
}

/* Виджет ещё грузится: подпись с индикатором вместо пустого окна. */
.sp-support-shell--loading {
  width: 320px !important;
  height: auto !important;
  min-height: 60px;
  background: var(--surface-card, #fff) !important;
  border-radius: var(--r-lg, 14px) !important;
  box-shadow: 0 18px 48px rgba(10, 23, 53, .28) !important;
}
.sp-support-loading {
  position: relative;
  z-index: 1;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 20px 16px;
  color: var(--ink-500, #7B8FA3);
  font-size: 13px;
  line-height: 1.4;
}
.sp-support-loading::before {
  content: "";
  flex: none;
  width: 16px;
  height: 16px;
  border: 2px solid var(--ink-200, #CFDBE8);
  border-top-color: var(--brand-blue-600, #1E5EFF);
  border-radius: 50%;
  animation: sp-support-spin .8s linear infinite;
}
@keyframes sp-support-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .sp-support-loading::before { animation: none; } }
.sp-support-shell--full .sp-support-loading { position: absolute; left: 0; right: 0; top: 40%; justify-content: center; }
.sp-support-error__text { color: var(--ink-700, #40546C); font-size: 13px; line-height: 1.45; }
.sp-support-error__contact { color: var(--ink-500, #7B8FA3); font-size: 12px; }
.sp-support-error__close {
  justify-self: start;
  min-height: 36px;
  padding: 0 16px;
  border: 1px solid var(--ink-200, #CFDBE8);
  border-radius: var(--r-sm, 6px);
  background: #fff;
  color: var(--ink-700, #40546C);
  font: inherit;
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
}

/* ── Плашка cookie по запросу чата (spConsent.ask) ───────────────────────
   Подсказка и кнопка «Закрыть» видны только в этом режиме: прежний ответ
   остаётся в силе, плашку можно просто закрыть. В обычном режиме (решения
   ещё нет) закрыть нельзя — нужно ответить. */
.sp-consent__note { display: none; margin-top: 6px; font-size: 13px; line-height: 1.4; color: var(--ink-600, #425D78); }
.sp-consent--ask .sp-consent__note { display: block; }
.sp-ui .sp-consent .sp-consent__close,
.sp-consent__close { display: none; position: absolute; top: 6px; right: 6px; width: 28px; height: 28px; padding: 0; margin: 0; border: 0; border-radius: 50%; background: transparent; color: var(--ink-500, #5E7A90); font: 22px/1 Arial, sans-serif; cursor: pointer; }
.sp-ui .sp-consent.sp-consent--ask .sp-consent__close,
.sp-consent--ask .sp-consent__close { display: inline-flex; align-items: center; justify-content: center; }
.sp-ui .sp-consent .sp-consent__close:hover,
.sp-consent__close:hover { background: var(--ink-050, #F5F8FB); color: var(--ink-700, #2C3E52); }
.sp-ui .sp-consent .sp-consent__close:focus-visible,
.sp-consent__close:focus-visible { outline: 3px solid var(--brand-blue-300, #8FBEFA); outline-offset: 1px; }
.sp-ui .sp-consent.sp-consent--ask,
.sp-consent.sp-consent--ask { padding-right: 40px !important; }

/* ── Прилипающая горизонтальная полоса широких таблиц (13.09, общее) ──────
   core/hscroll.js показывает дубль полосы у нижнего края видимой области,
   пока родная полоса таблицы скрыта ниже. */
.sp-hscroll {
  position: fixed;
  z-index: 60;
  display: none;
  /* полоса + верхняя граница 1px; core/hscroll.js BAR_HEIGHT = та же сумма */
  height: calc(var(--sp-scrollbar-size, 16px) + 1px);
  overflow-x: auto;
  overflow-y: hidden;
  box-sizing: border-box;
  background: rgba(255, 255, 255, .94);
  border-top: 1px solid var(--ink-100, #E4EAF2);
}
.sp-hscroll--overlay { z-index: 100010; }
.sp-hscroll__spacer { height: 1px; }
/* 15.09: сенсорные экраны — своя полоса с ползунком (системная видна только во время жеста) */
.sp-hscroll.sp-hscroll--touch { height: 20px; overflow: hidden; touch-action: none; padding: 4px 0; }
.sp-hscroll__thumb { position: relative; height: 12px; min-width: 32px; border-radius: 6px; background: var(--sp-scrollbar-thumb, #0553C7); will-change: transform; }
@media print { .sp-hscroll { display: none !important; } }

/* ── Полосы прокрутки широких таблиц: одна заметная полоса на ЭТП и портале (15.09) ──
   Прежде у всех полос стояло `scrollbar-width: thin` + `scrollbar-color`, а Chrome/Edge ≥121
   при заданных стандартных свойствах игнорируют ::-webkit-scrollbar: пользователь видел
   тонкую системную полосу с полупрозрачным ползунком (~3:1), а не нашу 12px с дорожкой.
   Теперь стандартные свойства — только там, где ::-webkit-scrollbar нет (Firefox).
   Охват: дубли полос (.sp-hscroll, .sp-table-scrollbar) и все обёртки, которыми управляют
   адаптеры (tables.js ЭТП, components.js портала, core/hscroll.js). !important и вес 0,2,1 —
   чтобы выиграть у `body.basic ::-webkit-scrollbar` / `body.form …` портала (8px, !important).
   Сброс стандартных свойств в auto — для обёрток со своим `scrollbar-width: thin` (формы в
   диалогах портала), если их подхватил hscroll.js: иначе Chrome снова отключит ::-webkit-scrollbar. */
:is(.sp-hscroll:not(.sp-hscroll--touch), .sp-table-scrollbar, .sp-table-scroll--data, .sp-table-frame > .sp-table-host, [data-sp-hscroll="true"], [data-sp-floating="true"], [data-sp-scroll-bound="true"]) {
  scrollbar-width: auto !important;
  scrollbar-color: auto !important;
}
:is(.sp-hscroll:not(.sp-hscroll--touch), .sp-table-scrollbar, .sp-table-scroll--data, .sp-table-frame > .sp-table-host, [data-sp-hscroll="true"], [data-sp-floating="true"], [data-sp-scroll-bound="true"])::-webkit-scrollbar {
  width: var(--sp-scrollbar-size, 16px) !important;
  height: var(--sp-scrollbar-size, 16px) !important;
}
:is(.sp-hscroll:not(.sp-hscroll--touch), .sp-table-scrollbar, .sp-table-scroll--data, .sp-table-frame > .sp-table-host, [data-sp-hscroll="true"], [data-sp-floating="true"], [data-sp-scroll-bound="true"])::-webkit-scrollbar-track {
  background: var(--sp-scrollbar-track, #EBF0F6) !important;
  border-radius: 0 !important;
}
:is(.sp-hscroll:not(.sp-hscroll--touch), .sp-table-scrollbar, .sp-table-scroll--data, .sp-table-frame > .sp-table-host, [data-sp-hscroll="true"], [data-sp-floating="true"], [data-sp-scroll-bound="true"])::-webkit-scrollbar-thumb {
  background: var(--sp-scrollbar-thumb, #0553C7) !important;
  border: 2px solid var(--sp-scrollbar-track, #EBF0F6) !important;
  border-radius: 8px !important;
}
:is(.sp-hscroll:not(.sp-hscroll--touch), .sp-table-scrollbar, .sp-table-scroll--data, .sp-table-frame > .sp-table-host, [data-sp-hscroll="true"], [data-sp-floating="true"], [data-sp-scroll-bound="true"])::-webkit-scrollbar-thumb:hover {
  background: var(--sp-scrollbar-thumb-hover, #0442A3) !important;
}
@supports not selector(::-webkit-scrollbar) {
  :is(.sp-hscroll:not(.sp-hscroll--touch), .sp-table-scrollbar, .sp-table-scroll--data, .sp-table-frame > .sp-table-host, [data-sp-hscroll="true"], [data-sp-floating="true"], [data-sp-scroll-bound="true"]) {
    scrollbar-width: auto !important;
    scrollbar-color: var(--sp-scrollbar-thumb, #0553C7) var(--sp-scrollbar-track, #EBF0F6) !important;
  }
}

/* source: test-overrides/ui-redesign/etp/legacy-base.css */
/* ============================================================
   ЭТП Спецтендер — dev.torgi.etpsp.ru
   Редизайн: блок 1 — Глобальные стили, шапка, навигация, футер
   ============================================================ */

/* --- Шрифты --- */
/* --- Дизайн-токены --- */
:root {
  /* Legacy palette is remapped onto the Spectender DS v2.5.0 tokens so that
     every historical `var(--blue)` / `var(--sky)` rule renders the same brand
     colours as the new components. The portal already follows this mapping. */
  --sky:        var(--brand-blue-050, #F1F6FE);
  --sky-mid:    var(--brand-blue-100, #DDE9FB);
  --blue:       var(--brand-blue-600, #0553C7);
  --blue-hover: var(--brand-blue-700, #0442A3);
  --navy:       var(--navy-800, #0C1E45);
  --navy-mid:   #163068;
  --navy-light: #1E4080;
  --white:      #FFFFFF;
  --gray-50:    #F5F8FB;
  --gray-100:   #EBF0F6;
  --gray-200:   #D0DCE8;
  --gray-300:   #A8BDD0;
  --gray-500:   #5E7A90;
  --gray-700:   #2C3E52;
  --accent:     #C8392B;
  --green:      #1A7A4A;
  --r:          6px;
  --r-md:       10px;
  --r-lg:       14px;
  --tr:         0.22s ease;
  --shadow-xs:  0 1px 4px rgba(12,30,69,0.06);
  --shadow-sm:  0 2px 10px rgba(12,30,69,0.08);
  --shadow-md:  0 6px 24px rgba(12,30,69,0.11);
}

/* --- Глобальный сброс и базовые стили --- */
*, *::before, *::after {
  box-sizing: border-box;
}

/* Корневой элемент тоже должен быть в Geologica — иначе унаследует
   браузерный default (Times New Roman) для top-level контента. */
html {
  font-family: 'Geologica', Arial, sans-serif !important;
}

body {
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 14px !important;
  color: var(--gray-700) !important;
  background: var(--gray-50) !important;
  margin: 0 !important;
  padding: 0 !important;
  -webkit-font-smoothing: antialiased;
}

a {
  color: var(--blue) !important;
  text-decoration: none !important;
  transition: color var(--tr) !important;
}

a:hover {
  color: var(--blue-hover) !important;
}

/* Legacy GWT renders the small-purchase position editor as an empty div.
   default.css used to give that div its only size and icon; the standalone
   redesign does not load default.css, so keep the action visible/clickable. */
.addButton {
  cursor: pointer !important;
  display: inline-block !important;
  width: 16px !important;
  height: 16px !important;
  min-width: 16px !important;
  min-height: 16px !important;
  background: url('/etp/img/buttons/add_plus.png') no-repeat center !important;
  text-decoration: none !important;
}

/* ============================================================
   ШАПКА (HEADER)
   ============================================================ */

.header {
  background: var(--navy) !important;
  height: auto !important;
  min-height: 95px !important;
  padding: 0 !important;
  box-shadow: none !important;
  position: relative !important;
  z-index: 100 !important;
}

/* h-light — flex-контейнер всех элементов шапки, ограничен по ширине */
.h-light {
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  flex-wrap: nowrap !important;
  max-width: 1920px !important;
  width: 100% !important;
  margin: 0 auto !important;
  padding: 0 48px !important;
  min-height: 95px !important;
  min-width: auto !important;
  box-sizing: border-box !important;
}

/* Убираем float у всех элементов внутри h-light */
.h-light > div,
.h-light > a {
  float: none !important;
  margin-top: 0 !important;
}

/* Порядок элементов в flex: logo | contacts (center) | time (right) */
/* DOM-порядок: logo, time, contacts — поэтому нужен CSS order */
.h-logo     { order: 1 !important; }
.h-contacts { order: 2 !important; }
.h-time     { order: 3 !important; }

/* Логотип — наш белый SVG вместо оригинального */
.h-logo {
  display: block !important;
  flex-shrink: 0 !important;
  float: none !important;
  margin-top: 0 !important;
  width: 350px !important;
  height: 85px !important;
  background-image: none !important;
  background-size: contain !important;
  background-repeat: no-repeat !important;
  background-position: left center !important;
  filter: none !important;
}

.h-logo a {
  display: block !important;
  width: 100% !important;
  height: 100% !important;
  font-size: 0 !important;
}

/* Контакты — по центру */
.h-contacts {
  flex: 1 !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  float: none !important;
  margin-top: 0 !important;
  text-align: center !important;
  font-size: 13px !important;
  color: rgba(255,255,255,0.75) !important;
}

/* Внутренняя таблица контактов — по центру */
.h-contacts table {
  margin: 0 auto !important;
  float: none !important;
  text-align: center !important;
  border-collapse: collapse !important;
}

.h-contacts table td {
  text-align: center !important;
  vertical-align: middle !important;
  padding: 0 12px !important;
}

.h-contacts a {
  color: rgba(255,255,255,0.75) !important;
  transition: color var(--tr) !important;
}

.h-contacts a:hover {
  color: var(--white) !important;
}

.hc-phone {
  color: var(--white) !important;
  font-size: 18px !important;
  font-weight: 600 !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  letter-spacing: -0.01em !important;
}

/* Время сервера — справа */
.h-time {
  flex-shrink: 0 !important;
  float: none !important;
  margin-top: 0 !important;
  margin-left: auto !important;
  color: rgba(255,255,255,0.6) !important;
  font-size: 12px !important;
  font-weight: 400 !important;
  white-space: nowrap !important;
  text-align: right !important;
}

.ht-num {
  display: flex !important;
  align-items: center !important;
  gap: 4px !important;
  justify-content: flex-end !important;
}

/* Убираем оригинальные синие тайлы цифр */
.htn-item {
  display: inline-flex !important;
  align-items: center !important;
  background: transparent !important;
  border: none !important;
  padding: 0 !important;
  width: auto !important;
  height: auto !important;
  position: static !important;
}

/* Убираем разделительную линию между цифрами */
.htn-line {
  display: none !important;
}

/* Двоеточия между цифрами времени */
.htn-item:not(:last-child)::after {
  content: ':' !important;
  color: rgba(255,255,255,0.7) !important;
  font-size: 20px !important;
  font-weight: 700 !important;
  font-family: var(--font-display, 'Onest', sans-serif) !important;
  line-height: 1 !important;
  margin: 0 !important;
  display: inline-block !important;
}

.header.mini .htn-item:not(:last-child)::after {
  font-size: 16px !important;
}

.htn-text {
  color: var(--white) !important;
  font-weight: 700 !important;
  font-size: 20px !important;
  font-family: var(--font-display, 'Onest', sans-serif) !important;
  line-height: 1 !important;
  background: transparent !important;
  position: static !important;
  width: auto !important;
  height: auto !important;
}

.ht-location {
  color: rgba(255,255,255,0.5) !important;
  font-size: 10px !important;
  text-transform: uppercase !important;
  letter-spacing: 0.05em !important;
  display: block !important;
}

/* "время сервера" — скрываем, МСК достаточно */
#server_time {
  display: none !important;
}

/* Дата, перемещённая в шапку (клон через JS) */
#nmck-header-date {
  display: block !important;
  position: static !important;
  width: auto !important;
  text-align: right !important;
}

#nmck-header-date .h-date_text {
  color: rgba(255,255,255,0.65) !important;
  font-size: 11px !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  height: auto !important;
  line-height: 1.4 !important;
  padding-left: 0 !important;
  white-space: nowrap !important;
}

/* ============================================================
   МИНИ-ШАПКА (при скролле)
   ============================================================ */

/* Мини-шапка: по умолчанию скрыта (платформа не убирает её полностью) */
.header.mini {
  display: none !important;
}

/* Мини-шапка активна — управляется нашим JS (класс nmck-mini-active) */
.header.mini.nmck-mini-active {
  display: block !important;
  position: fixed !important;
  top: 0 !important;
  left: 0 !important;
  right: 0 !important;
  z-index: 999 !important;
  height: 56px !important;
  min-height: 56px !important;
  overflow: visible !important;
  background: rgba(12,30,69,0.97) !important;
  backdrop-filter: blur(8px) !important;
  -webkit-backdrop-filter: blur(8px) !important;
  box-shadow: 0 2px 16px rgba(12,30,69,0.25) !important;
}

/* h-light внутри мини-шапки */
.header.mini .h-light {
  height: 56px !important;
  min-height: 56px !important;
  padding: 0 32px !important;
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  min-width: auto !important;
  max-width: none !important;
  width: 100% !important;
  margin: 0 !important;
}

/* Скрываем лого, контакты и секционный блок в мини-шапке */
.header.mini .h-logo {
  display: none !important;
}

.header.mini .h-contacts {
  display: none !important;
}

/* На страницах секций (person/SearchLots и др.) платформа вставляет .h-section
   (340×80px) в h-light мини-шапки. Он не нужен — скрываем, чтобы не сдвигал
   лого, навигацию и время. */
.header.mini .h-section {
  display: none !important;
}

/* Логотип в мини-шапке вместо текста "ЭТП СПЕЦТЕНДЕР" */
.header.mini .h-operator {
  display: block !important;
  float: none !important;
  margin-top: 0 !important;
  width: 160px !important;
  height: 40px !important;
  flex-shrink: 0 !important;
  order: 1 !important;
  background-image: none !important;
  background-size: contain !important;
  background-repeat: no-repeat !important;
  background-position: left center !important;
  font-size: 0 !important;
  color: transparent !important;
  overflow: hidden !important;
}

/* Навигация в мини-шапке — по центру */
#nmck-mini-nav {
  position: static !important;
  left: auto !important;
  right: auto !important;
  order: 2 !important;
  flex: 1 !important;
  display: flex !important;
  justify-content: center !important;
  align-items: center !important;
  height: 56px !important;
  overflow: visible !important;
}

#nmck-mini-nav ul.hm-list {
  display: flex !important;
  list-style: none !important;
  margin: 0 !important;
  padding: 0 !important;
  align-items: center !important;
  height: 56px !important;
  gap: 0 !important;
  float: none !important;
}

#nmck-mini-nav .hm-item {
  display: flex !important;
  align-items: center !important;
  height: 56px !important;
  float: none !important;
  position: relative !important;
}

#nmck-mini-nav .hm-link {
  color: rgba(255,255,255,0.75) !important;
  font-size: 12px !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  font-weight: 500 !important;
  padding: 0 14px !important;
  height: 56px !important;
  display: flex !important;
  align-items: center !important;
  white-space: nowrap !important;
  text-decoration: none !important;
  border-bottom: 2px solid transparent !important;
  transition: color 0.2s, border-color 0.2s !important;
}

#nmck-mini-nav .hm-link:hover {
  color: #fff !important;
  border-bottom-color: var(--blue) !important;
}

/* Подменю в мини-шапке — показываем при ховере */
#nmck-mini-nav .hm-sub {
  display: none;
  position: absolute !important;
  top: 56px !important;
  left: 0 !important;
  background: var(--navy) !important;
  border-bottom: 3px solid var(--blue) !important;
  border-radius: 0 0 var(--r) var(--r) !important;
  box-shadow: 0 6px 20px rgba(12,30,69,0.4) !important;
  min-width: 200px !important;
  width: max-content !important;
  overflow: visible !important;
  z-index: 1000 !important;
}

#nmck-mini-nav .hm-item:hover .hm-sub {
  display: block !important;
}

#nmck-mini-nav .hm-sub li {
  max-height: none !important;
  float: none !important;
}

#nmck-mini-nav .hm-sub a {
  color: rgba(255,255,255,0.8) !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 13px !important;
  padding: 9px 20px !important;
  float: none !important;
  width: auto !important;
  display: block !important;
  white-space: nowrap !important;
  border-bottom: 1px solid rgba(255,255,255,0.06) !important;
}

#nmck-mini-nav .hm-sub a:hover {
  background: rgba(255,255,255,0.08) !important;
  color: #fff !important;
}

/* Время в мини-шапке — компактно справа */
.header.mini .h-time {
  margin-top: 0 !important;
  margin-left: 0 !important;
  order: 3 !important;
  flex-shrink: 0 !important;
  color: rgba(255,255,255,0.7) !important;
  display: flex !important;
  align-items: center !important;
  gap: 4px !important;
}

.header.mini .htn-text {
  font-size: 16px !important;
}

.header.mini .ht-location {
  font-size: 10px !important;
}

/* Дату не показываем в мини-шапке — там тесно */
.header.mini #nmck-header-date {
  display: none !important;
}

/* Страховка: скрываем .h-dark_left если вдруг попал в клон даты */
#nmck-header-date .h-dark_left {
  display: none !important;
}

/* --- Секционный блок (breadcrumbs между шапкой и навигацией) — скрываем --- */
header.header-section,
.header-section {
  display: none !important;
}

/* ============================================================
   НАВИГАЦИЯ
   ============================================================ */

/* Полоса навигации — контейнер, тот же цвет что шапка */
.h-dark {
  background: var(--navy) !important;
  border-top: none !important;
  box-shadow: 0 2px 12px rgba(12,30,69,0.18) !important;
  position: relative !important;
  z-index: 99 !important;
}

/* Синяя полоса-подложка слева от навигации — скрываем */
.h-dark_left {
  background: var(--navy) !important;
}

/* Дата в шапке */
.h-date {
  color: rgba(255,255,255,0.65) !important;
  font-size: 12px !important;
  font-family: 'Geologica', Arial, sans-serif !important;
}

/* Полоса навигации */
nav,
.nav,
.navigation,
div[class*="nav-wrap"],
div[class*="menu"] {
  background: var(--navy) !important;
}

/* Убираем отступ под старую дату — nav теперь полной ширины */
nav.h-menu {
  left: 0 !important;
  right: 0 !important;
  width: 100% !important;
}

/* Список пунктов меню — по центру */
nav ul,
.nav ul,
.navigation ul {
  display: flex !important;
  list-style: none !important;
  margin: 0 auto !important;
  padding: 0 !important;
  max-width: 1920px !important;
  width: 100% !important;
  justify-content: center !important;
}

nav ul li,
.nav ul li,
.navigation ul li {
  position: relative !important;
}

nav ul li a,
.nav ul li a,
.navigation ul li a {
  display: flex !important;
  align-items: center !important;
  height: 40px !important;
  padding: 0 18px !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  color: rgba(255,255,255,0.85) !important;
  white-space: nowrap !important;
  transition: background var(--tr), color var(--tr) !important;
  border-bottom: 2px solid transparent !important;
  box-sizing: border-box !important;
}

nav ul li a:hover,
.nav ul li a:hover,
.navigation ul li a:hover,
nav ul li.active > a,
.nav ul li.active > a {
  color: var(--white) !important;
  background: rgba(255,255,255,0.07) !important;
  border-bottom-color: var(--blue) !important;
}

/* Выпадающие подменю */
nav ul li ul,
.nav ul li ul,
.navigation ul li ul {
  position: absolute !important;
  top: 100% !important;
  left: 0 !important;
  min-width: 220px !important;
  background: var(--white) !important;
  border-radius: 0 0 var(--r-md) var(--r-md) !important;
  box-shadow: var(--shadow-md) !important;
  z-index: 500 !important;
  padding: 6px 0 !important;
  display: none !important;
  flex-direction: column !important;
}

nav ul li:hover > ul,
.nav ul li:hover > ul,
.navigation ul li:hover > ul {
  display: flex !important;
}

nav ul li ul li a,
.nav ul li ul li a,
.navigation ul li ul li a {
  color: var(--gray-700) !important;
  font-size: 13px !important;
  font-weight: 400 !important;
  padding: 10px 18px !important;
  border-bottom: none !important;
  background: transparent !important;
}

nav ul li ul li a:hover,
.nav ul li ul li a:hover,
.navigation ul li ul li a:hover {
  background: var(--gray-50) !important;
  color: var(--blue) !important;
}

/* ============================================================
   ОСНОВНОЙ КОНТЕЙНЕР
   ============================================================ */

.wrapper {
  max-width: 1400px !important;
  width: 100% !important;
  margin: 0 auto !important;
  padding: 0 24px !important;
}

.content_indent {
  padding: 32px 0 !important;
  overflow: visible !important;
}

/* ============================================================
   КНОПКИ
   ============================================================ */

.btn_blue,
input[type="submit"],
button[type="submit"] {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  background: var(--blue) !important;
  color: var(--white) !important;
  border: none !important;
  border-radius: var(--r) !important;
  padding: 10px 20px !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 14px !important;
  font-weight: 500 !important;
  cursor: pointer !important;
  transition: background var(--tr), box-shadow var(--tr) !important;
  text-decoration: none !important;
  white-space: nowrap !important;
  box-shadow: var(--shadow-xs) !important;
}

.btn_blue:hover,
input[type="submit"]:hover,
button[type="submit"]:hover {
  background: var(--blue-hover) !important;
  box-shadow: var(--shadow-sm) !important;
  color: var(--white) !important;
}

/* ============================================================
   ФУТЕР
   ============================================================ */

.footer_wrap {
  background: var(--navy) !important;
  color: rgba(255,255,255,0.6) !important;
  padding: 28px 0 !important;
  margin-top: 40px !important;
  border-top: none !important;
}

.footer_wrap .wrapper {
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  flex-wrap: wrap !important;
  gap: 12px !important;
}

.f-copy {
  font-size: 12px !important;
  color: rgba(255,255,255,0.5) !important;
  text-align: left !important;
}

.footer_wrap a {
  color: rgba(255,255,255,0.65) !important;
  font-size: 12px !important;
  transition: color var(--tr) !important;
}

.footer_wrap a:hover {
  color: var(--white) !important;
}

/* ============================================================
   СПИННЕР — оверлей при загрузке страницы
   ============================================================ */

#nmck-loading-overlay {
  position: fixed !important;
  inset: 0 !important;
  background: var(--gray-50) !important;
  z-index: 99999 !important;
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  justify-content: center !important;
  gap: 18px !important;
  transition: opacity 0.3s ease !important;
}

#nmck-loading-overlay.fade-out {
  opacity: 0 !important;
  pointer-events: none !important;
}

.nmck-spinner {
  width: 40px !important;
  height: 40px !important;
  border: 3px solid var(--sky-mid) !important;
  border-top-color: var(--blue) !important;
  border-radius: 50% !important;
  animation: nmck-spin 0.75s linear infinite !important;
}

.nmck-spinner-label {
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 13px !important;
  color: var(--gray-500) !important;
}

@keyframes nmck-spin {
  to { transform: rotate(360deg); }
}

/* ============================================================
   БЛОК 2: ЗАГОЛОВОК СТРАНИЦЫ
   ============================================================ */

.content_indent h1 {
  font-family: var(--font-display, 'Onest', sans-serif) !important;
  font-size: 22px !important;
  font-weight: 700 !important;
  color: var(--navy) !important;
  line-height: 1.3 !important;
  margin-bottom: 20px !important;
}

/* ============================================================
   БЛОК 2: ЛЕВАЯ ПАНЕЛЬ — ФОРМА ВХОДА
   ============================================================ */

.left_side {
  width: 100% !important;
  padding: 0 !important;
}

.login_form {
  background: var(--white) !important;
  border: 1px solid var(--gray-200) !important;
  border-radius: var(--r-md) !important;
  box-shadow: var(--shadow-xs) !important;
  overflow: hidden !important;
  margin-bottom: 16px !important;
}

.login_form .title {
  background: var(--navy) !important;
  color: var(--white) !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 14px !important;
  font-weight: 600 !important;
  padding: 12px 16px !important;
  margin: 0 !important;
  text-align: center !important;
}

/* Табы: Для участника / Для заказчика */
.spf-tabs {
  display: flex !important;
  border-bottom: 1px solid var(--gray-200) !important;
  background: var(--gray-50) !important;
}

.spf-tab {
  flex: 1 !important;
  text-align: center !important;
  padding: 9px 8px !important;
  font-size: 12px !important;
  font-weight: 500 !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  color: var(--gray-500) !important;
  text-decoration: none !important;
  transition: color var(--tr), background var(--tr) !important;
  border-bottom: 2px solid transparent !important;
  cursor: pointer !important;
}

.spf-tab:hover {
  color: var(--navy) !important;
  background: var(--gray-100) !important;
}

.spf-tab_cur,
.spf-tab.spf-tab_cur {
  color: var(--blue) !important;
  border-bottom-color: var(--blue) !important;
  background: var(--white) !important;
  font-weight: 600 !important;
}

/* Содержимое формы */
.spf-content {
  padding: 16px !important;
}

.spf-line {
  margin-bottom: 12px !important;
}

.spf-label {
  font-size: 12px !important;
  font-weight: 500 !important;
  color: var(--gray-500) !important;
  margin-bottom: 4px !important;
  font-family: 'Geologica', Arial, sans-serif !important;
}

/* Поля ввода логина и пароля */
.spf-login-input input,
.spf-input input[type="text"],
.spf-input input[type="password"] {
  width: 100% !important;
  border: 1.5px solid var(--gray-200) !important;
  border-radius: var(--r) !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 13px !important;
  color: var(--navy) !important;
  background: var(--gray-50) !important;
  outline: none !important;
  transition: border-color var(--tr), background var(--tr), box-shadow var(--tr) !important;
  box-sizing: border-box !important;
}

.spf-input {
  padding: 0 !important;
  height: auto !important;
  margin-right: 0 !important;
  overflow: visible !important;
}

.spf-input input[type="text"],
.spf-input input[type="password"] {
  height: auto !important;
  padding: 9px 12px !important;
}

.spf-login-input input:focus,
.spf-input input[type="text"]:focus,
.spf-input input[type="password"]:focus {
  border-color: var(--blue) !important;
  background: var(--white) !important;
  box-shadow: 0 0 0 3px rgba(43,127,192,0.09) !important;
}

/* Кнопки формы входа */
.login-button-panel {
  display: flex !important;
  gap: 8px !important;
  margin-top: 4px !important;
}

.rec-go {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  padding: 9px 14px !important;
  border-radius: var(--r) !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  cursor: pointer !important;
  transition: background var(--tr), box-shadow var(--tr) !important;
  white-space: nowrap !important;
  border: none !important;
}

/* Кнопка "Войти по ЭП" — ghost-стиль */
.rec-go.left {
  background: var(--gray-50) !important;
  color: var(--gray-700) !important;
  border: 1px solid var(--gray-200) !important;
}

.rec-go.left:hover {
  background: var(--gray-100) !important;
  border-color: var(--gray-300) !important;
}

/* Кнопка "Войти" — primary */
.rec-go.ecpf-submit {
  background: var(--blue) !important;
  color: var(--white) !important;
  box-shadow: var(--shadow-xs) !important;
}

.rec-go.ecpf-submit:hover {
  background: var(--blue-hover) !important;
  box-shadow: var(--shadow-sm) !important;
}

/* Скрытый input внутри rec-go */
.rec-go .invisible_input,
.rec-go input.invisible_input {
  position: absolute !important;
  width: 100% !important;
  height: 100% !important;
  opacity: 0 !important;
  cursor: pointer !important;
  top: 0 !important;
  left: 0 !important;
}

.rec-go {
  position: relative !important;
  overflow: hidden !important;
}

/* Нижние ссылки: регистрация и восстановление */
.spf-bottom {
  padding: 0 16px 16px !important;
}

.spf-reg a,
.spf-pass_recovery a {
  color: var(--blue) !important;
  font-size: 12px !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  text-decoration: none !important;
}

.spf-reg a:hover,
.spf-pass_recovery a:hover {
  color: var(--blue-hover) !important;
  text-decoration: underline !important;
}

/* ============================================================
   БЛОК 2: ПОИСКОВАЯ СТРОКА
   ============================================================ */

.queryPanel {
  margin-bottom: 16px !important;
  background: transparent !important;
}

/* Обёртка поисковой строки */
.queryFieldLayout {
  position: relative !important;
  padding-bottom: 0 !important;
}

/* Текстовое поле поиска */
.gwt-TextBox.textField,
.queryPanel input[type="text"].gwt-TextBox {
  width: 100% !important;
  height: 44px !important;
  border: 1.5px solid var(--gray-200) !important;
  border-radius: var(--r) !important;
  padding: 0 48px 0 14px !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 14px !important;
  color: var(--navy) !important;
  background: var(--white) !important;
  outline: none !important;
  transition: border-color var(--tr), box-shadow var(--tr) !important;
  box-sizing: border-box !important;
}

.gwt-TextBox.textField:focus,
.queryPanel input[type="text"].gwt-TextBox:focus {
  border-color: var(--blue) !important;
  box-shadow: 0 0 0 3px rgba(43,127,192,0.1) !important;
}

/* Кнопка поиска (лупа) */
.queryFieldButton {
  position: absolute !important;
  right: 4px !important;
  top: 50% !important;
  transform: translateY(-50%) !important;
  width: 36px !important;
  height: 36px !important;
  border-radius: var(--r) !important;
  background: var(--blue) !important;
  border: none !important;
  cursor: pointer !important;
  color: var(--white) !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  transition: background var(--tr) !important;
}

.queryFieldButton::before {
  content: '' !important;
  display: block !important;
  width: 18px !important;
  height: 18px !important;
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='white' stroke-width='2.5'%3E%3Ccircle cx='10.5' cy='10.5' r='7'/%3E%3Cline x1='15.5' y1='15.5' x2='21' y2='21'/%3E%3C/svg%3E") no-repeat center / contain !important;
}

.queryFieldButton:hover {
  background: var(--blue-hover) !important;
}

/* ============================================================
   БЛОК 2: ВКЛАДКИ ФИЛЬТРА (все / прием заявки / проведение / завершенные)
   ============================================================ */

.filterContainerWrapper {
  margin-bottom: 16px !important;
}

.filterContainer {
  display: flex !important;
  border: 1px solid var(--gray-200) !important;
  border-radius: var(--r) !important;
  overflow: hidden !important;
  background: var(--white) !important;
  width: fit-content !important;
}

.filterItem {
  padding: 8px 16px !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  color: var(--gray-500) !important;
  cursor: pointer !important;
  transition: background var(--tr), color var(--tr) !important;
  border-right: 1px solid var(--gray-200) !important;
  white-space: nowrap !important;
  background: var(--white) !important;
}

.filterItem:last-child,
.filterItem.last {
  border-right: none !important;
}

.filterItem.selected {
  background: var(--navy) !important;
  color: var(--white) !important;
  font-weight: 600 !important;
}

.filterItem:hover:not(.selected) {
  background: var(--gray-100) !important;
  color: var(--navy) !important;
}

/* Сортировка — рядом с табами */
.filterItem.sort {
  border: 1px solid var(--gray-200) !important;
  border-radius: var(--r) !important;
  margin-left: 8px !important;
}

.filterItem.sort.selected {
  background: var(--sky) !important;
  color: var(--blue) !important;
  border-color: var(--blue) !important;
}

/* ============================================================
   БЛОК 2: ТАБЛИЦА РЕЗУЛЬТАТОВ
   ============================================================ */

.cellTableWidget {
  width: 100% !important;
  table-layout: fixed !important;
  border-collapse: separate !important;
  border-spacing: 0 !important;
  border: 1px solid var(--gray-200) !important;
  border-radius: var(--r-md) !important;
  overflow: hidden !important;
  background: var(--white) !important;
  box-shadow: var(--shadow-xs) !important;
  font-family: 'Geologica', Arial, sans-serif !important;
}

/* Ширины колонок cellTableWidget (CSS — надёжнее JS при GWT-перерендере) */
.cellTableWidget col:nth-child(1) { width: 4%; }   /* Тип */
.cellTableWidget col:nth-child(2) { width: 12%; }  /* Способ */
.cellTableWidget col:nth-child(3) { width: 40%; }  /* Наименование */
.cellTableWidget col:nth-child(4) { width: 12%; }  /* Организатор */
.cellTableWidget col:nth-child(5) { width: 12%; }  /* Нач. цена */
.cellTableWidget col:nth-child(6) { width: 8%; }   /* Дата публикации */
.cellTableWidget col:nth-child(7) { width: 12%; }  /* Дата завершения */

/* Заголовки таблицы */
.cellTableHeader {
  background: var(--navy) !important;
  color: var(--white) !important;
  font-size: 14px !important;
  font-weight: 600 !important;
  padding: 12px 14px !important;
  text-align: left !important;
  border-bottom: none !important;
  white-space: nowrap !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  font-family: 'Geologica', Arial, sans-serif !important;
}

.cellTableFirstColumnHeader {
  border-radius: var(--r-md) 0 0 0 !important;
}

.cellTableLastColumnHeader {
  border-radius: 0 var(--r-md) 0 0 !important;
}

/* Ячейки данных (GWT использует cellTableCell + cellTableEvenRowCell/OddRowCell) */
.cellTableCell {
  padding: 10px 14px !important;
  font-size: 13px !important;
  color: var(--gray-700) !important;
  border: none !important;
  border-bottom: 1px solid var(--gray-100) !important;
  vertical-align: middle !important;
  font-family: 'Geologica', Arial, sans-serif !important;
}

/* Чётные/нечётные строки */
.cellTableEvenRowCell {
  background: var(--gray-50) !important;
}

.cellTableOddRowCell {
  background: var(--white) !important;
}

/* Последняя строка — без нижнего бордера */
.cellTableWidget tbody tr:last-child td {
  border-bottom: none !important;
}

/* Hover на строках */
.cellTableWidget tbody tr:hover td {
  background: var(--sky) !important;
}

/* Ссылки в таблице */
.cellTableWidget a {
  color: var(--blue) !important;
  font-weight: 500 !important;
  text-decoration: none !important;
}

.cellTableWidget a:hover {
  color: var(--blue-hover) !important;
  text-decoration: underline !important;
}

/* ============================================================
   БЛОК 2: ПРАВАЯ ПАНЕЛЬ ФИЛЬТРОВ
   ============================================================ */

#nmck-filter-panel {
  background: var(--white) !important;
  border: 1px solid var(--gray-200) !important;
  border-radius: var(--r-md) !important;
  box-shadow: var(--shadow-xs) !important;
  overflow: hidden !important;
}

#nmck-filter-panel .nmck-lk-title {
  background: var(--navy) !important;
  color: var(--white) !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 14px !important;
  font-weight: 600 !important;
  padding: 12px 16px !important;
  text-align: center !important;
  letter-spacing: 0.01em !important;
}

.filterPanel {
  width: 100% !important;
  margin: 0 !important;
  background: var(--white) !important;
  border: none !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  overflow: visible !important;
  font-family: 'Geologica', Arial, sans-serif !important;
}

.blockPanel {
  border-bottom: 1px solid var(--gray-100) !important;
}

.blockPanel:last-child {
  border-bottom: none !important;
}

.blockPanelTitle {
  display: flex !important;
  align-items: flex-start !important;
  padding: 10px 14px !important;
  cursor: pointer !important;
  transition: background var(--tr) !important;
  gap: 6px !important;
}

.blockPanelTitle:hover {
  background: var(--gray-50) !important;
}

.blockPanelTitleLabel {
  font-size: 12.5px !important;
  font-weight: 600 !important;
  color: var(--gray-700) !important;
  flex: 1 !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  word-wrap: break-word !important;
  overflow-wrap: break-word !important;
  min-width: 0 !important;
}

/* Кнопки expand/collapse и clear */
.blockPanelExpandButton {
  width: 20px !important;
  height: 20px !important;
  border: none !important;
  background: transparent !important;
  color: var(--gray-300) !important;
  cursor: pointer !important;
  padding: 0 !important;
  transition: color var(--tr) !important;
  font-size: 12px !important;
}

.blockPanelExpandButton:hover {
  color: var(--blue) !important;
}

.blockPanelClearButton {
  width: 20px !important;
  height: 20px !important;
  border: none !important;
  background: transparent !important;
  color: var(--gray-300) !important;
  cursor: pointer !important;
  padding: 0 !important;
  transition: color var(--tr) !important;
  font-size: 14px !important;
}

.blockPanelClearButton:hover {
  color: var(--accent) !important;
}

.blockPanelContent {
  padding: 6px 14px 14px !important;
  background: var(--white) !important;
}

.blockPanel {
  background: var(--white) !important;
}

/* Чекбоксы в фильтрах */
.blockPanelContent input[type="checkbox"] {
  accent-color: var(--blue) !important;
  width: 16px !important;
  height: 16px !important;
  cursor: pointer !important;
  vertical-align: middle !important;
}

.blockPanelContent label {
  font-size: 12.5px !important;
  font-weight: 600 !important;
  color: var(--gray-700) !important;
  cursor: pointer !important;
  vertical-align: middle !important;
  margin-left: 4px !important;
  font-family: 'Geologica', Arial, sans-serif !important;
}

/* Инпуты в фильтрах — form-control из UI kit */
.blockPanelContent input[type="text"],
.blockPanelContent .gwt-TextBox,
.filterPanel input[type="text"],
.filterPanel .gwt-TextBox {
  width: 100% !important;
  padding: 10px 13px !important;
  border: 1.5px solid var(--gray-200) !important;
  border-radius: var(--r) !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 13.5px !important;
  color: var(--navy) !important;
  background: var(--gray-50) !important;
  outline: none !important;
  transition: border-color var(--tr), background var(--tr), box-shadow var(--tr) !important;
  box-sizing: border-box !important;
}

.blockPanelContent input[type="text"]:focus,
.blockPanelContent .gwt-TextBox:focus,
.filterPanel input[type="text"]:focus,
.filterPanel .gwt-TextBox:focus {
  border-color: var(--blue) !important;
  background: var(--white) !important;
  box-shadow: 0 0 0 3px rgba(43,127,192,0.09) !important;
}

/* Select/dropdown в фильтрах — form-control из UI kit */
.filterPanel select,
.filterPanel .gwt-ListBox {
  width: 100% !important;
  padding: 10px 13px !important;
  border: 1.5px solid var(--gray-200) !important;
  border-radius: var(--r) !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 13.5px !important;
  color: var(--navy) !important;
  background: var(--gray-50) !important;
  cursor: pointer !important;
  outline: none !important;
  transition: border-color var(--tr) !important;
  box-sizing: border-box !important;
}

.filterPanel select:focus,
.filterPanel .gwt-ListBox:focus {
  border-color: var(--blue) !important;
  background: var(--white) !important;
  box-shadow: 0 0 0 3px rgba(43,127,192,0.09) !important;
}

/* Общий стиль .gwt-Button — btn-blue из UI kit */
a.gwt-Button,
a.gwt-Button:link,
a.gwt-Button:visited,
.gwt-Button {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  gap: 7px !important;
  padding: 7px 14px !important;
  border-radius: var(--r) !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 12.5px !important;
  font-weight: 600 !important;
  cursor: pointer !important;
  transition: background var(--tr), box-shadow var(--tr) !important;
  background: var(--blue) !important;
  color: var(--white) !important;
  border: none !important;
  text-decoration: none !important;
  white-space: nowrap !important;
}
a.gwt-Button:hover,
.gwt-Button:hover {
  background: var(--blue-hover) !important;
  color: var(--white) !important;
  box-shadow: var(--shadow-sm) !important;
}

/* Кнопки в фильтрах — btn стиль из UI kit (переопределяет общий) */
.filterPanel .gwt-Button,
.filterPanel button.gwt-Button {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  padding: 10px 20px !important;
  border-radius: var(--r) !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 14px !important;
  font-weight: 600 !important;
  cursor: pointer !important;
  transition: background var(--tr), box-shadow var(--tr) !important;
  background: var(--blue) !important;
  color: var(--white) !important;
  border: none !important;
}

.filterPanel .gwt-Button:hover {
  background: var(--blue-hover) !important;
  box-shadow: var(--shadow-sm) !important;
}

/* Кнопка "Сбросить" — ghost стиль */
.filterPanel .gwt-Button.grey,
.gwt-Button.grey {
  background: var(--white) !important;
  color: var(--gray-700) !important;
  border: 1.5px solid var(--gray-200) !important;
}

.filterPanel .gwt-Button.grey:hover,
.gwt-Button.grey:hover {
  background: var(--gray-100) !important;
  border-color: var(--gray-300) !important;
  color: var(--navy) !important;
}

/* ============================================================
   БЛОК 2: ПАГИНАЦИЯ
   ============================================================ */

.pages {
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  gap: 6px !important;
  margin-top: 20px !important;
  padding: 8px 0 16px !important;
  font-family: 'Geologica', Arial, sans-serif !important;
}

/* Кнопки навигации: div.gwt-HTML прямо в .pages */
.pages > div.gwt-HTML {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  min-width: 36px !important;
  height: 36px !important;
  padding: 0 10px !important;
  border: 1.5px solid var(--gray-200) !important;
  border-radius: var(--r) !important;
  font-size: 13.5px !important;
  font-weight: 500 !important;
  color: var(--gray-700) !important;
  background: var(--white) !important;
  cursor: pointer !important;
  transition: background var(--tr), border-color var(--tr), color var(--tr) !important;
  user-select: none !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  box-shadow: none !important;
}

.pages > div.gwt-HTML:hover {
  background: var(--sky) !important;
  border-color: var(--blue) !important;
  color: var(--blue) !important;
}

/* Обёртка активной страницы: div без gwt-HTML */
.pages > div:not(.gwt-HTML) {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  min-width: 36px !important;
  height: 36px !important;
  padding: 0 !important;
  background: var(--blue) !important;
  border: 1.5px solid var(--blue) !important;
  border-radius: var(--r) !important;
  cursor: default !important;
  box-shadow: var(--shadow-xs) !important;
  user-select: none !important;
}

/* Внутренний gwt-HTML внутри активной страницы — прозрачный */
.pages > div:not(.gwt-HTML) > .gwt-HTML {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  width: 100% !important;
  height: 100% !important;
  padding: 0 10px !important;
  background: transparent !important;
  border: none !important;
  border-radius: 0 !important;
  color: var(--white) !important;
  font-size: 13.5px !important;
  font-weight: 600 !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  box-shadow: none !important;
  min-width: unset !important;
}

/* Убираем жирность от тега <b> — GWT оборачивает текст */
.pages b {
  font-weight: inherit !important;
}

/* ============================================================
   БЛОК 2: ОБЩИЕ ФОРМЫ И ЭЛЕМЕНТЫ GWT
   ============================================================ */

/* GWT label */
.gwt-Label {
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 13px !important;
}

/* Сообщение об ошибке */
.errorMessage {
  color: var(--accent) !important;
  font-size: 12px !important;
  font-family: 'Geologica', Arial, sans-serif !important;
}

/* Результаты: label */
.content_indent > div {
  font-family: 'Geologica', Arial, sans-serif !important;
}

/* ============================================================
   БЛОК 3: ВНУТРЕННИЕ СТРАНИЦЫ (карточка лота, процедуры и т.д.)
   ============================================================ */

/* --- Заголовок страницы (h2) --- */
h2.inlineCardTitle {
  font-family: 'Onest', 'Geologica', sans-serif !important;
  font-size: 22px !important;
  font-weight: 600 !important;
  color: var(--navy) !important;
  line-height: 1.35 !important;
  margin: 0 0 6px 0 !important;
  letter-spacing: -0.3px !important;
}

/* Описание под заголовком */
h2.inlineCardTitle + div,
.clearfix + div:not(.clearfix):not([class*="table"]):not([class*="margin"]) {
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 14px !important;
  color: var(--gray-500) !important;
  line-height: 1.6 !important;
  margin-bottom: 20px !important;
}

/* --- Заголовки секций (h3) --- */
h3.inlineCardTitle,
h3.block-margin-top {
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 17px !important;
  font-weight: 600 !important;
  color: var(--navy) !important;
  margin: 28px 0 14px !important;
  padding-bottom: 10px !important;
  border-bottom: 2px solid var(--blue) !important;
  letter-spacing: 0.01em !important;
  line-height: 1.3 !important;
}
h3.inlineCardTitle:first-of-type {
  margin-top: 0 !important;
}
.clearfix.nomargin {
  margin: 28px 0 14px !important;
}
.clearfix.nomargin h3.inlineCardTitle {
  margin-top: 0 !important;
}

/* --- Таблицы данных (key-value) table.info_table --- */
table.styled.info_table {
  width: 100% !important;
  max-width: 100% !important;
  box-sizing: border-box !important;
  border-collapse: separate !important;
  border-spacing: 0 !important;
  border: 1px solid var(--gray-200) !important;
  border-radius: var(--r-md) !important;
  overflow: hidden !important;
  margin-top: 0 !important;
  margin-bottom: 8px !important;
  font-family: 'Geologica', Arial, sans-serif !important;
}
table.styled.info_table tr {
  transition: background var(--tr) !important;
}
table.styled.info_table tr:hover {
  background: var(--sky) !important;
}
table.styled.info_table td {
  padding: 11px 16px !important;
  font-size: 13.5px !important;
  line-height: 1.55 !important;
  border-bottom: 1px solid var(--gray-100) !important;
  border-top: none !important;
  border-left: none !important;
  border-right: none !important;
  vertical-align: top !important;
  color: var(--gray-700) !important;
  background: transparent !important;
}
table.styled.info_table tr:last-child td {
  border-bottom: none !important;
}
/* Левая колонка — название поля */
table.styled.info_table td:first-child {
  font-weight: 500 !important;
  color: var(--navy) !important;
  background: var(--gray-50) !important;
  width: 38% !important;
  white-space: normal !important;
  border-right: 1px solid var(--gray-100) !important;
}
table.styled.info_table tr:hover td:first-child {
  background: var(--sky) !important;
}

/* --- Таблицы с заголовками (list_table) --- */
table.styled.list_table {
  width: 100% !important;
  max-width: 100% !important;
  box-sizing: border-box !important;
  border-collapse: separate !important;
  border-spacing: 0 !important;
  border: 1px solid var(--gray-200) !important;
  border-radius: var(--r-md) !important;
  overflow: hidden !important;
  margin-top: 0 !important;
  margin-bottom: 8px !important;
  font-family: 'Geologica', Arial, sans-serif !important;
}
table.styled.list_table th {
  background: var(--navy) !important;
  color: var(--white) !important;
  font-size: 12px !important;
  font-weight: 600 !important;
  text-transform: uppercase !important;
  letter-spacing: 0.5px !important;
  padding: 10px 16px !important;
  border: none !important;
  text-align: left !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  word-wrap: break-word !important;
  overflow-wrap: break-word !important;
}
table.styled.list_table td {
  padding: 11px 16px !important;
  font-size: 13.5px !important;
  line-height: 1.55 !important;
  border-bottom: 1px solid var(--gray-100) !important;
  border-top: none !important;
  border-left: none !important;
  border-right: none !important;
  vertical-align: top !important;
  color: var(--gray-700) !important;
  background: var(--white) !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  word-wrap: break-word !important;
  overflow-wrap: break-word !important;
}
table.styled.list_table tr:last-child td {
  border-bottom: none !important;
}
table.styled.list_table tbody tr:hover td {
  background: var(--sky) !important;
}

/* --- Вложенная info_table внутри list_table (режим торгов) --- */
table.styled.list_table table.styled.info_table {
  border: 1px solid var(--gray-200) !important;
  border-radius: var(--r) !important;
  margin-top: 10px !important;
}
table.styled.list_table table.styled.info_table td:first-child {
  width: 45% !important;
}

/* --- Статус-бейджи (rangeStage) --- */
.rangeStage {
  display: inline-flex !important;
  align-items: center !important;
  padding: 3px 12px !important;
  border-radius: 4px !important;
  font-size: 11px !important;
  font-weight: 700 !important;
  letter-spacing: 0.3px !important;
  text-transform: uppercase !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  vertical-align: middle !important;
  margin-left: 10px !important;
  line-height: 1.6 !important;
}
/* Завершённый этап */
.rangeStage.finished,
.rangeStage.inactive {
  background: var(--gray-100) !important;
  color: var(--gray-500) !important;
}
/* Активный этап */
.rangeStage.active:not(.inactive) {
  background: #EDFAF3 !important;
  color: #15653A !important;
}
/* Запланированный */
.rangeStage.planned {
  background: #EBF2FD !important;
  color: #1A4E9E !important;
}

/* --- .left — убираем float --- */
.left {
  float: none !important;
}

/* --- Acronym-подсказки — заметная плашка после значения --- */
.nmck-acronym-badge {
  display: inline-block !important;
  background: #FFF3E0 !important;
  color: #BF360C !important;
  border: 1px solid #FFB74D !important;
  border-radius: 4px !important;
  padding: 3px 10px !important;
  font-size: 12px !important;
  font-weight: 600 !important;
  margin-left: 8px !important;
  line-height: 1.4 !important;
  vertical-align: middle !important;
}

/* --- Ссылки внутри контента --- */
.content_indent a {
  color: var(--blue) !important;
  text-decoration: none !important;
  transition: color var(--tr) !important;
}
.content_indent a:hover {
  color: var(--blue-hover) !important;
  text-decoration: underline !important;
}

/* --- Списки внутри таблиц --- */
table.styled td ul {
  margin: 6px 0 6px 18px !important;
  padding: 0 !important;
}
table.styled td ul li {
  font-size: 13px !important;
  line-height: 1.6 !important;
  color: var(--gray-700) !important;
  margin-bottom: 2px !important;
}

/* --- Подпись под заголовком лота (clearfix) --- */
.clearfix {
  font-family: 'Geologica', Arial, sans-serif !important;
}

/* --- Название этапа (Основной) --- */
table.styled.list_table td > div:first-child:not([class]) {
  font-weight: 600 !important;
  font-size: 15px !important;
  color: var(--navy) !important;
}

/* --- Ячейка контента (content_table) --- */
#content_table .ct-cell {
  overflow: hidden !important;
  box-sizing: border-box !important;
}

/* Зазор между левой колонкой и контентом */
#content_table .ct-cell.ct-left {
  padding-right: 16px !important;
}

/* --- content_indent — общие стили --- */
.content_indent {
  font-family: 'Geologica', Arial, sans-serif !important;
  overflow: hidden !important;
  max-width: 100% !important;
  box-sizing: border-box !important;
}

/* --- Карточка контента на внутренних страницах --- */
/* LotCard/LotList: .inlineCardTitle внутри .clearfix | OfferCard: h2 — прямой потомок */
/* Admin pages: h1 (но не на главной странице поиска, где есть searchPanel) */
/* Participant pages: span#certificate (display:none) + h1/h3 | form:first-child > h1 */
.content_indent:has(> :is(.clearfix:first-child, span:first-child + .clearfix) .inlineCardTitle),
.content_indent:has(> h2:first-child),
.content_indent:not(:has(table.searchPanel)):has(> h1:first-child),
.content_indent:not(:has(table.searchPanel)):has(> span:first-child + h1),
.content_indent:not(:has(table.searchPanel)):has(> span:first-child + h3),
.content_indent:has(> form:first-child > h1) {
  background: var(--white) !important;
  border: 1px solid var(--gray-200) !important;
  border-radius: var(--r-md) !important;
  box-shadow: var(--shadow-xs) !important;
  padding: 0 20px 20px !important;
}

/* --- Тёмная плашка заголовка: вариант с .inlineCardTitle внутри .clearfix --- */
.content_indent:has(> :is(.clearfix:first-child, span:first-child + .clearfix) .inlineCardTitle) > :is(.clearfix:first-child, span:first-child + .clearfix) {
  background: var(--navy) !important;
  margin: 0 -20px !important;
  padding: 8px 16px !important;
  max-width: none !important;
  display: flex !important;
  align-items: center !important;
  flex-wrap: wrap !important;
  gap: 4px 16px !important;
}
.content_indent:has(> :is(.clearfix:first-child, span:first-child + .clearfix) .inlineCardTitle) > :is(.clearfix:first-child, span:first-child + .clearfix) .inlineCardTitle,
.content_indent:has(> :is(.clearfix:first-child, span:first-child + .clearfix) .inlineCardTitle) > :is(.clearfix:first-child, span:first-child + .clearfix) .inlineCardTitle * {
  color: var(--white) !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 14px !important;
  font-weight: 600 !important;
}
.content_indent:has(> :is(.clearfix:first-child, span:first-child + .clearfix) .inlineCardTitle) > :is(.clearfix:first-child, span:first-child + .clearfix) .inlineCardTitle {
  flex-shrink: 0 !important;
  white-space: nowrap !important;
  margin: 0 !important;
  padding: 0 !important;
}
/* Кнопки-фильтры внутри плашки (LotList, AdminAccreditation) */
.content_indent:has(> :is(.clearfix:first-child, span:first-child + .clearfix) .inlineCardTitle) > :is(.clearfix:first-child, span:first-child + .clearfix) .inlineButton {
  margin: 0 !important;
  margin-left: auto !important;
  float: none !important;
}
.content_indent:has(> :is(.clearfix:first-child, span:first-child + .clearfix) .inlineCardTitle) > :is(.clearfix:first-child, span:first-child + .clearfix) .filterContainerWrapper {
  margin: 0 !important;
}
.content_indent:has(> :is(.clearfix:first-child, span:first-child + .clearfix) .inlineCardTitle) > :is(.clearfix:first-child, span:first-child + .clearfix) .filterContainer {
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
}
.content_indent:has(> :is(.clearfix:first-child, span:first-child + .clearfix) .inlineCardTitle) > :is(.clearfix:first-child, span:first-child + .clearfix) .filterContainer td {
  border: none !important;
  background: transparent !important;
}
.content_indent:has(> :is(.clearfix:first-child, span:first-child + .clearfix) .inlineCardTitle) > :is(.clearfix:first-child, span:first-child + .clearfix) .filterContainer td a,
.content_indent:has(> :is(.clearfix:first-child, span:first-child + .clearfix) .inlineCardTitle) > :is(.clearfix:first-child, span:first-child + .clearfix) .filterContainer td span {
  color: rgba(255,255,255,0.7) !important;
  border: 1px solid rgba(255,255,255,0.25) !important;
  background: transparent !important;
  font-size: 12px !important;
  padding: 4px 12px !important;
  border-radius: 4px !important;
}
.content_indent:has(> :is(.clearfix:first-child, span:first-child + .clearfix) .inlineCardTitle) > :is(.clearfix:first-child, span:first-child + .clearfix) .filterContainer td.selected a,
.content_indent:has(> :is(.clearfix:first-child, span:first-child + .clearfix) .inlineCardTitle) > :is(.clearfix:first-child, span:first-child + .clearfix) .filterContainer td.selected span,
.content_indent:has(> :is(.clearfix:first-child, span:first-child + .clearfix) .inlineCardTitle) > :is(.clearfix:first-child, span:first-child + .clearfix) .filterContainer td a:hover {
  color: var(--white) !important;
  background: rgba(255,255,255,0.15) !important;
  border-color: rgba(255,255,255,0.4) !important;
}
/* Подзаголовок — рядом с заголовком (перемещается через JS) */
.content_indent :is(.clearfix:first-child, span:first-child + .clearfix) .etpp-small.nmck-subtitle-inline {
  color: var(--white) !important;
  font-size: 13px !important;
  font-weight: 600 !important;
  letter-spacing: 0.5px !important;
  text-transform: uppercase !important;
  margin: 0 !important;
  padding: 4px 12px !important;
  white-space: nowrap !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  min-width: 0 !important;
  flex: 1 1 0 !important;
  max-width: none !important;
  background: rgba(255,255,255,0.1) !important;
  border-radius: 4px !important;
  cursor: default !important;
  line-height: normal !important;
}
/* Первый элемент под плашкой */
.content_indent:has(> :is(.clearfix:first-child, span:first-child + .clearfix) .inlineCardTitle) > :is(.clearfix:first-child, span:first-child + .clearfix) + * {
  /* содержимое не должно упираться в плашку */
  margin-top: 28px !important;
}

/* --- Тёмная плашка заголовка: вариант OfferCard (h2 — прямой потомок) --- */
.content_indent > h2:first-child {
  background: var(--navy) !important;
  color: var(--white) !important;
  margin: 0 -20px !important;
  padding: 12px 16px !important;
  max-width: none !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 16px !important;
  font-weight: 600 !important;
  line-height: 1.35 !important;
}
.content_indent > h2:first-child * {
  color: var(--white) !important;
}

/* --- Тёмная плашка заголовка: вариант Admin (h1 — прямой потомок, НЕ searchPanel) --- */
.content_indent:not(:has(table.searchPanel)) > h1:first-child {
  background: var(--navy) !important;
  color: var(--white) !important;
  margin: 0 -20px !important;
  padding: 12px 16px !important;
  max-width: none !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 14px !important;
  font-weight: 600 !important;
  line-height: normal !important;
}
.content_indent:not(:has(table.searchPanel)) > h1:first-child + * {
  /* содержимое не должно упираться в плашку */
  margin-top: 28px !important;
}
/* Первый элемент под плашкой */
.content_indent > h2:first-child + * {
  /* содержимое не должно упираться в плашку */
  margin-top: 28px !important;
}

/* --- Тёмная плашка заголовка: вариант Participant (span#certificate + h1/h3) --- */
/* GWT вставляет скрытый <span> с хэшем сертификата перед <h1>, ломая :first-child */
.content_indent:not(:has(table.searchPanel)) > span:first-child + h1,
.content_indent:not(:has(table.searchPanel)) > span:first-child + h3 {
  background: var(--navy) !important;
  color: var(--white) !important;
  margin: 0 -20px !important;
  padding: 12px 16px !important;
  max-width: none !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 14px !important;
  font-weight: 600 !important;
  line-height: normal !important;
}
.content_indent:not(:has(table.searchPanel)) > span:first-child + h1 + *,
.content_indent:not(:has(table.searchPanel)) > span:first-child + h3 + * {
  /* содержимое не должно упираться в плашку */
  margin-top: 28px !important;
}

/* --- Тёмная плашка заголовка: вариант ParticipantAccreditation (form > h1) --- */
.content_indent > form:first-child > h1 {
  background: var(--navy) !important;
  color: var(--white) !important;
  margin: 0 -20px !important;
  padding: 12px 16px !important;
  max-width: none !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 14px !important;
  font-weight: 600 !important;
  line-height: normal !important;
}
.content_indent > form:first-child > h1 + * {
  /* содержимое не должно упираться в плашку */
  margin-top: 28px !important;
}

/* --- Общий вид тёмной плашки заголовка -------------------------------
   Плашка бывает четырёх видов разметки (Admin, Participant, форма,
   OfferCard), и до этого они расходились: у h1-вариантов из
   legacy-redesign.css прилетал `display: inline-block` и оранжевая
   полоска ::after — плашка сжималась до ширины текста и выглядела ярлыком,
   приклеенным к углу карточки. Приводим все четыре к одному виду:
   тёмная полоса во всю ширину карточки, заголовок по центру, без полоски. */
.content_indent:not(:has(table.searchPanel)) > h1:first-child,
.content_indent:not(:has(table.searchPanel)) > span:first-child + h1,
.content_indent:not(:has(table.searchPanel)) > span:first-child + h3,
.content_indent > form:first-child > h1,
.content_indent > h2:first-child {
  display: block !important;
  width: auto !important;
  text-align: center !important;
  /* верхние углы совпадают с карточкой, нижние прямые — полоса упирается
     в содержимое */
  border-radius: var(--r-md) var(--r-md) 0 0 !important;
}
.content_indent:not(:has(table.searchPanel)) > h1:first-child::after,
.content_indent:not(:has(table.searchPanel)) > span:first-child + h1::after,
.content_indent:not(:has(table.searchPanel)) > span:first-child + h3::after,
.content_indent > form:first-child > h1::after,
.content_indent > h2:first-child::after {
  content: none !important;
}

/* Обёртки таблиц (div без класса) — не расширяются.
   Нашу собственную обёртку прокрутки (.sp-table-scroll) правило обходит:
   с `overflow: hidden` высокая или широкая таблица не прокручивалась, а
   молча обрезалась — текст в ячейке обрывался на середине строки. */
.content_indent > div:not(.sp-table-scroll) {
  max-width: 100% !important;
  overflow: hidden !important;
}
.content_indent > div.sp-table-scroll {
  max-width: 100% !important;
  overflow: auto !important;
  max-height: none !important;
  height: auto !important;
}

/* ============================================================
   ЛИЧНЫЙ КАБИНЕТ — левая колонка в searchPanel
   ============================================================ */

/* Ограничение ширины всей таблицы */
table.searchPanel {
  max-width: 1920px !important;
  width: 100% !important;
  table-layout: fixed !important;
  box-sizing: border-box !important;
}

#nmck-filter-td {
  width: 240px !important;
  min-width: 240px !important;
  vertical-align: top !important;
  padding: 0 0 0 16px !important;
}

#nmck-content-td {
  overflow: hidden !important;
  vertical-align: top !important;
}

/* TD-колонка Личного кабинета внутри searchPanel */
#nmck-lk-td {
  width: 230px !important;
  min-width: 230px !important;
  vertical-align: top !important;
  padding: 0 16px 0 0 !important;
}

/* Карточка Личный кабинет */
#nmck-lk-panel {
  width: 100% !important;
}

/* Заголовок карточки */
#nmck-lk-panel .nmck-lk-title {
  background: var(--navy) !important;
  color: var(--white) !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 14px !important;
  font-weight: 600 !important;
  padding: 12px 16px !important;
  border-radius: var(--r-md) var(--r-md) 0 0 !important;
  text-align: center !important;
  letter-spacing: 0.01em !important;
}

/* login_form внутри ЛК — убираем верхний radius (уже есть заголовок) */
#nmck-lk-panel .login_form {
  border-top-left-radius: 0 !important;
  border-top-right-radius: 0 !important;
  margin-bottom: 0 !important;
  border-top: none !important;
}

/* Скрываем дублирующий заголовок "Вход на площадку" в ЛК */
#nmck-lk-panel .login_form .title {
  display: none !important;
}

/* ============================================================
   БУРГЕР-МЕНЮ (скрыто на десктопе, видно ≤1024px)
   ============================================================ */

#nmck-burger,
#nmck-burger-mini {
  display: none;
  order: 4;
  flex-shrink: 0;
  width: 40px;
  height: 40px;
  background: transparent;
  border: 1.5px solid rgba(255,255,255,0.3);
  border-radius: var(--r);
  cursor: pointer;
  padding: 9px 8px;
  flex-direction: column;
  justify-content: space-between;
  align-items: stretch;
  margin-left: 12px;
  transition: border-color var(--tr);
}

#nmck-burger:hover,
#nmck-burger-mini:hover {
  border-color: rgba(255,255,255,0.6);
}

#nmck-burger span,
#nmck-burger-mini span {
  display: block;
  height: 2px;
  background: var(--white);
  border-radius: 1px;
  transition: transform 0.3s ease, opacity 0.2s ease;
  transform-origin: center;
}

#nmck-burger.nmck-burger-active span:nth-child(1),
#nmck-burger-mini.nmck-burger-active span:nth-child(1) {
  transform: translateY(10px) rotate(45deg);
}

#nmck-burger.nmck-burger-active span:nth-child(2),
#nmck-burger-mini.nmck-burger-active span:nth-child(2) {
  opacity: 0;
}

#nmck-burger.nmck-burger-active span:nth-child(3),
#nmck-burger-mini.nmck-burger-active span:nth-child(3) {
  transform: translateY(-10px) rotate(-45deg);
}

/* Мобильное меню — полноэкранный оверлей */
#nmck-mobile-menu {
  display: none;
  position: fixed;
  inset: 0;
  z-index: 10000;
  background: rgba(12,30,69,0.97);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  overflow-y: auto;
  flex-direction: column;
  align-items: center;
  padding: 80px 24px 40px;
}

#nmck-mobile-menu.nmck-menu-open {
  display: flex;
}

html.nmck-menu-active {
  overflow: hidden !important;
}

#nmck-mobile-menu-close {
  position: absolute;
  top: 20px;
  right: 20px;
  width: 40px;
  height: 40px;
  background: transparent;
  border: 1.5px solid rgba(255,255,255,0.3);
  border-radius: var(--r);
  color: var(--white);
  font-size: 24px;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: border-color var(--tr), background var(--tr);
  line-height: 1;
}

#nmck-mobile-menu-close:hover {
  border-color: rgba(255,255,255,0.6);
  background: rgba(255,255,255,0.08);
}

#nmck-mobile-nav {
  width: 100%;
  max-width: 400px;
}

#nmck-mobile-nav ul.hm-list {
  display: flex !important;
  flex-direction: column !important;
  list-style: none !important;
  margin: 0 !important;
  padding: 0 !important;
  gap: 0 !important;
  float: none !important;
  max-width: none !important;
  width: 100% !important;
  justify-content: flex-start !important;
}

#nmck-mobile-nav .hm-item {
  border-bottom: 1px solid rgba(255,255,255,0.08) !important;
  float: none !important;
  height: auto !important;
  display: block !important;
}

#nmck-mobile-nav .hm-link {
  display: flex !important;
  align-items: center !important;
  padding: 16px 8px !important;
  font-size: 16px !important;
  font-weight: 500 !important;
  color: rgba(255,255,255,0.85) !important;
  height: auto !important;
  border-bottom: none !important;
  transition: color var(--tr), background var(--tr) !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  white-space: normal !important;
}

#nmck-mobile-nav .hm-link:hover {
  color: var(--white) !important;
  background: rgba(255,255,255,0.06) !important;
}

/* Подменю в мобильном меню — всегда развёрнуты */
#nmck-mobile-nav .hm-sub {
  display: flex !important;
  flex-direction: column !important;
  position: static !important;
  background: transparent !important;
  box-shadow: none !important;
  border: none !important;
  border-radius: 0 !important;
  padding: 0 0 8px 20px !important;
  min-width: 0 !important;
  width: auto !important;
}

#nmck-mobile-nav .hm-sub li {
  max-height: none !important;
  float: none !important;
  border-bottom: none !important;
}

#nmck-mobile-nav .hm-sub a {
  font-size: 14px !important;
  color: rgba(255,255,255,0.65) !important;
  padding: 10px 8px !important;
  display: block !important;
  white-space: normal !important;
  border-bottom: none !important;
  float: none !important;
  width: auto !important;
}

#nmck-mobile-nav .hm-sub a:hover {
  color: var(--white) !important;
  background: rgba(255,255,255,0.06) !important;
}

/* ============================================================
   СКРОЛЛ-ОБЁРТКА ТАБЛИЦЫ (мобильная горизонтальная прокрутка)
   ============================================================ */

#nmck-scroll-hint {
  display: none;
  text-align: center;
  font-size: 12px;
  color: var(--gray-500);
  padding: 6px 0;
  font-family: 'Geologica', Arial, sans-serif;
  transition: opacity 0.3s;
}

/* ============================================================
   МОБИЛЬНЫЕ АККОРДЕОНЫ (скрыты на десктопе, видны ≤1024px)
   ============================================================ */

#nmck-mobile-panels {
  display: none;
}

.nmck-accordion {
  margin-bottom: 12px;
  border: 1px solid var(--gray-200);
  border-radius: var(--r-md);
  overflow: hidden;
  background: var(--white);
  box-shadow: var(--shadow-xs);
}

.nmck-accordion-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  padding: 14px 16px;
  background: var(--navy);
  color: var(--white);
  border: none;
  cursor: pointer;
  font-family: 'Geologica', Arial, sans-serif;
  font-size: 14px;
  font-weight: 600;
  text-align: left;
  transition: background var(--tr);
}

.nmck-accordion-header:hover {
  background: var(--navy-mid);
}

.nmck-accordion-arrow {
  width: 20px;
  height: 20px;
  position: relative;
  flex-shrink: 0;
}

.nmck-accordion-arrow::before {
  content: '';
  position: absolute;
  top: 50%;
  left: 50%;
  width: 8px;
  height: 8px;
  border-right: 2px solid var(--white);
  border-bottom: 2px solid var(--white);
  transform: translate(-50%, -70%) rotate(45deg);
  transition: transform 0.3s ease;
}

.nmck-accordion-open .nmck-accordion-arrow::before {
  transform: translate(-50%, -30%) rotate(-135deg);
}

.nmck-accordion-body {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.35s ease;
}

/* Внутри аккордеона — убираем двойные заголовки и бордеры */
.nmck-accordion-body #nmck-lk-panel > .nmck-lk-title,
.nmck-accordion-body #nmck-filter-panel > .nmck-lk-title {
  display: none !important;
}

.nmck-accordion-body #nmck-lk-panel .login_form {
  border-radius: 0 !important;
  border: none !important;
  box-shadow: none !important;
  margin-bottom: 0 !important;
}

.nmck-accordion-body #nmck-filter-panel {
  border: none !important;
  border-radius: 0 !important;
  box-shadow: none !important;
}

/* ============================================================
   АДАПТИВНОСТЬ
   ============================================================ */

@media (max-width: 1280px) {
  .h-logo {
    width: 180px !important;
    height: 52px !important;
  }
  nav ul li a {
    padding: 14px 12px !important;
  }
  .h-contacts td {
    padding: 0 8px !important;
  }
  .content_indent h1 {
    font-size: 20px !important;
  }
  .cellTableHeader {
    font-size: 11px !important;
    padding: 10px 10px !important;
  }
  .cellTableWidget tbody tr td {
    padding: 8px 10px !important;
    font-size: 12px !important;
  }
}

@media (max-width: 1024px) {
  /* Шапка — компактнее + закреплена */
  .h-light {
    position: fixed !important;
    top: 0 !important;
    left: 0 !important;
    right: 0 !important;
    z-index: 9990 !important;
    background: var(--navy) !important;
  }
  .h-logo {
    width: 280px !important;
    height: 72px !important;
  }
  .h-contacts {
    display: none !important;
  }
  .hc-phone {
    font-size: 14px !important;
  }
  .h-time .htn-text {
    font-size: 18px !important;
  }

  /* Мини-шапка — скрываем на мобильных (основная закреплена) */
  .header.mini,
  .header.mini.nmck-mini-active,
  .header.mini.slideDown.nmck-mini-active {
    display: none !important;
  }

  /* Бургер — показываем (только основной, мини скрыта) */
  #nmck-burger {
    display: flex !important;
  }
  #nmck-burger-mini {
    display: none !important;
  }

  /* Навигация — скрываем (заменена бургером) */
  .h-dark {
    display: none !important;
  }
  #nmck-mini-nav {
    display: none !important;
  }

  /* Внутренние таблицы — block + скролл при переполнении */
  table.styled.info_table,
  table.styled.list_table {
    display: block !important;
    overflow-x: auto !important;
    -webkit-overflow-scrolling: touch !important;
    max-width: 100% !important;
    width: 100% !important;
    scrollbar-width: thin !important;
    scrollbar-color: var(--gray-300) var(--gray-100) !important;
  }
  table.styled::-webkit-scrollbar {
    height: 6px !important;
  }
  table.styled::-webkit-scrollbar-track {
    background: var(--gray-100) !important;
    border-radius: 3px !important;
  }
  table.styled::-webkit-scrollbar-thumb {
    background: var(--gray-300) !important;
    border-radius: 3px !important;
  }

  /* Мобильные аккордеоны — показываем */
  #nmck-mobile-panels {
    display: block !important;
  }

  /* Прячем боковые колонки таблицы */
  #nmck-lk-td,
  #nmck-filter-td {
    display: none !important;
  }

  /* searchPanel — убираем фиксированный layout */
  table.searchPanel {
    table-layout: auto !important;
  }
  colgroup#nmck-cols col {
    width: auto !important;
  }
  #nmck-content-td {
    width: 100% !important;
  }

  /* Ограничиваем ширину — убираем горизонтальный скролл GWT */
  html {
    overflow-x: hidden !important;
  }
  /* overflow-x: hidden делает body скролл-контейнером (overflow-y становится auto):
     на iOS жест, начатый на контенте, прокручивает body, а не страницу — если внутри body
     есть хоть какое-то переполнение (прод 14.09.2026: подвал сжат inline-стилем из HTML
     контактов до 70px, содержимое вылезало на 140px), палец тянет эти 140px и отпружинивает,
     а жест с шапки прокручивает страницу. overflow-x: clip режет по горизонтали без
     скролл-контейнера; hidden остаётся запасным для старых WebKit (до iOS 16). */
  body {
    min-width: 0 !important;
    max-width: 100vw !important;
    overflow-x: hidden !important;
    overflow-x: clip !important;
  }
  /* #wrapper: overflow visible + фикс высота под fixed-шапку */
  #wrapper {
    min-width: 0 !important;
    max-width: 100vw !important;
    overflow: visible !important;
    height: 64px !important;
  }
  .h-light {
    min-width: 0 !important;
    padding: 0 20px !important;
  }
  .header,
  .header-section {
    min-height: 56px !important;
    min-width: 0 !important;
    max-width: 100% !important;
  }
  .wrapper,
  div.wrapper {
    max-width: 100% !important;
    padding: 0 16px !important;
    min-width: 0 !important;
  }
  /* Превращаем layout-таблицу в block — иначе table расширяется по контенту */
  #content_table,
  #content_table > tbody,
  #content_table > tbody > tr,
  #content_table > tbody > tr > td {
    display: block !important;
    max-width: 100% !important;
    width: 100% !important;
    min-width: 0 !important;
  }
  .content_indent {
    padding: 20px 0 !important;
    overflow-x: hidden !important;
    max-width: 100% !important;
  }
  /* На мобильных — убираем зазор от левой колонки (ячейки стэкаются) */
  #content_table .ct-cell.ct-left {
    padding-right: 0 !important;
  }
  .content_indent:has(> :is(.clearfix:first-child, span:first-child + .clearfix) .inlineCardTitle),
  .content_indent:has(> h2:first-child),
  .content_indent:not(:has(table.searchPanel)):has(> h1:first-child),
  .content_indent:not(:has(table.searchPanel)):has(> span:first-child + h1),
  .content_indent:not(:has(table.searchPanel)):has(> span:first-child + h3),
  .content_indent:has(> form:first-child > h1) {
    padding: 0 16px 16px !important;
    border-radius: var(--r) !important;
  }
  /* searchPanel и потомки — block для ограничения ширины */
  table.searchPanel,
  table.searchPanel > tbody,
  table.searchPanel > tbody > tr,
  table.searchPanel > tbody > tr > td {
    display: block !important;
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
  }
  /* Промежуточные таблицы внутри searchPanel (НЕ cellTableWidget) — тоже block */
  table.searchPanel table:not(.cellTableWidget),
  table.searchPanel table:not(.cellTableWidget) > tbody,
  table.searchPanel table:not(.cellTableWidget) > tbody > tr,
  table.searchPanel table:not(.cellTableWidget) > tbody > tr > td {
    display: block !important;
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
  }

  /* Скролл-обёртка таблицы */
  #nmck-table-scroll {
    overflow-x: auto !important;
    -webkit-overflow-scrolling: touch !important;
    max-width: calc(100vw - 32px) !important;
    border-radius: var(--r-md) !important;
  }
  #nmck-table-scroll .cellTableWidget {
    min-width: 820px !important;
    overflow: visible !important;
  }

  /* Подсказка прокрутки */
  #nmck-scroll-hint {
    display: block !important;
  }
  #nmck-mobile-panels {
    max-width: 100% !important;
    box-sizing: border-box !important;
  }

  /* Сворачивание левого блока на мобильных */
  .login_form .title {
    cursor: pointer !important;
    position: relative !important;
    padding-right: 40px !important;
    user-select: none !important;
    -webkit-user-select: none !important;
  }
  .login_form .title::after {
    content: '' !important;
    position: absolute !important;
    right: 16px !important;
    top: 50% !important;
    width: 8px !important;
    height: 8px !important;
    border-right: 2px solid rgba(255,255,255,0.6) !important;
    border-bottom: 2px solid rgba(255,255,255,0.6) !important;
    transform: translateY(-70%) rotate(45deg) !important;
    transition: transform 0.3s ease !important;
  }
  .login_form.nmck-lk-collapsed .title::after {
    transform: translateY(-30%) rotate(-135deg) !important;
  }
  .nmck-lk-body {
    overflow: hidden !important;
    transition: max-height 0.35s ease !important;
  }
  .login_form.nmck-lk-collapsed .nmck-lk-body {
    max-height: 0 !important;
  }

  /* Иконка на аккордеонах — убедимся что видна */
  .nmck-accordion-header {
    cursor: pointer !important;
    position: relative !important;
    padding-right: 40px !important;
  }
}

/* ============================================================
   ИСПРАВЛЕНИЯ ПО ЗАМЕЧАНИЯМ ТЕСТИРОВАНИЯ
   ============================================================ */

/* --- #6: «Упорядочить по:» был белым на белом — делаем navy --- */
.queryPanelSortCaption,
.gwt-Label.queryPanelSortCaption {
  color: var(--navy, #0C1E45) !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 13px !important;
  font-weight: 600 !important;
}

/* Соседние ссылки в той же группе — primary blue */
.queryPanelSort .gwt-Anchor,
.queryPanelSort a,
.queryPanelSortCaption + a,
.queryPanelSortCaption ~ .gwt-Anchor {
  color: var(--blue, #2B7FC0) !important;
  text-decoration: none !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 13px !important;
}

.queryPanelSort .gwt-Anchor:hover,
.queryPanelSort a:hover {
  color: var(--blue-hover, #1E6BAD) !important;
  text-decoration: underline !important;
}

/* --- Универсальные правки spacing для разделов с .section_header --- */
/* Раньше заголовок и кнопка располагались близко — добавляем отступы */
.section_header + .button,
.section_header + .ecpf-submit,
.section_header + a.button,
.section_header + .button-group,
.section_header + .h2-line {
  margin-top: 16px !important;
}

/* Группы кнопок выравниваем по высоте через wrapper flexbox */
.button-group,
.list-buttons {
  display: flex !important;
  flex-wrap: wrap !important;
  align-items: stretch !important;
  gap: 8px !important;
}

.button-group > .button,
.list-buttons > .button {
  align-self: stretch !important;
  display: inline-flex !important;
  align-items: center !important;
}

/* --- #2 #4: Заголовок h3.inlineCardTitle + кнопка рядом — отступ 16px + центровка --- */
/* Заголовок раздела ("Краткие сведения", "Репозиторий документов №...") вплотную
   к рядом стоящей кнопке (.gwt-Button или .button) — добавляем отступ
   + кнопка визуально "приподнята" к центру строки заголовка */
h3.inlineCardTitle {
  display: inline-block !important;
  vertical-align: middle !important;
  margin-right: 16px !important;
  margin-top: 0 !important;
  margin-bottom: 0 !important;
  line-height: 1.4 !important;
}

h3.inlineCardTitle + .gwt-Button,
h3.inlineCardTitle + .gwt-HTML.gwt-Button,
h3.inlineCardTitle + .button,
h3.inlineCardTitle + a,
h3.inlineCardTitle ~ .gwt-Button,
h3.inlineCardTitle ~ .button {
  margin-left: 16px !important;
  vertical-align: middle !important;
  /* Приподнять кнопку чтобы она была в центре строки заголовка */
  align-self: center !important;
}

/* Контейнер заголовок+кнопка — flex с gap, кнопка по вертикали по центру */
.clearfix.nomargin.line-margin-bottom,
.cardTitleRow,
.headerWithButton {
  display: flex !important;
  flex-wrap: wrap !important;
  align-items: center !important;  /* вертикальное центрирование */
  gap: 16px !important;
  margin-bottom: 16px !important;
}

/* Дополнительная нормализация — убрать margin/padding у h3 в контейнере */
.clearfix.nomargin.line-margin-bottom h3.inlineCardTitle,
.cardTitleRow h3.inlineCardTitle {
  margin: 0 !important;
  padding: 0 !important;
}

/* --- #4: Кнопки действий ("Подтвердить...", "Отменить...") — выравнивание по высоте --- */
/* Универсально: кнопки в группах — одинаковая высота, flex-выравнивание */
.list-buttons,
.button-group,
.repositoryActions,
[class*="Actions"]:not(form):not([class*="DialogActions"]):not([class*="FormActions"]),
.bottom-buttons,
.action-buttons,
.documentActions {
  display: flex !important;
  flex-wrap: wrap !important;
  align-items: stretch !important;
  gap: 8px !important;
  margin-top: 12px !important;
}

.list-buttons > .button,
.button-group > .button,
.repositoryActions > .button,
[class*="Actions"] > .button,
.bottom-buttons > .button,
.documentActions > .button,
.documentActions > a.button {
  min-height: 40px !important;
  height: 40px !important;
  box-sizing: border-box !important;
  display: inline-flex !important;
  align-items: center !important;
  white-space: nowrap !important;
}

.list-buttons > .button > .button_inner,
.button-group > .button > .button_inner,
.repositoryActions > .button > .button_inner,
[class*="Actions"] > .button > .button_inner,
.bottom-buttons > .button > .button_inner,
.documentActions > .button > .button_inner,
.documentActions > a.button > .button_inner {
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  height: 100% !important;
  min-height: 40px !important;
  padding: 0 18px !important;
  box-sizing: border-box !important;
  white-space: nowrap !important;
}

/* Конкретно в Репозитории — кнопки рядом с конкретным документом */
[id*="ParticipantDocuments"] .button,
[class*="participantDocument"] .button,
.documentRow .button {
  min-height: 36px !important;
  height: 36px !important;
}

[id*="ParticipantDocuments"] .button .button_inner,
[class*="participantDocument"] .button .button_inner,
.documentRow .button .button_inner {
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  height: 100% !important;
  padding: 0 14px !important;
  white-space: nowrap !important;
}

/* --- #5: Платежные документы — отступы между элементами --- */
.cashflowDocumentTable .cellTableEvenRow,
.cashflowDocumentTable .cellTableOddRow,
.cashflowDocumentList tr {
  padding: 8px 0 !important;
}

/* --- #7: Торговый зал/Поиск процедур на мобильном — заголовки НАД колонками --- */
/* НЕ ломаем табличный layout: оставляем display:table, скролл идёт через родителя */
@media (max-width: 768px) {
  /* Таблица — остаётся table с фиксированной мин-шириной для всех колонок */
  .cellTableWidget,
  table[id*="LotList"],
  table[id*="lotList"] {
    display: table !important;
    table-layout: fixed !important;
    min-width: 900px !important;  /* достаточно для всех 7 колонок */
    width: 900px !important;
    white-space: normal !important;
  }

  /* Заголовки в одну строку через table-header-group */
  .cellTableWidget thead,
  table[id*="LotList"] thead,
  table[id*="lotList"] thead {
    display: table-header-group !important;
    visibility: visible !important;
  }

  .cellTableWidget thead tr,
  table[id*="LotList"] thead tr,
  table[id*="lotList"] thead tr {
    display: table-row !important;
  }

  .cellTableWidget thead th,
  table[id*="LotList"] thead th,
  table[id*="lotList"] thead th {
    display: table-cell !important;
    white-space: normal !important;
    word-wrap: break-word !important;
    vertical-align: top !important;
    padding: 8px 6px !important;
    font-size: 11px !important;
  }

  .cellTableWidget tbody tr,
  table[id*="LotList"] tbody tr {
    display: table-row !important;
  }

  .cellTableWidget tbody td,
  table[id*="LotList"] tbody td {
    display: table-cell !important;
    word-wrap: break-word !important;
    padding: 8px 6px !important;
    font-size: 11px !important;
  }

  /* РОДИТЕЛЬ таблицы — горизонтальный скролл */
  .cellTableWidget {
    /* нужен wrapper, но пока выйти из положения через родителя */
  }

  /* Прямой родитель cellTableWidget — overflow-x: auto */
  .cellTableWidget,
  table[id*="LotList"] {
    /* убрали display:block; теперь скролл должен быть на родителе */
  }
}

/* Wrapper для скролла — задаём родителю table.cellTableWidget */
@media (max-width: 768px) {
  /* Универсальный родитель .cellTableWidget — обеспечиваем горизонтальный скролл */
  div:has(> table.cellTableWidget) {
    overflow-x: auto !important;
    -webkit-overflow-scrolling: touch !important;
    max-width: 100% !important;
    width: 100% !important;
  }
}

@media (max-width: 768px) {
  .h-light {
    flex-wrap: wrap !important;
    padding: 8px 20px !important;
    min-height: 56px !important;
  }
  .h-contacts {
    display: none !important;
  }
  .h-logo {
    width: 240px !important;
    height: 64px !important;
  }
  .h-time {
    font-size: 10px !important;
  }
  .htn-text {
    font-size: 16px !important;
  }
  .h-dark {
    overflow-x: auto !important;
  }
  nav ul {
    flex-wrap: nowrap !important;
    overflow-x: auto !important;
    padding-left: 12px !important;
  }
  nav ul li a {
    padding: 12px 8px !important;
    font-size: 11px !important;
  }
  .wrapper {
    padding: 0 12px !important;
  }
  .content_indent h1 {
    font-size: 18px !important;
  }
  .filterContainer {
    flex-wrap: wrap !important;
  }
  .filterItem {
    font-size: 12px !important;
    padding: 6px 12px !important;
  }
  .cellTableWidget {
    display: block !important;
    overflow-x: auto !important;
  }
}

/* На мобильных скрываем дату/время в шапке —
   чтобы бургер не перескакивал и оставался на своём месте */
@media (max-width: 640px) {
  .h-time {
    display: none !important;
  }
}

/* ==========================================================
   Диалог «Выбрать сертификат» — стилизация + поиск ЭЦП
   ========================================================== */

/* Модальный оверлей */
#certificatesList {
  position: fixed !important;
  inset: 0 !important;
  z-index: 99997 !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  background: rgba(12, 30, 69, 0.55) !important;
}

#certificatesList[style*="display: none"],
#certificatesList[style*="display:none"] {
  display: none !important;
}

/* Обёртка диалога */
#certificatesList > div {
  background: #fff !important;
  border-radius: var(--r-lg, 14px) !important;
  box-shadow: var(--shadow-md, 0 6px 24px rgba(12,30,69,0.18)) !important;
  overflow: hidden !important;
  max-width: 520px !important;
  width: 94vw !important;
  margin: 0 auto !important;
}

/* Заголовок диалога (и в #certificatesList, и в клоне #win.ui-draggable) */
#certificatesList .win_title,
#win .win_title,
.ui-draggable > div > .win_title {
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 16px !important;
  font-weight: 600 !important;
  color: #fff !important;
  background: var(--navy, #0C1E45) !important;
  padding: 18px 20px !important;
  border-bottom: none !important;
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  border-radius: var(--r-lg, 14px) var(--r-lg, 14px) 0 0 !important;
}

#certificatesList .win_title .exit,
#win .win_title .exit,
.ui-draggable .win_title .exit {
  position: static !important;
  top: auto !important;
  right: auto !important;
  left: auto !important;
  bottom: auto !important;
  transform: none !important;
  margin: 0 !important;
  width: 28px !important;
  height: 28px !important;
  border-radius: 50% !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  background-position: center !important;
  background-size: 12px 12px !important;
  background-repeat: no-repeat !important;
  transition: background-color var(--tr, 0.22s ease) !important;
  filter: brightness(0) invert(1) !important;
  flex-shrink: 0 !important;
}

#certificatesList .win_title .exit:hover,
#win .win_title .exit:hover,
.ui-draggable .win_title .exit:hover {
  background-color: rgba(255, 255, 255, 0.15) !important;
}

/* Контент диалога */
#certificatesList .win_content,
#win .win_content,
.ui-draggable .win_content {
  padding: 16px 20px 20px !important;
  overflow: hidden !important;
}

/* Сам контейнер #win (jQuery UI диалог) */
#win.ui-draggable {
  /* Диалог выбора сертификата открывается ПОВЕРХ модалки «Личный кабинет»:
     вход по ЭП запускается именно из неё. У легаси-окна z-index был auto, а у
     затемнения .lk-overlay — 1, и затемнение оказывалось выше: окно было
     видно, но клики в него перехватывал оверлей. Со стороны это выглядело
     как «кнопка Войти по ЭП не работает» (на портале нашей модалки нет —
     там всё работало). Проверено в Chromium-Gost с плагином КриптоПро. */
  z-index: 99998 !important;
  /* Легаси ставит окно position:absolute с inline top/left в координатах
     ДОКУМЕНТА. Если страница прокручена (а поиск процедур длинный), окно
     оказывается выше видимой области — пользователь жмёт «Войти по ЭП»,
     диалог создаётся, ошибок нет, но на экране «ничего не происходит».
     Модальному окну прокрутка не нужна: держим его по центру экрана. */
  position: fixed !important;
  top: 50% !important;
  left: 50% !important;
  right: auto !important;
  bottom: auto !important;
  transform: translate(-50%, -50%) !important;
  margin: 0 !important;
  background: #fff !important;
  border-radius: var(--r-lg, 14px) !important;
  box-shadow: var(--shadow-md, 0 6px 24px rgba(12,30,69,0.18)) !important;
  overflow: hidden !important;
  padding: 0 !important;
  /* Ширина фиксирована и совпадает с порталом: там карточка входа 500px,
     а список и поиск внутри — 426px. Здесь 466 = 426 + горизонтальные
     отступы .win_content (20+20). Без фиксации окно жило по содержимому:
     пустое было 289px, после прихода 58 сертификатов раздувалось до 715px и
     прыгало прямо под курсором. */
  width: 466px !important;
  box-sizing: border-box !important;
}

/* Убираем скролл у внутреннего <div>-обёртки в #win */
#win.ui-draggable > div {
  overflow: hidden !important;
}

/* Select с сертификатами */
#certificatesSelect {
  /* 426x168 — ровно как список на портале */
  width: 100% !important;
  height: 168px !important;
  min-height: 168px !important;
  max-height: 168px !important;
  border: 1.5px solid var(--gray-200, #D0DCE8) !important;
  border-radius: var(--r, 6px) !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 13px !important;
  color: var(--navy, #0C1E45) !important;
  background: var(--gray-50, #F5F8FB) !important;
  outline: none !important;
  transition: border-color var(--tr, 0.22s ease) !important;
  padding: 0 !important;
  overflow: auto !important;
}

#certificatesSelect:focus {
  border-color: var(--blue, #2B7FC0) !important;
  box-shadow: 0 0 0 3px rgba(43,127,192,0.09) !important;
}

#certificatesSelect option {
  padding: 9px 12px !important;
  border-bottom: 1px solid var(--gray-100, #E4EBF2) !important;
  cursor: pointer !important;
}

#certificatesSelect option:checked {
  background: rgba(43,127,192,0.1) !important;
  color: var(--blue, #2B7FC0) !important;
}

/* --- Поиск ЭЦП (вставляется JS) --- */
#nmck-eds-search-wrap {
  margin-bottom: 12px !important;
}

#nmck-eds-search-wrap label {
  display: block !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 12.5px !important;
  font-weight: 600 !important;
  color: var(--gray-700, #2C3E50) !important;
  margin-bottom: 6px !important;
}

#nmck-eds-search {
  width: 100% !important;
  padding: 10px 13px !important;
  border: 1.5px solid var(--gray-200, #D0DCE8) !important;
  border-radius: var(--r, 6px) !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 13.5px !important;
  color: var(--navy, #0C1E45) !important;
  background: var(--gray-50, #F5F8FB) !important;
  outline: none !important;
  transition: border-color var(--tr, 0.22s ease), box-shadow var(--tr, 0.22s ease), background-color var(--tr, 0.22s ease) !important;
  box-sizing: border-box !important;
}

#nmck-eds-search:focus {
  border-color: var(--blue, #2B7FC0) !important;
  background-color: #fff !important;
  box-shadow: 0 0 0 3px rgba(43,127,192,0.09) !important;
}

#nmck-eds-search::placeholder {
  color: var(--gray-300, #A0B4C4) !important;
}

/* Спиннер загрузки ЭЦП внутри диалога */
#nmck-eds-loading {
  text-align: center !important;
}

/* Кнопки «Выбрать» / «Отменить» в диалоге */
#certificatesList .ecpf-submit,
#win .ecpf-submit,
.ui-draggable .ecpf-submit {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  padding: 10px 24px !important;
  border-radius: var(--r, 6px) !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 14px !important;
  font-weight: 600 !important;
  cursor: pointer !important;
  transition: background var(--tr, 0.22s ease), box-shadow var(--tr, 0.22s ease) !important;
  margin-top: 14px !important;
  margin-right: 8px !important;
  position: relative !important;
}

/* Кнопка «Выбрать» — Primary */
#certificatesList .ecpf-submit:first-of-type,
#win .ecpf-submit:first-of-type,
.ui-draggable .ecpf-submit:first-of-type {
  background: var(--blue, #2B7FC0) !important;
  color: #fff !important;
}

#certificatesList .ecpf-submit:first-of-type:hover,
#win .ecpf-submit:first-of-type:hover,
.ui-draggable .ecpf-submit:first-of-type:hover {
  background: var(--blue-hover, #1E6BAD) !important;
  box-shadow: var(--shadow-sm, 0 2px 8px rgba(12,30,69,0.10)) !important;
}

/* Кнопка «Отменить» — Ghost */
#certificatesList .ecpf-submit:last-of-type,
#win .ecpf-submit:last-of-type,
.ui-draggable .ecpf-submit:last-of-type {
  background: transparent !important;
  color: var(--gray-500, #5E7A90) !important;
  border: 1.5px solid var(--gray-200, #D0DCE8) !important;
}

#certificatesList .ecpf-submit:last-of-type:hover,
#win .ecpf-submit:last-of-type:hover,
.ui-draggable .ecpf-submit:last-of-type:hover {
  background: var(--gray-50, #F5F8FB) !important;
  color: var(--navy, #0C1E45) !important;
}

#certificatesList .ecpf-submit .invisible_input,
#win .ecpf-submit .invisible_input,
.ui-draggable .ecpf-submit .invisible_input {
  position: absolute !important;
  inset: 0 !important;
  width: 100% !important;
  height: 100% !important;
  opacity: 0 !important;
  cursor: pointer !important;
}

/* Индикатор ожидания в окне выбора сертификата.
   Легаси показывает окно сразу, а список наполняет секундами позже (валидация
   каждого сертификата — отдельный поиск по отпечатку). Пустое окно читается
   как «не работает», поэтому пока список пуст показываем тот же индикатор,
   что и портал: логотип площадки с мягкой пульсацией. */
/* Логотип и подпись пульсируют ровно так же, как на портале:
   анимация sp-veil-pulse 1.2s (0 → 1 → 0), и мигает только знак, а не весь
   список с рамкой. Поэтому логотип — отдельный элемент, а не фон select. */
#win.sp-eds-loading .win_content { position: relative !important; }
.sp-eds-spinner {
  position: absolute;
  width: 48px;
  height: 48px;
  margin: -24px 0 0 -24px;
  background: url('/static/spectender-logo-mark.png') no-repeat center center;
  background-size: contain;
  opacity: 0;
  pointer-events: none;
  animation: sp-veil-pulse 1.2s ease-in-out infinite;
}
/* Подпись — под логотипом, по центру списка, и мерцает с ним в такт: тот же
   sp-veil-pulse 1.2s, оба элемента создаются в одном кадре, поэтому фазы
   совпадают. Без position:absolute подпись уходила в поток и вставала под
   рамкой списка слева. */
.sp-eds-caption {
  position: absolute;
  color: var(--ink-600, #5E7A90);
  font-size: 13px;
  line-height: 1.4;
  text-align: center;
  white-space: nowrap;
  pointer-events: none;
  opacity: 0;
  animation: sp-veil-pulse 1.2s ease-in-out infinite;
}

/* Поиск по сертификатам в окне выбора — как на портале.
   В хранилище бывает под сотню сертификатов; прокруткой искать неудобно. */
#win .sp-cert-search {
  width: 100% !important;
  margin: 0 0 8px !important;
  box-sizing: border-box !important;
  padding: 10px 12px !important;
  border: 1px solid var(--ink-200, #CFDBE8) !important;
  border-radius: var(--r-sm, 6px) !important;
  font-size: 14px !important;
  font-family: inherit !important;
}
#win .sp-cert-search:focus {
  outline: none !important;
  border-color: var(--brand-blue-500, #0665E6) !important;
  box-shadow: 0 0 0 3px rgb(6 101 230 / 18%) !important;
}
/* Пустой результат поиска — отдельное состояние, доступное для чтения. */
#win .sp-cert-empty {
  margin: 0 0 8px;
  color: var(--ink-600, #5E7A90);
  font-size: 14px;
  line-height: 1.5;
}
#win .sp-cert-empty[hidden] { display: none !important; }

/* пока список грузится, искать нечего */
#win.sp-eds-loading .sp-cert-search { display: none !important; }

/* Индикатор ожидания при выключенных анимациях.

   Знак и подпись задаются с opacity: 0, видимыми их делает только пульсация
   sp-veil-pulse. Глобальное правило доступности
   `@media (prefers-reduced-motion: reduce) { * { animation-duration: 0.01ms;
   animation-iteration-count: 1 } }` схлопывает анимацию до одного мгновенного
   прохода, и элементы застывают на конечном кадре — а он нулевой. В итоге у
   пользователей с отключёнными анимациями Windows окно выбора сертификата
   выглядело пустым: индикатор в DOM есть, но он невидим.

   Поэтому в этом режиме показываем их статично, без движения. */
@media (prefers-reduced-motion: reduce) {
  #win .sp-eds-spinner,
  #win .sp-eds-caption {
    animation: none !important;
    opacity: 1 !important;
  }
}

/* ── Позиции малой закупки (SmallPurchaseCard) ───────────────────────────
   Легаси раскладывал позицию флоатами: левая колонка 100% с отрицательным
   полем, правая 250px справа. В редизайне флоаты сняты, и обе колонки легли
   друг под друга во всю ширину — «Цена за единицу: 1.00 руб. 1.00 руб.»
   читалось как случайный набор строк. Собираем позицию сеткой: слева
   описание, справа цены; на телефоне — в столбик. */
.sp-etp .info_block {
  border: 1px solid var(--ink-100, #E2EAF3) !important;
  border-radius: var(--r-md, 10px) !important;
  background: #fff !important;
  padding: 16px 20px !important;
  margin: 0 0 12px !important;
  font-size: 14px !important;
  color: var(--ink-900, #0C1E45) !important;
}
.sp-etp .position_block_content {
  display: grid !important;
  grid-template-columns: minmax(0, 1fr) 260px !important;
  gap: 8px 32px !important;
  position: static !important;
}
.sp-etp .position_block_left,
.sp-etp .position_block_right {
  float: none !important;
  width: auto !important;
  margin: 0 !important;
  min-width: 0 !important;
}
.sp-etp .position_block_left > div { margin-right: 0 !important; }
.sp-etp .position_block_left > div > div[style*="margin-bottom"] { margin-bottom: 0 !important; }
.sp-etp .position_block_left b { font-size: 15px; color: var(--ink-1000, #0C1E45); }
.sp-etp .position_block_right {
  text-align: right !important;
  border-left: 1px solid var(--ink-100, #E2EAF3);
  padding-left: 24px;
}
.sp-etp .info_block .property_small_title {
  display: block !important;
  margin: 10px 0 2px !important;
  color: var(--ink-500, #6F7E92) !important;
  font-size: 11px !important;
  font-weight: 600 !important;
  letter-spacing: .06em !important;
  text-transform: uppercase !important;
}
.sp-etp .position_block_right > div:first-child .property_small_title { margin-top: 0 !important; }
@media (max-width: 767px) {
  .sp-etp .position_block_content { grid-template-columns: minmax(0, 1fr) !important; gap: 4px !important; }
  .sp-etp .position_block_right { text-align: left !important; border-left: 0; padding-left: 0; border-top: 1px solid var(--ink-100, #E2EAF3); padding-top: 8px; margin-top: 8px !important; }
}

/* source: test-overrides/ui-redesign/etp/legacy-redesign.css */
/* ============================================================
   ЭТП «Спецтендер» — финальная дизайн-полировка
   v4 (2026-05-01 P2) — без класс-скоупа.

   Раньше правила скоупились под `body.etp-ds` (класс инжектился
   JS-ом). Это создавало race condition: первый paint случался
   до выполнения JS, и legacy `torgi.css` (`.header { background:
   var(--navy) !important }`) применялся раньше. Решение: убрать
   torgi.css из Border.html (см. design.md) и снять класс-скоуп.

   Шапка реализована через `position: fixed` — старый JS-клон
   header.mini, который создавал дубли id и накладывал логотип
   сам на себя, отключён в Border.html.
   ============================================================ */

/* Подключаем готовую дизайн-систему v2.5.0 (1119 строк, .etp-* + .ds-*
   компоненты). Дальше идут правила-маппинги legacy GWT/Tapestry-классов
   на эти DS-компоненты, чтобы получить редизайн без правки Java-кода. */
/* ════════════════════════════════════════════════════════════
   0. RESET + БАЗОВАЯ ТИПОГРАФИКА
   После удаления legacy /etp/css/default.css|env|inner|scrollbar|add
   нужен минимальный base-reset (раньше его обеспечивали legacy CSS).
   ════════════════════════════════════════════════════════════ */
*, *::before, *::after {
  box-sizing: border-box;
}

html {
  background: var(--surface-page, #F5F8FB) !important;
  scroll-behavior: smooth !important;
}

body {
  font-family: var(--font-body, 'Geologica', Arial, sans-serif) !important;
  color: var(--ink-1000, #0C1E45) !important;
  background: var(--surface-page, #F5F8FB) !important;
  -webkit-font-smoothing: antialiased !important;
  -moz-osx-font-smoothing: grayscale !important;
  font-size: 14px !important;
  line-height: 1.55 !important;
  margin: 0;
  padding: 0;
}

/* Нативные элементы — нормализация */
ul, ol { list-style: none; margin: 0; padding: 0; }
h1, h2, h3, h4, h5, h6 { margin: 0; }
p { margin: 0 0 0.75em; }
a { color: var(--brand-blue-700, #0442A3); text-decoration: none; }
a:hover { color: var(--brand-blue-500, #0665E6); }
img { max-width: 100%; height: auto; }
table { border-collapse: collapse; }

input, button, select, textarea {
  font: inherit;
  color: inherit;
  margin: 0;
}

button {
  cursor: pointer;
  background: none;
  border: 0;
  padding: 0;
}

/* Базовая стилизация GWT-input (раньше из default.css) */
input[type="text"]:not(.gwt-TextBox):not(.textField):not([class]),
input[type="password"]:not([class]),
input.gwt-TextBox,
input.textField {
  border: 1px solid var(--ink-200, #D0DCE8);
  border-radius: var(--r-sm, 6px);
  padding: 8px 12px;
  font-size: 14px;
  background: #fff;
}

/* Восстанавливаем legacy-классы которые были в default.css/add.css —
   они нужны legacy JS-обработчикам (login form tabs и т.п.).

   .spf-hidden БЕЗ !important — чтобы inline display:block (который ставит
   legacy interface.js при click на tab через `$('#id').show()`) перебивал
   class-rule. */
.spf-hidden {
  display: none;
}

/* Default-видимость формы (соответствующая активному .spf-tab_cur).
   Нужно потому что в Border.html обе формы имеют class="spf-hidden",
   а легаси interface.js init-кода нет — без этого правила обе формы
   скрыты при первой загрузке. */
.separate_form:has(.spf-tab[rel="loginForm"].spf-tab_cur) > form#loginForm,
.separate_form:has(.spf-tab[rel="loginCustomerForm"].spf-tab_cur) > form#loginCustomerForm {
  display: block !important;
}

.invisible_input {
  /* Невидимый input поверх <span class="rec-go"> — клики на span = клики
     на input (submit/button). Сохраняем legacy-поведение. */
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  opacity: 0;
  cursor: pointer;
  border: 0;
  padding: 0;
  margin: 0;
  background: transparent;
  pointer-events: auto;
}

.rec-go {
  position: relative;
}

*:focus-visible {
  outline: none !important;
  box-shadow: 0 0 0 3px rgba(6, 101, 230, 0.22) !important;
  border-radius: var(--r-sm, 6px) !important;
}

/* ════════════════════════════════════════════════════════════
   0.5. TOPSTRIP — узкая тёмная полоса (1:1 как на new.etpsp.ru)
   Слева: «● Система работает · Оператор ЭТП — работает с 2013 года».
   Справа: контакты (рендерятся серверным getContactsHtml в Tapestry).
   Часы (htn-hours/minutes/seconds) скрыты в .h-time__wrapper-mute,
   но Tapestry-вычисление ognl:hours/minutes/seconds НЕ удаляется —
   просто display:none, чтобы на ETP-страницах не было визуальных часов.
   ════════════════════════════════════════════════════════════ */
.topstrip {
  position: fixed !important;
  top: 0 !important;
  left: 0 !important;
  right: 0 !important;
  z-index: 99 !important;        /* под .header (100), над .nav-backdrop (90) */
  background: var(--navy-900, #0A1735) !important;
  color: rgba(255, 255, 255, 0.7) !important;
  font-family: var(--font-body, 'Geologica', sans-serif) !important;
  font-size: 12px !important;
  line-height: 20px !important;
  padding: 6px 0 !important;
  border: 0 !important;
}

.topstrip-inner {
  max-width: 1440px !important;
  margin: 0 auto !important;
  padding: 0 32px !important;
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  gap: 24px !important;
}

.topstrip a {
  color: rgba(255, 255, 255, 0.7) !important;
  text-decoration: none !important;
  transition: color 160ms cubic-bezier(.2, 0, 0, 1) !important;
}

.topstrip a:hover {
  color: #fff !important;
}

.topstrip-status {
  display: inline-flex !important;
  align-items: center !important;
  gap: 8px !important;
  flex-shrink: 0 !important;
}

.topstrip-status .status-dot {
  display: inline-block !important;
  width: 8px !important;
  height: 8px !important;
  border-radius: 50% !important;
  background: #1FAE5A !important;       /* success-green */
  box-shadow: 0 0 0 3px rgba(31, 174, 90, 0.18) !important;
  flex-shrink: 0 !important;
}

.topstrip-status__primary {
  color: #fff !important;
  font-weight: 500 !important;
}

.topstrip-status__sep {
  color: rgba(255, 255, 255, 0.3) !important;
  margin: 0 4px !important;
}

.topstrip-status__secondary {
  color: rgba(255, 255, 255, 0.6) !important;
}

.topstrip-contacts {
  display: inline-flex !important;
  align-items: center !important;
  gap: 18px !important;
  flex-wrap: nowrap !important;
  justify-content: flex-end !important;
  font-size: 12px !important;
  white-space: nowrap !important;
  overflow: hidden !important;
}

/* getContactsHtml() возвращает <style>...</style> с правилами, которые
   ломают layout (h-light display:none, wrapper max-width:1920px и т.п.).
   Скрываем style-тег ВНУТРИ topstrip и любые блочные contents. */
.topstrip-contacts style {
  display: none !important;
}

/* getContactsHtml() возвращает разметку с классами .h-contacts, .hc-phone, .ho-text */
.topstrip-contacts .h-contacts,
.topstrip-contacts .h-operator,
.topstrip-contacts .hc-phone,
.topstrip-contacts .ho-text {
  display: inline-flex !important;
  align-items: center !important;
  gap: 14px !important;
  color: rgba(255, 255, 255, 0.7) !important;
  margin: 0 !important;
  padding: 0 !important;
  background: transparent !important;
  font-size: 12px !important;
  font-weight: 500 !important;
  text-transform: none !important;
  letter-spacing: 0 !important;
  line-height: 20px !important;
}

.topstrip-contacts .ho-text {
  font-family: var(--font-body, 'Geologica', sans-serif) !important;
  text-transform: none !important;
}

/* Links inside the dark top strip inherited the legacy body link colour
   (#2C3E52) — 1.62:1 against the navy strip, effectively invisible.
   Contacts are links (mail/tel), so colour them explicitly. */
.topstrip-contacts a,
.topstrip-contacts .h-contacts a,
.topstrip-contacts .hc-phone a,
.topstrip-contacts .ho-text a {
  color: rgba(255, 255, 255, 0.82) !important;
  text-decoration: none !important;
}
.topstrip-contacts a:hover,
.topstrip-contacts a:focus-visible {
  color: #fff !important;
  text-decoration: underline !important;
}

/* Скрытые часы (Tapestry рендерит, но на ETP в шапке не показываем —
   как на new.etpsp.ru). Сохраняем для совместимости JS-handler'ов
   (если что-то по id="htn-hours" обращается). */
.h-time__wrapper-mute {
  display: none !important;
}

/* Резервируем место под topstrip + header (вместо просто 72px) */
body {
  padding-top: calc(32px + 72px) !important;
}

/* ════════════════════════════════════════════════════════════
   0.6. NAV-BACKDROP — затемняющая подложка при hover на меню
   1:1 как на new.etpsp.ru: position:fixed на весь экран, тёмно-синяя
   полупрозрачная плашка с blur(3px). Скрыта по умолчанию (opacity:0,
   visibility:hidden). Появляется когда курсор над пунктом меню,
   у которого есть открытый дропдаун.

   Триггер CSS-only через :has() — работает во всех современных
   браузерах (Chrome 105+, Safari 15.4+, Firefox 121+). На ETP
   браузерная база — современный Chrome (CryptoPro CADES требует
   Chromium-based), так что :has() надёжен.

   Шапка (.header position:fixed, z-index:100) остаётся ВЫШЕ backdrop
   (z-index:90) — поэтому контент шапки чёткий, а контент страницы
   за ним размывается.
   ════════════════════════════════════════════════════════════ */
.nav-backdrop {
  position: fixed !important;
  top: 0 !important;
  left: 0 !important;
  right: 0 !important;
  bottom: 0 !important;
  background: rgba(10, 23, 53, 0.55) !important; /* --navy-900 + alpha */
  -webkit-backdrop-filter: blur(3px) !important;
  backdrop-filter: blur(3px) !important;
  opacity: 0 !important;
  visibility: hidden !important;
  z-index: 90 !important; /* ниже .header (100), выше контента */
  pointer-events: none !important;
  /* В неактивном состоянии скрываем visibility с задержкой
     (visibility 0s linear 220ms) — чтобы opacity успела отыграть. */
  transition:
    opacity 220ms cubic-bezier(.2, 0, 0, 1),
    visibility 0s linear 220ms !important;
}

/* Триггер: курсор над ЛЮБЫМ пунктом меню. Раньше требовалось наличие
   подменю (.hm-sub), из-за чего «Проверка ЭП», «Документы» и «На главную»
   вели себя иначе, чем соседи, — подложка не появлялась и переход между
   пунктами мигал. Поведение выровнено по всем пунктам. */
body:has(.h-menu .hm-item:hover) .nav-backdrop,
body:has(.h-menu .hm-item:focus-within) .nav-backdrop {
  opacity: 1 !important;
  visibility: visible !important;
  /* В активном состоянии visibility включается СРАЗУ (0s linear 0s) */
  transition:
    opacity 220ms cubic-bezier(.2, 0, 0, 1),
    visibility 0s linear 0s !important;
}

/* ════════════════════════════════════════════════════════════
   1. ШАПКА — стиль new.etpsp.ru (rgba+blur), fixed через CSS
   Используем position:fixed (не sticky) потому что html-контент с
   прода имеет лишний </header> в getContactsHtml() — он рано
   закрывает #wrapper, и sticky-родитель оказывается высотой 121px,
   sticky никогда не активируется. fixed обходит эту проблему.
   ════════════════════════════════════════════════════════════ */
/* body padding-top задан выше — calc(var(--sp-topstrip-h) + 72px) */

.header {
  position: fixed !important;
  /* Высота полосы теперь переменная: длинное название секции переносится
     на несколько строк, и полоса становится выше. Жёсткие 32px оставляли
     шапку на месте, и она накрывала перенесённые строки. */
  top: var(--sp-topstrip-h, 32px) !important;
  left: 0 !important;
  right: 0 !important;
  width: 100% !important;
  z-index: 100 !important;
  /* Перебиваем `display: -webkit-box` из legacy /etp/css/default.css —
     он сжимал .header__wrapper до shrink-to-fit (244 px вместо 100%). */
  display: flex !important;
  align-items: stretch !important;
  /* Полупрозрачный фон + blur — узнаваемый признак шапки new.etpsp.ru */
  background: rgba(255, 255, 255, 0.96) !important;
  background-image: none !important;
  -webkit-backdrop-filter: blur(10px) !important;
  backdrop-filter: blur(10px) !important;
  border: none !important;
  border-bottom: 1px solid var(--border-subtle, #EBF0F6) !important;
  box-shadow: none !important;
  min-height: 72px !important;
  height: auto !important;
}

/* Скрыть JS-клон mini-header если он всё-таки появится */
.header.mini {
  display: none !important;
}

.header .header__wrapper {
  flex: 1 1 auto !important; /* растянуть до 100% .header */
  width: 100% !important;
  max-width: 1440px !important;
  margin: 0 auto !important;
  padding: 0 32px !important;
  position: relative !important;
  display: flex !important;
  align-items: center !important;
  box-sizing: border-box !important;
}

.header .h-light {
  flex: 1 1 auto !important;     /* растянуть до 100% .header__wrapper */
  width: 100% !important;
  max-width: none !important;     /* перебить torgi.css max-width: 1920px */
  padding: 0 !important;
  margin: 0 !important;
  position: relative !important;
  display: flex !important;
  align-items: center !important;
  flex-wrap: nowrap !important;   /* перебить add.css flex-wrap: wrap */
  flex-direction: row !important;
  justify-content: flex-start !important;
  gap: 12px !important;
  min-height: 72px !important;
}

/* ── Меню внутри .h-light (стиль new.etpsp.ru) ─── */
.h-light nav.h-menu {
  /* Перебиваем legacy `nav.h-menu { position: absolute; left:0; right:0;
     width:100% }` из torgi.css — он вытаскивал меню из flex-flow и
     накладывал на logo/cta. */
  position: relative !important;
  left: auto !important;
  right: auto !important;
  top: auto !important;
  width: auto !important;
  /* НЕ растягиваем меню — оно занимает место по содержимому,
     а .h-cta уезжает вправо через margin-left:auto */
  flex: 0 1 auto !important;
  display: flex !important;
  align-items: stretch !important;
  height: 100% !important;
  margin: 0 0 0 12px !important;
  padding: 0 !important;
  align-self: stretch !important;
  /* Перебиваем жирное правило из torgi.css:
     `nav, .nav, ... { background: var(--navy) }` — оно красило меню navy. */
  background: transparent !important;
  background-image: none !important;
}

.h-light .hm-list {
  display: flex !important;
  list-style: none !important;
  margin: 0 !important;
  padding: 0 !important;
  gap: 4px !important;
  align-items: center !important;
  height: 100% !important;
}

.h-light .hm-list::after {
  content: "" !important;
  display: none !important;
}

.h-light .hm-item {
  position: relative !important;
  list-style: none !important;
  margin: 0 !important;
  padding: 0 !important;
  display: flex !important;
  align-items: center !important;
  height: 100% !important;
}

/* ════════════════════════════════════════════════════════════
   1.5. CTA-блок справа в шапке: одна ссылка «Личный кабинет ▾»
   По клику открывается popover с содержимым .login_form (логин-форма
   или меню залогиненного пользователя). CSS-only toggle через
   <input type=checkbox id=lk-toggle> + <label for=lk-toggle>.
   ════════════════════════════════════════════════════════════ */
.h-cta {
  display: inline-flex !important;
  align-items: center !important;
  gap: 8px !important;
  flex-shrink: 0 !important;
  margin-left: auto !important;
}

.h-cta .h-cta-btn--lk {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  gap: 8px !important;
  height: 36px !important;
  padding: 0 14px !important;
  font-family: var(--font-body, 'Geologica', sans-serif) !important;
  font-size: 13px !important;
  font-weight: 600 !important;
  border: 0 !important;
  border-radius: var(--r-sm, 6px) !important;
  background: var(--brand-blue-500, #0665E6) !important;
  color: #fff !important;
  cursor: pointer !important;
  text-decoration: none !important;
  white-space: nowrap !important;
  transition:
    background 160ms cubic-bezier(.2, 0, 0, 1),
    box-shadow 160ms cubic-bezier(.2, 0, 0, 1) !important;
  user-select: none !important;
}

.h-cta .h-cta-btn--lk:hover {
  background: var(--brand-blue-600, #0553C7) !important;
}

.h-cta .h-cta-btn--lk:focus-visible {
  outline: none !important;
  box-shadow: 0 0 0 3px rgba(6, 101, 230, 0.32) !important;
}

.h-cta .h-cta-btn__icon {
  flex-shrink: 0 !important;
  color: currentColor !important;
}

.h-cta .h-cta-btn__caret {
  font-size: 10px !important;
  color: rgba(255, 255, 255, 0.85) !important;
  transition: transform 220ms cubic-bezier(.2, 0, 0, 1) !important;
}

/* Когда попап открыт — стрелка перевёрнута */
body:has(#lk-toggle:checked) .h-cta .h-cta-btn__caret {
  transform: rotate(180deg) !important;
}

/* ════════════════════════════════════════════════════════════
   1.7. КНОПКА «Фильтр» + горизонтальный popup фильтра
   Кнопка живёт в начале .content_indent (см. Border.html). Скрыта на
   страницах без .filterPanel. Попап — горизонтальная полоса под шапкой.
   ════════════════════════════════════════════════════════════ */
.filter-fab {
  /* Полноширинная строка-аккордеон под заголовком страницы: подпись слева,
     стрелка прижата к правому краю. Раньше это был инлайновый чип, который
     на десктопе вставал рядом с h1, а на телефоне — над ним. */
  display: flex !important;
  box-sizing: border-box !important;
  width: 100% !important;
  align-items: center !important;
  gap: 8px !important;
  height: 44px !important;
  padding: 0 16px !important;
  margin: 0 0 20px !important;
  font-family: var(--font-body, 'Geologica', sans-serif) !important;
  font-size: 13px !important;
  font-weight: 600 !important;
  color: var(--ink-700, #2C3E52) !important;
  background: var(--surface-card, #fff) !important;
  border: 1.5px solid var(--ink-200, #D0DCE8) !important;
  border-radius: var(--r-md, 10px) !important;
  cursor: pointer !important;
  user-select: none !important;
  white-space: nowrap !important;
  transition:
    border-color 160ms cubic-bezier(.2, 0, 0, 1),
    color 160ms cubic-bezier(.2, 0, 0, 1),
    background 160ms cubic-bezier(.2, 0, 0, 1) !important;
}

.filter-fab:hover {
  border-color: var(--brand-blue-500, #0665E6) !important;
  color: var(--brand-blue-800, #0849B3) !important;
  background: var(--brand-blue-050, #F1F6FE) !important;
}

.filter-fab .filter-fab__label {
  flex: 1 1 auto !important;
  text-align: left !important;
}

.filter-fab .filter-fab__caret {
  flex: 0 0 auto !important;
  margin-left: auto !important;
  font-size: 10px !important;
  color: var(--ink-400, #8394A5) !important;
  transition: transform 220ms cubic-bezier(.2, 0, 0, 1) !important;
}

body:has(#filter-toggle:checked) .filter-fab {
  border-color: var(--brand-blue-500, #0665E6) !important;
  color: var(--brand-blue-800, #0849B3) !important;
  background: var(--brand-blue-050, #F1F6FE) !important;
}

body:has(#filter-toggle:checked) .filter-fab .filter-fab__caret {
  transform: rotate(180deg) !important;
}

/* Скрываем кнопку на страницах без фильтра процедур (детали лота,
   договоры, профиль и т.п.) — туда её GWT не рендерит, а .filterPanel нет. */
body:not(:has(.filterPanel)) .filter-fab {
  display: none !important;
}

/* Скрываем правый блок фильтра (был sidebar). Используем тот же трюк
   visibility:hidden + height/width:0 — потому что .filterPanel внутри
   #nmck-filter-panel нужно показать как fixed popup при :checked. */
#nmck-filter-td {
  width: 0 !important;
  min-width: 0 !important;
  max-width: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  overflow: visible !important;
}

#nmck-filter-panel {
  visibility: hidden !important;
  height: 0 !important;
  width: 0 !important;
  padding: 0 !important;
  margin: 0 !important;
  border: 0 !important;
  overflow: hidden !important;
  pointer-events: none !important;
}

/* Overlay-label для closing попапа фильтра. z-index намеренно низкий. */
.filter-overlay {
  position: fixed !important;
  top: 0 !important;
  left: 0 !important;
  right: 0 !important;
  bottom: 0 !important;
  background: rgba(10, 23, 53, 0.45) !important;
  -webkit-backdrop-filter: blur(2px) !important;
  backdrop-filter: blur(2px) !important;
  opacity: 0 !important;
  visibility: hidden !important;
  pointer-events: none !important;
  cursor: pointer !important;
  z-index: 1 !important;
  transition:
    opacity 220ms cubic-bezier(.2, 0, 0, 1),
    visibility 0s linear 220ms !important;
}

/* The page under the open filter must not scroll (user report): lock the
   scroller while the dialog is up; the panel scrolls its own content. */
html:has(#filter-toggle:checked),
body:has(#filter-toggle:checked) { overflow: hidden !important; }
body:has(#filter-toggle:checked) .filter-overlay {
  opacity: 1 !important;
  visibility: visible !important;
  pointer-events: auto !important;
  transition:
    opacity 220ms cubic-bezier(.2, 0, 0, 1),
    visibility 0s linear 0s !important;
}

/* Открытый попап: возвращаем visibility на ancestor'е, выводим .filterPanel
   как горизонтальную полосу под шапкой через position:fixed.
   overflow:visible — нужен для hit-test (клики на поля фильтра должны
   доходить, иначе overlay перекрывает). */
body:has(#filter-toggle:checked) #nmck-filter-panel,
body:has(#filter-toggle:checked) #nmck-filter-td {
  visibility: visible !important;
  pointer-events: auto !important;
  overflow: visible !important;
}

body:has(#filter-toggle:checked) #nmck-filter-panel .filterPanel,
body:has(#filter-toggle:checked) .filterPanel {
  display: block !important;
  visibility: visible !important;
  position: fixed !important;
  top: calc(32px + 72px + 12px) !important;
  left: 50% !important;
  right: auto !important;
  transform: translateX(-50%) !important;
  width: min(1100px, calc(100vw - 64px)) !important;
  max-width: calc(100vw - 64px) !important;
  max-height: calc(100vh - 130px) !important;
  overflow-y: auto !important;
  z-index: 9000 !important;
  isolation: isolate !important;
  background: var(--surface-card, #fff) !important;
  border: 1px solid var(--border-subtle, #EBF0F6) !important;
  border-radius: var(--r-lg, 14px) !important;
  box-shadow: var(--shadow-lg, 0 16px 40px rgba(15, 24, 42, 0.14)) !important;
  padding: 16px 20px !important;
  margin: 0 !important;
  pointer-events: auto !important;
  animation: filterPopIn 220ms cubic-bezier(.2, 0, 0, 1) both !important;
}

@keyframes filterPopIn {
  from { opacity: 0; transform: translateX(-50%) translateY(-8px) scale(0.98); }
  to   { opacity: 1; transform: translateX(-50%) translateY(0) scale(1); }
}

/* Внутри попапа .filterPanel — это <table>/<tbody>/<tr>/<td>, каждый <tr>
   содержит одно поле фильтра. Превращаем таблицу в CSS-grid карточек,
   игнорируя default display:table-* для горизонтального layout. */
body:has(#filter-toggle:checked) .filterPanel {
  display: block !important;
  border-collapse: separate !important;
  border-spacing: 0 !important;
}

body:has(#filter-toggle:checked) .filterPanel > tbody,
body:has(#filter-toggle:checked) .filterPanel > thead,
body:has(#filter-toggle:checked) #nmck-filter-panel .filterPanel > tbody {
  display: grid !important;
  /* 12-колоночный grid — для строгого row-by-row layout через
     .nmck-card-full (12), .nmck-card-half (6), .nmck-card-third (4). */
  grid-template-columns: repeat(12, minmax(0, 1fr)) !important;
  grid-auto-rows: min-content !important;
  align-items: start !important;
  gap: 12px !important;
  width: 100% !important;
}

/* Tag-классы карточек по ширине (присваивает torgi.js → tagFilterCards) */
body:has(#filter-toggle:checked) .filterPanel tr.nmck-card-full   { grid-column: span 12 !important; }
body:has(#filter-toggle:checked) .filterPanel tr.nmck-card-half   { grid-column: span 6  !important; }
body:has(#filter-toggle:checked) .filterPanel tr.nmck-card-third  { grid-column: span 4  !important; }

/* Bottom-row «Найти / Сбросить» — на всю ширину (после всех 6 рядов) */
body:has(#filter-toggle:checked) .filterPanel tr:has(button.gwt-Button) {
  grid-column: span 12 !important;
}

/* Карточка одного фильтр-поля */
body:has(#filter-toggle:checked) .filterPanel tr {
  display: flex !important;
  flex-direction: column !important;
  background: var(--surface-card, #fff) !important;
  border: 1px solid var(--border-subtle, #EBF0F6) !important;
  border-radius: var(--r-sm, 6px) !important;
  padding: 0 !important;
  /* НЕ растягиваем — height по содержимому */
  height: auto !important;
  align-self: start !important;
  transition: border-color 160ms cubic-bezier(.2, 0, 0, 1) !important;
}

body:has(#filter-toggle:checked) .filterPanel tr:hover {
  border-color: var(--ink-200, #D0DCE8) !important;
}

body:has(#filter-toggle:checked) .filterPanel tr > td {
  display: flex !important;
  flex-direction: column !important;
  gap: 6px !important;
  padding: 10px 12px !important;
  width: 100% !important;
  height: auto !important;
  background: transparent !important;
  border: 0 !important;
  vertical-align: top !important;
  font-size: 13px !important;
  line-height: 1.4 !important;
  color: var(--ink-700, #2C3E52) !important;
}

/* Кнопки «Выбрать» в карточках Регион поставки / Код ОКПД2 — ghost-стиль.
   Простой селектор: button с текстом «Выбрать» через title или
   рассчёт на default-стилизацию gwt-Button-grey (если есть). Поскольку
   надёжного селектора по тексту нет, делаем grey всем button.gwt-Button
   с класс-suffix `grey` (legacy). Главные кнопки «Найти/Сбросить» имеют
   класс `gwt-Button` без suffix — primary остаются. */
body:has(#filter-toggle:checked) .filterPanel tr button.gwt-Button.grey,
body:has(#filter-toggle:checked) .filterPanel tr .gwt-Button.grey {
  background: var(--surface-card, #fff) !important;
  color: var(--ink-700, #2C3E52) !important;
  border: 1px solid var(--ink-200, #D0DCE8) !important;
  box-shadow: none !important;
}

body:has(#filter-toggle:checked) .filterPanel tr button.gwt-Button.grey:hover,
body:has(#filter-toggle:checked) .filterPanel tr .gwt-Button.grey:hover {
  background: var(--brand-blue-050, #F1F6FE) !important;
  color: var(--brand-blue-800, #0849B3) !important;
  border-color: var(--brand-blue-500, #0665E6) !important;
}

/* Чекбоксы «Вид торговой процедуры» (.nmck-checkbox-grid-h) — горизонтально
   все 4 чекбокса в одну строку. Используем display:contents для inner-
   table, чтобы td-ячейки попали в auto-fit grid карточки. */
body:has(#filter-toggle:checked) .filterPanel tr.nmck-checkbox-grid-h > td > table.blockPanel,
body:has(#filter-toggle:checked) .filterPanel tr.nmck-checkbox-grid-h > td > table.blockPanel > tbody {
  display: block !important;
  width: 100% !important;
}

body:has(#filter-toggle:checked) .filterPanel tr.nmck-checkbox-grid-h > td > table.blockPanel > tbody > tr:nth-of-type(2) > td > .blockPanelContent,
body:has(#filter-toggle:checked) .filterPanel tr.nmck-checkbox-grid-h > td > table.blockPanel > tbody > tr:nth-of-type(2) > td .blockPanelContent > table,
body:has(#filter-toggle:checked) .filterPanel tr.nmck-checkbox-grid-h > td > table.blockPanel > tbody > tr:nth-of-type(2) > td .blockPanelContent > table > tbody,
body:has(#filter-toggle:checked) .filterPanel tr.nmck-checkbox-grid-h > td > table.blockPanel > tbody > tr:nth-of-type(2) > td .blockPanelContent > table > tbody > tr {
  display: contents !important;
}

body:has(#filter-toggle:checked) .filterPanel tr.nmck-checkbox-grid-h > td > table.blockPanel > tbody > tr:nth-of-type(2) > td {
  display: flex !important;
  flex-direction: row !important;
  flex-wrap: wrap !important;
  align-items: center !important;
  gap: 6px 16px !important;
  padding: 0 12px 8px !important;
  width: 100% !important;
}

body:has(#filter-toggle:checked) .filterPanel tr.nmck-checkbox-grid-h > td > table.blockPanel > tbody > tr:nth-of-type(2) > td .blockPanelContent > table > tbody > tr > td {
  display: inline-flex !important;
  flex: 0 0 auto !important;
  align-items: center !important;
  padding: 0 !important;
  background: transparent !important;
  border: 0 !important;
  white-space: nowrap !important;
  width: auto !important;
  min-width: 0 !important;
}

/* gwt-CheckBox внутри «Вид торговой процедуры» — input и label в одну
   строку (input слева, текст справа). */
body:has(#filter-toggle:checked) .filterPanel tr.nmck-checkbox-grid-h .gwt-CheckBox,
body:has(#filter-toggle:checked) .filterPanel tr.nmck-checkbox-grid-h span.gwt-CheckBox {
  display: inline-flex !important;
  flex-direction: row !important;
  align-items: center !important;
  gap: 6px !important;
  white-space: nowrap !important;
}

body:has(#filter-toggle:checked) .filterPanel tr.nmck-checkbox-grid-h .gwt-CheckBox label {
  display: inline-block !important;
  font-family: var(--font-body, 'Geologica', sans-serif) !important;
  font-size: 12.5px !important;
  font-weight: 400 !important;
  line-height: 1.3 !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  color: var(--ink-700, #2C3E52) !important;
  margin: 0 !important;
  cursor: pointer !important;
}

body:has(#filter-toggle:checked) .filterPanel tr.nmck-checkbox-grid-h .gwt-CheckBox input[type="checkbox"] {
  margin: 0 !important;
  width: 16px !important;
  height: 16px !important;
  flex-shrink: 0 !important;
  accent-color: var(--brand-blue-500, #0665E6) !important;
}

/* Карточки с одиночным текст-инпутом (Организатор, Заказчик) — input на
   всю ширину карточки. Перебиваем общее правило min/max-width 110px,
   которое было для парных от/до.
   Особенность GWT: input лежит под цепочкой вложенных <table>/<tbody>/<tr>/<td>
   которые по умолчанию shrink-to-fit и не пропускают 100% наружу. Поэтому
   ниже принудительно растягиваем КАЖДЫЙ промежуточный уровень на 100%.
   Важно: НЕ менять display: tables должны остаться table-* чтобы grid
   снаружи не сломался (TR — grid-item, нельзя делать block). */
body:has(#filter-toggle:checked) .filterPanel tr.nmck-text-input .blockPanelContent,
body:has(#filter-toggle:checked) .filterPanel tr.nmck-text-input .blockPanelContent > table,
body:has(#filter-toggle:checked) .filterPanel tr.nmck-text-input .blockPanelContent > table > tbody,
body:has(#filter-toggle:checked) .filterPanel tr.nmck-text-input .blockPanelContent > table > tbody > tr,
body:has(#filter-toggle:checked) .filterPanel tr.nmck-text-input .blockPanelContent table.fullWidth,
body:has(#filter-toggle:checked) .filterPanel tr.nmck-text-input .blockPanelContent table.fullWidth > tbody,
body:has(#filter-toggle:checked) .filterPanel tr.nmck-text-input .blockPanelContent table.fullWidth > tbody > tr {
  width: 100% !important;
}

body:has(#filter-toggle:checked) .filterPanel tr.nmck-text-input .blockPanelContent td,
body:has(#filter-toggle:checked) .filterPanel tr.nmck-text-input .blockPanelContent td.textFieldValue {
  width: 100% !important;
}

body:has(#filter-toggle:checked) .filterPanel tr.nmck-text-input input.gwt-TextBox,
body:has(#filter-toggle:checked) .filterPanel tr.nmck-text-input input.textField,
body:has(#filter-toggle:checked) .filterPanel tr.nmck-text-input input.labelInside,
body:has(#filter-toggle:checked) .filterPanel tr.nmck-text-input input[type="text"] {
  width: 100% !important;
  min-width: 0 !important;
  max-width: 100% !important;
  box-sizing: border-box !important;
  display: block !important;
}

/* «Особенности проведения»: чекбокс СЛЕВА, текст СПРАВА. Переопределяем
   row-reverse / text-align:right из legacy CSS. */
body:has(#filter-toggle:checked) .filterPanel tr.nmck-feature-card label.gwt-CheckBox {
  display: flex !important;
  flex-direction: row !important;
  align-items: flex-start !important;
  justify-content: flex-start !important;
  text-align: left !important;
  gap: 10px !important;
  width: 100% !important;
  margin: 0 0 8px 0 !important;
}

body:has(#filter-toggle:checked) .filterPanel tr.nmck-feature-card label.gwt-CheckBox > * {
  text-align: left !important;
  white-space: normal !important;
  flex: 1 1 auto !important;
  font-size: 13px !important;
  line-height: 1.4 !important;
  color: var(--ink-700, #2C3E52) !important;
}

body:has(#filter-toggle:checked) .filterPanel tr.nmck-feature-card label.gwt-CheckBox input[type="checkbox"] {
  flex: 0 0 auto !important;
  margin: 2px 0 0 0 !important;
  align-self: flex-start !important;
}

/* GWT-DialogBox — popup выбора региона / ОКПД2 (после клика «Выбрать»).
   Узкие селекторы (.gwt-DialogBox + .gwt-DialogBoxGlass) — проверено
   что они НЕ существуют до клика «Выбрать» (см. JS-инспекцию), поэтому
   стилизация безопасна и не влияет на шапку/sidebar.

   z-index 99999 — поверх нашего filter-popup (9000). */
.gwt-DialogBox {
  background: var(--surface-card, #fff) !important;
  border: 1px solid var(--border-subtle, #EBF0F6) !important;
  border-radius: var(--r-md, 10px) !important;
  box-shadow: var(--shadow-lg, 0 16px 40px rgba(15, 24, 42, 0.14)) !important;
  font-family: var(--font-body, 'Geologica', sans-serif) !important;
  color: var(--ink-1000, #0A0E17) !important;
  z-index: 99999 !important;
  overflow: hidden !important;
}

.gwt-DialogBoxGlass {
  background: rgba(10, 23, 53, 0.45) !important;
  -webkit-backdrop-filter: blur(2px) !important;
  backdrop-filter: blur(2px) !important;
  opacity: 1 !important;
  z-index: 99998 !important;
}

/* Caption (заголовок «Выбор регионов поставки») */
.gwt-DialogBox .Caption,
.gwt-DialogBox .gwt-DialogBox-caption {
  font-family: var(--font-display, 'Onest', sans-serif) !important;
  font-size: 14px !important;
  font-weight: 700 !important;
  letter-spacing: 0.04em !important;
  text-transform: uppercase !important;
  color: var(--ink-1000, #0A0E17) !important;
  background: var(--ink-050, #F5F8FB) !important;
  padding: 12px 16px !important;
  border: 0 !important;
  border-bottom: 1px solid var(--border-subtle, #EBF0F6) !important;
  cursor: move !important;
}

/* dialog* helper-cells (rounded corners) убираем — мы дали border-radius
   самому .gwt-DialogBox через overflow:hidden */
.gwt-DialogBox .dialogTopLeft,
.gwt-DialogBox .dialogTopLeftInner,
.gwt-DialogBox .dialogTopCenter,
.gwt-DialogBox .dialogTopCenterInner,
.gwt-DialogBox .dialogTopRight,
.gwt-DialogBox .dialogTopRightInner,
.gwt-DialogBox .dialogMiddleLeft,
.gwt-DialogBox .dialogMiddleLeftInner,
.gwt-DialogBox .dialogMiddleRight,
.gwt-DialogBox .dialogMiddleRightInner,
.gwt-DialogBox .dialogBottomLeft,
.gwt-DialogBox .dialogBottomLeftInner,
.gwt-DialogBox .dialogBottomCenter,
.gwt-DialogBox .dialogBottomCenterInner,
.gwt-DialogBox .dialogBottomRight,
.gwt-DialogBox .dialogBottomRightInner {
  background: transparent !important;
  border: 0 !important;
  padding: 0 !important;
}

/* Body GWT-DialogBox */
.gwt-DialogBox .dialogContent,
.gwt-DialogBox .popupContent,
.gwt-DialogBox .gwt-DialogBox-content {
  background: transparent !important;
  padding: 16px !important;
}

/* Кнопки внутри GWT-DialogBox — primary blue, ghost (.grey) */
.gwt-DialogBox .gwt-Button,
.gwt-DialogBox button.gwt-Button {
  font-family: var(--font-body, 'Geologica', sans-serif) !important;
  font-size: 13px !important;
  font-weight: 600 !important;
  padding: 8px 16px !important;
  min-height: 36px !important;
  border-radius: var(--r-sm, 6px) !important;
  border: 0 !important;
  background: var(--brand-blue-500, #0665E6) !important;
  color: #fff !important;
  cursor: pointer !important;
  transition: background 160ms cubic-bezier(.2, 0, 0, 1) !important;
}

.gwt-DialogBox .gwt-Button:hover {
  background: var(--brand-blue-600, #0553C7) !important;
}

.gwt-DialogBox .gwt-Button.grey,
.gwt-DialogBox .gwt-Button[title*="Отмена" i],
.gwt-DialogBox .gwt-Button:nth-of-type(2) {
  background: var(--surface-card, #fff) !important;
  color: var(--ink-700, #2C3E52) !important;
  border: 1px solid var(--ink-200, #D0DCE8) !important;
}

.gwt-DialogBox .gwt-Button.grey:hover,
.gwt-DialogBox .gwt-Button[title*="Отмена" i]:hover,
.gwt-DialogBox .gwt-Button:nth-of-type(2):hover {
  background: var(--ink-050, #F5F8FB) !important;
  color: var(--ink-1000, #0A0E17) !important;
  border-color: var(--ink-300, #B6C3D2) !important;
}

/* Inputs внутри dialog'а */
.gwt-DialogBox input[type="text"],
.gwt-DialogBox input.gwt-TextBox,
.gwt-DialogBox input.textField {
  border: 1px solid var(--ink-200, #D0DCE8) !important;
  border-radius: var(--r-sm, 6px) !important;
  padding: 8px 10px !important;
  font-size: 13px !important;
  font-family: var(--font-body, 'Geologica', sans-serif) !important;
  min-height: 32px !important;
  background: var(--surface-card, #fff) !important;
  color: var(--ink-1000, #0A0E17) !important;
}

.gwt-DialogBox input[type="text"]:focus,
.gwt-DialogBox input.gwt-TextBox:focus {
  border-color: var(--brand-blue-500, #0665E6) !important;
  outline: none !important;
  box-shadow: 0 0 0 3px rgba(6, 101, 230, 0.12) !important;
}

/* «Особенности проведения» (.nmck-feature-card) — длинный текст чекбоксов
   wrap'ится, ничего не выходит за карточку. */
body:has(#filter-toggle:checked) .filterPanel tr.nmck-feature-card label.gwt-CheckBox,
body:has(#filter-toggle:checked) .filterPanel tr.nmck-feature-card label.gwt-CheckBox span {
  white-space: normal !important;
  line-height: 1.35 !important;
}

body:has(#filter-toggle:checked) .filterPanel tr.nmck-feature-card label.gwt-CheckBox {
  display: flex !important;
  align-items: flex-start !important;
  gap: 8px !important;
  width: 100% !important;
  margin: 0 0 6px 0 !important;
  font-size: 13px !important;
}

body:has(#filter-toggle:checked) .filterPanel tr.nmck-feature-card label.gwt-CheckBox input[type="checkbox"] {
  flex-shrink: 0 !important;
  margin-top: 2px !important;
}

/* GWT-PopupPanel (выбор региона/ОКПД через кнопку «Выбрать»): эти
   попапы создаются GWT динамически в body на верхнем уровне DOM с
   позицией fixed, но БЕЗ z-index. На фоне нашего filter-popup
   (z-index: 9000) они оказываются под ним. Поднимаем их выше. */
/* z-index для GWT-popup'ов — TODO позже, нужен узкий селектор
   (id или role), чтобы не задеть скрытые wrapper'ы в шапке/sidebar. */

/* «Особенности проведения» card — длинный текст чекбоксов («Только для
   субъектов малого…») вылазит за карточку. Растягиваем на 2 grid-column. */
body:has(#filter-toggle:checked) .filterPanel tr:has(label.gwt-CheckBox span:not(:empty)) {
  /* Heuristic: если внутри есть длинные label-текст чекбоксов
     (типичный признак — содержательный <span> при чекбоксе), растянуть. */
  /* Не применяем универсально — только если есть 2+ чекбокса с текстом */
}

/* «Особенности проведения» — карточка с 2+ длинными чекбокс-label'ами:
   растягиваем на 2 grid-колонки чтобы тексты не наезжали.
   Идентификатор: tr содержит ≥2 чекбокс-label'а, по которым нет блока «.spf»
   (что отличает её от «Вид торговой процедуры» где label'ы короткие). */
body:has(#filter-toggle:checked) .filterPanel tr:has(label.gwt-CheckBox + label.gwt-CheckBox):not(:has(button.gwt-Button)) {
  grid-column: span 2 !important;
}

/* Чекбоксы внутри «особенностей» — vertical stack, full-width */
body:has(#filter-toggle:checked) .filterPanel label.gwt-CheckBox:has(span) {
  display: flex !important;
  align-items: flex-start !important;
  white-space: normal !important;
  line-height: 1.35 !important;
  font-size: 12px !important;
  margin: 0 0 4px 0 !important;
}

/* Inputs «Наименование, ИНН» (Организатор/Заказчик) — full width карточки,
   placeholder не должен обрезаться */
body:has(#filter-toggle:checked) .filterPanel tr input[type="text"],
body:has(#filter-toggle:checked) .filterPanel tr input.gwt-TextBox,
body:has(#filter-toggle:checked) .filterPanel tr input.textField {
  width: 100% !important;
  min-width: 0 !important;
  max-width: 100% !important;
  box-sizing: border-box !important;
  text-overflow: ellipsis !important;
}

/* Date-input («Дата публикации/завершения») — нормальный размер.
   Сужено только до .nmck-pair-input — иначе перекрывает .nmck-text-input. */
body:has(#filter-toggle:checked) .filterPanel tr.nmck-pair-input > td table.blockPanel input[type="text"],
body:has(#filter-toggle:checked) .filterPanel tr.nmck-pair-input > td table.blockPanel input.gwt-TextBox,
body:has(#filter-toggle:checked) .filterPanel tr.nmck-pair-input > td table.blockPanel input.textField {
  width: 100px !important;
  min-width: 100px !important;
}

/* Кнопки фильтра — «Найти» и «Сбросить» лежат в одной filter-tr, но
   внутри отдельных вложенных <table class="blockPanel"> > tbody > tr > td.
   Делаем inner table/tbody/tr "прозрачными" через display:contents,
   чтобы кнопки сразу оказались как flex-children в td-карточке. */
body:has(#filter-toggle:checked) .filterPanel tr:has(button.gwt-Button) {
  background: transparent !important;
  border: 0 !important;
  grid-column: 1 / -1 !important;
}

body:has(#filter-toggle:checked) .filterPanel tr:has(button.gwt-Button) > td {
  display: flex !important;
  flex-direction: row !important;
  justify-content: flex-end !important;
  align-items: center !important;
  gap: 8px !important;
  padding: 8px 0 0 !important;
  width: 100% !important;
}

body:has(#filter-toggle:checked) .filterPanel tr:has(button.gwt-Button) > td > table.blockPanel,
body:has(#filter-toggle:checked) .filterPanel tr:has(button.gwt-Button) > td > table.blockPanel > tbody,
body:has(#filter-toggle:checked) .filterPanel tr:has(button.gwt-Button) > td > table.blockPanel > tbody > tr {
  display: contents !important;
}

body:has(#filter-toggle:checked) .filterPanel tr:has(button.gwt-Button) > td > table.blockPanel > tbody > tr > td {
  display: inline-flex !important;
  align-items: center !important;
  width: auto !important;
  padding: 0 !important;
  white-space: nowrap !important;
  background: transparent !important;
}

/* Скрываем .blockPanelTitle (заголовок) у row с кнопками — ему там нечего */
body:has(#filter-toggle:checked) .filterPanel tr:has(button.gwt-Button) .blockPanelTitle {
  display: none !important;
}

/* Заголовок поля (label) — uppercase mono, sm */
body:has(#filter-toggle:checked) .filterPanel tr > td > b,
body:has(#filter-toggle:checked) .filterPanel tr > td > strong,
body:has(#filter-toggle:checked) .filterPanel tr > td label:not(.gwt-CheckBox):not(.gwt-RadioButton),
body:has(#filter-toggle:checked) .filterPanel tr > td .gwt-Label:first-child,
body:has(#filter-toggle:checked) .filterPanel tr > td .label:first-child {
  display: block !important;
  margin: 0 0 2px !important;
  font-family: var(--font-mono, 'JetBrains Mono', monospace) !important;
  font-size: 10px !important;
  font-weight: 700 !important;
  letter-spacing: 0.08em !important;
  text-transform: uppercase !important;
  color: var(--ink-500, #5E7A90) !important;
}

/* Inputs — компактные, brand */
body:has(#filter-toggle:checked) .filterPanel tr input.gwt-TextBox,
body:has(#filter-toggle:checked) .filterPanel tr input.textField,
body:has(#filter-toggle:checked) .filterPanel tr input[type="text"],
body:has(#filter-toggle:checked) .filterPanel tr input[type="number"],
body:has(#filter-toggle:checked) .filterPanel tr select {
  font-family: var(--font-body, 'Geologica', sans-serif) !important;
  font-size: 13px !important;
  padding: 6px 10px !important;
  min-height: 32px !important;
  height: 32px !important;
  width: 100% !important;
  box-sizing: border-box !important;
  border: 1px solid var(--ink-200, #D0DCE8) !important;
  border-radius: var(--r-sm, 6px) !important;
  background: var(--surface-card, #fff) !important;
  color: var(--ink-1000, #0A0E17) !important;
  transition: border-color 120ms cubic-bezier(.2, 0, 0, 1),
              box-shadow 120ms cubic-bezier(.2, 0, 0, 1) !important;
}

body:has(#filter-toggle:checked) .filterPanel tr input:focus,
body:has(#filter-toggle:checked) .filterPanel tr select:focus {
  border-color: var(--brand-blue-500, #0665E6) !important;
  box-shadow: 0 0 0 3px rgba(6, 101, 230, 0.12) !important;
  outline: none !important;
}

/* Карточка не обрезает контент (input «до» иначе уходит за край) */
body:has(#filter-toggle:checked) .filterPanel tr,
body:has(#filter-toggle:checked) .filterPanel tr > td {
  overflow: visible !important;
}

/* Внутренний blockPanel-table (GWT) — на всю ширину карточки */
body:has(#filter-toggle:checked) .filterPanel tr > td table.blockPanel,
body:has(#filter-toggle:checked) .filterPanel tr > td > table {
  width: 100% !important;
  table-layout: auto !important;
}

/* Заголовок поля (.blockPanelTitle) — жирный uppercase mono сверху */
body:has(#filter-toggle:checked) .filterPanel .blockPanelTitle {
  position: relative !important;
  overflow: visible !important;
  margin: 0 0 6px !important;
  padding: 0 !important;
  background: transparent !important;
}

body:has(#filter-toggle:checked) .filterPanel .blockPanelTitleLabel {
  font-family: var(--font-mono, 'JetBrains Mono', monospace) !important;
  font-size: 10px !important;
  font-weight: 700 !important;
  letter-spacing: 0.08em !important;
  text-transform: uppercase !important;
  color: var(--ink-500, #5E7A90) !important;
  margin: 0 !important;
  padding: 0 !important;
  background: transparent !important;
}

/* Кнопки Expand/Clear на blockPanelTitle — мешают, скрываем */
body:has(#filter-toggle:checked) .filterPanel .blockPanelExpandButton,
body:has(#filter-toggle:checked) .filterPanel .blockPanelClearButton {
  display: none !important;
}

/* Внутренние tr-tds (нет блочности — оставляем table-layout) */
body:has(#filter-toggle:checked) .filterPanel tr > td table.blockPanel tr,
body:has(#filter-toggle:checked) .filterPanel tr > td > table tr {
  display: table-row !important;
  background: transparent !important;
  border: 0 !important;
}

body:has(#filter-toggle:checked) .filterPanel tr > td table.blockPanel td,
body:has(#filter-toggle:checked) .filterPanel tr > td > table td {
  display: table-cell !important;
  padding: 2px 4px 2px 0 !important;
  background: transparent !important;
  border: 0 !important;
  vertical-align: middle !important;
  white-space: nowrap !important;
  font-size: 12px !important;
}

/* Input'ы внутри парных «от/до» — компактные.
   ВАЖНО: применять только к карточкам с tag .nmck-pair-input
   (Цена/Обеспечение/Аванс/Даты), чтобы не зажимать .nmck-text-input
   (Организатор/Заказчик), где нужен полный 100% ширины. */
body:has(#filter-toggle:checked) .filterPanel tr.nmck-pair-input > td table.blockPanel input.gwt-TextBox,
body:has(#filter-toggle:checked) .filterPanel tr.nmck-pair-input > td table.blockPanel input.textField {
  width: 90px !important;
  min-width: 0 !important;
  max-width: 100% !important;
  height: 28px !important;
  min-height: 28px !important;
  padding: 4px 8px !important;
}

/* Чекбоксы и radio внутри поля — flex-row, gap */
body:has(#filter-toggle:checked) .filterPanel label.gwt-CheckBox,
body:has(#filter-toggle:checked) .filterPanel label.gwt-RadioButton {
  display: inline-flex !important;
  align-items: center !important;
  gap: 6px !important;
  margin: 0 8px 4px 0 !important;
  font-family: var(--font-body, 'Geologica', sans-serif) !important;
  font-size: 12.5px !important;
  font-weight: 400 !important;
  text-transform: none !important;
  letter-spacing: 0 !important;
  color: var(--ink-700, #2C3E52) !important;
  cursor: pointer !important;
}

body:has(#filter-toggle:checked) .filterPanel input[type="checkbox"],
body:has(#filter-toggle:checked) .filterPanel input[type="radio"] {
  width: 16px !important;
  height: 16px !important;
  margin: 0 !important;
  accent-color: var(--brand-blue-500, #0665E6) !important;
  cursor: pointer !important;
  flex-shrink: 0 !important;
}

/* Кнопки фильтра — последняя карточка с «Найти / Сбросить» */
body:has(#filter-toggle:checked) .filterPanel tr:has(button.gwt-Button) {
  background: transparent !important;
  border: 0 !important;
  grid-column: 1 / -1 !important; /* во всю ширину */
}

body:has(#filter-toggle:checked) .filterPanel tr:has(button.gwt-Button) > td {
  flex-direction: row !important;
  justify-content: flex-end !important;
  gap: 8px !important;
  padding: 8px 0 0 !important;
}

body:has(#filter-toggle:checked) .filterPanel button.gwt-Button,
body:has(#filter-toggle:checked) .filterPanel .gwt-Button {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  font-family: var(--font-body, 'Geologica', sans-serif) !important;
  font-size: 13px !important;
  font-weight: 600 !important;
  padding: 8px 16px !important;
  min-height: 36px !important;
  height: 36px !important;
  border-radius: var(--r-sm, 6px) !important;
  border: 0 !important;
  cursor: pointer !important;
  background: var(--brand-blue-500, #0665E6) !important;
  color: #fff !important;
  transition: background 160ms cubic-bezier(.2, 0, 0, 1) !important;
}

body:has(#filter-toggle:checked) .filterPanel button.gwt-Button:hover,
body:has(#filter-toggle:checked) .filterPanel .gwt-Button:hover {
  background: var(--brand-blue-600, #0553C7) !important;
}

/* Вторая кнопка («Сбросить») — ghost-стиль */
body:has(#filter-toggle:checked) .filterPanel tr:has(button.gwt-Button) button.gwt-Button:nth-of-type(n+2),
body:has(#filter-toggle:checked) .filterPanel button.gwt-Button[title*="Сбросить"],
body:has(#filter-toggle:checked) .filterPanel button.gwt-Button[title*="сброс"i] {
  background: var(--surface-card, #fff) !important;
  color: var(--ink-700, #2C3E52) !important;
  border: 1px solid var(--ink-200, #D0DCE8) !important;
}

body:has(#filter-toggle:checked) .filterPanel tr:has(button.gwt-Button) button.gwt-Button:nth-of-type(n+2):hover {
  background: var(--ink-050, #F5F8FB) !important;
  border-color: var(--ink-300, #B6C3D2) !important;
  color: var(--ink-1000, #0A0E17) !important;
}

/* Заголовок «ФИЛЬТР» внутри попапа — на всю ширину */
body:has(#filter-toggle:checked) #nmck-filter-panel .nmck-lk-title,
body:has(#filter-toggle:checked) .filterPanel > .title {
  display: block !important;
  width: 100% !important;
  margin: 0 0 16px 0 !important;
  padding: 0 !important;
  border: 0 !important;
  background: none !important;
  font-family: var(--font-display, 'Onest', sans-serif) !important;
  font-size: 14px !important;
  font-weight: 700 !important;
  color: var(--ink-1000, #0A0E17) !important;
  text-transform: uppercase !important;
  letter-spacing: 0.08em !important;
}

body:has(#filter-toggle:checked) #nmck-filter-panel .nmck-lk-title::after,
body:has(#filter-toggle:checked) .filterPanel > .title::after {
  display: none !important;
}

/* ════════════════════════════════════════════════════════════
   1.6. POPUP «Личный кабинет» — fixed-карточка под шапкой справа
   В нормальном состоянии .left_side (sidebar с .login_form) скрыт.
   При :has(#lk-toggle:checked) — выезжает справа сверху как popover.
   ════════════════════════════════════════════════════════════ */

/* Левая колонка таблицы #content_table сжимается до 0 — больше нет
   sidebar'а. Контент td.ct-content занимает всю ширину.
   ВАЖНО: НЕ ставим display:none на этой td, иначе все потомки
   (включая aside.left_side, который при clicks lk-toggle становится
   position:fixed) тоже окажутся под display:none каскадно — и попап
   не сможет отрендериться. */
#content_table.ds-page-table > tbody > tr > td.ct-cell.ct-left {
  width: 0 !important;
  min-width: 0 !important;
  max-width: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  overflow: visible !important; /* aside может выпадать из td */
}

/* Sidebar скрыт по умолчанию.
   ВАЖНО: torgi.js при загрузке перемещает <aside class="left_side"> ИЗ
   <td.ct-left> ВНУТРЬ <div id="nmck-lk-panel">. Поэтому если поставить
   `display: none` на #nmck-lk-panel, aside становится потомком display:none
   и не может быть показан как fixed-popup даже при :checked.
   Вместо display:none используем visibility:hidden + height/width/overflow,
   чтобы panel не занимала места, но aside-потомок мог переопределить
   visibility:visible при открытии попапа. */
#nmck-lk-panel {
  visibility: hidden !important;
  height: 0 !important;
  width: 0 !important;
  padding: 0 !important;
  margin: 0 !important;
  border: 0 !important;
  overflow: hidden !important;
  pointer-events: none !important;
}

aside.left_side,
.left_side.ds-sidebar {
  display: none !important;
  visibility: hidden !important;
}

/* TD-обёртка LK-панели: коллапсируем до 0 без display:none — иначе таблица
   .searchPanel перераспределяет ширину между оставшимися ячейками,
   и фильтр-панель растягивается на полстраницы. */
#nmck-lk-td {
  width: 0 !important;
  min-width: 0 !important;
  max-width: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  overflow: hidden !important;
}

/* Также убираем spacing у table-grid (ct-spacing был под sidebar) */
#content_table.ds-page-table {
  border-spacing: 0 !important;
  margin-left: 0 !important;
  width: 100% !important;
}

/* Overlay-label: занимает viewport, при клике снимает чекбокс.
   z-index: 1 — намеренно низкий. Попап LK имеет z-index 9000, должен
   перекрывать overlay в hit-test'е. */
.lk-overlay {
  position: fixed !important;
  top: 0 !important;
  left: 0 !important;
  right: 0 !important;
  bottom: 0 !important;
  background: rgba(10, 23, 53, 0.45) !important;
  -webkit-backdrop-filter: blur(2px) !important;
  backdrop-filter: blur(2px) !important;
  opacity: 0 !important;
  visibility: hidden !important;
  pointer-events: none !important;
  cursor: pointer !important;
  z-index: 1 !important;
  transition:
    opacity 220ms cubic-bezier(.2, 0, 0, 1),
    visibility 0s linear 220ms !important;
}

body:has(#lk-toggle:checked) .lk-overlay {
  opacity: 1 !important;
  visibility: visible !important;
  pointer-events: auto !important;
  transition:
    opacity 220ms cubic-bezier(.2, 0, 0, 1),
    visibility 0s linear 0s !important;
}

/* При :checked возвращаем visibility:visible на ancestor'е, чтобы каскад
   не подавлял видимость aside-попапа. И на сам aside — переопределяем все
   скрывающие правила.
   ВАЖНО: overflow:visible нужен здесь — иначе hit-test (клики на содержимое
   попапа) блокируется на parent overflow:hidden, даже если aside fixed. */
body:has(#lk-toggle:checked) #nmck-lk-panel,
body:has(#lk-toggle:checked) #nmck-lk-td,
body:has(#lk-toggle:checked) #content_table.ds-page-table > tbody > tr > td.ct-cell.ct-left {
  visibility: visible !important;
  pointer-events: auto !important;
  overflow: visible !important;
}

body:has(#lk-toggle:checked) aside.left_side {
  display: block !important;
  visibility: visible !important;
  position: fixed !important;
  top: calc(32px + 72px + 8px) !important;   /* под topstrip + header + 8px */
  /* The header content is centred at max 1440px, so on wide monitors the
     popover must follow the container edge (under the launcher button),
     not the viewport edge. */
  right: max(32px, calc((100vw - 1440px) / 2 + 24px)) !important;
  width: 380px !important;
  max-width: calc(100vw - 64px) !important;
  max-height: calc(100vh - 120px) !important;
  overflow-y: auto !important;
  /* Z-index ВЫШЕ overlay (105). 9000 — чтобы перебить любые другие stacking. */
  z-index: 9000 !important;
  isolation: isolate !important;
  /* Анимация появления */
  animation: lkPopIn 220ms cubic-bezier(.2, 0, 0, 1) both !important;
  /* Сбрасываем legacy `.left_side` margins/floats */
  margin: 0 !important;
  padding: 0 !important;
  float: none !important;
  pointer-events: auto !important;
}

@keyframes lkPopIn {
  from {
    opacity: 0;
    transform: translateY(-8px) scale(0.96);
  }
  to {
    opacity: 1;
    transform: translateY(0) scale(1);
  }
}

/* Внутренний .login_form внутри попапа — сохраняем стилизацию карточки,
   но убираем margin (он внутри popover'а уже занимает всё). */
body:has(#lk-toggle:checked) aside.left_side .login_form {
  margin-bottom: 0 !important;
  border-radius: var(--r-md, 10px) !important;
}

/* Заголовок-источник «Личный кабинет» (.nmck-lk-title) внутри
   #nmck-lk-panel — это ВИЗУАЛЬНЫЙ заголовок ОЛД-блока ЛК слева в
   GWT-странице SearchLots. При открытии нашего попапа aside.left_side
   становится position:fixed, и одновременно становится виден его
   родитель #nmck-lk-panel — а значит и .nmck-lk-title слева.
   Скрываем все ПРЯМЫЕ дочерние элементы #nmck-lk-panel КРОМЕ aside —
   тогда title (и любой другой левый GWT-фрагмент) не показывается,
   а aside-popup отлично виден. */
body:has(#lk-toggle:checked) #nmck-lk-panel > *:not(aside.left_side) {
  display: none !important;
  visibility: hidden !important;
}

/* Заголовок ВНУТРИ попапа (.login_form > .title) — нужен пользователю.
   torgi.css скрывает его через `#nmck-lk-panel .login_form .title`
   (3-классовая специфичность) — перебиваем с !important и более
   специфичным селектором при :checked. */
body:has(#lk-toggle:checked) aside.left_side .login_form > .title,
body:has(#lk-toggle:checked) #nmck-lk-panel aside.left_side .login_form > .title,
body:has(#lk-toggle:checked) #nmck-lk-panel .login_form .title {
  display: block !important;
  visibility: visible !important;
}

/* Убираем любые decorator-иконки которые добавляет rui.pack.js / GWT
   к input'ам (красные «...» / «error» иконки). */
body:has(#lk-toggle:checked) aside.left_side .spf-input::after,
body:has(#lk-toggle:checked) aside.left_side .spf-login-input::after,
body:has(#lk-toggle:checked) aside.left_side .spf-input::before,
body:has(#lk-toggle:checked) aside.left_side .spf-login-input::before,
body:has(#lk-toggle:checked) aside.left_side .rui-icon,
body:has(#lk-toggle:checked) aside.left_side .rui-info-icon,
body:has(#lk-toggle:checked) aside.left_side .rui-help-icon,
body:has(#lk-toggle:checked) aside.left_side .gwt-PromptingTextBox-prompt,
body:has(#lk-toggle:checked) aside.left_side div[id*="rui-tip"],
body:has(#lk-toggle:checked) aside.left_side .help_pic,
body:has(#lk-toggle:checked) aside.left_side .input-error,
body:has(#lk-toggle:checked) aside.left_side .spf-input > div:not(.spf-line):not(.spf-input):not(.spf-login-input):not(:has(input)),
body:has(#lk-toggle:checked) aside.left_side .spf-login-input > div:not(.spf-line):not(.spf-input):not(.spf-login-input):not(:has(input)) {
  display: none !important;
  visibility: hidden !important;
}

/* Скрываем всякие баннеры (.line-margin-bottom) внутри попапа — они
   нужны были на десктоп-сайдбаре, в попапе только login form. */
body:has(#lk-toggle:checked) aside.left_side > .line-margin-bottom,
body:has(#lk-toggle:checked) aside.left_side > div[jwcid*="If"]:not(:first-child) {
  display: none !important;
}

/* Скролл-бар внутри попапа */
body:has(#lk-toggle:checked) aside.left_side::-webkit-scrollbar {
  width: 8px;
}
body:has(#lk-toggle:checked) aside.left_side::-webkit-scrollbar-thumb {
  background: var(--ink-300, #B6C3D2);
  border-radius: 999px;
}

/* ── Логотип: композиция «иконка-знак + текст» (1:1 как на new.etpsp.ru)
   .h-logo (контейнер) → <a.logo> (flex row, gap:10) → <img.logo-mark> 40×40
   + <span.logo-text> (flex column) с «СПЕЦТЕНДЕР» (Onest 18/700) и
   <small> «Электронная торговая площадка» (Geologica 10/500). */
.h-logo {
  flex-shrink: 0 !important;
  height: 40px !important;
  width: auto !important;
  /* Перебиваем legacy `.h-logo { order: 1 }` из torgi.css —
     он толкал logo в конец flex-цепочки, после меню/cta. */
  order: 0 !important;
  /* Старый SVG-фон отключён — теперь композиция через img+text. */
  background: none !important;
  background-image: none !important;
  display: inline-flex !important;
  align-items: center !important;
  mix-blend-mode: normal !important;
}

.h-logo a.logo,
.h-logo > a {
  display: inline-flex !important;
  align-items: center !important;
  gap: 10px !important;
  text-decoration: none !important;
  color: var(--ink-1000, #0A0E17) !important;
  height: 100% !important;
  width: auto !important;
  background: transparent !important;
  border: 0 !important;
  flex-shrink: 0 !important;
}

.h-logo .logo-mark {
  display: block !important;
  width: 40px !important;
  height: 40px !important;
  flex-shrink: 0 !important;
  object-fit: contain !important;
  background: transparent !important;
  border: 0 !important;
  border-radius: 0 !important;
}

.h-logo .logo-text {
  display: inline-flex !important;
  flex-direction: column !important;
  align-items: flex-start !important;
  justify-content: center !important;
  font-family: var(--font-display, 'Onest', 'Inter', system-ui, sans-serif) !important;
  font-size: 18px !important;
  font-weight: 700 !important;
  line-height: 1.1 !important;
  letter-spacing: 0.02em !important;
  color: var(--ink-1000, #0A0E17) !important;
  text-transform: none !important;
  gap: 2px !important;
}

.h-logo .logo-text small {
  display: block !important;
  font-family: var(--font-body, 'Geologica', sans-serif) !important;
  /* 11px is the design-system floor for real (non-decorative) text */
  font-size: 11px !important;
  font-weight: 500 !important;
  line-height: 1.1 !important;
  letter-spacing: 0.04em !important;
  color: var(--ink-500, #4F5B6E) !important;
  text-transform: none !important;
  margin: 0 !important;
}

.h-time__wrapper {
  flex-shrink: 0 !important;
  margin-left: auto !important;
  display: flex !important;
  align-items: center !important;
}

.h-time__wrapper_wrapper {
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
}

.ht-num {
  display: inline-flex !important;
  align-items: center !important;
  gap: 4px !important;
}

.htn-item {
  display: inline-flex !important;
  align-items: center !important;
  position: relative !important;
}

.htn-item + .htn-item::before {
  content: ":" !important;
  color: var(--ink-300, #B6C3D2) !important;
  margin-right: 4px !important;
  font-family: var(--font-mono, 'JetBrains Mono', monospace) !important;
  font-weight: 600 !important;
}

/* Скрываем .h-dark целиком — её nav перенесён в .h-light */
.h-dark,
.h-dark.ds-nav-bar {
  display: none !important;
}

/* Стиль ссылки внутри логотипа (.h-logo > a) — должен покрывать весь блок,
   чтобы клик по логотипу вёл на главную. background-image задан на самой
   .h-logo выше (см. секцию шапки), здесь только размеры/блок-модель. */
.h-logo a {
  text-decoration: none !important;
  display: block !important;
  width: 100% !important;
  height: 100% !important;
  background: transparent !important;
  mix-blend-mode: normal !important;
}

.h-logo .hl-hidden {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  padding: 0 !important;
  margin: -1px !important;
  overflow: hidden !important;
  clip: rect(0, 0, 0, 0) !important;
  white-space: nowrap !important;
  border: 0 !important;
}

/* Часы — тёмные на белой шапке */
.htn-text,
.htn-hours,
.htn-minutes,
.htn-seconds {
  color: var(--ink-1000, #0C1E45) !important;
  font-family: var(--font-mono, 'JetBrains Mono', monospace) !important;
  font-variant-numeric: tabular-nums !important;
  font-weight: 600 !important;
  font-size: 16px !important;
  background: transparent !important;
  letter-spacing: 0.02em !important;
}

.htn-line {
  background: var(--ink-200, #D0DCE8) !important;
}

.ht-location {
  font-family: var(--font-mono, 'JetBrains Mono', monospace) !important;
  font-size: 10px !important;
  color: var(--ink-500, #6F7E92) !important;
  letter-spacing: 0.10em !important;
  text-transform: uppercase !important;
  font-weight: 500 !important;
}

#server_time {
  color: var(--ink-400, #97A8BC) !important;
}

.h-time {
  color: var(--ink-500, #6F7E92) !important;
  font-family: var(--font-mono, 'JetBrains Mono', monospace) !important;
  font-size: 10px !important;
  letter-spacing: 0.08em !important;
  text-transform: uppercase !important;
}

/* Контакты в шапке — тёмные на белой */
.h-light {
  color: var(--ink-700, #324052) !important;
}

.h-light a,
.hc-phone,
.hc-phone a {
  color: var(--ink-700, #324052) !important;
  text-decoration: none !important;
  font-family: var(--font-body, 'Geologica', Arial, sans-serif) !important;
  font-weight: 500 !important;
  font-size: 13px !important;
}

.h-light a:hover,
.hc-phone a:hover {
  color: var(--brand-blue-700, #054BB0) !important;
  text-decoration: none !important;
}

.ho-text {
  color: var(--ink-1000, #0C1E45) !important;
  font-family: var(--font-display, 'Onest', 'Geologica', sans-serif) !important;
  font-weight: 600 !important;
  letter-spacing: 0.01em !important;
  font-size: 13px !important;
  text-transform: uppercase !important;
}

/* ════════════════════════════════════════════════════════════
   2. НАВИГАЦИЯ В ШАПКЕ (.hm-link / .hm-sub)
   .h-dark уже скрыта в секции 1, всё меню теперь внутри .h-light.
   ════════════════════════════════════════════════════════════ */

/* ── .hm-link (стиль .nav-link с new.etpsp.ru) ──
   Главный визуальный приём — анимированное подчёркивание ::after,
   которое разворачивается scaleX(0)→scaleX(1) при наведении.
   На new.etpsp.ru трансформация: 220ms cubic-bezier(.2,0,0,1).
   Цвета: текст в покое --ink-700, на ховере --brand-blue-800,
   индикатор --brand-blue-500. */
.hm-link {
  position: relative !important;
  display: inline-flex !important;
  align-items: center !important;
  gap: 6px !important;
  color: var(--ink-700, #2C3E52) !important;
  font-family: var(--font-body, 'Geologica', Arial, sans-serif) !important;
  font-weight: 500 !important;
  font-size: 14px !important;
  letter-spacing: 0 !important;
  text-decoration: none !important;
  background: transparent !important;
  border: 0 !important;
  border-radius: var(--r-sm, 6px) !important;
  padding: 10px 18px !important;
  height: 100% !important;
  cursor: pointer !important;
  transition:
    color 160ms cubic-bezier(.2, 0, 0, 1),
    background 160ms cubic-bezier(.2, 0, 0, 1) !important;
}

/* Анимированное подчёркивание (узнаваемый эффект new.etpsp.ru) */
.hm-link::after {
  content: "" !important;
  position: absolute !important;
  left: 12px !important;
  right: 12px !important;
  bottom: -1px !important;
  height: 2px !important;
  background: var(--brand-blue-500, #0665E6) !important;
  transform: scaleX(0) !important;
  transform-origin: 50% 50% !important;
  transition: transform 220ms cubic-bezier(.2, 0, 0, 1) !important;
  pointer-events: none !important;
}

.hm-link:hover,
.hm-item:hover > .hm-link,
.hm-link.current,
.hm-item.active > .hm-link {
  color: var(--brand-blue-800, #0849B3) !important;
  background: transparent !important; /* На new.etpsp.ru без подсветки фона */
  text-decoration: none !important;
}

.hm-link:hover::after,
.hm-item:hover > .hm-link::after,
.hm-link.current::after,
.hm-item.active > .hm-link::after {
  transform: scaleX(1) !important;
}

/* Каретка (▾) рядом с пунктом-родителем — визуально отделим от текста */
.hm-link .caret {
  font-size: 10px !important;
  color: var(--ink-400, #8394A5) !important;
  transition:
    transform 220ms cubic-bezier(.2, 0, 0, 1),
    color 160ms cubic-bezier(.2, 0, 0, 1) !important;
}

.hm-item:hover .hm-link .caret {
  transform: rotate(180deg) !important;
  color: var(--brand-blue-500, #0665E6) !important;
}

/* ── Подменю (.hm-sub ≈ .dropdown new.etpsp.ru) ── */
.hm-sub {
  /* Перебиваем legacy default.css `.hm-sub { display: none }` и
     torgi.css `nav ul li ul { display: none }` — у нас своя
     opacity/visibility/transform-логика. */
  display: block !important;
  /* Позиционирование: прямо под пунктом меню, по центру; pop-in анимация */
  position: absolute !important;
  top: 100% !important;
  left: 50% !important;
  transform: translate(-50%, 8px) scale(0.96) !important;
  z-index: 95 !important;       /* над nav-backdrop (90), под .header (100) */
  opacity: 0 !important;
  visibility: hidden !important;
  pointer-events: none !important;
  transition:
    opacity 180ms cubic-bezier(.2, 0, 0, 1),
    transform 220ms cubic-bezier(.2, 0, 0, 1),
    visibility 0s linear 220ms !important;

  /* Внешний вид карточки */
  background: var(--surface-card, #fff) !important;
  border: 1px solid var(--border-subtle, #EBF0F6) !important;
  border-radius: var(--r-md, 10px) !important;
  box-shadow: var(--shadow-md, 0 6px 20px rgba(15, 24, 42, 0.10)) !important;
  padding: 6px !important;
  /* Минимальная ширина чтобы дропдаун не схлопывался; для длинных пунктов
     («Приостановленные торги», «Услуги для Заказчиков») — 260px чтобы
     обычно влезали одной строкой. */
  min-width: 260px !important;
  margin: 0 !important;
}

/* Показ дропдауна на hover/focus родительского пункта */
.h-menu .hm-item:hover > .hm-sub,
.h-menu .hm-item:focus-within > .hm-sub {
  opacity: 1 !important;
  visibility: visible !important;
  transform: translate(-50%, 0) scale(1) !important;
  pointer-events: auto !important;
  transition:
    opacity 180ms cubic-bezier(.2, 0, 0, 1),
    transform 220ms cubic-bezier(.2, 0, 0, 1),
    visibility 0s linear 0s !important;
}

.hm-sub li {
  list-style: none !important;
  margin: 0 !important;
  padding: 0 !important;
}

.hm-sub li a,
.hm-sub a {
  position: relative !important;
  display: flex !important;
  align-items: center !important;
  gap: 12px !important;
  color: var(--ink-700, #2C3E52) !important;
  font-family: var(--font-body, 'Geologica', Arial, sans-serif) !important;
  font-size: 14px !important;
  font-weight: 500 !important;
  border-radius: var(--r-sm, 6px) !important;
  text-decoration: none !important;
  padding: 10px 14px !important;
  background: transparent !important;
  /* Перебиваем torgi.css `nav ul li a { white-space: nowrap }` —
     длинные пункты («Приостановленные торги») должны wrap'ить, а не
     обрезаться. */
  white-space: normal !important;
  overflow: visible !important;
  word-wrap: break-word !important;
  line-height: 1.35 !important;
  transition:
    background 160ms cubic-bezier(.2, 0, 0, 1),
    color 160ms cubic-bezier(.2, 0, 0, 1),
    transform 220ms cubic-bezier(.2, 0, 0, 1) !important;
}

.hm-sub li a:hover,
.hm-sub a:hover {
  background: var(--brand-blue-050, #F1F6FE) !important;
  color: var(--brand-blue-800, #0849B3) !important;
  text-decoration: none !important;
  /* Лёгкое смещение вправо — узнаваемый микроэффект new.etpsp.ru */
  transform: translateX(2px) !important;
}

/* Иконка-стрелка перед каждым пунктом dropdown'а — стиль new.etpsp.ru.
   На new ставится через <span class="dd-ico"><svg>...</svg></span>, у нас
   через CSS ::before и SVG в data-URL (GWT-генерируемый список не правится). */
.hm-sub li a::before,
.hm-sub a::before {
  content: "" !important;
  flex-shrink: 0 !important;
  width: 22px !important;
  height: 22px !important;
  border-radius: 50% !important;
  background-color: var(--brand-blue-050, #F1F6FE) !important;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%230849B3' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'><line x1='5' y1='12' x2='19' y2='12'/><polyline points='12 5 19 12 12 19'/></svg>") !important;
  background-repeat: no-repeat !important;
  background-position: center !important;
  background-size: 12px 12px !important;
  transition: background-color 160ms cubic-bezier(.2, 0, 0, 1) !important;
}

.hm-sub li a:hover::before,
.hm-sub a:hover::before {
  background-color: var(--brand-blue-500, #0665E6) !important;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'><line x1='5' y1='12' x2='19' y2='12'/><polyline points='12 5 19 12 12 19'/></svg>") !important;
}

/* Скрываем ::before у hm-caption (заголовок группы) — там нет ссылок */
.hm-sub .hm-caption::before {
  display: none !important;
}

/* Заголовки групп «Все»/«Мои» в выпадающем меню: шрифт дизайн-системы вместо
   моноширинного, по центру над своей группой, с тонким разделителем сверху
   у второй группы (12.09, п.35). */
.hm-caption {
  font-family: var(--font-body, 'Geologica', Arial, sans-serif) !important;
  font-size: 11px !important;
  letter-spacing: 0.08em !important;
  text-transform: uppercase !important;
  color: var(--ink-500, #5E7A90) !important;
  font-weight: 700 !important;
  padding: 12px 14px 6px !important;
  text-align: center !important;
}
.hm-sub .hm-caption ~ .hm-caption { margin-top: 6px !important; border-top: 1px solid var(--ink-100, #E4EAF2) !important; }

/* ════════════════════════════════════════════════════════════
   3. ОСНОВНОЙ КОНТЕЙНЕР + H1 СТРАНИЦЫ
   ════════════════════════════════════════════════════════════ */
.wrapper.ds-page-wrapper {
  max-width: 1440px !important;
  margin: 0 auto !important;
  padding: 32px !important;
  background: transparent !important;
}

#content_table.ds-page-table {
  background: transparent !important;
  border-collapse: separate !important;
  border-spacing: 24px 0 !important;
  margin-left: -24px !important;
  width: calc(100% + 24px) !important;
}

#content_table.ds-page-table > tbody > tr > td.ct-cell {
  vertical-align: top !important;
  background: transparent !important;
  padding: 0 !important;
}

#content_table.ds-page-table > tbody > tr > td.ct-cell.ct-left {
  width: 280px !important;
  min-width: 280px !important;
}

.content_indent.ds-content {
  padding: 0 !important;
  background: transparent !important;
  /* ВАЖНО: legacy /etp/css/default.css задаёт `.content_indent { position:
     relative; z-index: 0 }` — это создаёт stacking-context, и aside
     попап (z-index 9000) внутри content_indent оказывается ограничен
     слоем z:0 относительно root. Перебиваем z-index:auto, чтобы
     content_indent НЕ создавал stacking-context. position:static тоже
     убирает изоляцию. */
  position: static !important;
  z-index: auto !important;
}

/* H1 страницы — компактный display-заголовок с orange-полоской */
.content_indent > h1,
.content_indent.ds-content > h1 {
  font-family: var(--font-display, 'Onest', 'Geologica', sans-serif) !important;
  font-size: clamp(24px, 2.6vw, 32px) !important;
  font-weight: 700 !important;
  letter-spacing: -0.02em !important;
  line-height: 1.15 !important;
  color: var(--ink-1000, #0C1E45) !important;
  background: transparent !important;
  margin: 0 0 20px !important;
  padding: 0 0 12px !important;
  position: relative !important;
  display: inline-block !important;
}

.content_indent > h1::after,
.content_indent.ds-content > h1::after {
  content: "" !important;
  position: absolute !important;
  bottom: 0 !important;
  left: 0 !important;
  width: 56px !important;
  height: 3px !important;
  background: var(--brand-orange-500, #EA5B21) !important;
  border-radius: 2px !important;
}

/* ════════════════════════════════════════════════════════════
   4. ПОИСКОВАЯ СТРОКА — карточка с тенью
   ════════════════════════════════════════════════════════════ */
table.searchPanel {
  width: 100% !important;
  background: transparent !important;
  border-collapse: separate !important;
}

/* Поисковая обёртка как карточка */
table.searchPanel input.gwt-TextBox.textField,
table.searchPanel input.gwt-TextBox,
table.searchPanel input.textField,
.queryPanel input[type="text"] {
  border: 1.5px solid var(--ink-200, #D0DCE8) !important;
  border-radius: var(--r-md, 8px) !important;
  padding: 12px 18px !important;
  font-family: var(--font-body, 'Geologica', Arial, sans-serif) !important;
  font-size: 15px !important;
  color: var(--ink-1000, #0C1E45) !important;
  background: var(--surface-card, #fff) !important;
  min-height: 48px !important;
  box-sizing: border-box !important;
  box-shadow: 0 1px 2px rgba(12, 30, 69, 0.05) !important;
  transition: border-color 140ms ease, box-shadow 140ms ease !important;
  width: 100% !important;
}

table.searchPanel input.gwt-TextBox:focus,
table.searchPanel input.textField:focus,
.queryPanel input[type="text"]:focus {
  border-color: var(--brand-blue-500, #0665E6) !important;
  outline: none !important;
  box-shadow: 0 0 0 4px rgba(6, 101, 230, 0.15) !important;
}

.searchPanel input::placeholder,
.queryPanel input::placeholder {
  color: var(--ink-400, #97A8BC) !important;
  font-weight: 400 !important;
}

/* Кнопка поиска */
#doSearch_outer,
#doSearch_outer.button {
  background: var(--brand-blue-500, #0665E6) !important;
  border: none !important;
  border-radius: var(--r-md, 8px) !important;
  cursor: pointer !important;
  box-shadow: 0 2px 8px rgba(6, 101, 230, 0.30) !important;
  transition: background 140ms ease, box-shadow 140ms ease, transform 140ms ease !important;
  min-height: 48px !important;
  min-width: 56px !important;
}

#doSearch_outer:hover,
#doSearch_outer.button:hover {
  background: var(--brand-blue-600, #054BB0) !important;
  box-shadow: 0 6px 16px rgba(6, 101, 230, 0.40) !important;
  transform: translateY(-1px) !important;
}

#doSearch_outer:active,
#doSearch_outer.button:active {
  background: var(--brand-blue-700, #033B8C) !important;
  transform: translateY(0) !important;
}

#doSearch_outer .button_inner,
#doSearch_outer span {
  color: #fff !important;
  font-family: var(--font-body, 'Geologica', Arial, sans-serif) !important;
  font-weight: 600 !important;
  font-size: 14px !important;
  letter-spacing: 0.005em !important;
}

/* ════════════════════════════════════════════════════════════
   5. ФИЛЬТР-ТАБЫ (.filterItem)
   ════════════════════════════════════════════════════════════ */
.filterItem {
  font-family: var(--font-body, 'Geologica', Arial, sans-serif) !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  padding: 9px 18px !important;
  border-radius: var(--r-pill, 999px) !important;
  border: 1.5px solid var(--ink-200, #D0DCE8) !important;
  background: var(--surface-card, #fff) !important;
  color: var(--ink-700, #324052) !important;
  cursor: pointer !important;
  white-space: nowrap !important;
  transition: background 140ms ease, border-color 140ms ease, color 140ms ease, box-shadow 140ms ease !important;
}

.filterItem:hover {
  border-color: var(--brand-blue-300, #6FA9F2) !important;
  color: var(--brand-blue-700, #054BB0) !important;
  background: var(--brand-blue-050, #F1F7FF) !important;
}

.filterItem.selected {
  background: var(--brand-blue-500, #0665E6) !important;
  border-color: var(--brand-blue-500, #0665E6) !important;
  color: #fff !important;
  font-weight: 600 !important;
  box-shadow: 0 4px 12px rgba(6, 101, 230, 0.25) !important;
}

.filterItem.selected:hover {
  background: var(--brand-blue-600, #054BB0) !important;
  border-color: var(--brand-blue-600, #054BB0) !important;
}

.filterItem .gwt-Label {
  color: inherit !important;
  background: transparent !important;
  font-weight: inherit !important;
  font-family: inherit !important;
  font-size: inherit !important;
}

/* Сортировка */
.searchPanel .sort a,
.searchPanel .sortBlock a {
  color: var(--ink-700, #324052) !important;
  text-decoration: none !important;
  font-size: 13px !important;
  padding: 4px 10px !important;
  border-radius: var(--r-sm, 6px) !important;
  transition: background 120ms ease, color 120ms ease !important;
}

.searchPanel .sort a:hover,
.searchPanel .sortBlock a:hover {
  color: var(--brand-blue-700, #054BB0) !important;
  background: var(--brand-blue-050, #F1F7FF) !important;
}

.searchPanel .sort a.selected,
.searchPanel .sortBlock a.selected {
  color: var(--brand-blue-500, #0665E6) !important;
  font-weight: 600 !important;
}

/* ════════════════════════════════════════════════════════════
   6. ТАБЛИЦА ЛОТОВ (.cellTableWidget)
   ════════════════════════════════════════════════════════════ */
.cellTableWidget {
  background: var(--surface-card, #fff) !important;
  border: 1px solid var(--ink-100, #E2EAF3) !important;
  border-radius: var(--r-lg, 14px) !important;
  border-collapse: separate !important;
  border-spacing: 0 !important;
  overflow: hidden !important;
  box-shadow: 0 1px 2px rgba(12, 30, 69, 0.04),
              0 8px 24px rgba(12, 30, 69, 0.06) !important;
  width: 100% !important;
}

.cellTableWidget thead,
.cellTableWidget tr.cellTableHeader {
  background: var(--ink-050, #F5F8FB) !important;
}

.cellTableWidget thead th,
.cellTableWidget thead td,
.cellTableWidget tr.cellTableHeader td,
.cellTableWidget .cellTableHeader {
  font-family: var(--font-mono, 'JetBrains Mono', monospace) !important;
  font-size: 10.5px !important;
  letter-spacing: 0.10em !important;
  color: var(--ink-500, #6F7E92) !important;
  text-transform: uppercase !important;
  font-weight: 700 !important;
  background: linear-gradient(180deg,
    var(--ink-100, #E2EAF3) 0%,
    var(--ink-050, #F5F8FB) 100%) !important;
  border-bottom: 1px solid var(--ink-200, #D0DCE8) !important;
  padding: 14px !important;
  text-align: left !important;
}

.cellTableWidget tbody td {
  font-family: var(--font-body, 'Geologica', Arial, sans-serif) !important;
  font-size: 13px !important;
  color: var(--ink-1000, #0C1E45) !important;
  padding: 16px 14px !important;
  border-bottom: 1px solid var(--ink-100, #E2EAF3) !important;
  background: var(--surface-card, #fff) !important;
  line-height: 1.5 !important;
  vertical-align: top !important;
  transition: background 120ms ease !important;
}

.cellTableWidget tbody tr:last-child td {
  border-bottom: none !important;
}

.cellTableWidget tbody tr:hover td {
  background: var(--brand-blue-050, #F1F7FF) !important;
  cursor: pointer !important;
}

.cellTableWidget tbody td a {
  color: var(--brand-blue-700, #054BB0) !important;
  font-weight: 500 !important;
  text-decoration: none !important;
}

.cellTableWidget tbody td a:hover {
  color: var(--brand-blue-500, #0665E6) !important;
  text-decoration: underline !important;
  text-underline-offset: 2px !important;
}

.cellTableWidget tbody td:nth-child(n+5) {
  font-variant-numeric: tabular-nums !important;
}

/* Бейджи в таблице (от torgi.js) */
.nmck-acronym-badge {
  display: inline-flex !important;
  align-items: center !important;
  padding: 3px 9px !important;
  border-radius: var(--r-pill, 999px) !important;
  font-family: var(--font-mono, 'JetBrains Mono', monospace) !important;
  font-size: 10px !important;
  font-weight: 700 !important;
  letter-spacing: 0.06em !important;
  text-transform: uppercase !important;
  background: var(--brand-blue-050, #F1F7FF) !important;
  color: var(--brand-blue-700, #054BB0) !important;
  border: 1px solid var(--brand-blue-100, #DDE9FB) !important;
  line-height: 1.4 !important;
  white-space: nowrap !important;
}

/* ════════════════════════════════════════════════════════════
   7. ЛЕВЫЙ САЙДБАР: nmck-lk-panel (карточка ЛК)
   ════════════════════════════════════════════════════════════ */
#nmck-lk-panel,
.left_side .login_form {
  background: var(--surface-card, #fff) !important;
  border: 1px solid var(--ink-100, #E2EAF3) !important;
  border-radius: var(--r-lg, 14px) !important;
  box-shadow: 0 1px 2px rgba(12, 30, 69, 0.04),
              0 8px 24px rgba(12, 30, 69, 0.06) !important;
  overflow: hidden !important;
  margin-bottom: 16px !important;
}

#nmck-lk-panel .nmck-lk-title,
.login_form > .title {
  font-family: var(--font-display, 'Onest', 'Geologica', sans-serif) !important;
  font-size: 12px !important;
  font-weight: 700 !important;
  letter-spacing: 0.08em !important;
  color: var(--ink-1000, #0C1E45) !important;
  text-transform: uppercase !important;
  padding: 16px 20px 12px !important;
  margin: 0 !important;
  border-bottom: 1px solid var(--ink-100, #E2EAF3) !important;
  background: linear-gradient(180deg,
    var(--ink-050, #F5F8FB) 0%,
    var(--surface-card, #fff) 100%) !important;
  display: block !important;
  position: relative !important;
}

/* Декоративная полоска под заголовком снята по просьбе заказчика:
   у карточки уже есть border-bottom, а синий акцент дублировал его. */
#nmck-lk-panel .nmck-lk-title::after,
.login_form > .title::after {
  content: none !important;
}

#nmck-lk-panel .login_form,
#nmck-lk-panel .left_side {
  background: transparent !important;
  border: none !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  margin: 0 !important;
}

.login_form .separate_form {
  padding: 16px 20px 20px !important;
}

.login_form .spf-tabs {
  display: flex !important;
  gap: 0 !important;
  margin: 0 -20px 16px !important;
  padding: 0 20px !important;
  border-bottom: 1px solid var(--ink-100, #E2EAF3) !important;
}

.login_form .spf-tabs::after {
  content: "" !important;
  display: none !important;
}

.login_form .spf-tab {
  flex: 1 !important;
  padding: 10px 14px !important;
  font-family: var(--font-body, 'Geologica', Arial, sans-serif) !important;
  font-size: 12.5px !important;
  font-weight: 500 !important;
  color: var(--ink-500, #6F7E92) !important;
  text-decoration: none !important;
  text-align: center !important;
  border-bottom: 2px solid transparent !important;
  margin-bottom: -1px !important;
  cursor: pointer !important;
  transition: color 120ms ease, border-color 120ms ease !important;
  background: transparent !important;
}

.login_form .spf-tab:hover {
  color: var(--brand-blue-700, #054BB0) !important;
  text-decoration: none !important;
}

.login_form .spf-tab.spf-tab_cur {
  color: var(--brand-blue-500, #0665E6) !important;
  border-bottom-color: var(--brand-blue-500, #0665E6) !important;
  font-weight: 600 !important;
}

/* Поля login-формы */
.login_form .spf-content {
  display: flex !important;
  flex-direction: column !important;
  gap: 14px !important;
}

.login_form .spf-line {
  display: flex !important;
  flex-direction: column !important;
  gap: 5px !important;
  margin: 0 !important;
}

.login_form .spf-label {
  font-family: var(--font-mono, 'JetBrains Mono', monospace) !important;
  font-size: 10px !important;
  font-weight: 700 !important;
  letter-spacing: 0.08em !important;
  text-transform: uppercase !important;
  color: var(--ink-500, #6F7E92) !important;
  margin: 0 !important;
}

.login_form .spf-input,
.login_form .spf-login-input {
  position: relative !important;
  margin: 0 !important;
}

.login_form .spf-input input,
.login_form .spf-login-input input {
  width: 100% !important;
  border: 1.5px solid var(--ink-200, #D0DCE8) !important;
  border-radius: var(--r-sm, 6px) !important;
  padding: 9px 12px !important;
  font-family: var(--font-body, 'Geologica', Arial, sans-serif) !important;
  font-size: 13px !important;
  color: var(--ink-1000, #0C1E45) !important;
  background: var(--surface-card, #fff) !important;
  box-sizing: border-box !important;
  height: auto !important;
  min-height: 38px !important;
  transition: border-color 120ms ease, box-shadow 120ms ease !important;
}

.login_form .spf-input input:focus,
.login_form .spf-login-input input:focus {
  border-color: var(--brand-blue-500, #0665E6) !important;
  outline: none !important;
  box-shadow: 0 0 0 3px rgba(6, 101, 230, 0.15) !important;
}

.login_form .spf-input input::placeholder,
.login_form .spf-login-input input::placeholder {
  color: var(--ink-400, #97A8BC) !important;
}

/* Кнопки login */
.login-button-panel {
  display: flex !important;
  flex-direction: column !important;
  gap: 8px !important;
  margin: 12px 0 0 !important;
  padding: 0 !important;
}

.login-button-panel .rec-go {
  position: relative !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  width: 100% !important;
  min-height: 42px !important;
  padding: 9px 16px !important;
  border-radius: var(--r-md, 8px) !important;
  font-family: var(--font-body, 'Geologica', Arial, sans-serif) !important;
  font-size: 13px !important;
  font-weight: 600 !important;
  letter-spacing: 0.005em !important;
  cursor: pointer !important;
  transition: background 140ms ease, box-shadow 140ms ease, border-color 140ms ease, color 140ms ease, transform 140ms ease !important;
  box-sizing: border-box !important;
  margin: 0 !important;
  border: 1.5px solid transparent !important;
  text-decoration: none !important;
  float: none !important;
}

.login-button-panel .rec-go.left,
#EDSClientLoginFormSubmitBtn,
#EDSLoginFormSubmitBtn {
  background: var(--surface-card, #fff) !important;
  color: var(--brand-blue-700, #054BB0) !important;
  border-color: var(--brand-blue-500, #0665E6) !important;
}

.login-button-panel .rec-go.left:hover,
#EDSClientLoginFormSubmitBtn:hover,
#EDSLoginFormSubmitBtn:hover {
  background: var(--brand-blue-050, #F1F7FF) !important;
  border-color: var(--brand-blue-600, #054BB0) !important;
}

.login-button-panel .rec-go.ecpf-submit:not(.left) {
  background: var(--brand-blue-500, #0665E6) !important;
  color: #fff !important;
  border-color: var(--brand-blue-500, #0665E6) !important;
  box-shadow: 0 2px 8px rgba(6, 101, 230, 0.30) !important;
}

.login-button-panel .rec-go.ecpf-submit:not(.left):hover {
  background: var(--brand-blue-600, #054BB0) !important;
  border-color: var(--brand-blue-600, #054BB0) !important;
  box-shadow: 0 6px 16px rgba(6, 101, 230, 0.40) !important;
  transform: translateY(-1px) !important;
}

.login-button-panel .rec-go.ecpf-submit:not(.left):active {
  background: var(--brand-blue-700, #033B8C) !important;
  transform: translateY(0) !important;
}

.login-button-panel .invisible_input {
  position: absolute !important;
  inset: 0 !important;
  width: 100% !important;
  height: 100% !important;
  opacity: 0 !important;
  cursor: pointer !important;
  border: none !important;
  background: transparent !important;
  padding: 0 !important;
  margin: 0 !important;
}

.login_form .spf-bottom {
  display: flex !important;
  flex-direction: column !important;
  gap: 6px !important;
  margin-top: 14px !important;
  padding-top: 14px !important;
  border-top: 1px solid var(--ink-100, #E2EAF3) !important;
}

.login_form .spf-bottom a,
.login_form .spf-reg a,
.login_form .spf-pass_recovery a {
  font-family: var(--font-body, 'Geologica', Arial, sans-serif) !important;
  font-size: 12px !important;
  color: var(--ink-600, #5E7A90) !important;
  text-decoration: none !important;
  transition: color 120ms ease !important;
}

.login_form .spf-bottom a:hover,
.login_form .spf-reg a:hover,
.login_form .spf-pass_recovery a:hover {
  color: var(--brand-blue-500, #0665E6) !important;
  text-decoration: underline !important;
  text-underline-offset: 2px !important;
}

/* ════════════════════════════════════════════════════════════
   8. ПРАВЫЙ САЙДБАР: nmck-filter-panel
   ════════════════════════════════════════════════════════════ */
#nmck-filter-panel,
.filterPanel {
  background: var(--surface-card, #fff) !important;
  border: 1px solid var(--ink-100, #E2EAF3) !important;
  border-radius: var(--r-lg, 14px) !important;
  box-shadow: 0 1px 2px rgba(12, 30, 69, 0.04),
              0 8px 24px rgba(12, 30, 69, 0.06) !important;
  overflow: hidden !important;
}

#nmck-filter-panel .nmck-lk-title,
.filterPanel > .title {
  font-family: var(--font-display, 'Onest', 'Geologica', sans-serif) !important;
  font-size: 12px !important;
  font-weight: 700 !important;
  letter-spacing: 0.08em !important;
  color: var(--ink-1000, #0C1E45) !important;
  text-transform: uppercase !important;
  padding: 16px 20px 12px !important;
  margin: 0 !important;
  border-bottom: 1px solid var(--ink-100, #E2EAF3) !important;
  background: linear-gradient(180deg,
    var(--ink-050, #F5F8FB) 0%,
    var(--surface-card, #fff) 100%) !important;
  display: block !important;
  position: relative !important;
}

#nmck-filter-panel .nmck-lk-title::after,
.filterPanel > .title::after {
  content: "" !important;
  position: absolute !important;
  bottom: -1px !important;
  left: 20px !important;
  width: 36px !important;
  height: 2px !important;
  background: var(--brand-orange-500, #EA5B21) !important;
  border-radius: 2px !important;
}

#nmck-filter-panel .filterPanel {
  background: transparent !important;
  border: none !important;
  border-radius: 0 !important;
  box-shadow: none !important;
}

.filterPanel label,
.filterPanel .label {
  font-family: var(--font-mono, 'JetBrains Mono', monospace) !important;
  font-size: 10px !important;
  letter-spacing: 0.08em !important;
  text-transform: uppercase !important;
  color: var(--ink-500, #6F7E92) !important;
  font-weight: 700 !important;
  display: block !important;
  margin: 12px 0 4px !important;
}

.filterPanel input[type="text"],
.filterPanel input.gwt-TextBox,
.filterPanel select {
  border: 1.5px solid var(--ink-200, #D0DCE8) !important;
  border-radius: var(--r-sm, 6px) !important;
  padding: 8px 10px !important;
  font-family: var(--font-body, 'Geologica', Arial, sans-serif) !important;
  font-size: 12.5px !important;
  color: var(--ink-1000, #0C1E45) !important;
  background: var(--surface-card, #fff) !important;
  box-sizing: border-box !important;
  min-height: 34px !important;
  width: 100% !important;
  transition: border-color 120ms ease, box-shadow 120ms ease !important;
}

.filterPanel input[type="text"]:focus,
.filterPanel input.gwt-TextBox:focus,
.filterPanel select:focus {
  border-color: var(--brand-blue-500, #0665E6) !important;
  outline: none !important;
  box-shadow: 0 0 0 3px rgba(6, 101, 230, 0.12) !important;
}

.filterPanel input[type="checkbox"] {
  accent-color: var(--brand-blue-500, #0665E6) !important;
  cursor: pointer !important;
  width: 16px !important;
  height: 16px !important;
  margin-right: 6px !important;
  vertical-align: middle !important;
}

.filterPanel .gwt-Label,
.filterPanel label.gwt-CheckBox {
  font-family: var(--font-body, 'Geologica', Arial, sans-serif) !important;
  font-size: 12.5px !important;
  color: var(--ink-700, #324052) !important;
  font-weight: 400 !important;
  text-transform: none !important;
  letter-spacing: 0 !important;
  cursor: pointer !important;
}

.filterPanel button.gwt-Button,
.filterPanel .gwt-Button {
  background: var(--brand-blue-500, #0665E6) !important;
  color: #fff !important;
  border: none !important;
  border-radius: var(--r-md, 8px) !important;
  font-family: var(--font-body, 'Geologica', Arial, sans-serif) !important;
  font-weight: 600 !important;
  font-size: 13px !important;
  padding: 10px 16px !important;
  min-height: 40px !important;
  cursor: pointer !important;
  box-shadow: 0 2px 8px rgba(6, 101, 230, 0.25) !important;
  transition: background 140ms ease, box-shadow 140ms ease, transform 140ms ease !important;
}

.filterPanel button.gwt-Button:hover,
.filterPanel .gwt-Button:hover {
  background: var(--brand-blue-600, #054BB0) !important;
  box-shadow: 0 6px 16px rgba(6, 101, 230, 0.35) !important;
  transform: translateY(-1px) !important;
}

/* ════════════════════════════════════════════════════════════
   9. PAGINATION (.pages)
   ════════════════════════════════════════════════════════════ */
.pages {
  display: flex !important;
  justify-content: center !important;
  align-items: center !important;
  gap: 6px !important;
  padding: 24px 0 !important;
  margin-top: 8px !important;
}

.pages > * {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  min-width: 36px !important;
  height: 36px !important;
  padding: 0 10px !important;
  border-radius: var(--r-sm, 6px) !important;
  font-family: var(--font-body, 'Geologica', Arial, sans-serif) !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  color: var(--ink-700, #324052) !important;
  text-decoration: none !important;
  cursor: pointer !important;
  transition: background 120ms ease, color 120ms ease, border-color 120ms ease !important;
  border: 1px solid transparent !important;
  background: transparent !important;
}

.pages > a:hover {
  background: var(--brand-blue-050, #F1F7FF) !important;
  color: var(--brand-blue-700, #054BB0) !important;
}

.pages > .selected,
.pages > b,
.pages > strong {
  background: var(--brand-blue-500, #0665E6) !important;
  color: #fff !important;
  font-weight: 700 !important;
}

/* ════════════════════════════════════════════════════════════
   10. ФУТЕР
   ════════════════════════════════════════════════════════════ */
.footer_wrap {
  background: linear-gradient(180deg,
    transparent 0%,
    var(--ink-050, #F5F8FB) 60%) !important;
  border-top: 1px solid var(--ink-100, #E2EAF3) !important;
  padding: 32px 0 !important;
  margin-top: 48px !important;
}

.footer_wrap .wrapper {
  max-width: 1440px !important;
  margin: 0 auto !important;
  padding: 0 32px !important;
}

.f-copy {
  font-family: var(--font-body, 'Geologica', Arial, sans-serif) !important;
  font-size: 12px !important;
  color: var(--ink-500, #6F7E92) !important;
  line-height: 1.7 !important;
  text-align: center !important;
}

.f-copy a {
  color: var(--brand-blue-700, #054BB0) !important;
  text-decoration: none !important;
  transition: color 120ms ease !important;
  font-weight: 500 !important;
}

.f-copy a:hover {
  color: var(--brand-blue-500, #0665E6) !important;
  text-decoration: underline !important;
  text-underline-offset: 2px !important;
}

/* ════════════════════════════════════════════════════════════
   11. SCROLLBAR
   ════════════════════════════════════════════════════════════ */
::-webkit-scrollbar {
  width: 10px;
  height: 10px;
}

::-webkit-scrollbar-track {
  background: var(--ink-050, #F5F8FB);
}

::-webkit-scrollbar-thumb {
  background: var(--ink-300, #B6C3D2);
  border-radius: 999px;
  border: 2px solid var(--ink-050, #F5F8FB);
}

::-webkit-scrollbar-thumb:hover {
  background: var(--ink-500, #6F7E92);
}

/* Cleanup */
.searchPanel,
.searchPanel > tbody,
.searchPanel > tbody > tr,
table.filterContainer,
table.filterContainer > tbody,
table.filterContainer > tbody > tr,
.filterContainerWrapper {
  background: transparent !important;
  border: none !important;
}

/* ════════════════════════════════════════════════════════════
   14. ETP-LEGACY → DS-COMPONENTS MAPPING
   Финальный слой — приводим ВСЕ оставшиеся «голые» legacy-классы
   к виду компонентов из ds-system.css v2.5.0 (.etp-* / .ds-*).
   Покрываем: статусы лотов, ссылки, дата-боксы, ошибки, fieldValue,
   аккордеоны, табы, навигацию хлебных крошек, GWT-Tree, footer и т.д.
   ════════════════════════════════════════════════════════════ */

/* ── 14.1 Статус-теги торгов (.offerType + модификатор) ─────
   На главной таблице рядом с названием каждой процедуры есть
   маленький значок типа «buying / sale / rfi / grey», стилизуем
   его как badge из дизайн-системы. */
.offerType {
  display: inline-flex !important;
  align-items: center !important;
  gap: 6px !important;
  padding: 3px 8px !important;
  border-radius: var(--r-pill, 999px) !important;
  font-family: var(--font-mono, 'JetBrains Mono', monospace) !important;
  font-size: 10px !important;
  font-weight: 700 !important;
  letter-spacing: 0.04em !important;
  text-transform: uppercase !important;
  line-height: 1.3 !important;
  white-space: nowrap !important;
  background: var(--ink-100, #EBF0F6) !important;
  color: var(--ink-700, #2C3E52) !important;
}
.offerType.buying {
  background: var(--success-100, #EAF6F0) !important;
  color: var(--success-700, #0F5A36) !important;
}
.offerType.sale {
  background: var(--warning-100, #FFF3DC) !important;
  color: var(--warning-700, #7A4500) !important;
}
.offerType.rfi {
  background: var(--brand-blue-050, #F1F6FE) !important;
  color: var(--brand-blue-700, #0442A3) !important;
}
.offerType.grey {
  background: var(--ink-100, #EBF0F6) !important;
  color: var(--ink-500, #5E7A90) !important;
}

/* ── 14.2 GWT-Anchor (все «просто-ссылки» сети ЭТП) ─────────
   Унифицированные synonym для <a>: цвет — brand-blue, без
   подчёркивания, hover-цвет темнее, focus-ring доступности. */
a.gwt-Anchor,
.gwt-Anchor {
  color: var(--brand-blue-700, #0442A3) !important;
  font-weight: 600 !important;
  text-decoration: none !important;
  cursor: pointer !important;
  transition: color var(--duration-fast, 160ms) var(--easing-standard, ease) !important;
}
a.gwt-Anchor:hover,
.gwt-Anchor:hover {
  color: var(--brand-blue-800, #0849B3) !important;
  text-decoration: underline !important;
}
a.gwt-Anchor:focus-visible,
.gwt-Anchor:focus-visible {
  outline: none !important;
  box-shadow: var(--shadow-focus, 0 0 0 3px rgba(6,101,230,0.22)) !important;
  border-radius: var(--r-xs, 4px) !important;
}

/* ── 14.3 GWT-DateBox (поле «дата + кнопка-календарь») ──────
   Поле даты в фильтре (Дата публикации / Дата завершения) и
   на формах регистрации. Стилизация под DS. */
.gwt-DateBox {
  display: inline-flex !important;
  align-items: center !important;
  gap: 6px !important;
}
.gwt-DateBox > input.gwt-TextBox,
.gwt-DateBox > input[type="text"] {
  padding: 8px 10px !important;
  height: 36px !important;
  min-width: 110px !important;
  border: 1.5px solid var(--ink-200, #D0DCE8) !important;
  border-radius: var(--r-sm, 6px) !important;
  background: var(--surface-card, #fff) !important;
  color: var(--ink-900, #1A1A1A) !important;
  font-family: var(--font-mono, monospace) !important;
  font-size: 13px !important;
  transition: border-color var(--duration-fast, 160ms) var(--easing-standard, ease),
              box-shadow var(--duration-fast, 160ms) var(--easing-standard, ease) !important;
}
.gwt-DateBox > input.gwt-TextBox:focus,
.gwt-DateBox > input[type="text"]:focus {
  border-color: var(--brand-blue-500, #0665E6) !important;
  box-shadow: var(--shadow-focus, 0 0 0 3px rgba(6,101,230,0.22)) !important;
  outline: none !important;
}
/* Кнопка-календарь рядом с DateBox-input */
.gwt-DateBox img,
.dateBoxImageButton,
button.dateBoxImageButton {
  cursor: pointer !important;
  width: 32px !important;
  height: 32px !important;
  border-radius: var(--r-sm, 6px) !important;
  background: var(--brand-blue-050, #F1F6FE) !important;
  border: 1px solid var(--brand-blue-100, #DDE9FB) !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  transition: background var(--duration-fast, 160ms) var(--easing-standard, ease) !important;
}
.gwt-DateBox img:hover,
.dateBoxImageButton:hover {
  background: var(--brand-blue-100, #DDE9FB) !important;
}
/* Сам DatePicker (выпадающий календарь GWT) */
.gwt-DatePicker {
  background: var(--surface-card, #fff) !important;
  border: 1px solid var(--ink-100, #EBF0F6) !important;
  border-radius: var(--r-md, 10px) !important;
  box-shadow: var(--shadow-md, 0 6px 20px rgba(15,24,42,0.10)) !important;
  padding: 12px !important;
  font-family: var(--font-body, 'Geologica', sans-serif) !important;
  font-size: 13px !important;
}
.gwt-DatePicker .datePickerMonthSelector {
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  gap: 12px !important;
  padding: 0 0 8px 0 !important;
  border-bottom: 1px solid var(--ink-100, #EBF0F6) !important;
  margin-bottom: 8px !important;
  font-weight: 800 !important;
  color: var(--navy-900, #0A1735) !important;
}
.gwt-DatePicker .datePickerPreviousButton,
.gwt-DatePicker .datePickerNextButton {
  width: 26px !important;
  height: 26px !important;
  border-radius: 50% !important;
  background: var(--brand-blue-050, #F1F6FE) !important;
  color: var(--brand-blue-700, #0442A3) !important;
  cursor: pointer !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
}
.gwt-DatePicker td.datePickerDay {
  padding: 6px 8px !important;
  border-radius: var(--r-sm, 6px) !important;
  cursor: pointer !important;
  text-align: center !important;
  font-family: var(--font-mono, monospace) !important;
  font-size: 12px !important;
  color: var(--ink-700, #2C3E52) !important;
}
.gwt-DatePicker td.datePickerDayIsToday {
  outline: 1.5px solid var(--brand-blue-300, #7FB2F4) !important;
}
.gwt-DatePicker td.datePickerDayIsValue {
  background: var(--brand-blue-600, #0553C7) !important;
  color: #fff !important;
}
.gwt-DatePicker td.datePickerDay:hover {
  background: var(--brand-blue-050, #F1F6FE) !important;
}
.gwt-DatePicker .datePickerDayIsWeekend {
  color: var(--danger-600, #C8392B) !important;
}
.gwt-DatePicker .datePickerDayIsFiller,
.gwt-DatePicker .datePickerDayIsDisabled {
  color: var(--ink-300, #A8BDD0) !important;
}
.gwt-DatePicker .datePickerDayIsHighlighted:not(.datePickerDayIsValue) {
  background: var(--brand-blue-100, #DDE9FB) !important;
}

/* ── 14.4 .errorMessage — красный текст ошибки формы ─────────
   Особенность ETP: GWT часто рендерит пустые .errorMessage placeholder'ы
   (под каждым полем), которые наполняются текстом только при невалидном
   состоянии. Пустой placeholder скрываем :empty-селектором, чтобы не
   рисовать красные плашки впустую. */
.errorMessage:not(:empty) {
  display: block !important;
  padding: 6px 10px !important;
  margin: 6px 0 !important;
  border-left: 3px solid var(--danger-600, #C8392B) !important;
  background: var(--danger-100, #FEE8E4) !important;
  color: var(--danger-700, #902B20) !important;
  border-radius: 0 var(--r-sm, 6px) var(--r-sm, 6px) 0 !important;
  font-size: 12px !important;
  font-weight: 600 !important;
  line-height: 1.4 !important;
}
.errorMessage:empty {
  display: none !important;
}

/* ── 14.5 .fieldValue / .textFieldValue — read-only значения ─
   На странице карточки лота поля отображаются в виде «label: value»,
   где value завёрнут в .fieldValue. Делаем их «значением определения». */
.fieldValue {
  color: var(--ink-900, #0A0E17) !important;
  font-weight: 600 !important;
  font-size: 13px !important;
  line-height: 1.4 !important;
}
/* Подпись label рядом со значением (часто .fieldLabel или просто td с
   font-weight:bold). Не трогаем агрессивно — только базовый стиль ниже */
.fieldLabel,
td.fieldLabel {
  color: var(--ink-500, #5E7A90) !important;
  font-size: 12px !important;
  font-weight: 600 !important;
  text-transform: none !important;
}

/* ── 14.6 .nmck-accordion (наш кастомный accordion в ЛК) ──── */
.nmck-accordion {
  display: block !important;
  background: var(--surface-card, #fff) !important;
  border: 1px solid var(--ink-100, #EBF0F6) !important;
  border-radius: var(--r-md, 10px) !important;
  margin-bottom: 12px !important;
  overflow: hidden !important;
  box-shadow: var(--shadow-xs, 0 1px 2px rgba(15,24,42,0.06)) !important;
}
.nmck-accordion-header {
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  gap: 12px !important;
  padding: 14px 16px !important;
  cursor: pointer !important;
  background: var(--surface-card, #fff) !important;
  border-bottom: 1px solid transparent !important;
  transition: background var(--duration-fast, 160ms) var(--easing-standard, ease) !important;
}
.nmck-accordion-header:hover {
  background: var(--ink-050, #F5F8FB) !important;
}
.nmck-accordion[open] .nmck-accordion-header,
.nmck-accordion.is-open .nmck-accordion-header {
  border-bottom-color: var(--ink-100, #EBF0F6) !important;
}
.nmck-accordion-title {
  margin: 0 !important;
  font-size: 14px !important;
  font-weight: 750 !important;
  color: var(--ink-900, #0A0E17) !important;
}
.nmck-accordion-arrow {
  width: 18px !important;
  height: 18px !important;
  flex-shrink: 0 !important;
  color: var(--ink-500, #5E7A90) !important;
  transition: transform var(--duration-fast, 160ms) var(--easing-standard, ease) !important;
}
.nmck-accordion[open] .nmck-accordion-arrow,
.nmck-accordion.is-open .nmck-accordion-arrow {
  transform: rotate(180deg) !important;
}
.nmck-accordion-body {
  padding: 14px 16px !important;
  background: var(--surface-card, #fff) !important;
  color: var(--ink-700, #2C3E52) !important;
  font-size: 13px !important;
  line-height: 1.5 !important;
}

/* ── 14.7 Tabs (.spf-tabs / .spf-tab) — segmented control ─── */
.spf-tabs,
.tabs-bar,
ul.tabs {
  display: inline-flex !important;
  gap: 4px !important;
  padding: 4px !important;
  background: var(--ink-050, #F5F8FB) !important;
  border: 1px solid var(--ink-100, #EBF0F6) !important;
  border-radius: var(--r-sm, 6px) !important;
  list-style: none !important;
  margin: 0 0 16px 0 !important;
  max-width: 100% !important;
  overflow-x: auto !important;
}
.spf-tab,
.tabs-bar > li,
ul.tabs > li {
  padding: 8px 14px !important;
  border-radius: calc(var(--r-sm, 6px) - 2px) !important;
  background: transparent !important;
  color: var(--ink-700, #2C3E52) !important;
  font-size: 13px !important;
  font-weight: 700 !important;
  cursor: pointer !important;
  white-space: nowrap !important;
  transition: background var(--duration-fast, 160ms) var(--easing-standard, ease),
              color var(--duration-fast, 160ms) var(--easing-standard, ease) !important;
  list-style: none !important;
  border: none !important;
}
.spf-tab:hover,
.tabs-bar > li:hover,
ul.tabs > li:hover {
  background: rgba(255,255,255,0.6) !important;
}
.spf-tab.selected,
.spf-tab[aria-selected="true"],
.tabs-bar > li.selected,
ul.tabs > li.selected,
ul.tabs > li.active {
  background: var(--surface-card, #fff) !important;
  color: var(--brand-blue-700, #0442A3) !important;
  box-shadow: var(--shadow-xs, 0 1px 2px rgba(15,24,42,0.06)) !important;
}

/* ── 14.8 Pagination (если на странице есть .pagination/.gwt-Pager) ── */
.gwt-Pager,
.pagination,
.cellTablePager {
  display: inline-flex !important;
  align-items: center !important;
  gap: 6px !important;
  margin: 16px 0 !important;
}
.gwt-Pager .gwt-Button,
.pagination > a,
.pagination > button,
.cellTablePager > * {
  min-width: 32px !important;
  height: 32px !important;
  padding: 0 10px !important;
  border: 1px solid var(--ink-200, #D0DCE8) !important;
  border-radius: var(--r-sm, 6px) !important;
  background: var(--surface-card, #fff) !important;
  color: var(--ink-700, #2C3E52) !important;
  font-size: 12px !important;
  font-weight: 700 !important;
  cursor: pointer !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
}
.gwt-Pager .gwt-Button:hover,
.pagination > a:hover,
.pagination > button:hover {
  border-color: var(--brand-blue-300, #7FB2F4) !important;
  color: var(--brand-blue-700, #0442A3) !important;
}
.pagination > .selected,
.pagination > .active,
.gwt-Pager .gwt-Button.selected {
  background: var(--brand-blue-600, #0553C7) !important;
  color: #fff !important;
  border-color: var(--brand-blue-600, #0553C7) !important;
}

/* ── 14.9 Breadcrumbs (если на странице есть .breadcrumbs) ── */
.breadcrumbs,
.crumbs,
nav.breadcrumb {
  display: flex !important;
  align-items: center !important;
  gap: 6px !important;
  flex-wrap: wrap !important;
  margin: 0 0 12px 0 !important;
  padding: 0 !important;
  list-style: none !important;
  color: var(--ink-500, #5E7A90) !important;
  font-size: 12px !important;
  font-weight: 600 !important;
}
.breadcrumbs > li,
.crumbs > li {
  display: inline-flex !important;
  align-items: center !important;
  gap: 6px !important;
}
.breadcrumbs > li:not(:last-child)::after,
.crumbs > li:not(:last-child)::after {
  content: '›' !important;
  margin-left: 6px !important;
  color: var(--ink-300, #A8BDD0) !important;
}
.breadcrumbs a,
.crumbs a {
  color: var(--brand-blue-700, #0442A3) !important;
  text-decoration: none !important;
}
.breadcrumbs a:hover,
.crumbs a:hover {
  text-decoration: underline !important;
}

/* ── 14.10 Footer (.footer / .spt-footer / footer) ──────────
   Нижняя часть страницы — обычно мелкий навигационный блок
   с копирайтом / контактами. Стилизуем под DS-нейтрально. */
footer.footer,
footer.site-footer,
.spt-footer,
.gwt-footer {
  margin-top: 40px !important;
  padding: 24px 28px !important;
  background: var(--surface-card, #fff) !important;
  border-top: 1px solid var(--ink-100, #EBF0F6) !important;
  color: var(--ink-500, #5E7A90) !important;
  font-size: 12px !important;
  line-height: 1.6 !important;
}
footer.footer a,
footer.site-footer a,
.spt-footer a,
.gwt-footer a {
  color: var(--brand-blue-700, #0442A3) !important;
  text-decoration: none !important;
}
footer.footer a:hover,
.spt-footer a:hover,
.gwt-footer a:hover {
  text-decoration: underline !important;
}

/* ── 14.11 GWT-Tree (древовидный список — выбор ОКПД2/региона) ── */
.gwt-Tree {
  font-size: 13px !important;
  color: var(--ink-800, #22304A) !important;
  font-family: var(--font-body, 'Geologica', sans-serif) !important;
}
.gwt-Tree .gwt-TreeItem {
  padding: 4px 8px !important;
  border-radius: var(--r-xs, 4px) !important;
  cursor: pointer !important;
  transition: background var(--duration-fast, 160ms) var(--easing-standard, ease) !important;
}
.gwt-Tree .gwt-TreeItem:hover {
  background: var(--brand-blue-050, #F1F6FE) !important;
  color: var(--brand-blue-700, #0442A3) !important;
}
.gwt-Tree .gwt-TreeItem-selected {
  background: var(--brand-blue-600, #0553C7) !important;
  color: #fff !important;
}

/* ── 14.12 Tooltip (.gwt-PopupPanel когда содержит просто текст) ─
   Узкий селектор: только маленькие popup'ы с одним span/div внутри. */
.gwt-PopupPanel:not(.gwt-DialogBox):not(:has(table.filterPanel)) {
  background: var(--ink-1000, #0A0E17) !important;
  color: #fff !important;
  font-size: 11px !important;
  font-weight: 600 !important;
  padding: 6px 10px !important;
  border-radius: var(--r-xs, 4px) !important;
  box-shadow: var(--shadow-md, 0 6px 20px rgba(15,24,42,0.10)) !important;
  max-width: 280px !important;
}

/* ── 14.13 Search input на главной (.searchPanel input) ───── */
table.searchPanel input.gwt-TextBox,
table.searchPanel input[type="text"] {
  height: 42px !important;
  padding: 0 14px !important;
  border: 1.5px solid var(--ink-200, #D0DCE8) !important;
  border-radius: var(--r-sm, 6px) !important;
  background: var(--surface-card, #fff) !important;
  color: var(--ink-900, #0A0E17) !important;
  font-size: 14px !important;
  transition: border-color var(--duration-fast, 160ms) var(--easing-standard, ease),
              box-shadow var(--duration-fast, 160ms) var(--easing-standard, ease) !important;
}
table.searchPanel input.gwt-TextBox:focus,
table.searchPanel input[type="text"]:focus {
  border-color: var(--brand-blue-500, #0665E6) !important;
  box-shadow: var(--shadow-focus, 0 0 0 3px rgba(6,101,230,0.22)) !important;
  outline: none !important;
}

/* ── 14.14 Login form (.spf-content) — оборачиваем в карточку ── */
.spf-content {
  background: var(--surface-card, #fff) !important;
  border: 1px solid var(--ink-100, #EBF0F6) !important;
  border-radius: var(--r-md, 10px) !important;
  padding: 20px !important;
  box-shadow: var(--shadow-xs, 0 1px 2px rgba(15,24,42,0.06)) !important;
}
.spf-line {
  margin-bottom: 14px !important;
}
.spf-label {
  display: block !important;
  margin-bottom: 6px !important;
  font-size: 12px !important;
  font-weight: 700 !important;
  color: var(--ink-700, #2C3E52) !important;
}
.spf-input,
.spf-login-input input,
.spf-login-input input.gwt-TextBox {
  width: 100% !important;
  height: 42px !important;
  padding: 0 14px !important;
  border: 1.5px solid var(--ink-200, #D0DCE8) !important;
  border-radius: var(--r-sm, 6px) !important;
  background: var(--surface-card, #fff) !important;
  color: var(--ink-900, #0A0E17) !important;
  font-size: 14px !important;
  box-sizing: border-box !important;
}
.spf-input:focus,
.spf-login-input input:focus {
  border-color: var(--brand-blue-500, #0665E6) !important;
  box-shadow: var(--shadow-focus, 0 0 0 3px rgba(6,101,230,0.22)) !important;
  outline: none !important;
}
.spf-bottom {
  display: flex !important;
  justify-content: space-between !important;
  align-items: center !important;
  gap: 12px !important;
  margin-top: 16px !important;
  flex-wrap: wrap !important;
}
.spf-bottom .spf-reg,
.spf-bottom .spf-pass_recovery {
  font-size: 12px !important;
  color: var(--brand-blue-700, #0442A3) !important;
  font-weight: 600 !important;
  text-decoration: none !important;
}
.spf-bottom .spf-reg:hover,
.spf-bottom .spf-pass_recovery:hover {
  text-decoration: underline !important;
}
.login-button-panel {
  margin-top: 18px !important;
  display: flex !important;
  justify-content: flex-end !important;
}

/* ── 14.15 .ecpf-submit — кнопка «Войти» в форме ───────────── */
button.ecpf-submit,
input.ecpf-submit,
.ecpf-submit {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  min-height: 42px !important;
  padding: 0 18px !important;
  border: none !important;
  border-radius: var(--r-sm, 6px) !important;
  background: var(--brand-blue-600, #0553C7) !important;
  color: #fff !important;
  font-size: 13px !important;
  font-weight: 750 !important;
  cursor: pointer !important;
  transition: background var(--duration-fast, 160ms) var(--easing-standard, ease) !important;
}
button.ecpf-submit:hover,
input.ecpf-submit:hover,
.ecpf-submit:hover {
  background: var(--brand-blue-700, #0442A3) !important;
}

/* ── 14.16 Sidebar list (aside.left_side .gwt-Anchor) ──────
   В сайдбаре обычно вертикальный список ссылок «Регистрация
   участника», «Восстановить пароль» и т.п. — стилизуем как
   menu-items. */
aside.left_side .gwt-Anchor,
aside.ds-sidebar .gwt-Anchor {
  display: block !important;
  padding: 9px 12px !important;
  border-radius: var(--r-sm, 6px) !important;
  color: var(--ink-700, #2C3E52) !important;
  font-size: 13px !important;
  font-weight: 600 !important;
  margin-bottom: 4px !important;
  transition: background var(--duration-fast, 160ms) var(--easing-standard, ease) !important;
}
aside.left_side .gwt-Anchor:hover,
aside.ds-sidebar .gwt-Anchor:hover {
  background: var(--brand-blue-050, #F1F6FE) !important;
  color: var(--brand-blue-700, #0442A3) !important;
  text-decoration: none !important;
}

/* ── 14.17 Status / state panels (.statusPanel, .gwt-statusbar) ── */
.statusPanel,
.gwt-StatusBar,
.statusBar {
  padding: 12px 16px !important;
  background: var(--brand-blue-050, #F1F6FE) !important;
  border-left: 4px solid var(--brand-blue-500, #0665E6) !important;
  color: var(--ink-800, #22304A) !important;
  font-size: 13px !important;
  border-radius: 0 var(--r-sm, 6px) var(--r-sm, 6px) 0 !important;
  margin-bottom: 16px !important;
}

/* ── 14.18 Invisible-input (специальный radio в табах форм) ──
   Чекбокс/радио, который скрыт визуально (UI логика — клик по
   обёртке-tab) — оставляем absolute hidden + переводим клик
   на родителя через `.spf-tab[for]`. */
input.invisible_input,
input[type="radio"].invisible_input,
input[type="checkbox"].invisible_input {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  opacity: 0 !important;
  pointer-events: none !important;
}

/* ── 14.19 Empty-state placeholder ────────────────────────── */
.empty-state,
.no-data,
.gwt-Label.no-results {
  display: grid !important;
  place-items: center !important;
  padding: 40px 20px !important;
  border: 1px dashed var(--ink-200, #D0DCE8) !important;
  border-radius: var(--r-md, 10px) !important;
  background: var(--ink-050, #F5F8FB) !important;
  text-align: center !important;
  color: var(--ink-500, #5E7A90) !important;
  font-size: 13px !important;
}

/* ── 14.20 Document file-link (страница «Документы») ───────
   Ссылки на скачивание документов часто завёрнуты в .doc-link
   или просто в <a> с классом .gwt-Anchor рядом с иконкой типа. */
.doc-link,
a.doc-link,
.fileDownloadLink {
  display: inline-flex !important;
  align-items: center !important;
  gap: 8px !important;
  padding: 8px 12px !important;
  background: var(--brand-blue-050, #F1F6FE) !important;
  border: 1px solid var(--brand-blue-100, #DDE9FB) !important;
  border-radius: var(--r-sm, 6px) !important;
  color: var(--brand-blue-700, #0442A3) !important;
  font-size: 13px !important;
  font-weight: 600 !important;
  text-decoration: none !important;
  transition: all var(--duration-fast, 160ms) var(--easing-standard, ease) !important;
}
.doc-link:hover,
.fileDownloadLink:hover {
  background: var(--brand-blue-100, #DDE9FB) !important;
  text-decoration: none !important;
}

/* ── 14.21 Карточка лота (на странице /app/Lot/page) ───────
   Если есть .lotInfoBlock или .gwt-DecoratorPanel внутри — даём
   контурный card-look. */
.lotInfoBlock,
.gwt-DecoratorPanel,
.gwt-DisclosurePanel,
.lotDetailBlock {
  background: var(--surface-card, #fff) !important;
  border: 1px solid var(--ink-100, #EBF0F6) !important;
  border-radius: var(--r-md, 10px) !important;
  box-shadow: var(--shadow-xs, 0 1px 2px rgba(15,24,42,0.06)) !important;
  padding: 18px !important;
  margin-bottom: 16px !important;
}
.lotInfoBlock h2,
.lotInfoBlock h3,
.lotDetailBlock h2,
.lotDetailBlock h3,
.gwt-DecoratorPanel .gwt-Label.title,
.gwt-DisclosurePanel .header {
  margin: 0 0 12px 0 !important;
  font-size: 16px !important;
  font-weight: 800 !important;
  color: var(--navy-900, #0A1735) !important;
}

/* ── 14.22 Большой блок «Сумма / NMCK / amount» ─────────────
   На карточке лота крупная цена обычно завёрнута в .nmck-price
   или просто .amount или .priceValue. */
.nmck-price,
.priceValue,
.amount,
.lotPrice {
  font-family: var(--font-display, 'Onest', sans-serif) !important;
  font-size: 24px !important;
  font-weight: 750 !important;
  color: var(--navy-900, #0A1735) !important;
  letter-spacing: -0.01em !important;
}

/* ── 14.23 Метрика «Дата завершения / Срок» ──────────────── */
.deadline-strip,
.lotDeadline,
.dateLeft {
  display: inline-flex !important;
  align-items: center !important;
  gap: 6px !important;
  padding: 6px 10px !important;
  border-radius: var(--r-sm, 6px) !important;
  background: var(--warning-100, #FFF3DC) !important;
  color: var(--warning-700, #7A4500) !important;
  font-size: 12px !important;
  font-weight: 700 !important;
  font-family: var(--font-mono, monospace) !important;
}
.deadline-strip.is-urgent,
.lotDeadline.urgent {
  background: var(--danger-100, #FEE8E4) !important;
  color: var(--danger-700, #902B20) !important;
}
.deadline-strip.is-ok,
.lotDeadline.ok {
  background: var(--success-100, #EAF6F0) !important;
  color: var(--success-700, #0F5A36) !important;
}

/* ── 14.24 Stepper / progress (для wizard-форм регистрации) ── */
.gwt-StepNumber,
.stepperItem {
  display: grid !important;
  place-items: center !important;
  width: 30px !important;
  height: 30px !important;
  border-radius: 50% !important;
  background: var(--ink-100, #EBF0F6) !important;
  font-family: var(--font-mono, monospace) !important;
  font-size: 12px !important;
  font-weight: 800 !important;
  color: var(--ink-700, #2C3E52) !important;
}
.stepperItem.is-current {
  background: var(--brand-blue-600, #0553C7) !important;
  color: #fff !important;
}
.stepperItem.is-done {
  background: var(--success-100, #EAF6F0) !important;
  color: var(--success-700, #0F5A36) !important;
}

/* ── 14.25 Уточнения для проверки ЭП (страница /app/CheckEds) ─
   Поле upload-файла для верификации сертификата. */
input[type="file"] {
  padding: 10px !important;
  border: 1.5px dashed var(--ink-200, #D0DCE8) !important;
  border-radius: var(--r-sm, 6px) !important;
  background: var(--ink-050, #F5F8FB) !important;
  color: var(--ink-700, #2C3E52) !important;
  font-size: 13px !important;
  width: 100% !important;
  cursor: pointer !important;
}
input[type="file"]:hover {
  border-color: var(--brand-blue-300, #7FB2F4) !important;
}

/* ── 14.26 Финальное: убираем артефакты legacy iframe / hr ── */
hr {
  border: none !important;
  border-top: 1px solid var(--ink-100, #EBF0F6) !important;
  margin: 16px 0 !important;
}

/* ── 14.26b Содержимое DialogBox со списком чекбоксов (Регионы / ОКПД2) ──
   Внутри `.gwt-DialogBox .dialogContent` обычно table-разметка GWT —
   чекбоксы отображаются как `<span class="gwt-CheckBox">` без отступов.
   Превращаем их в чистый вертикальный/двухколоночный список picker'ов. */
.gwt-DialogBox .dialogContent .fieldValue {
  display: block !important;
}
.gwt-DialogBox .dialogContent .gwt-CheckBox,
.gwt-DialogBox .dialogContent label.gwt-CheckBox,
.gwt-DialogBox .dialogContent span.gwt-CheckBox {
  display: flex !important;
  align-items: flex-start !important;
  gap: 8px !important;
  padding: 6px 8px !important;
  margin: 0 !important;
  border-radius: var(--r-xs, 4px) !important;
  font-size: 13px !important;
  line-height: 1.4 !important;
  color: var(--ink-800, #22304A) !important;
  cursor: pointer !important;
  transition: background var(--duration-fast, 160ms) var(--easing-standard, ease) !important;
}
.gwt-DialogBox .dialogContent .gwt-CheckBox:hover {
  background: var(--brand-blue-050, #F1F6FE) !important;
}
.gwt-DialogBox .dialogContent .gwt-CheckBox > input[type="checkbox"] {
  margin: 2px 0 0 0 !important;
  width: 16px !important;
  height: 16px !important;
  flex: 0 0 auto !important;
  accent-color: var(--brand-blue-600, #0553C7) !important;
  cursor: pointer !important;
}
.gwt-DialogBox .dialogContent .gwt-CheckBox > label {
  flex: 1 1 auto !important;
  font-size: 13px !important;
  color: var(--ink-800, #22304A) !important;
  cursor: pointer !important;
}

/* Списки регионов/ОКПД2 идут в большой <table> с двумя колонками — оставим
   как есть, но обнулим лишние границы (они сейчас едут как table-cell). */
.gwt-DialogBox .dialogContent table {
  border-collapse: collapse !important;
  width: 100% !important;
}
.gwt-DialogBox .dialogContent td {
  padding: 2px 6px !important;
  vertical-align: top !important;
  border: none !important;
}

/* Заголовок (Caption) — Uppercase + monospace для соответствия DS */
.gwt-DialogBox .Caption {
  background: var(--ink-050, #F5F8FB) !important;
  border-bottom: 1px solid var(--ink-100, #EBF0F6) !important;
  padding: 14px 18px !important;
}
.gwt-DialogBox .Caption .gwt-HTML {
  font-size: 12px !important;
  font-weight: 800 !important;
  color: var(--navy-900, #0A1735) !important;
  letter-spacing: 0.05em !important;
  text-transform: uppercase !important;
  font-family: var(--font-mono, 'JetBrains Mono', monospace) !important;
}
/* Кнопка-крестик закрытия */
.gwt-DialogBox .formCloseButton {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  width: 28px !important;
  height: 28px !important;
  border-radius: 50% !important;
  background: transparent !important;
  color: var(--ink-500, #5E7A90) !important;
  cursor: pointer !important;
  transition: background var(--duration-fast, 160ms) var(--easing-standard, ease),
              color var(--duration-fast, 160ms) var(--easing-standard, ease) !important;
  position: relative !important;
}
.gwt-DialogBox .formCloseButton::before {
  content: '×' !important;
  font-size: 22px !important;
  line-height: 1 !important;
  font-weight: 400 !important;
  margin-top: -2px !important;
}
.gwt-DialogBox .formCloseButton:hover {
  background: var(--ink-100, #EBF0F6) !important;
  color: var(--ink-900, #0A0E17) !important;
}

/* ── 14.27 Скроллбары (внутри попапов) ─────────────────────── */
.gwt-DialogBox *::-webkit-scrollbar,
.gwt-PopupPanel *::-webkit-scrollbar {
  width: 8px !important;
  height: 8px !important;
}
.gwt-DialogBox *::-webkit-scrollbar-track,
.gwt-PopupPanel *::-webkit-scrollbar-track {
  background: var(--ink-050, #F5F8FB) !important;
}
.gwt-DialogBox *::-webkit-scrollbar-thumb,
.gwt-PopupPanel *::-webkit-scrollbar-thumb {
  background: var(--ink-200, #D0DCE8) !important;
  border-radius: 4px !important;
}
.gwt-DialogBox *::-webkit-scrollbar-thumb:hover,
.gwt-PopupPanel *::-webkit-scrollbar-thumb:hover {
  background: var(--ink-300, #A8BDD0) !important;
}

/* ── 14.28 Блок «Тип процедуры — оригинальный значок» ──────
   Иногда тип-значок рендерится как простой <span class="offerType">,
   иногда — как table.offerType > tbody > tr > td. Покрываем оба. */
table.offerType,
table.offerType > tbody,
table.offerType > tbody > tr {
  display: inline-block !important;
  border: none !important;
  background: transparent !important;
  padding: 0 !important;
}
table.offerType > tbody > tr > td {
  padding: 0 !important;
  border: none !important;
}

/* ── 14.29 LotCard страница (/app/LotCard/page) ────────────
   Структура: h1 «Лот 0013... | 1 000.00 руб.», далее блоки
   «Краткие сведения», «Этапы», «Сообщения» — каждый завёрнут
   в .info_table или .list_table. Заголовки — .oit-h / h2. */

/* Заголовок страницы лота — h1 с большим title и crumbs */
body:has(.info_table) h1,
.LotCard-shell h1 {
  font-family: var(--font-display, 'Onest', sans-serif) !important;
  font-size: 28px !important;
  font-weight: 800 !important;
  line-height: 1.15 !important;
  color: var(--navy-900, #0A1735) !important;
  margin: 0 0 24px 0 !important;
  letter-spacing: -0.01em !important;
}

/* h2 / h3 — заголовки секций внутри карточки лота */
.info_table h2,
.list_table h2,
body:has(.info_table) h2,
body:has(.list_table) h2 {
  font-family: var(--font-display, 'Onest', sans-serif) !important;
  font-size: 18px !important;
  font-weight: 750 !important;
  line-height: 1.25 !important;
  color: var(--navy-900, #0A1735) !important;
  margin: 0 0 14px 0 !important;
  letter-spacing: 0 !important;
}

/* .info_table — основной table с двумя колонками «label/value» */
table.info_table {
  width: 100% !important;
  margin: 0 0 24px 0 !important;
  background: var(--surface-card, #fff) !important;
  border: 1px solid var(--ink-100, #EBF0F6) !important;
  border-radius: var(--r-md, 10px) !important;
  border-collapse: separate !important;
  border-spacing: 0 !important;
  box-shadow: var(--shadow-xs, 0 1px 2px rgba(15,24,42,0.06)) !important;
  overflow: hidden !important;
}
table.info_table > tbody > tr > td {
  padding: 12px 16px !important;
  border-bottom: 1px solid var(--ink-100, #EBF0F6) !important;
  font-size: 13px !important;
  line-height: 1.5 !important;
  vertical-align: top !important;
}
table.info_table > tbody > tr:last-child > td {
  border-bottom: 0 !important;
}
/* Левая колонка — label */
table.info_table > tbody > tr > td:first-child {
  width: 240px !important;
  background: var(--ink-050, #F5F8FB) !important;
  color: var(--ink-500, #5E7A90) !important;
  font-weight: 600 !important;
  white-space: nowrap !important;
}
/* Правая колонка — value */
table.info_table > tbody > tr > td:nth-child(2) {
  color: var(--ink-900, #0A0E17) !important;
  font-weight: 600 !important;
}

/* .list_table — таблица-список (этапы, сообщения, документы) */
table.list_table {
  width: 100% !important;
  margin: 0 0 24px 0 !important;
  background: var(--surface-card, #fff) !important;
  border: 1px solid var(--ink-100, #EBF0F6) !important;
  border-radius: var(--r-md, 10px) !important;
  border-collapse: separate !important;
  border-spacing: 0 !important;
  box-shadow: var(--shadow-xs, 0 1px 2px rgba(15,24,42,0.06)) !important;
  overflow: hidden !important;
  font-size: 13px !important;
}
table.list_table > thead > tr > th,
table.list_table > tbody > tr.head > td,
table.list_table > tbody > tr:first-child:has(th) > th {
  padding: 12px 16px !important;
  background: var(--ink-050, #F5F8FB) !important;
  border-bottom: 1px solid var(--ink-100, #EBF0F6) !important;
  color: var(--ink-700, #2C3E52) !important;
  font-size: 11px !important;
  font-weight: 700 !important;
  text-transform: uppercase !important;
  letter-spacing: 0.06em !important;
  text-align: left !important;
}
table.list_table > tbody > tr > td {
  padding: 13px 16px !important;
  border-bottom: 1px solid var(--ink-100, #EBF0F6) !important;
  vertical-align: top !important;
  color: var(--ink-800, #22304A) !important;
}
table.list_table > tbody > tr:last-child > td {
  border-bottom: 0 !important;
}
table.list_table > tbody > tr:hover > td {
  background: var(--brand-blue-050, #F1F6FE) !important;
}

/* Заголовки секций .oit-h (Order Info Table heading) */
.oit-h {
  font-size: 11px !important;
  font-weight: 700 !important;
  text-transform: uppercase !important;
  letter-spacing: 0.06em !important;
  color: var(--brand-orange-700, #A43E12) !important;
  margin: 0 0 6px 0 !important;
  font-family: var(--font-mono, monospace) !important;
}

/* .inlineCardTitle — встроенный card-title */
.inlineCardTitle {
  font-size: 16px !important;
  font-weight: 800 !important;
  color: var(--navy-900, #0A1735) !important;
  margin: 0 0 10px 0 !important;
}

/* .styled — generic styled-block, обернём как card */
.styled,
.styled-block {
  background: var(--surface-card, #fff) !important;
  border: 1px solid var(--ink-100, #EBF0F6) !important;
  border-radius: var(--r-md, 10px) !important;
  padding: 14px 16px !important;
  margin-bottom: 12px !important;
}

/* Margins helpers (ETP-legacy) */
.line-margin-top    { margin-top: 8px !important; }
.line-margin-bottom { margin-bottom: 8px !important; }
.block-margin-top   { margin-top: 24px !important; }
.block-margin-bottom{ margin-bottom: 24px !important; }

/* .tab-link — секционные навигационные ссылки */
a.tab-link,
.tab-link {
  display: inline-flex !important;
  align-items: center !important;
  gap: 6px !important;
  padding: 8px 12px !important;
  border-radius: var(--r-sm, 6px) !important;
  font-size: 13px !important;
  font-weight: 700 !important;
  color: var(--ink-700, #2C3E52) !important;
  text-decoration: none !important;
  transition: background var(--duration-fast, 160ms) var(--easing-standard, ease) !important;
}
a.tab-link:hover,
.tab-link:hover {
  background: var(--brand-blue-050, #F1F6FE) !important;
  color: var(--brand-blue-700, #0442A3) !important;
}
a.tab-link.active,
.tab-link.selected {
  background: var(--brand-blue-600, #0553C7) !important;
  color: #fff !important;
}

/* ── 14.30 GWT-FileUpload (страницы регистрации/проверки ЭП) ── */
.gwt-FileUpload,
input.gwt-FileUpload {
  width: 100% !important;
  padding: 10px 12px !important;
  border: 1.5px dashed var(--ink-200, #D0DCE8) !important;
  border-radius: var(--r-sm, 6px) !important;
  background: var(--ink-050, #F5F8FB) !important;
  color: var(--ink-700, #2C3E52) !important;
  font-size: 13px !important;
  cursor: pointer !important;
  transition: border-color var(--duration-fast, 160ms) var(--easing-standard, ease) !important;
}
.gwt-FileUpload:hover {
  border-color: var(--brand-blue-300, #7FB2F4) !important;
}

/* ── 14.31 GWT-ListBox (select dropdowns) ─────────────────── */
.gwt-ListBox,
select.gwt-ListBox,
select {
  height: 36px !important;
  padding: 6px 12px !important;
  border: 1.5px solid var(--ink-200, #D0DCE8) !important;
  border-radius: var(--r-sm, 6px) !important;
  background: var(--surface-card, #fff) !important;
  color: var(--ink-900, #0A0E17) !important;
  font-size: 13px !important;
  cursor: pointer !important;
  transition: border-color var(--duration-fast, 160ms) var(--easing-standard, ease),
              box-shadow var(--duration-fast, 160ms) var(--easing-standard, ease) !important;
}
.gwt-ListBox:focus,
select:focus {
  border-color: var(--brand-blue-500, #0665E6) !important;
  box-shadow: var(--shadow-focus, 0 0 0 3px rgba(6,101,230,0.22)) !important;
  outline: none !important;
}

/* ── 14.32 GWT-TextArea (большие поля «Описание / Комментарий») ── */
.gwt-TextArea,
textarea.gwt-TextArea,
textarea {
  width: 100% !important;
  min-height: 96px !important;
  padding: 10px 12px !important;
  border: 1.5px solid var(--ink-200, #D0DCE8) !important;
  border-radius: var(--r-sm, 6px) !important;
  background: var(--surface-card, #fff) !important;
  color: var(--ink-900, #0A0E17) !important;
  font-family: var(--font-body, 'Geologica', sans-serif) !important;
  font-size: 13px !important;
  line-height: 1.5 !important;
  resize: vertical !important;
}
.gwt-TextArea:focus,
textarea:focus {
  border-color: var(--brand-blue-500, #0665E6) !important;
  box-shadow: var(--shadow-focus, 0 0 0 3px rgba(6,101,230,0.22)) !important;
  outline: none !important;
}

/* ── 14.33 GWT-PasswordTextBox ────────────────────────────── */
.gwt-PasswordTextBox,
input.gwt-PasswordTextBox,
input[type="password"] {
  height: 42px !important;
  padding: 0 14px !important;
  border: 1.5px solid var(--ink-200, #D0DCE8) !important;
  border-radius: var(--r-sm, 6px) !important;
  background: var(--surface-card, #fff) !important;
  color: var(--ink-900, #0A0E17) !important;
  font-size: 14px !important;
  width: 100% !important;
  box-sizing: border-box !important;
  font-family: var(--font-body, 'Geologica', sans-serif) !important;
}
input[type="password"]:focus,
.gwt-PasswordTextBox:focus {
  border-color: var(--brand-blue-500, #0665E6) !important;
  box-shadow: var(--shadow-focus, 0 0 0 3px rgba(6,101,230,0.22)) !important;
  outline: none !important;
}

/* ── 14.34 wrapper / clearfix / generic «обёртки» ─────────── */
.wrapper,
.content_wrapper {
  width: 100% !important;
  max-width: min(1280px, 100%) !important;
  margin: 0 auto !important;
  padding: 0 24px !important;
  box-sizing: border-box !important;
}
.clearfix::after {
  content: '' !important;
  display: block !important;
  clear: both !important;
}

/* ── 14.35 Status iconography (.gwt-StatusBar в карточке лота) ── */
.statusBuying,
.statusSale,
.statusPaused,
.statusCancelled,
.statusCompleted {
  display: inline-flex !important;
  align-items: center !important;
  gap: 6px !important;
  padding: 4px 10px !important;
  border-radius: var(--r-pill, 999px) !important;
  font-family: var(--font-mono, monospace) !important;
  font-size: 11px !important;
  font-weight: 750 !important;
  text-transform: uppercase !important;
  letter-spacing: 0.04em !important;
}
.statusBuying  { background: var(--success-100, #EAF6F0) !important; color: var(--success-700, #0F5A36) !important; }
.statusSale    { background: var(--warning-100, #FFF3DC) !important; color: var(--warning-700, #7A4500) !important; }
.statusPaused  { background: var(--ink-100, #EBF0F6) !important;     color: var(--ink-600, #425D78) !important; }
.statusCancelled { background: var(--danger-100, #FEE8E4) !important; color: var(--danger-700, #902B20) !important; }
.statusCompleted { background: var(--brand-blue-050, #F1F6FE) !important; color: var(--brand-blue-700, #0442A3) !important; }

/* ── 14.36 GWT-DatePicker — overlay (ради всплывающего календаря) ── */
.gwt-PopupPanel:has(.gwt-DatePicker) {
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
  padding: 0 !important;
}

/* Final visual-QA repair: keep legacy filter tables in one coherent
   segmented-control formatting context. */
.sp-etp table.filterContainer {
  display: block !important;
  width: fit-content !important;
  max-width: 100% !important;
  overflow-x: auto !important;
  overflow-y: hidden !important;
  border: 1px solid var(--ink-100, #EBF0F6) !important;
  border-radius: var(--r-sm, 6px) !important;
  background: var(--ink-050, #F5F8FB) !important;
  padding: 4px !important;
  scrollbar-width: thin;
}
.sp-etp table.filterContainer > tbody,
.sp-etp table.filterContainer > tbody > tr {
  display: flex !important;
  width: max-content !important;
  min-width: 100% !important;
  align-items: stretch !important;
}
.sp-etp table.filterContainer > tbody > tr > td {
  display: block !important;
  padding: 0 !important;
  border: 0 !important;
  background: transparent !important;
}
.sp-etp table.filterContainer .filterItem {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  min-height: 40px !important;
  padding: 8px 12px !important;
  border: 0 !important;
  border-radius: 4px !important;
  background: transparent !important;
  color: var(--ink-700, #2C3E52) !important;
  text-decoration: none !important;
  box-sizing: border-box !important;
}
.sp-etp table.filterContainer .filterItem:hover {
  background: var(--surface-card, #fff) !important;
  color: var(--brand-blue-700, #0442A3) !important;
}
.sp-etp table.filterContainer .filterItem.selected,
.sp-etp table.filterContainer .filterItem[aria-selected="true"] {
  background: var(--brand-blue-600, #0553C7) !important;
  color: #fff !important;
  box-shadow: var(--shadow-sm, 0 4px 12px rgba(15, 24, 42, 0.10)) !important;
}
.sp-etp table.filterContainer .filterItem .gwt-Label {
  color: inherit !important;
  white-space: nowrap !important;
}

/* System outcomes are first-class screens, not unformatted legacy copy. */
.sp-etp .page404 {
  width: min(820px, 100%) !important;
  margin: clamp(24px, 6vw, 72px) auto !important;
  padding: clamp(24px, 5vw, 48px) !important;
  background: var(--surface-card, #fff) !important;
  border: 1px solid var(--ink-100, #EBF0F6) !important;
  border-radius: var(--r-lg, 14px) !important;
  box-shadow: var(--shadow-md, 0 12px 32px rgba(15, 24, 42, 0.10)) !important;
  box-sizing: border-box !important;
}
.sp-etp .page404 .title404 {
  display: grid !important;
  grid-template-columns: auto 1fr !important;
  align-items: end !important;
  gap: 8px 16px !important;
  margin: 0 0 24px !important;
}
.sp-etp .page404 .big404 {
  font-family: var(--font-mono, 'JetBrains Mono', monospace) !important;
  font-size: clamp(56px, 9vw, 88px) !important;
  font-weight: 800 !important;
  line-height: 0.9 !important;
  letter-spacing: -0.08em !important;
  color: var(--brand-blue-600, #0553C7) !important;
}
.sp-etp .page404 .small404 {
  display: inline-flex !important;
  width: fit-content !important;
  margin-bottom: 6px !important;
  padding: 5px 10px !important;
  border-radius: var(--r-pill, 999px) !important;
  background: var(--danger-100, #FEE8E4) !important;
  color: var(--danger-700, #902B20) !important;
  font-size: 11px !important;
  font-weight: 800 !important;
  letter-spacing: 0.06em !important;
  text-transform: uppercase !important;
}
.sp-etp .page404 .medium404 {
  grid-column: 1 / -1 !important;
  max-width: 620px !important;
  color: var(--ink-900, #0A0E17) !important;
  font-size: clamp(20px, 3vw, 28px) !important;
  font-weight: 750 !important;
  line-height: 1.25 !important;
}
.sp-etp .page404 .article {
  padding: clamp(18px, 3vw, 28px) !important;
  border: 1px solid var(--ink-100, #EBF0F6) !important;
  border-radius: var(--r-md, 10px) !important;
  background: var(--ink-050, #F5F8FB) !important;
  color: var(--ink-700, #2C3E52) !important;
  line-height: 1.55 !important;
}
.sp-etp .page404 .article br {
  display: none !important;
}
.sp-etp .page404 .ulh404 {
  margin: 0 0 8px !important;
  color: var(--ink-900, #0A0E17) !important;
  font-weight: 750 !important;
}
.sp-etp .page404 .ulh404:not(:first-child) {
  margin-top: 20px !important;
}
.sp-etp .page404 ul {
  display: grid !important;
  gap: 8px !important;
  margin: 0 !important;
  padding: 0 !important;
  list-style: none !important;
}
.sp-etp .page404 li {
  position: relative !important;
  padding-left: 20px !important;
}
.sp-etp .page404 li::before {
  content: '' !important;
  position: absolute !important;
  left: 2px !important;
  top: 0.62em !important;
  width: 6px !important;
  height: 6px !important;
  border-radius: 50% !important;
  background: var(--brand-orange-500, #F15A24) !important;
}
.sp-etp .sp-page404-actions {
  display: flex !important;
  flex-wrap: wrap !important;
  gap: 10px !important;
  margin-top: 24px !important;
}
.sp-etp .sp-page404-action {
  display: inline-flex !important;
  min-height: 44px !important;
  align-items: center !important;
  justify-content: center !important;
  padding: 10px 16px !important;
  border: 1px solid var(--brand-blue-600, #0553C7) !important;
  border-radius: var(--r-sm, 6px) !important;
  color: var(--brand-blue-700, #0442A3) !important;
  font-weight: 750 !important;
  text-decoration: none !important;
}
.sp-etp .sp-page404-action--primary {
  background: var(--brand-blue-600, #0553C7) !important;
  color: #fff !important;
}
.sp-etp .sp-page404-action:hover {
  background: var(--brand-blue-700, #0442A3) !important;
  border-color: var(--brand-blue-700, #0442A3) !important;
  color: #fff !important;
}

.sp-etp .content_indent.sp-system-copy {
  width: min(720px, calc(100% - 32px)) !important;
  min-height: 0 !important;
  margin: clamp(24px, 6vw, 64px) auto !important;
  padding: clamp(22px, 4vw, 36px) !important;
  border: 1px solid var(--ink-100, #EBF0F6) !important;
  border-radius: var(--r-lg, 14px) !important;
  background: var(--surface-card, #fff) !important;
  box-shadow: var(--shadow-sm, 0 4px 12px rgba(15, 24, 42, 0.10)) !important;
  color: var(--ink-700, #2C3E52) !important;
  line-height: 1.55 !important;
  box-sizing: border-box !important;
}
.sp-etp .content_indent.sp-system-copy::before {
  content: 'i' !important;
  display: inline-flex !important;
  width: 32px !important;
  height: 32px !important;
  margin-bottom: 14px !important;
  align-items: center !important;
  justify-content: center !important;
  border-radius: 50% !important;
  background: var(--brand-blue-050, #F1F6FE) !important;
  color: var(--brand-blue-700, #0442A3) !important;
  font-family: var(--font-mono, monospace) !important;
  font-weight: 800 !important;
}
.sp-etp .content_indent.sp-system-copy--warning::before {
  content: '!' !important;
  background: var(--warning-100, #FFF3DC) !important;
  color: var(--warning-700, #7A4500) !important;
}
.sp-etp .content_indent.sp-system-copy > h1:first-of-type {
  display: block !important;
  /* Легаси-правило .content_indent:not(:has(table.searchPanel)) > h1:first-child
     рисует заголовок тёмно-синей плашкой с белым текстом и отрицательными
     полями под контейнер с padding 20px. Карточка системного сообщения — белая
     и со своим clamp-padding, а переопределялся только цвет: получался почти
     чёрный текст на синем фоне (1.07:1, заголовок не читался). Снимаем плашку
     целиком, а не один цвет. */
  margin: 0 0 12px !important;
  padding: 0 !important;
  /* общая плашка заголовка центрирует текст и скругляет углы — сюда это
     не относится: значок стоит слева, текст сообщения слева */
  text-align: left !important;
  border-radius: 0 !important;
  background: transparent !important;
  color: var(--ink-900, #0A0E17) !important;
  font-size: clamp(22px, 4vw, 30px) !important;
  line-height: 1.2 !important;
}

@media (max-width: 480px) {
  .sp-etp ul.tabs.tabs-simple {
    display: grid !important;
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    width: 100% !important;
    max-width: none !important;
    overflow: visible !important;
  }
  .sp-etp ul.tabs.tabs-simple > li {
    min-width: 0 !important;
  }
  .sp-etp ul.tabs.tabs-simple > li:last-child:nth-child(odd) {
    grid-column: 1 / -1 !important;
  }
  .sp-etp ul.tabs.tabs-simple .tab-link {
    width: 100% !important;
    min-height: 44px !important;
    justify-content: center !important;
    text-align: center !important;
    white-space: normal !important;
  }
  .sp-etp .page404 {
    margin: 20px auto !important;
    padding: 22px 18px !important;
  }
  .sp-etp .page404 .title404 {
    grid-template-columns: 1fr !important;
    align-items: start !important;
  }
  .sp-etp .page404 .medium404 {
    grid-column: 1 !important;
  }
  .sp-etp .sp-page404-actions,
  .sp-etp .sp-page404-action {
    width: 100% !important;
  }
}

/* ════════════════════════════════════════════════════════════
   END OF DESIGN-SYSTEM MAPPING (section 14)
   ════════════════════════════════════════════════════════════ */

/* ── CellTable с полями внутри диалога (2026-09-03) ───────────────────────
   «Добавить предложение по позиции» (оферта участника): GWT CellTable с
   table-layout: fixed и colgroup без ширин — колонки 60/180/600px, заголовок
   первой колонки наезжал на второй, поля 160px по size=20. Колонки 38/28/34%
   (2026-09-11: первой колонке нужно место под выбор страны происхождения,
   раньше 28% — блок ОКСМ не помещался), поля и вложенные таблицы — на ширину
   ячейки. */
.sp-etp .gwt-DialogBox table.cellTableWidget.sp-table--data:has(td.textFieldValue) { table-layout: fixed !important; width: 100% !important; }
.sp-etp .gwt-DialogBox table.cellTableWidget.sp-table--data:has(td.textFieldValue) > colgroup > col:first-child { width: 38% !important; }
.sp-etp .gwt-DialogBox table.cellTableWidget.sp-table--data:has(td.textFieldValue) > colgroup > col:nth-child(2) { width: 28% !important; }
.sp-etp .gwt-DialogBox table.cellTableWidget.sp-table--data:has(td.textFieldValue) > thead > tr > th { white-space: normal !important; overflow: visible !important; overflow-wrap: anywhere; vertical-align: bottom !important; }
.sp-etp .gwt-DialogBox table.cellTableWidget.sp-table--data:has(td.textFieldValue) > tbody > tr > td { vertical-align: top !important; }
.sp-etp .gwt-DialogBox table.cellTableWidget.sp-table--data td.textFieldValue > input.sp-control,
.sp-etp .gwt-DialogBox table.cellTableWidget.sp-table--data td.textFieldValue > textarea.sp-control,
.sp-etp .gwt-DialogBox table.cellTableWidget.sp-table--data td.textFieldValue > .sp-control-shell,
.sp-etp .gwt-DialogBox table.cellTableWidget.sp-table--data td.textFieldValue > .sp-control-shell > .sp-control { width: 100% !important; min-width: 0 !important; max-width: 100% !important; box-sizing: border-box !important; }
.sp-etp .gwt-DialogBox table.cellTableWidget.sp-table--data table.fullWidth,
.sp-etp .gwt-DialogBox table.cellTableWidget.sp-table--data table.defaultCellPadding { width: 100% !important; }
.sp-etp .gwt-DialogBox table.cellTableWidget.sp-table--data table.defaultCellPadding > tbody > tr > td { width: 50% !important; }
/* GWT ScrollPanel-обёртка содержимого диалога несёт inline width (880px при
   диалоге 900px) и вместе с нашими отступами уводила правый край содержимого
   (кнопку «×», правую колонку блока позиции, третью колонку таблицы) за
   границу диалога. Обёртка — на ширину содержимого диалога. */
.sp-etp .gwt-DialogBox .dialogContent > table > tbody > tr > td > div[style*="width"] { width: auto !important; max-width: 100% !important; }

/* ── Карта дефектов UI, волна ЭТП (2026-09-03) ───────────────────────────
   Остатки чужих шрифтов и цветов: телефон и контакты шапки, панель ЛК, сообщение о ЭП,
   зебра результатов (#ECECEC), подпись «© Naumen», GIF-иконка сертификата. */
.sp-etp .hc-phone, .sp-etp .hc-phone a, .sp-etp .topstrip-contacts, .sp-etp .topstrip-contacts a, .sp-etp .h-contacts, .sp-etp .h-contacts *,
.sp-etp #sp-lk-dialog, .sp-etp #sp-lk-dialog *, .sp-etp .login_form, .sp-etp .login_form *, .sp-etp .sp-eds-unavailable, .sp-etp .sp-eds-unavailable * { font-family: 'Geologica', 'Inter', system-ui, sans-serif !important; }
.sp-etp .cellTableOddRowCell, .sp-etp tr.cellTableOddRow > td, .sp-etp .cashflowDocumentTable .cellTableOddRow > td { background-color: var(--ink-050, #F5F8FB) !important; }
.sp-etp .eb-copy, .sp-etp .eb-copy * { color: var(--ink-500, #5E7A90) !important; }
.sp-etp img#certificateInfo, .sp-etp img[src*="certificate.gif"] { content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='%230553C7' stroke-width='1.5'%3E%3Crect x='2.5' y='4' width='15' height='12' rx='2'/%3E%3Cpath d='M6 8.5h5M6 11.5h8' stroke-linecap='round'/%3E%3Ccircle cx='14' cy='8' r='1.6' fill='%23F58220' stroke='none'/%3E%3C/svg%3E"); width: 20px !important; height: 20px !important; vertical-align: middle !important; }
/* Заголовок страницы: тёмная плашка — стандарт внутренних страниц (legacy-base.css), не трогаем; только display-шрифт ДС для не-плашечных h1 задаёт правило выше. */
/* Диалог выбора регионов/ОКПД2: список не уходит под кнопки подвала */
.sp-etp .gwt-DialogBox .dialogContent > table > tbody > tr > td > div[style*="overflow"] { padding-bottom: 56px !important; box-sizing: border-box !important; }
.sp-etp .gwt-DialogBox table.formButtonsPanel { position: sticky !important; bottom: 0 !important; background: #fff !important; border-top: 1px solid var(--ink-100, #E2EAF3) !important; }
/* Панель ЛК: строки «∟ логин: …» с висячим отступом, пункты меню — цели касания на телефоне */
.sp-etp #sp-lk-dialog .etpp-small, .sp-etp .login_form .etpp-small { display: flex !important; align-items: baseline !important; gap: 6px !important; flex-wrap: wrap !important; padding-left: 0 !important; }
.sp-etp #sp-lk-dialog .etpp-small > span:first-child, .sp-etp .login_form .etpp-small > span:first-child { flex: 0 0 auto !important; }
.sp-etp #sp-lk-dialog .etpp-small > b, .sp-etp .login_form .etpp-small > b { flex: 1 1 auto !important; min-width: 0 !important; overflow-wrap: anywhere; }
@media (max-width: 768px) {
  .sp-etp #sp-lk-dialog .spf-line > a, .sp-etp .login_form .spf-line > a { display: flex !important; align-items: center !important; min-height: 40px !important; padding: 6px 0 !important; }
  .sp-etp input[type="checkbox"].sp-control, .sp-etp input[type="radio"].sp-control { width: 22px !important; height: 22px !important; min-width: 22px !important; }
}

/* ── Вендорная тема GWT (clean.css) на страницах администратора (2026-09-03, волна 3) ──
   `body, table td, select, button { font-family: "Arial Unicode MS" }` перебивал наследование
   шрифта в ячейках (Проверка ЭП, Поиск процедур, Остатки ДС) — перекрываем теми же селекторами. */
.sp-etp table td, .sp-etp select, .sp-etp button, .sp-etp .gwt-DialogBox .Caption, .sp-etp .gwt-MenuBar .gwt-MenuItem, .sp-etp .gwt-SuggestBox, .sp-etp .gwt-TextArea, .sp-etp .gwt-TextBox { font-family: 'Geologica', Arial, sans-serif; }

/* ── Заголовки страниц вне тёмной плашки (2026-09-03, волна 3) ──────────────
   «Аккредитация участников»: h1.inlineCardTitle внутри .clearfix.heading (22px, синий текст) —
   приводим к стандартной плашке; h1 внутри простого .clearfix — заголовок секции, 18px как h2.inlineCardTitle. */
.sp-etp .content_indent:not(:has(table.searchPanel)) > .clearfix.heading:first-child > h1.inlineCardTitle,
.sp-etp .content_indent:not(:has(table.searchPanel)) > label.filter-fab:first-child + .clearfix.heading > h1.inlineCardTitle { display: block !important; float: none !important; width: auto !important; max-width: none !important; margin: 0 -20px 12px !important; padding: 12px 16px !important; border: 0 !important; background: var(--navy) !important; color: var(--white) !important; font-family: 'Geologica', Arial, sans-serif !important; font-size: 14px !important; font-weight: 600 !important; line-height: normal !important; }
.sp-etp .content_indent > .clearfix:not(.heading) > h1:not(.inlineCardTitle) { font-size: 18px !important; margin: 0 0 12px !important; }

/* ── Радиокнопки и чекбоксы на телефоне: 22×22 (2026-09-03, волна 3) ───────
   Правило .ecp-radio > input (20px !important) шло позже общего 22px — поднимаем специфичность. */
@media (max-width: 768px) {
  body.sp-etp input[type="radio"].sp-control, body.sp-etp input[type="checkbox"].sp-control, body.sp-etp .content_indent input[type="radio"], body.sp-etp .content_indent input[type="checkbox"], body.sp-etp .gwt-DialogBox input[type="radio"], body.sp-etp .gwt-DialogBox input[type="checkbox"],
  .sp-etp .content_indent input[type="radio"].sp-control, .sp-etp .content_indent input[type="checkbox"].sp-control, .sp-etp .content_indent input.radio-btn, .sp-etp .content_indent input.checkbox, body.sp-etp #offerSearchForm .orsb-title > input[type="checkbox"], body.sp-etp #offerSearchForm .orsb-title > input[type="radio"] { flex: 0 0 22px !important; width: 22px !important; height: 22px !important; min-width: 22px !important; min-height: 22px !important; }
}

/* ── Страницы с боковой панелью входа (семейство authentication, кроме /app/Login/) (2026-09-03, волна 3) ──
   «Аккредитация участников»: авто-раскладка сетки страницы растягивалась под широкую таблицу результатов
   (1445px при окне 1440 — горизонтальная прокрутка страницы); фиксированная раскладка держит колонки
   280px + остаток, а широкая таблица прокручивается внутри своей обёртки .sp-table-scroll--data. */
body.sp-etp.sp-family-authentication:not([data-sp-route="/app/Login/page/"]) #content_table.ds-page-table { table-layout: fixed !important; }

/* source: test-overrides/ui-redesign/etp/shell.css */
.sp-etp body,
body.sp-etp {
  min-width: 0;
  margin: 0;
  padding-top: calc(var(--sp-topstrip-h, 32px) + 72px) !important;
  overflow-x: clip;
  background: var(--surface-page);
}

/* The legacy #wrapper only owns the fixed top strip.  At <=1024px the old
   stylesheet reserves another 64px for it, although body padding already
   compensates the complete fixed shell.  Collapse that obsolete flow box so
   every route starts directly below the header at phone and tablet widths. */
body.sp-etp > #wrapper {
  height: 0 !important;
  min-height: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
  overflow: visible !important;
}

.sp-etp .topstrip {
  position: fixed !important;
  inset: 0 0 auto;
  z-index: 90;
  min-height: 32px;
  padding: 6px 0;
  border: 0;
  background: var(--navy-900);
  color: rgb(255 255 255 / 72%);
  font-size: 12px;
  line-height: 20px;
}

.sp-etp .topstrip-inner {
  display: flex !important;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-7);
  width: min(1440px, 100%);
  min-height: 20px;
  margin: 0 auto;
  padding: 0 24px;
}

/* .h-operator — вендорная обёртка «ЭТП "СПЕЦТЕНДЕР"» из HTML контактов (tbl_etp_settings.contactshtml):
   на проде админка задала ей inline margin-top: 15px, и надпись уезжала ниже телефона и почты (13.09.2026).
   Сброс с !important перебивает inline-стили из админки. */
.sp-etp .topstrip-status,
.sp-etp .topstrip-contacts,
.sp-etp .topstrip-contacts .h-contacts,
.sp-etp .topstrip-contacts .h-operator,
.sp-etp .topstrip-contacts .hc-phone,
.sp-etp .topstrip-contacts .ho-text {
  display: inline-flex !important;
  align-items: center;
  gap: var(--space-4);
  min-width: 0;
  margin: 0 !important;
  padding: 0 !important;
  background: transparent !important;
  color: inherit !important;
  font: inherit !important;
  white-space: nowrap;
}

.sp-etp .topstrip-status .status-dot {
  width: 8px;
  height: 8px;
  flex: 0 0 auto;
  border-radius: 50%;
  background: var(--success-600);
  box-shadow: 0 0 0 3px rgb(31 174 90 / 18%);
}

.sp-etp .topstrip-status__primary { color: #fff; font-weight: 600; }
.sp-etp .topstrip-status__sep { color: rgb(255 255 255 / 32%); }
.sp-etp .topstrip-contacts { justify-content: flex-end; overflow: hidden; }
.sp-etp .topstrip-contacts style,
.sp-etp .h-time__wrapper-mute { display: none !important; }
.sp-etp .topstrip-contacts table,
.sp-etp .topstrip-contacts tbody,
.sp-etp .topstrip-contacts tr,
.sp-etp .topstrip-contacts center { display: contents !important; }
.sp-etp .topstrip-contacts td { display: inline-flex !important; align-items: center; padding: 0 !important; }
.sp-etp .topstrip-contacts td:has(p),
.sp-etp .topstrip-contacts td[colspan] { display: none !important; }
.sp-etp .topstrip-contacts td > div { width: auto !important; margin: 0 !important; text-align: left !important; }
.sp-etp .topstrip a { color: inherit; }
.sp-etp .topstrip a:hover { color: #fff; }

.sp-etp .header.ds-header {
  position: fixed !important;
  inset: 32px 0 auto;
  z-index: 100;
  display: flex !important;
  width: 100%;
  height: 72px !important;
  min-height: 72px;
  overflow: visible;
  border-bottom: 1px solid var(--ink-100);
  background: rgb(255 255 255 / 96%) !important;
  color: var(--ink-700);
  box-shadow: var(--shadow-xs);
  backdrop-filter: blur(10px);
}

.sp-etp .header__wrapper {
  display: flex !important;
  align-items: stretch;
  width: min(1440px, 100%);
  min-width: 0;
  min-height: 72px;
  margin: 0 auto;
  padding: 0 24px;
}

.sp-etp .h-light {
  display: flex !important;
  align-items: center;
  flex: 1 1 auto;
  flex-flow: row nowrap;
  gap: var(--space-4);
  width: 100% !important;
  min-width: 0;
  min-height: 72px;
  margin: 0 !important;
  padding: 0 !important;
  background: transparent !important;
}

.sp-etp .h-light > * { float: none !important; }
.sp-etp .h-logo { flex: 0 0 auto; width: auto !important; height: auto !important; margin: 0 !important; }
.sp-etp .logo-lockup { display: inline-flex; align-items: center; gap: 10px; color: var(--navy-800); }
.sp-etp .header img.logo-mark { display: block; width: auto; height: 36px; }
.sp-etp .logo-text { display: grid; color: var(--navy-800); font-family: var(--font-display); font-size: 13px; font-weight: 700; letter-spacing: .025em; line-height: 1.1; }
.sp-etp .logo-text small { margin-top: 4px; color: var(--ink-500); font-family: var(--font-body); font-size: 9px; font-weight: 500; letter-spacing: 0; }
.sp-etp .hl-hidden { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }

/* Official complete logo from https://etpsp.ru/assets/templates/spectender/img/spectender-logo.svg
   SHA256: 4fb02c511d1d619c1db901b8e2d93df323d55d624c394b5be4ed77c208a46d14.
   Keep its lettering, colors and proportions together. The existing hl-hidden
   text and footer aria-label name the links for assistive technology.
   No template/restart is needed. */
.sp-etp .h-logo a.logo-lockup,
.sp-etp .sp-footer-brand {
  width: 200px !important;
  height: 44px !important;
  gap: 0 !important;
  background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KCgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjIwMi44MjdtbSIgaGVpZ2h0PSIzNC42NTU2bW0iIHZlcnNpb249IjEuMSIgc3R5bGU9InNoYXBlLXJlbmRlcmluZzpnZW9tZXRyaWNQcmVjaXNpb247IHRleHQtcmVuZGVyaW5nOmdlb21ldHJpY1ByZWNpc2lvbjsgaW1hZ2UtcmVuZGVyaW5nOm9wdGltaXplUXVhbGl0eTsgZmlsbC1ydWxlOmV2ZW5vZGQ7IGNsaXAtcnVsZTpldmVub2RkIiB2aWV3Qm94PSIwIDAgNTA5NzAuMzYgODcwOC45NCIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogPGRlZnM+CiAgCiA8L2RlZnM+CiA8ZyBpZD0i0KHQu9C+0LlfeDAwMjBfMSI+CiAgPG1ldGFkYXRhIGlkPSJDb3JlbENvcnBJRF8wQ29yZWwtTGF5ZXIiPjwvbWV0YWRhdGE+CiAgPGcgaWQ9Il8zMjAxNjQzNjc1NzYwIj4KICAgPHBhdGggZmlsbD0iIzA2NjVFNiIgZD0iTTE0OTE2LjAyIDU2MTQuNzFsMCAtMzg3OC4yNiAzNjY3LjU3IDAgMCAzODc4LjI2IC05MjUuMzEgMCAwIC0yODY4Ljg2IC0xODE2LjkgMCAwIDI4NjguODYgLTkyNS4zNiAwem0tMjQ4MC4yOCAtMzk2NC43MWM5NjIuOCwwIDE3NjcuOTcsNjc0LjA2IDE5NjkuNzEsMTU3NmwtOTYwLjg3IDBjLTE3MC40MywtMzg3LjkxIC01NTcuOTYsLTY1OC44OCAtMTAwOC44NCwtNjU4Ljg4IC02MDguMjcsMCAtMTEwMS4zNyw0OTMuMTMgLTExMDEuMzcsMTEwMS40MiAwLDYwOC4yNyA0OTMuMSwxMTAxLjM3IDExMDEuMzcsMTEwMS4zNyA0NjcuMzIsMCA4NjYuNjEsLTI5MS4xMSAxMDI2LjYxLC03MDEuNzVsOTUyLjMgMGMtMTg1LjQzLDkyMy40IC0xMDAwLjksMTYxOC44NyAtMTk3OC45MSwxNjE4Ljg3IC0xMTE0Ljc5LDAgLTIwMTguNDksLTkwMy43IC0yMDE4LjQ5LC0yMDE4LjQ5IDAsLTExMTQuODQgOTAzLjcsLTIwMTguNTQgMjAxOC40OSwtMjAxOC41NHptMTQwNTcuNiAyOTU1LjI4bDU3OC44NyAwIDAgMTQ2MS4yNiAtOTEyLjY3IDAgMCAtNDUxLjg0IC0zMzI5LjU3IDAgMCAtMzg3OC4yNiA5MjUuMzYgMCAwIDI4NjguODQgMTgxMi42NyAwIDAgLTI4NjguODQgOTI1LjM0IDAgMCAyODY4Ljg0em0tNzMxOC4yNSAxMDA5LjQybDAgLTM4NzguMjYgMzEyNi43IDAgMCA5NzIuMjUgLTIyMTguMjUgMCAwIDUyMC41OSAyMDExLjIzIDAgMCA4NTUuMzcgLTIwMTEuMjMgMCAwIDU0Ny4xOCAyMzA2Ljk4IDAgMCA5ODIuODYgLTMyMTUuNDMgMHoiPjwvcGF0aD4KICAgPHBhdGggZmlsbD0iI0VBNUIyMSIgZD0iTTI3MDA4Ljc5IDI3NDUuODVsMCAtMTAwOS40IDM2OTIuOSAwIDAgMTAwOS40IC0xMzgxLjY3IDAgMCAyODY4Ljg2IC05MjUuMzYgMCAwIC0yODY4Ljg2IC0xMzg1Ljg3IDB6bTIyNTU4LjcyIC0xMDA5LjRjMjUzLjU0LDAgNDY5LjA1LDMwLjExIDY0Ni41NCw5MC4zMiAxNzcuNDcsNjAuMjEgMzIyLjQ5LDE0Ni4xMyA0MzUuMTUsMjU3LjcxIDExMi43MSwxMTEuNTUgMTk0LjM4LDI0OC43NiAyNDUuMDksNDExLjcgNTAuNjYsMTYyLjkyIDc2LjA3LDM0OC44OCA3Ni4wNyw1NTcuODEgMCwyMDUuNDQgLTI1LjQxLDM5MC41MiAtNzYuMDcsNTU1LjE3IC01MC43MSwxNjQuNzMgLTEzMi4zOCwzMDIuODQgLTI0NS4wOSw0MTQuMzkgLTExMi42NiwxMTEuNTggLTI1Ny42OCwxOTcuNDcgLTQzNS4xNSwyNTcuNjggLTE3Ny40OSw2MC4yNCAtMzkzLjAxLDkwLjI5IC02NDYuNTQsOTAuMjlsLTExNzQuNjMgMCAwIDEyNDMuMTggLTkxMi42MiAwIDAgLTM4NzguMjYgMjA4Ny4yNSAwem0tMjEuMDggMTY1Ny42YzEwMS40LDAgMTg0LjQ4LC03LjExIDI0OS4zNCwtMjEuMjkgNjQuNzMsLTE0LjE1IDExNi4xOCwtMzYuMzEgMTU0LjIsLTY2LjQyIDM4LC0zMC4wNiA2NC4wNiwtNjYuMzcgNzguMTMsLTEwOC44OSAxNC4wNywtNDIuNDkgMjEuMTYsLTkwLjMyIDIxLjE2LC0xNDMuNDcgMCwtNTMuMSAtNy4wOSwtMTAwLjkyIC0yMS4xNiwtMTQzLjQyIC0xNC4wNywtNDIuNDkgLTQwLjEzLC03Ny45MyAtNzguMTMsLTEwNi4yNSAtMzguMDIsLTI4LjM1IC04OS40NiwtNTAuNDkgLTE1NC4yLC02Ni40MiAtNjQuODYsLTE1LjkzIC0xNDcuOTQsLTIzLjg3IC0yNDkuMzQsLTIzLjg3bC0xMTUzLjU0IDAgMCA2ODAuMDIgMTE1My41NCAwem0tNTcyMS4wMSAyMjIwLjY2bDAgLTM4NzguMjYgMzEyNi43MiAwIDAgOTcyLjI1IC0yMjE4LjMgMCAwIDUyMC41OSAyMDExLjI1IDAgMCA4NTUuMzcgLTIwMTEuMjUgMCAwIDU0Ny4xOCAyMzA3LjAxIDAgMCA5ODIuODYgLTMyMTUuNDMgMHptLTkzOCAtMTAwNC4wOWw1NzguODQgMCAwIDE0NTUuOTMgLTkxMi42NyAwIDAgLTQ1MS44NCAtMjgxNC4wNSAwIDAgNDUxLjg0IC05MTIuNjUgMCAwIC0xNDU1LjkzIDU0MC44NyAwYzU2LjI3LC0xMTYuODUgMTA0LjE2LC0yODEuNTggMTQzLjY0LC00OTQuMDYgMzkuNDUsLTIxMi41MiA2Ni4xOSwtNDk0LjExIDgwLjI0LC04NDQuNzRsNTAuNzEgLTE1MzUuMzcgMzI0NS4wNiAwIDAgMjg3NC4xNnptLTkxNi44OSA1LjM1bDAgLTE4NzUuNCAtMTQ1Ny43MSAwIC0yMS4xOCA3MDYuNThjLTExLjIxLDI3Ni4yNSAtMzEuNjYsNTA5LjE2IC02MS4yNCw2OTguNjQgLTI5LjYsMTg5LjQ4IC02Ni45LDM0Ni4xNyAtMTExLjk4LDQ3MC4xOGwxNjUyLjEyIDB6bS00NDI4LjE1IC0yODc5LjUybDkyNS4zNiAwIDAgMzg3OC4yNiAtOTI1LjM2IDAgMCAtMTQzNC4zOSAtMTg4MC4yNSAwIDAgMTQzNC4zOSAtOTI1LjMxIDAgMCAtMzg3OC4yNiA5MjUuMzEgMCAwIDE0MzQuNDcgMTg4MC4yNSAwIDAgLTE0MzQuNDd6bS02NDYwLjQxIDM4NzguMjZsMCAtMzg3OC4yNiAzMTI2LjcyIDAgMCA5NzIuMjUgLTIyMTguMyAwIDAgNTIwLjU5IDIwMTEuMjUgMCAwIDg1NS4zNyAtMjAxMS4yNSAwIDAgNTQ3LjE4IDIzMDYuOTggMCAwIDk4Mi44NiAtMzIxNS40IDB6Ij48L3BhdGg+CiAgIDxwYXRoIGZpbGw9IiMwQTBFMTQiIGQ9Ik0xMTA1NC43MiA4MTUxLjc2Yy0xMjguODksMCAtMjM3Ljg2LC0yOS41NSAtMzI3LjA0LC04OC41NmwwIC0xODIuMDJjODguMDYsNjkuNzQgMTk3LjA5LDEwNC42NCAzMjcuMDQsMTA0LjY0IDEwNC4xNCwwIDE5Mi43NywtMzIuNzIgMjY1Ljc1LC05OC4yMSA3NC4xMywtNjUuNTEgMTE4LjY0LC0xNDkuOCAxMzMuNjksLTI1Mi45MWwtNDgxLjYyIDAgMCAtMTYyLjc0IDQ3MS45NCAwYy0xOC4yMiwtOTcuNzMgLTYyLjgyLC0xNzUuNTMgLTEzMy42OSwtMjMzLjUzIC03MS45MiwtNjAuMTQgLTE1NS42OCwtOTAuMjQgLTI1MS4yNywtOTAuMjQgLTExMi43OCwwIC0yMTUuMzEsMzAuMTEgLTMwNy42Nyw5MC4yNGwwIC0xNzguNzdjOTEuMywtNTEuNTkgMTkyLjc3LC03Ny4zOCAzMDQuNDcsLTc3LjM4IDE2Ny40OSwwIDMwNy42Nyw1Ni4zOSA0MjAuMzcsMTY5LjE1IDExMi43OCwxMTEuNzMgMTY5LjE3LDI1MC4yMiAxNjkuMTcsNDE1LjU3IDAsMTY0LjM4IC01Ni45NCwzMDIuODcgLTE3MC43MSw0MTUuNjUgLTExMi43OCwxMTIuNzEgLTI1Mi45MSwxNjkuMSAtNDIwLjQ1LDE2OS4xem02NjguNDYgLTI0LjE4bDAgLTE2MS4wM2MxNCw0LjMgMzMuODUsNi40MyA1OS41OCw2LjQzIDc5LjQ5LDAgMTMyLjEzLC00OS40MSAxNTcuODQsLTE0OC4xOSAyNS44MSwtODQuODYgNDAuODYsLTIyOS43OSA0NS4xNiwtNDM0LjkybDQuOCAtMzg2LjYgNzUwLjY2IDAgMCAxMTI3LjU2IC0xNzcuMjIgMCAwIC05NjQuODkgLTQwMi43MSAwIC00LjggMjQxLjY3Yy00LjMyLDI0My43MSAtMzAuNjEsNDI0LjY3IC03OC45Myw1NDIuODMgLTUwLjQ2LDEyMy41MSAtMTQ1LjUsMTg1LjIxIC0yODUuMTIsMTg1LjIxIC0yNy45MiwwIC01MS4wMSwtMi42OSAtNjkuMjYsLTguMDd6bTIxMjEuNDUgMy4yNGwtODIzLjE2IDAgMCAtMTEyNy41NiA4MDIuMjUgMCAwIDE2Mi42NyAtNjI1LjAzIDAgMCAyODEuODggNTA4Ljk4IDAgMCAxNjIuNzIgLTUwOC45OCAwIDAgMzU3LjYyIDY0NS45NCAwIDAgMTYyLjY3em0zODYuNiAwbC0xNzcuMjQgMCAwIC0xMTI3LjU2IDE3Ny4yNCAwIDAgNDYwLjY2IDQ2Mi4yNyAtNDYwLjY2IDIyNy4xNyAwIC01MjEuOSA1MTUuNDkgNjA1LjYzIDYxMi4wNyAtMjQxLjY1IDAgLTUzMS41MiAtNTQxLjIgMCA1NDEuMnptODE4LjI2IC05NjQuODlsMCAtMTYyLjY3IDkyMyAwIDAgMTYyLjY3IC0zNzMuNjYgMCAwIDk2NC44OSAtMTc3LjIyIDAgMCAtOTY0Ljg5IC0zNzIuMTIgMHptMTI5My41NyA5NjQuODlsLTE3Ny4yMiAwIDAgLTExMjcuNTYgNDg0Ljg4IDBjMTE4LjE0LDAgMjA5Ljk0LDMwLjU4IDI3NS40NSw5MS44IDY3LjYyLDU5LjA2IDEwMS40NywxMzcuNDQgMTAxLjQ3LDIzNS4xNyAwLDk3LjcxIC0zMy44NSwxNzguMjcgLTEwMS40NywyNDEuNjUgLTY1LjUxLDYyLjI3IC0xNTcuMzEsOTMuNDMgLTI3NS40NSw5My40M2wtMzA3LjY3IDAgMCA0NjUuNTF6bTAgLTk2NC44OWwwIDMzNi43MiAyOTMuMTcgMGM2Ni41NywwIDExOC42NiwtMTQuNzggMTU2LjI2LC00NC4zIDM3LjU3LC0yOS41NSA1Ni4zNywtNzEuMTcgNTYuMzcsLTEyNC44NyAwLC01My43IC0xOC41LC05NS4wNCAtNTUuNjEsLTEyNC4wMiAtMzcuMDIsLTI5LjA1IC04OS4zOSwtNDMuNTMgLTE1Ny4wMSwtNDMuNTNsLTI5My4xNyAwem0xMTQzLjY2IDcwMC43Yzc2LjI0LDc5LjQ5IDE2OS42OCwxMTkuMTkgMjgwLjMyLDExOS4xOSAxMTAuNiwwIDIwNC4wMSwtMzkuNzEgMjgwLjI1LC0xMTkuMTkgNzYuMjQsLTgxLjYyIDExNC40MiwtMTgxLjQ2IDExNC40MiwtMjk5LjYyIDAsLTExOS4xOSAtMzguMTcsLTIxOC40OCAtMTE0LjQyLC0yOTcuOTkgLTc2LjI0LC04MC41NCAtMTY5LjY1LC0xMjAuODIgLTI4MC4yNSwtMTIwLjgyIC0xMTAuNjUsMCAtMjA0LjA4LDQwLjI4IC0yODAuMzIsMTIwLjgyIC03NS4xNiw3OC40NiAtMTEyLjc2LDE3Ny43MiAtMTEyLjc2LDI5Ny45OSAwLDEyMC4zNSAzNy41OSwyMjAuMTkgMTEyLjc2LDI5OS42MnptNjkyLjY2IDExNy42M2MtMTA5LjU0LDExMS42NSAtMjQ2Ljk4LDE2Ny40OSAtNDEyLjMzLDE2Ny40OSAtMTY1LjQxLDAgLTMwMi44NywtNTUuODQgLTQxMi4zOCwtMTY3LjQ5IC0xMDguNDYsLTExMy44NCAtMTYyLjc0LC0yNTIuODggLTE2Mi43NCwtNDE3LjI2IDAsLTE2NS4zNiA1NC4yOCwtMzAzLjg1IDE2Mi43NCwtNDE1LjU3IDEwOS41MiwtMTEyLjc2IDI0Ni45OCwtMTY5LjE1IDQxMi4zOCwtMTY5LjE1IDE2NS4zNiwwIDMwMi43OSw1Ni4zOSA0MTIuMzMsMTY5LjE1IDEwOS41MiwxMTEuNzMgMTY0LjI3LDI1MC4yMiAxNjQuMjcsNDE1LjU3IDAsMTY1LjQzIC01NC43NiwzMDQuNSAtMTY0LjI3LDQxNy4yNnptNTgxLjUzIDE0Ni41NmwtMTc3LjIyIDAgMCAtMTEyNy41NiAxNzcuMjIgMCAwIDQ0NC41NSA1ODcuOTIgMCAwIC00NDQuNTUgMTc3LjI0IDAgMCAxMTI3LjU2IC0xNzcuMjQgMCAwIC01MjAuMjkgLTU4Ny45MiAwIDAgNTIwLjI5em0xMjIyLjYyIDBsLTE3Ny4yMiAwIDAgLTExMjcuNTYgMTc3LjIyIDAgMCA0NDQuNTUgNTg3LjkyIDAgMCAtNDQ0LjU1IDE3Ny4yMiAwIDAgMTEyNy41NiAtMTc3LjIyIDAgMCAtNTIwLjI5IC01ODcuOTIgMCAwIDUyMC4yOXptMTEyOS4xOSAwbC0xODguNDcgMCA0OTIuODcgLTExMzMuOTkgMTcwLjczIDAgNDkyLjk1IDExMzMuOTkgLTE5MC4wOCAwIC0xMjIuMzggLTI4MC4zIC01MzQuODcgMCAtMTIwLjc1IDI4MC4zem0zODguMTMgLTkxMC4xM2wtMjA2LjEyIDQ3My41NyA0MTIuMzMgMCAtMjA2LjIyIC00NzMuNTd6bTg2MS44MSA5MTAuMTNsLTIxNC4yMyAwIDM1OS4yMyAtNDk2LjEyYy03OS40OSwtMTguMjkgLTE0MS4yNiwtNTUuMDMgLTE4NS4yNiwtMTEwLjM3IC00NC4wMywtNTUuMjYgLTY2LjA5LC0xMjIuMTEgLTY2LjA5LC0yMDAuNTQgMCwtOTcuNzMgMzMuNTcsLTE3NS42MSAxMDAuNywtMjMzLjU2IDY3LjE1LC01OCAxNTguMTQsLTg2Ljk3IDI3My4wNiwtODYuOTdsNTEzLjg2IDAgMCAxMTI3LjU2IC0xNzcuMjQgMCAwIC00NzYuODIgLTI2NC4xMiAwIC0zMzkuOTEgNDc2Ljgyem0yNzUuNDUgLTYzMy4wNWwzMjguNTcgMCAwIC0zMzEuODQgLTMyOC41NyAwYy02My4zOCwwIC0xMTIuOTgsMTQuNzggLTE0OS4wMiw0NC4zIC0zNS45NiwyOS41MyAtNTMuOTMsNzAuMDkgLTUzLjkzLDEyMS42IDAsNTIuNjUgMTcuOTcsOTMuNDMgNTMuOTMsMTIyLjQ2IDM2LjA0LDI4Ljk3IDg1LjY0LDQzLjQ3IDE0OS4wMiw0My40N3ptMTAzNy4zNCAtMzMxLjg0bDAgLTE2Mi42NyA5MjMgMCAwIDE2Mi42NyAtMzczLjY4IDAgMCA5NjQuODkgLTE3Ny4yMiAwIDAgLTk2NC44OSAtMzcyLjEgMHptMTI4My44NyA3MDAuN2M3Ni4yNCw3OS40OSAxNjkuNjUsMTE5LjE5IDI4MC4zMiwxMTkuMTkgMTEwLjU3LDAgMjA0LjAxLC0zOS43MSAyODAuMjUsLTExOS4xOSA3Ni4yNCwtODEuNjIgMTE0LjM5LC0xODEuNDYgMTE0LjM5LC0yOTkuNjIgMCwtMTE5LjE5IC0zOC4xNSwtMjE4LjQ4IC0xMTQuMzksLTI5Ny45OSAtNzYuMjQsLTgwLjU0IC0xNjkuNjgsLTEyMC44MiAtMjgwLjI1LC0xMjAuODIgLTExMC42NywwIC0yMDQuMDgsNDAuMjggLTI4MC4zMiwxMjAuODIgLTc1LjE5LDc4LjQ2IC0xMTIuNzgsMTc3LjcyIC0xMTIuNzgsMjk3Ljk5IDAsMTIwLjM1IDM3LjU5LDIyMC4xOSAxMTIuNzgsMjk5LjYyem02OTIuNjMgMTE3LjYzYy0xMDkuNTIsMTExLjY1IC0yNDYuOTgsMTY3LjQ5IC00MTIuMzEsMTY3LjQ5IC0xNjUuNDMsMCAtMzAyLjg3LC01NS44NCAtNDEyLjQxLC0xNjcuNDkgLTEwOC40NiwtMTEzLjg0IC0xNjIuNzIsLTI1Mi44OCAtMTYyLjcyLC00MTcuMjYgMCwtMTY1LjM2IDU0LjI2LC0zMDMuODUgMTYyLjcyLC00MTUuNTcgMTA5LjU0LC0xMTIuNzYgMjQ2Ljk4LC0xNjkuMTUgNDEyLjQxLC0xNjkuMTUgMTY1LjMzLDAgMzAyLjc5LDU2LjM5IDQxMi4zMSwxNjkuMTUgMTA5LjUyLDExMS43MyAxNjQuMywyNTAuMjIgMTY0LjMsNDE1LjU3IDAsMTY1LjQzIC01NC43OCwzMDQuNSAtMTY0LjMsNDE3LjI2em01ODEuNTYgMTQ2LjU2bC0xNzcuMjIgMCAwIC0xMTI3LjU2IDQ4NC44OCAwYzExOC4xNCwwIDIwOS45NCwzMC41OCAyNzUuNDUsOTEuOCA2Ny42Miw1OS4wNiAxMDEuNDcsMTM3LjQ0IDEwMS40NywyMzUuMTcgMCw5Ny43MSAtMzMuODUsMTc4LjI3IC0xMDEuNDcsMjQxLjY1IC02NS41MSw2Mi4yNyAtMTU3LjMxLDkzLjQzIC0yNzUuNDUsOTMuNDNsLTMwNy42NyAwIDAgNDY1LjUxem0wIC05NjQuODlsMCAzMzYuNzIgMjkzLjE3IDBjNjYuNTcsMCAxMTguNjYsLTE0Ljc4IDE1Ni4yNiwtNDQuMyAzNy41NywtMjkuNTUgNTYuMzcsLTcxLjE3IDU2LjM3LC0xMjQuODcgMCwtNTMuNyAtMTguNSwtOTUuMDQgLTU1LjYxLC0xMjQuMDIgLTM3LjAyLC0yOS4wNSAtODkuMzksLTQzLjUzIC0xNTcuMDEsLTQzLjUzbC0yOTMuMTcgMHptMTA2Ni4zNyA5NjQuODlsLTE3Ny4yMiAwIDAgLTExMjcuNTYgNzg5LjMxIDAgMCAxNjIuNjcgLTYxMi4wOSAwIDAgOTY0Ljg5em05NzkuMzkgLTI2NC4xOWM3Ni4yNCw3OS40OSAxNjkuNjUsMTE5LjE5IDI4MC4zMiwxMTkuMTkgMTEwLjU3LDAgMjA0LjAxLC0zOS43MSAyODAuMjUsLTExOS4xOSA3Ni4yNCwtODEuNjIgMTE0LjM5LC0xODEuNDYgMTE0LjM5LC0yOTkuNjIgMCwtMTE5LjE5IC0zOC4xNSwtMjE4LjQ4IC0xMTQuMzksLTI5Ny45OSAtNzYuMjQsLTgwLjU0IC0xNjkuNjgsLTEyMC44MiAtMjgwLjI1LC0xMjAuODIgLTExMC42NywwIC0yMDQuMDgsNDAuMjggLTI4MC4zMiwxMjAuODIgLTc1LjE5LDc4LjQ2IC0xMTIuNzgsMTc3LjcyIC0xMTIuNzgsMjk3Ljk5IDAsMTIwLjM1IDM3LjU5LDIyMC4xOSAxMTIuNzgsMjk5LjYyem02OTIuNjMgMTE3LjYzYy0xMDkuNTIsMTExLjY1IC0yNDYuOTUsMTY3LjQ5IC00MTIuMzEsMTY3LjQ5IC0xNjUuNDMsMCAtMzAyLjg3LC01NS44NCAtNDEyLjM4LC0xNjcuNDkgLTEwOC40OSwtMTEzLjg0IC0xNjIuNzQsLTI1Mi44OCAtMTYyLjc0LC00MTcuMjYgMCwtMTY1LjM2IDU0LjI2LC0zMDMuODUgMTYyLjc0LC00MTUuNTcgMTA5LjUyLC0xMTIuNzYgMjQ2Ljk1LC0xNjkuMTUgNDEyLjM4LC0xNjkuMTUgMTY1LjM2LDAgMzAyLjc5LDU2LjM5IDQxMi4zMSwxNjkuMTUgMTA5LjU0LDExMS43MyAxNjQuMywyNTAuMjIgMTY0LjMsNDE1LjU3IDAsMTY1LjQzIC01NC43NiwzMDQuNSAtMTY0LjMsNDE3LjI2em05NTguNDggMTQ2LjU2bC01NTQuMTQgMCAwIC0xMTI3LjU2IDUxMi4yMiAwYzEwMi4wNSwwIDE4Mi44NywyNC42NSAyNDIuNDUsNzQuMDYgNTkuNjMsNDkuMzggODkuMzksMTE3LjA4IDg5LjM5LDIwMyAwLDU1Ljg0IC0xMy45MiwxMDQuMTYgLTQxLjg0LDE0NC45NSAtMjcuODksNDAuODQgLTYzLjk2LDY5LjgxIC0xMDcuOTYsODYuOTcgNzAuODcsMTIuOTQgMTI4LjU5LDQ2LjIxIDE3My4yLDk5LjkyIDQ0LjU4LDUzLjcgNjYuODUsMTIwLjc3IDY2Ljg1LDIwMS4zMiAwLDk1LjYyIC0zNC4zNSwxNzIuMzQgLTEwMy4xMSwyMzAuMzcgLTY3LjYyLDU4IC0xNTkuOTgsODYuOTcgLTI3Ny4wNiw4Ni45N3ptLTM3Ni45MiAtNTE3LjFsMCAzNTQuNDMgMzQ0LjY4IDBjNjguNzYsMCAxMjIuNjgsLTE1Ljg4IDE2MS44OSwtNDcuNTUgMzkuMjMsLTMxLjY2IDU4LjgsLTc1Ljk3IDU4LjgsLTEzMi45MSAwLC01NS44NCAtMTkuMywtOTguNzkgLTU3Ljk1LC0xMjguODIgLTM4LjczLC0zMC4xMSAtOTIuOTEsLTQ1LjE2IC0xNjIuNzQsLTQ1LjE2bC0zNDQuNjggMHptMCAtNDQ3Ljc5bDAgMjkxLjU2IDMwNC40MiAwYzU5LjA2LDAgMTA0Ljk5LC0xMi41OSAxMzcuNzEsLTM3LjgyIDMyLjc5LC0yNS4yOCA0OS4xOCwtNjEuNDcgNDkuMTgsLTEwOC43NCAwLC00Ny4yNyAtMTYuMzgsLTgzLjIzIC00OS4xOCwtMTA3LjkxIC0zMi43MiwtMjQuNzMgLTc4LjY2LC0zNy4wOSAtMTM3LjcxLC0zNy4wOWwtMzA0LjQyIDB6bTEwNjggOTY0Ljg5bC0xODguNDUgMCA0OTIuODcgLTExMzMuOTkgMTcwLjcxIDAgNDkyLjk1IDExMzMuOTkgLTE5MC4wOCAwIC0xMjIuMzggLTI4MC4zIC01MzQuODcgMCAtMTIwLjc1IDI4MC4zem0zODguMTYgLTkxMC4xM2wtMjA2LjE0IDQ3My41NyA0MTIuMzMgMCAtMjA2LjE5IC00NzMuNTd6bTg2MS44MSA5MTAuMTNsLTIxNC4yNiAwIDM1OS4yNiAtNDk2LjEyYy03OS41MSwtMTguMjkgLTE0MS4yNiwtNTUuMDMgLTE4NS4yOCwtMTEwLjM3IC00NC4wMywtNTUuMjYgLTY2LjA3LC0xMjIuMTEgLTY2LjA3LC0yMDAuNTQgMCwtOTcuNzMgMzMuNTUsLTE3NS42MSAxMDAuNywtMjMzLjU2IDY3LjEyLC01OCAxNTguMTQsLTg2Ljk3IDI3My4wNCwtODYuOTdsNTEzLjg2IDAgMCAxMTI3LjU2IC0xNzcuMjIgMCAwIC00NzYuODIgLTI2NC4xNCAwIC0zMzkuODggNDc2Ljgyem0yNzUuNDIgLTYzMy4wNWwzMjguNiAwIDAgLTMzMS44NCAtMzI4LjYgMGMtNjMuMzgsMCAtMTEyLjk4LDE0Ljc4IC0xNDkuMDIsNDQuMyAtMzUuOTYsMjkuNTMgLTUzLjksNzAuMDkgLTUzLjksMTIxLjYgMCw1Mi42NSAxNy45NCw5My40MyA1My45LDEyMi40NiAzNi4wNCwyOC45NyA4NS42NCw0My40NyAxNDkuMDIsNDMuNDd6bTEzODIuMSA2MzMuMDVsLTE3Ny4yMiAwIDAgLTExMjcuNTYgOTE2LjU3IDAgMCAxMTI3LjU2IC0xNzcuMTcgMCAwIC05NjQuODkgLTU2Mi4xOCAwIDAgOTY0Ljg5em04OTUuNTggLTMuMjRsMCAtMTYxLjAzYzE0LDQuMyAzMy44NSw2LjQzIDU5LjU2LDYuNDMgNzkuNTEsMCAxMzIuMTYsLTQ5LjQxIDE1Ny44NywtMTQ4LjE5IDI1Ljc4LC04NC44NiA0MC44NCwtMjI5Ljc5IDQ1LjE2LC00MzQuOTJsNC44IC0zODYuNiA3NTAuNjYgMCAwIDExMjcuNTYgLTE3Ny4yMiAwIDAgLTk2NC44OSAtNDAyLjcxIDAgLTQuODIgMjQxLjY3Yy00LjMsMjQzLjcxIC0zMC41OCw0MjQuNjcgLTc4LjkxLDU0Mi44MyAtNTAuNDYsMTIzLjUxIC0xNDUuNSwxODUuMjEgLTI4NS4xMiwxODUuMjEgLTI3LjkyLDAgLTUxLjA0LC0yLjY5IC02OS4yNiwtOC4wN3ptMTU1Mi44MSAtMjYwLjk1Yzc2LjI0LDc5LjQ5IDE2OS42OCwxMTkuMTkgMjgwLjMyLDExOS4xOSAxMTAuNiwwIDIwNC4wMSwtMzkuNzEgMjgwLjI1LC0xMTkuMTkgNzYuMjQsLTgxLjYyIDExNC4zOSwtMTgxLjQ2IDExNC4zOSwtMjk5LjYyIDAsLTExOS4xOSAtMzguMTUsLTIxOC40OCAtMTE0LjM5LC0yOTcuOTkgLTc2LjI0LC04MC41NCAtMTY5LjY1LC0xMjAuODIgLTI4MC4yNSwtMTIwLjgyIC0xMTAuNjUsMCAtMjA0LjA4LDQwLjI4IC0yODAuMzIsMTIwLjgyIC03NS4xOSw3OC40NiAtMTEyLjc4LDE3Ny43MiAtMTEyLjc4LDI5Ny45OSAwLDEyMC4zNSAzNy41OSwyMjAuMTkgMTEyLjc4LDI5OS42MnptNjkyLjYzIDExNy42M2MtMTA5LjUyLDExMS42NSAtMjQ2Ljk1LDE2Ny40OSAtNDEyLjMxLDE2Ny40OSAtMTY1LjQzLDAgLTMwMi44NywtNTUuODQgLTQxMi4zOCwtMTY3LjQ5IC0xMDguNDYsLTExMy44NCAtMTYyLjc0LC0yNTIuODggLTE2Mi43NCwtNDE3LjI2IDAsLTE2NS4zNiA1NC4yOCwtMzAzLjg1IDE2Mi43NCwtNDE1LjU3IDEwOS41MiwtMTEyLjc2IDI0Ni45NSwtMTY5LjE1IDQxMi4zOCwtMTY5LjE1IDE2NS4zNiwwIDMwMi43OSw1Ni4zOSA0MTIuMzEsMTY5LjE1IDEwOS41NCwxMTEuNzMgMTY0LjMsMjUwLjIyIDE2NC4zLDQxNS41NyAwLDE2NS40MyAtNTQuNzYsMzA0LjUgLTE2NC4zLDQxNy4yNnptMTc3My41NyAxNDYuNTZsLTEzNjkuMjMgMCAwIC0xMTI3LjU2IDE3Ny4yMiAwIDAgOTY0Ljg5IDQyMC40NSAwIDAgLTk2NC44OSAxNzcuMTQgMCAwIDk2NC44OSA0MjAuNDUgMCAwIC05NjQuODkgMTc3LjE3IDAgMCA5NjQuODkgMTYyLjcyIDAgMCA0MDQuMjcgLTE2NS45MSAwIDAgLTI0MS42em00MzkuOCAwbC0xODguNDUgMCA0OTIuODcgLTExMzMuOTkgMTcwLjcxIDAgNDkyLjk1IDExMzMuOTkgLTE5MC4wOCAwIC0xMjIuMzggLTI4MC4zIC01MzQuODQgMCAtMTIwLjc3IDI4MC4zem0zODguMTYgLTkxMC4xM2wtMjA2LjEyIDQ3My41NyA0MTIuMzEgMCAtMjA2LjE5IC00NzMuNTd6bTgwNS40OSAxMTUxLjczbC0xNjcuNTQgMCAwIC00MDQuMjcgMTA3LjkxIDBjNTkuMDYsLTg5LjE2IDEwMi41OCwtMTkzLjkgMTMwLjUsLTMxNC4xNSAyNy45MiwtMTIzLjQ2IDQxLjkyLC0yODguMzIgNDEuOTIsLTQ5NC41MWwwIC0xNTYuMjMgNzQ1Ljc2IDAgMCA5NjQuODkgMTYyLjc0IDAgMCA0MDQuMjcgLTE2Ny41NCAwIDAgLTI0MS42IC04NTMuNzQgMCAwIDI0MS42em0xMzMuNjkgLTQwNC4yN2w1NDcuNzEgMCAwIC04MDIuMjIgLTM5Ni4yNyAwYzAsMTg3Ljk3IC0xMS4zMSwzNDUuODEgLTMzLjg1LDQ3My41NyAtMjIuNTQsMTI4Ljg5IC02MS43NywyMzguNDMgLTExNy41OCwzMjguNjV6bTEyNTQuODEgMTYyLjY3bC0xNzcuMjIgMCAwIC0xMTI3LjU2IDE3Ny4yMiAwIDAgNDYwLjY2IDQ2Mi4yOSAtNDYwLjY2IDIyNy4xNyAwIC01MjEuOTIgNTE1LjQ5IDYwNS42NiA2MTIuMDcgLTI0MS42NSAwIC01MzEuNTUgLTU0MS4yIDAgNTQxLjJ6bTEwMDUuMiAwbC0xODguNDcgMCA0OTIuODcgLTExMzMuOTkgMTcwLjczIDAgNDkyLjk1IDExMzMuOTkgLTE5MC4wOCAwIC0xMjIuNDEgLTI4MC4zIC01MzQuODQgMCAtMTIwLjc1IDI4MC4zem0zODguMTMgLTkxMC4xM2wtMjA2LjEyIDQ3My41NyA0MTIuMzEgMCAtMjA2LjE5IC00NzMuNTd6Ij48L3BhdGg+CiAgIDxwYXRoIGZpbGw9IiMwNjY1RTYiIGQ9Ik00MzU0LjQ1IDBjMTg5MC4yMywwIDM0OTguOTIsMTIwNC41NSA0MTAwLjk4LDI4ODcuODFsLTE4NzkuNjUgMGMtNDc2LjM5LC03MjAuMDIgLTEyOTMuMzEsLTExOTUuMDggLTIyMjEuMzQsLTExOTUuMDggLTExNTkuOCwwIC0yMTQ2LjE1LDc0MS44NiAtMjUxMC45MSwxNzc2Ljg2bC0wLjEzIDBjLTE5NS43NCw1NjQuNyAtMjAyLjI1LDExNjQuMTcgLTEyLjQ5LDE3MzMuNDlsMC4zMyAwLjk1IC0xNzQ4LjE0IDBjLTU0LjMzLC0yNzQuOCAtODMuMSwtNTU4Ljc5IC04My4xLC04NDkuNTcgMCwtMjQwNC44OSAxOTQ5LjU2LC00MzU0LjQ3IDQzNTQuNDUsLTQzNTQuNDd6bS0yMjQ1LjIxIDU3ODQuNTdjNDcyLjY0LDc0MC41NiAxMzAxLjU2LDEyMzEuNjQgMjI0NS4yMSwxMjMxLjY0IDExNzMuMzIsMCAyMTY5LjI0LC03NTkuMjMgMjUyMy41NSwtMTgxMy4xM2wxNzQ3Ljk5IDBjLTM5NC44NywxOTk4LjY0IC0yMTU3LjExLDM1MDUuODYgLTQyNzEuNTQsMzUwNS44NiAtMTkwMy44NSwwIC0zNTIyLjEyLC0xMjIyIC00MTEzLjg1LC0yOTI0LjM3bDE4NjguNjQgMHoiPjwvcGF0aD4KICAgPHBhdGggZmlsbD0iI0VBNUIyMSIgZD0iTTE4NDMuNDEgMzQ2OS41OWw2Nzc1LjQyIDBjNTkuMDMsMjg1LjY4IDkwLjA5LDU4MS42NiA5MC4wOSw4ODQuODggMCwyOTAuNCAtMjguNDcsNTc0LjE0IC04Mi43Myw4NDguNjFsLTM0MDUuOTcgMCAwIDM0MTkuNjljLTI3OS44Miw1Ni40NyAtNTY5LjI5LDg2LjE3IC04NjUuNzgsODYuMTcgLTMwNS4wMywwIC02MDIuNzIsLTMxLjQxIC04OTAuMDMsLTkxLjE1bDAgLTM0MTQuNzEgLTE2MzMuNSAwYy04OS42NCwtMjY2LjQ4IC0xMzguMTksLTU1MS44NSAtMTM4LjE5LC04NDguNjEgMCwtMzEwLjIzIDUzLjEsLTYwOC4wNCAxNTAuNjgsLTg4NC44OHoiPjwvcGF0aD4KICA8L2c+CiA8L2c+Cjwvc3ZnPg==") left center / contain no-repeat !important;
}
.sp-etp .h-logo .logo-lockup > .logo-mark,
.sp-etp .h-logo .logo-lockup > .logo-text,
.sp-etp .sp-footer-brand > img,
.sp-etp .sp-footer-brand > span { display: none !important; }
@media (max-width: 480px) {
  /* Reserve room for the menu, cabinet and sign-out controls at 320px. */
  .sp-etp .h-logo a.logo-lockup {
    width: clamp(120px, calc(100vw - 184px), 200px) !important;
  }
}


.sp-etp nav.h-menu {
  position: relative !important;
  inset: auto !important;
  display: flex;
  align-self: stretch;
  align-items: stretch;
  flex: 0 1 auto;
  width: auto !important;
  min-width: 0;
  height: auto !important;
  margin: 0 0 0 auto !important;
  padding: 0 !important;
  background: transparent !important;
}

.sp-etp nav.h-menu > ul {
  display: flex !important;
  align-items: stretch;
  gap: var(--space-2);
  width: auto !important;
  height: 100%;
  margin: 0 !important;
  padding: 0 !important;
  list-style: none;
}

.sp-etp nav.h-menu > ul > li {
  position: relative;
  display: flex;
  align-items: stretch;
  height: 100%;
  margin: 0;
  padding: 0;
  list-style: none;
}

.sp-etp nav.h-menu .hm-link {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-height: 44px;
  padding: 0 10px;
  border-radius: var(--r-sm);
  background: transparent;
  color: var(--ink-700);
  font-size: 13px;
  font-weight: 600;
  line-height: 1.2;
  white-space: nowrap;
}

.sp-etp nav.h-menu .hm-link::after {
  position: absolute;
  right: 10px;
  bottom: -1px;
  left: 10px;
  height: 2px;
  background: var(--brand-blue-500);
  content: '';
  transform: scaleX(0);
  transition: transform var(--duration-base) var(--easing-standard);
}

.sp-etp nav.h-menu .hm-link:hover,
.sp-etp nav.h-menu .hm-link:focus-visible,
.sp-etp nav.h-menu .hm-item:focus-within > .hm-link {
  background: var(--brand-blue-050);
  color: var(--brand-blue-800);
}

.sp-etp nav.h-menu .hm-link:hover::after,
.sp-etp nav.h-menu .hm-link:focus-visible::after,
.sp-etp nav.h-menu .hm-item:focus-within > .hm-link::after { transform: scaleX(1); }
.sp-etp nav.h-menu .caret { color: var(--ink-400); font-size: 10px; transition: transform var(--duration-base) var(--easing-standard); }
.sp-etp nav.h-menu .hm-item:hover > .hm-link .caret,
.sp-etp nav.h-menu .hm-item:focus-within > .hm-link .caret { transform: rotate(180deg); }

.sp-etp .hm-sub {
  position: absolute !important;
  top: 100%;
  left: 50%;
  z-index: 110;
  display: block !important;
  min-width: 260px;
  margin: 0;
  padding: 6px;
  border: 1px solid var(--ink-100);
  border-radius: var(--r-md);
  background: var(--surface-card);
  box-shadow: var(--shadow-md);
  list-style: none;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transform: translate(-50%, 8px) scale(.98);
  transition: opacity var(--duration-fast) var(--easing-standard), transform var(--duration-base) var(--easing-standard), visibility 0s linear var(--duration-base);
}

.sp-etp .h-menu .hm-item:hover > .hm-sub,
.sp-etp .h-menu .hm-item:focus-within > .hm-sub {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transform: translate(-50%, 0) scale(1);
  transition-delay: 0s;
}

.sp-etp .hm-sub li { margin: 0; padding: 0; list-style: none; }
.sp-etp .hm-sub a {
  display: flex;
  align-items: center;
  min-height: 40px;
  padding: 8px 12px;
  border-radius: var(--r-sm);
  color: var(--ink-700);
  font-size: 13px;
  font-weight: 500;
  line-height: 1.35;
  white-space: normal;
}
.sp-etp .hm-sub a:hover,
.sp-etp .hm-sub a:focus-visible { background: var(--brand-blue-050); color: var(--brand-blue-800); }

.sp-etp .h-cta { display: inline-flex; align-items: center; flex: 0 0 auto; margin-left: var(--space-3); }
.sp-etp .h-cta-btn--lk {
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  gap: var(--space-3);
  min-height: 40px;
  padding: 0 14px;
  border-radius: var(--r-sm);
  background: var(--brand-blue-600);
  color: #fff;
  font-size: 13px;
  font-weight: 700;
  cursor: pointer;
  white-space: nowrap;
}
.sp-etp .h-cta-btn--lk:hover { background: var(--brand-blue-700); }
/* Кнопка выхода — пара к CTA «Личный кабинет», тем же приёмом, что бургер:
   квадрат 40×40 (высота CTA) на мягкой brand-blue-050 с рамкой blue-100,
   глиф blue-600; hover — blue-100/blue-300, active — scale .96, focus —
   DS-ring. Border.html рендерит её только авторизованному; клик отправляет
   logoutForm из попапа ЛК (адаптер etp-logout). */
.sp-etp .h-cta-btn--logout {
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  box-sizing: border-box;
  width: 40px;
  min-width: 40px;
  min-height: 40px;
  margin: 0;
  padding: 0;
  border: 1px solid var(--brand-blue-100, #DDE9FB);
  border-radius: var(--r-sm);
  background: var(--brand-blue-050, #F1F6FE);
  color: var(--brand-blue-600, #0553C7);
  line-height: 1;
  cursor: pointer;
  transition:
    background-color var(--duration-fast) var(--easing-standard),
    border-color var(--duration-fast) var(--easing-standard),
    color var(--duration-fast) var(--easing-standard),
    transform var(--duration-fast) var(--easing-standard);
}
.sp-etp .h-cta-btn--logout:hover {
  border-color: var(--brand-blue-300, #7FB2F4);
  background: var(--brand-blue-100, #DDE9FB);
  color: var(--brand-blue-700, #0442A3);
}
.sp-etp .h-cta-btn--logout:active { transform: scale(.96); }
.sp-etp .h-cta-btn--logout:focus-visible {
  outline: none;
  border-color: var(--brand-blue-500, #0665E6);
  box-shadow: var(--shadow-focus, 0 0 0 3px rgba(6, 101, 230, .22));
}
.sp-etp .h-cta-btn--logout[aria-busy='true'] { opacity: .6; pointer-events: none; }
.sp-etp .h-cta-btn__caret { font-size: 10px; transition: transform var(--duration-base) var(--easing-standard); }
.sp-etp:has(#lk-toggle:checked) .h-cta-btn__caret { transform: rotate(180deg); }

body.sp-etp:has(#lk-toggle:checked) aside.left_side {
  max-height: calc(100dvh - 120px) !important;
  overscroll-behavior: contain;
}
body.sp-etp:has(#lk-toggle:checked) aside.left_side .login_form {
  overflow: visible !important;
}
body.sp-etp:has(#lk-toggle:checked) aside.left_side .login_form > .title {
  position: sticky !important;
  top: 0 !important;
  z-index: 3 !important;
  padding-right: 64px !important;
}
body.sp-etp:has(#lk-toggle:checked) aside.left_side .login_form > .title::after {
  top: auto !important;
  right: auto !important;
  bottom: -1px !important;
  left: 20px !important;
  border: 0 !important;
  transform: none !important;
}
.sp-etp .sp-lk-close {
  position: absolute !important;
  top: 8px !important;
  right: 10px !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  width: 36px !important;
  height: 36px !important;
  min-width: 36px !important;
  padding: 0 !important;
  border: 1px solid transparent !important;
  border-radius: var(--r-sm) !important;
  background: transparent !important;
  color: var(--ink-700) !important;
  font-size: 26px !important;
  font-weight: 400 !important;
  line-height: 1 !important;
  cursor: pointer !important;
}
.sp-etp .sp-lk-close:hover,
.sp-etp .sp-lk-close:focus-visible {
  border-color: var(--brand-blue-100) !important;
  background: var(--brand-blue-050) !important;
  color: var(--brand-blue-700) !important;
}

.sp-etp .wrapper,
.sp-etp .content_indent {
  width: min(1440px, 100%);
  min-width: 0;
  margin-inline: auto;
}

body.sp-etp:is(:not(.sp-family-authentication), .sp-participant-cabinet) #content_table.ds-page-table {
  width: 100% !important;
  max-width: 100% !important;
  margin-left: 0 !important;
  border-spacing: 0 !important;
  table-layout: fixed !important;
}

body.sp-etp:is(:not(.sp-family-authentication), .sp-participant-cabinet) #content_table.ds-page-table > tbody > tr > td.ct-cell.ct-left {
  width: 0 !important;
  min-width: 0 !important;
  max-width: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  overflow: visible !important;
}

body.sp-etp:is(:not(.sp-family-authentication), .sp-participant-cabinet) #content_table.ds-page-table > tbody > tr > td.ct-cell.ds-content-cell {
  width: 100% !important;
  min-width: 0 !important;
  max-width: 100% !important;
  overflow: hidden !important;
}

body.sp-etp:is(:not(.sp-family-authentication), .sp-participant-cabinet) .content_indent.ds-content,
body.sp-etp:is(:not(.sp-family-authentication), .sp-participant-cabinet) .content_indent.ds-content > form,
body.sp-etp:is(:not(.sp-family-authentication), .sp-participant-cabinet) .content_indent.ds-content .ecp_form,
body.sp-etp:is(:not(.sp-family-authentication), .sp-participant-cabinet) .content_indent.ds-content .ecp-colls_wrap,
body.sp-etp:is(:not(.sp-family-authentication), .sp-participant-cabinet) .content_indent.ds-content table.ecp-colls {
  width: 100% !important;
  min-width: 0 !important;
  max-width: 100% !important;
  box-sizing: border-box !important;
}

body.sp-etp:is(:not(.sp-family-authentication), .sp-participant-cabinet) .content_indent.ds-content table.ecp-colls {
  table-layout: fixed !important;
}

/* An authenticated participant uses the same header cabinet on every route.
   The public registration/login card retains its inline layout. */
body.sp-etp.sp-participant-cabinet:not(:has(#lk-toggle:checked)) aside.left_side {
  display: none !important;
  visibility: hidden !important;
}

body.sp-etp.sp-participant-cabinet .content_indent.ds-content > form[id="participantRegistrationForm"] {
  max-width: 1120px !important;
}

.sp-etp.sp-participant-cabinet .login_form a[data-sp-lk-current="true"] {
  display: inline-block;
  padding: 5px 8px;
  margin-inline: -8px;
  border-radius: var(--r-sm);
  background: var(--brand-blue-050);
  color: var(--brand-blue-600) !important;
  font-weight: 700;
  box-shadow: none;
}

.sp-etp #sp-lk-breadcrumb {
  /* Legacy `nav` styles also target this semantic navigation landmark. */
  background: transparent !important;
  border: 0;
  box-shadow: none;
  padding: 0;
  display: flex;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 6px 10px;
  margin: 0 0 12px;
  color: var(--ink-500);
  font: 400 13px/1.5 var(--font-body);
}
.sp-etp #sp-lk-breadcrumb a {
  display: inline-block;
  appearance: none;
  border: 0;
  border-radius: var(--r-sm);
  padding: 4px 0;
  min-height: 32px;
  background: transparent;
  color: var(--brand-blue-600);
  font: inherit;
  text-decoration: none;
  cursor: pointer;
}
.sp-etp #sp-lk-breadcrumb a:hover { text-decoration: underline; }
.sp-etp #sp-lk-breadcrumb a:focus-visible {
  outline: 2px solid var(--brand-blue-600);
  outline-offset: 3px;
}
.sp-etp #sp-lk-breadcrumb .sp-lk-breadcrumb-current { color: var(--ink-700); }

.sp-etp.sp-family-authentication:not(.sp-participant-cabinet) aside.left_side {
  display: block !important;
  visibility: visible !important;
  pointer-events: auto !important;
}

body.sp-etp.sp-family-authentication:not(.sp-participant-cabinet)[data-sp-route="/app/Login/page/"] #content_table.ds-page-table {
  display: block !important;
  width: min(420px, 100%) !important;
  max-width: 100% !important;
  margin: 0 auto !important;
  border-spacing: 0 !important;
}

body.sp-etp.sp-family-authentication:not(.sp-participant-cabinet)[data-sp-route="/app/Login/page/"] #content_table.ds-page-table > tbody,
body.sp-etp.sp-family-authentication:not(.sp-participant-cabinet)[data-sp-route="/app/Login/page/"] #content_table.ds-page-table > tbody > tr,
body.sp-etp.sp-family-authentication:not(.sp-participant-cabinet)[data-sp-route="/app/Login/page/"] #content_table.ds-page-table > tbody > tr > td.ct-cell,
body.sp-etp.sp-family-authentication:not(.sp-participant-cabinet)[data-sp-route="/app/Login/page/"] aside.left_side,
body.sp-etp.sp-family-authentication:not(.sp-participant-cabinet)[data-sp-route="/app/Login/page/"] .left_side .login_form {
  display: block !important;
  width: 100% !important;
  min-width: 0 !important;
  max-width: 100% !important;
  box-sizing: border-box !important;
}

body.sp-etp.sp-family-authentication:not(.sp-participant-cabinet)[data-sp-route="/app/Login/page/"] #content_table.ds-page-table > tbody > tr > td.ct-cell.ct-left {
  padding: 0 !important;
}

body.sp-etp.sp-family-authentication:not(.sp-participant-cabinet)[data-sp-route="/app/Login/page/"] #content_table.ds-page-table > tbody > tr > td.ct-cell.ds-content-cell {
  margin-top: 16px !important;
  padding: 0 !important;
}

body.sp-etp.sp-family-authentication:not(.sp-participant-cabinet)[data-sp-route="/app/Login/page/"] .ds-content-cell .content_indent {
  width: 100% !important;
  padding: 14px 16px !important;
  border: 1px solid var(--brand-blue-100) !important;
  border-radius: var(--r-md) !important;
  background: var(--brand-blue-050) !important;
  color: var(--ink-700) !important;
  font-size: 13px !important;
  line-height: 1.5 !important;
  box-sizing: border-box !important;
}

/* ── Burger: the twin of the «Личный кабинет» CTA ────────────────────────
   Same 40px box and radius as the CTA so the two read as one control pair;
   soft brand-blue surface at rest, and on open it flips to the solid CTA
   blue with white bars — an unmistakable state change in DS colours. */
.sp-etp .sp-etp-menu-button {
  display: none;
  box-sizing: border-box;
  width: 44px;
  height: 44px;
  padding: 0;
  gap: 5px;
  border: 1px solid var(--brand-blue-100, #DDE9FB);
  border-radius: var(--r-sm);
  background: var(--brand-blue-050, #F1F6FE);
  cursor: pointer;
  transition:
    background-color var(--duration-fast) var(--easing-standard),
    border-color var(--duration-fast) var(--easing-standard),
    transform var(--duration-fast) var(--easing-standard);
}
.sp-etp .sp-etp-menu-button:hover {
  border-color: var(--brand-blue-300, #7FB2F4);
  background: var(--brand-blue-100, #DDE9FB);
}
.sp-etp .sp-etp-menu-button:active { transform: scale(.96); }
.sp-etp .sp-etp-menu-button:focus-visible {
  outline: none;
  border-color: var(--brand-blue-500, #0665E6);
  box-shadow: var(--shadow-focus, 0 0 0 3px rgba(6, 101, 230, .22));
}
.sp-etp .sp-etp-menu-button span {
  display: block;
  width: 18px;
  height: 2px;
  margin: 0 auto;
  border-radius: 999px;
  background: var(--brand-blue-600, #0553C7);
  transition:
    transform var(--duration-base) var(--easing-standard),
    opacity var(--duration-fast) var(--easing-standard),
    background-color var(--duration-fast) var(--easing-standard);
}
.sp-etp .sp-etp-menu-button:hover span { background: var(--brand-blue-700, #0442A3); }
/* open: solid CTA blue with white bars folded into a centred cross */
.sp-etp .sp-etp-menu-button[aria-expanded='true'] {
  border-color: var(--brand-blue-600, #0553C7);
  background: var(--brand-blue-600, #0553C7);
}
.sp-etp .sp-etp-menu-button[aria-expanded='true'] span { background: #fff; }
.sp-etp .sp-etp-menu-button[aria-expanded='true'] span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.sp-etp .sp-etp-menu-button[aria-expanded='true'] span:nth-child(2) { opacity: 0; transform: scaleX(.4); }
.sp-etp .sp-etp-menu-button[aria-expanded='true'] span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

.sp-etp .sp-etp-nav-close,
.sp-etp .sp-etp-submenu-toggle {
  display: none;
  margin: 0;
  padding: 0;
  border: 0;
  background: transparent;
  color: var(--ink-700);
  font: inherit;
  cursor: pointer;
}

body.sp-etp.sp-standalone {
  min-height: 100vh;
  padding-top: calc(var(--sp-topstrip-h, 32px) + 72px) !important;
  background: var(--surface-page) !important;
  color: var(--ink-900) !important;
  font-family: var(--font-body) !important;
  font-size: 15px !important;
}

.sp-etp .sp-standalone-header {
  position: fixed;
  inset: 32px 0 auto;
  z-index: 100;
  height: 72px;
  border-bottom: 1px solid var(--ink-100);
  background: rgb(255 255 255 / 96%);
  box-shadow: var(--shadow-xs);
  backdrop-filter: blur(10px);
}

.sp-etp .sp-standalone-header__inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 28px;
  width: min(1440px, 100%);
  height: 100%;
  margin: 0 auto;
  padding: 0 24px;
}

.sp-etp .sp-standalone-header .logo-lockup { flex: 0 0 auto; text-decoration: none; }
.sp-etp .sp-standalone-header .logo-mark { display: block; width: auto; height: 36px; }
.sp-etp .sp-standalone-nav { display: flex; align-items: center; gap: 4px; min-width: 0; background: transparent !important; }
.sp-etp .sp-standalone-nav a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 40px;
  padding: 0 12px;
  border-radius: var(--r-sm);
  color: var(--ink-700) !important;
  font-size: 13px;
  font-weight: 650;
  text-decoration: none;
  white-space: nowrap;
  background: transparent !important;
}
.sp-etp .sp-standalone-nav a:hover,
.sp-etp .sp-standalone-nav a:focus-visible { background: var(--brand-blue-050) !important; color: var(--brand-blue-800) !important; }
/* Legacy `a { color: var(--blue) !important }` would otherwise paint blue text
   on the blue primary action and make the label unreadable. */
.sp-etp .sp-standalone-nav .sp-standalone-login { margin-left: 6px; background: var(--brand-blue-600) !important; color: #fff !important; }
.sp-etp .sp-standalone-nav .sp-standalone-login:hover,
.sp-etp .sp-standalone-nav .sp-standalone-login:focus-visible { background: var(--brand-blue-700) !important; color: #fff !important; }
/* ссылка-кнопка выхода в standalone-шапке (context.js добавляет её вошедшему):
   перебиваем правила .sp-standalone-nav a (они специфичнее базовых) и легаси
   a { color !important }, чтобы бокс и цвета совпадали с кнопкой в Border */
.sp-etp .sp-standalone-nav a.h-cta-btn--logout {
  width: 40px;
  min-width: 40px;
  min-height: 40px;
  margin-left: 6px;
  padding: 0;
  border: 1px solid var(--brand-blue-100, #DDE9FB);
  background: var(--brand-blue-050, #F1F6FE) !important;
  color: var(--brand-blue-600, #0553C7) !important;
}
.sp-etp .sp-standalone-nav a.h-cta-btn--logout:hover,
.sp-etp .sp-standalone-nav a.h-cta-btn--logout:focus-visible {
  border-color: var(--brand-blue-300, #7FB2F4);
  background: var(--brand-blue-100, #DDE9FB) !important;
  color: var(--brand-blue-700, #0442A3) !important;
}
@media (max-width: 768px) {
  /* мобильное правило прячет все ссылки nav кроме входа — выход оставляем */
  .sp-etp .sp-standalone-nav a.h-cta-btn--logout { display: inline-flex !important; }
}

.sp-etp .sp-standalone-main {
  width: min(1180px, 100%);
  min-height: calc(100vh - 220px);
  margin: 0 auto;
  padding: 32px 24px 56px;
}
.sp-etp .sp-standalone-main > h1 { margin: 0 0 20px; font-size: clamp(25px, 3vw, 36px); letter-spacing: -.025em; }
.sp-etp .sp-standalone-main > h1:not(:first-child) { margin-top: 40px; }
body.sp-etp.sp-standalone[data-sp-route="/app/TenderInfo/page/"] .sp-standalone-main > h1:first-of-type span[style*="background-color"] {
  display: inline-flex !important;
  align-items: center !important;
  padding: 4px 10px !important;
  border: 1px solid var(--brand-blue-100) !important;
  border-radius: var(--r-sm) !important;
  background: var(--brand-blue-050) !important;
  color: var(--brand-blue-800) !important;
  font-family: var(--font-mono) !important;
  font-size: .82em !important;
  line-height: 1.15 !important;
  vertical-align: .08em !important;
}
.sp-etp .sp-standalone-main > form,
.sp-etp .sp-standalone-main > .info_table,
.sp-etp .sp-standalone-main > .search_table {
  margin: 0 0 24px !important;
  padding: 20px;
  border: 1px solid var(--ink-100);
  border-radius: var(--r-lg);
  background: var(--surface-card);
  box-shadow: var(--shadow-xs);
}
.sp-etp .sp-standalone-main > form > table { width: 100% !important; }
.sp-etp .sp-standalone-main > form > table > tbody > tr.sp-field {
  display: table-row;
  margin: 0;
}
.sp-etp .sp-standalone-main > form > table > tbody > tr > th {
  width: 220px;
  padding: 10px 16px 10px 0 !important;
  color: var(--ink-700);
  font-size: 13px;
  font-weight: 650;
  text-align: left;
  vertical-align: top;
}
.sp-etp .sp-standalone-main > form > table > tbody > tr > td { padding: 8px !important; vertical-align: top; }
.sp-etp .sp-standalone-main > form label { display: inline-flex; align-items: flex-start; gap: 8px; line-height: 1.45; }
.sp-etp .sp-standalone-main > form div[style*="width: 60%"] { width: 100% !important; }
.sp-etp .sp-standalone-main > form table[width="333"] { width: 100% !important; }
.sp-etp .sp-standalone-main .margin40 { margin-left: 0 !important; margin-right: 0 !important; }
.sp-etp .sp-standalone-main .info_table table { width: 100%; }
.sp-etp .sp-standalone-main .info_table th { width: 32%; color: var(--ink-600); font-size: 13px; text-align: left; }
.sp-etp .sp-standalone-main .info_table th,
.sp-etp .sp-standalone-main .info_table td { padding: 12px 14px; border-bottom: 1px solid var(--ink-100); vertical-align: top; }

.sp-etp .sp-standalone-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  min-height: 88px;
  padding: 20px max(24px, calc((100vw - 1180px) / 2 + 24px));
  border-top: 1px solid var(--ink-100);
  background: var(--surface-card);
  color: var(--ink-500);
  font-size: 12px;
}
.sp-etp .sp-standalone-footer div { display: grid; gap: 2px; }
.sp-etp .sp-standalone-footer strong { color: var(--navy-800); font-family: var(--font-display); font-size: 13px; }
.sp-etp .sp-standalone-footer a { color: var(--brand-blue-700); font-weight: 650; }

body.sp-etp.sp-standalone[data-sp-route="/app/Oauth/page/"] .sp-standalone-main {
  display: grid;
  place-items: start center;
  padding-top: 48px;
}
body.sp-etp.sp-standalone[data-sp-route="/app/Oauth/page/"] .sp-standalone-auth-intro {
  width: min(460px, 100%);
  margin-bottom: 18px;
}
body.sp-etp.sp-standalone[data-sp-route="/app/Oauth/page/"] .sp-standalone-auth-intro h1 {
  margin: 0 0 6px;
  font-size: clamp(25px, 3vw, 32px);
}
body.sp-etp.sp-standalone[data-sp-route="/app/Oauth/page/"] .sp-standalone-auth-intro p { margin: 0; color: var(--ink-500); }
body.sp-etp.sp-standalone[data-sp-route="/app/Oauth/page/"] .enter_block {
  width: min(460px, 100%) !important;
  min-height: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
  border: 1px solid var(--ink-100) !important;
  border-radius: var(--r-lg) !important;
  background: var(--surface-card) !important;
  box-shadow: var(--shadow-md) !important;
}
body.sp-etp.sp-standalone[data-sp-route="/app/Oauth/page/"] .eb-body { min-height: 0 !important; padding: 28px !important; }
body.sp-etp.sp-standalone[data-sp-route="/app/Oauth/page/"] .eb-logo_wrap { display: none !important; }
body.sp-etp.sp-standalone[data-sp-route="/app/Oauth/page/"] .login_form form { display: grid; gap: 16px; }
body.sp-etp.sp-standalone[data-sp-route="/app/Oauth/page/"] .login_form .spf-line {
  position: static !important;
  display: grid !important;
  grid-template-columns: minmax(0, 1fr) !important;
  gap: 6px;
  width: 100% !important;
  height: auto !important;
  min-height: 0 !important;
  margin: 0 !important;
}
body.sp-etp.sp-standalone[data-sp-route="/app/Oauth/page/"] .login_form .spf-label {
  position: static !important;
  width: auto !important;
  height: auto !important;
  margin: 0 !important;
  padding: 0 !important;
  color: var(--ink-700) !important;
  font-family: var(--font-body) !important;
  font-size: 13px !important;
  font-weight: 650 !important;
}
body.sp-etp.sp-standalone[data-sp-route="/app/Oauth/page/"] .login-button-panel {
  display: flex !important;
  align-items: stretch !important;
  flex-wrap: wrap;
  gap: 10px !important;
  height: auto !important;
}
body.sp-etp.sp-standalone[data-sp-route="/app/Oauth/page/"] .login-button-panel .rec-go {
  position: relative !important;
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  flex: 1 1 180px;
  width: auto !important;
  height: 48px !important;
  min-height: 48px !important;
  margin: 0 !important;
  padding: 0 14px !important;
  border-radius: var(--r-sm) !important;
}
body.sp-etp.sp-standalone[data-sp-route="/app/Oauth/page/"] .spf-bottom { display: grid; gap: 8px; margin-top: 4px; }
body.sp-etp.sp-standalone[data-sp-route="/app/Oauth/page/"] .eb-bottom {
  display: flex;
  justify-content: space-between;
  gap: 16px;
  padding: 14px 28px !important;
  border-top: 1px solid var(--ink-100);
  color: var(--ink-500);
  font-size: 12px;
}

@media (max-width: 767px) {
  .sp-etp .sp-standalone-header__inner { padding-inline: 16px; }
  .sp-etp .sp-standalone-header .logo-text small { display: none; }
  .sp-etp .sp-standalone-nav a:not(.sp-standalone-login) { display: none; }
  .sp-etp .sp-standalone-main { padding: 24px 16px 40px; }
  .sp-etp .sp-standalone-main > form,
  .sp-etp .sp-standalone-main > .info_table,
  .sp-etp .sp-standalone-main > .search_table { padding: 14px; border-radius: var(--r-md); }
  .sp-etp .sp-standalone-main > form > table,
  .sp-etp .sp-standalone-main > form > table > tbody { display: block; }
  .sp-etp .sp-standalone-main > form > table > tbody > tr { display: grid; grid-template-columns: minmax(0, 1fr); padding: 8px 0; border-bottom: 1px solid var(--ink-100); }
  .sp-etp .sp-standalone-main > form > table > tbody > tr.sp-field { display: grid; }
  .sp-etp .sp-standalone-main > form > table > tbody > tr > th,
  .sp-etp .sp-standalone-main > form > table > tbody > tr > td { display: block; width: 100% !important; padding: 4px 0 !important; }
  .sp-etp .sp-standalone-main > form > table > tbody > tr > td[colspan] { grid-column: 1; }
  .sp-etp .sp-standalone-main .info_table th,
  .sp-etp .sp-standalone-main .info_table td { display: block; width: 100%; padding: 8px 0; }
  .sp-etp .sp-standalone-main .info_table th { padding-bottom: 2px; border-bottom: 0; }
  .sp-etp .sp-standalone-footer { align-items: flex-start; flex-direction: column; padding: 20px 16px; }
}

@media (max-width: 375px) {
  body.sp-etp.sp-standalone { padding-top: 96px !important; }
  .sp-etp .sp-standalone-header { height: 64px; }
  .sp-etp .sp-standalone-header .logo-mark { height: 30px; }
  .sp-etp .sp-standalone-header .logo-text { font-size: 12px; }
  .sp-etp .sp-standalone-nav .sp-standalone-login { min-height: 38px; margin: 0; padding-inline: 10px; font-size: 12px; }
  .sp-etp .sp-standalone-main { padding-inline: 12px; }
  body.sp-etp.sp-standalone[data-sp-route="/app/Oauth/page/"] .eb-body { padding: 20px !important; }
  body.sp-etp.sp-standalone[data-sp-route="/app/Oauth/page/"] .eb-bottom { padding-inline: 20px !important; }
}

/* ── Footer of the Border shell ──────────────────────────────────────────
   The legacy footer rendered the copyright as a narrow white card at the left
   edge of a gradient band. Align it with the standalone pages: one full-width
   surface with the brand lock-up on the left and contacts on the right. */
.sp-etp .wrapper.ds-page-wrapper { min-height: calc(100vh - 250px); }
.sp-etp .footer_wrap.ds-footer {
  margin-top: 48px !important;
  padding: 0 !important;
  border-top: 1px solid var(--ink-100) !important;
  background: var(--surface-card) !important;
}
.sp-etp .footer_wrap.ds-footer > .wrapper.ds-footer-inner {
  display: block !important;
  width: min(1440px, 100%) !important;
  max-width: 100% !important;
  margin: 0 auto !important;
  padding: 0 24px !important;
}
.sp-etp .footer_wrap.ds-footer footer.footer {
  display: flex !important;
  flex-wrap: wrap !important;
  align-items: center !important;
  justify-content: space-between !important;
  gap: 16px 32px !important;
  min-height: 88px !important;
  margin: 0 !important;
  padding: 20px 0 !important;
  border: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
}
.sp-etp .footer_wrap.ds-footer .f-counters:empty { display: none !important; }
.sp-etp .sp-footer-brand {
  display: inline-flex !important;
  align-items: center !important;
  gap: 10px !important;
  color: inherit !important;
  text-decoration: none !important;
}
.sp-etp .sp-footer-brand img { display: block; width: auto; height: 32px; }
.sp-etp .sp-footer-brand strong {
  display: block;
  color: var(--navy-800) !important;
  font: 700 13px/1.2 var(--font-display) !important;
  letter-spacing: .02em;
}
.sp-etp .sp-footer-brand small { display: block; color: var(--ink-500) !important; font-size: 11px !important; line-height: 1.3; }
.sp-etp .footer_wrap.ds-footer .f-copy {
  flex: 1 1 320px !important;
  margin: 0 !important;
  /* резерв под кнопку чата: на коротких страницах она стояла ровно на
     телефоне и адресе поддержки (замер: кнопка 1364–1420px, текст до 1416px) */
  padding-right: 80px !important;
  box-sizing: border-box !important;
  color: var(--ink-500) !important;
  font-size: 12px !important;
  line-height: 1.7 !important;
  text-align: right !important;
}
.sp-etp .footer_wrap.ds-footer .f-copy a { color: var(--brand-blue-700) !important; font-weight: 600 !important; text-decoration: none !important; }
.sp-etp .footer_wrap.ds-footer .f-copy a:hover,
.sp-etp .footer_wrap.ds-footer .f-copy a:focus-visible { text-decoration: underline !important; }
@media (max-width: 768px) {
  .sp-etp .footer_wrap.ds-footer > .wrapper.ds-footer-inner { padding: 0 16px !important; }
  .sp-etp .footer_wrap.ds-footer footer.footer { flex-direction: column !important; align-items: flex-start !important; gap: 12px !important; padding: 20px 0 !important; }
  .sp-etp .footer_wrap.ds-footer .f-copy { flex-basis: auto !important; text-align: left !important; }
}

/* ── Home route ──────────────────────────────────────────────────────────
   /app/Home/page/ is the legacy landing and the redirect target for routes a
   role cannot open. Its body is empty, so offer the main sections instead of a
   blank page. */
.sp-etp .sp-home { display: grid; gap: 24px; max-width: 1100px; padding: 8px 0 16px; }
.sp-etp .sp-home__title {
  margin: 0 0 10px !important;
  color: var(--navy-900) !important;
  font: 700 clamp(24px, 2.6vw, 32px)/1.15 var(--font-display) !important;
  letter-spacing: -.02em;
}
.sp-etp .sp-home__lead { margin: 0; max-width: 640px; color: var(--ink-600); font-size: 15px; line-height: 1.55; }
.sp-etp nav.sp-home__links {
  display: grid !important;
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
  gap: 12px;
  margin: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  background: transparent !important; /* legacy `nav { background: var(--navy) }` */
  box-shadow: none !important;
}
.sp-etp .sp-home__link {
  display: grid !important;
  gap: 4px;
  min-height: 44px;
  padding: 16px 18px;
  border: 1px solid var(--ink-100);
  border-radius: var(--r-md);
  background: var(--surface-card);
  box-shadow: var(--shadow-xs);
  color: var(--ink-700) !important;
  text-decoration: none !important;
  transition: border-color var(--duration-fast) var(--easing-standard), box-shadow var(--duration-fast) var(--easing-standard);
}
.sp-etp .sp-home__link:hover,
.sp-etp .sp-home__link:focus-visible { border-color: var(--brand-blue-200); box-shadow: var(--shadow-sm); }
.sp-etp .sp-home__link strong { color: var(--brand-blue-700) !important; font-size: 15px; font-weight: 700; }
.sp-etp .sp-home__link span { color: var(--ink-500); font-size: 13px; line-height: 1.4; }

/* ── Login card title ────────────────────────────────────────────────────
   A dead legacy mobile chevron (rotated bordered ::after) collided with the
   DS accent bar of the same pseudo-element and produced a diagonal line in the
   inline login card. No JS toggles the collapsed state any more. */
.sp-etp .login_form > .title { cursor: default !important; }
.sp-etp .login_form > .title::after,
.sp-etp .login_form.nmck-lk-collapsed > .title::after {
  top: auto !important;
  right: auto !important;
  bottom: -1px !important;
  left: 20px !important;
  width: 36px !important;
  height: 2px !important;
  border: 0 !important;
  background: var(--brand-blue-500) !important;
  transform: none !important;
  transition: none !important;
}

/* ── Empty page body and legacy document title ──────────────────────────── */
.sp-etp .content_indent > .sp-empty-note {
  margin: 8px 0 16px !important;
  padding: 28px 20px !important;
  border: 1px dashed var(--ink-200) !important;
  border-radius: var(--r-md) !important;
  background: var(--surface-card) !important;
  color: var(--ink-500) !important;
  font-size: 14px !important;
  text-align: center !important;
}
.sp-etp .content_indent > p.ConsTitle {
  margin: 0 0 16px !important;
  color: var(--navy-900) !important;
  font: 700 clamp(22px, 2.4vw, 28px)/1.2 var(--font-display) !important;
  text-align: left !important;
}

/* ── Название торговой секции ────────────────────────────────────────────
   Легаси печатало его ссылкой прямо в строке меню, где оно смотрелось как
   ещё один пункт навигации. Убираем оттуда и показываем отдельным блоком
   над лентой баннеров. */
.sp-etp .h-section {
  display: none !important;
}

.sp-etp .sp-section-head {
  margin: 0 0 20px !important;
  padding: 16px 20px !important;
  border: 1px solid var(--brand-blue-100, #DDE9FB) !important;
  border-left: 3px solid var(--brand-orange-500, #EA5B21) !important;
  border-radius: var(--r-md, 10px) !important;
  background: var(--brand-blue-050, #F1F6FE) !important;
}
.sp-etp .sp-section-head__caption {
  margin-bottom: 4px !important;
  color: var(--ink-500, #6B7C90) !important;
  font-family: var(--font-body, sans-serif) !important;
  font-size: 11px !important;
  font-weight: 700 !important;
  letter-spacing: .08em !important;
  text-transform: uppercase !important;
}
.sp-etp .sp-section-head__title {
  color: var(--ink-1000, #0C1E45) !important;
  font-family: var(--font-display, 'Onest', 'Geologica', sans-serif) !important;
  font-size: clamp(18px, 2vw, 24px) !important;
  font-weight: 700 !important;
  line-height: 1.2 !important;
}

@media (max-width: 600px) {
  .sp-etp .sp-section-head { padding: 12px 14px !important; margin-bottom: 16px !important; }
}

/* ── Вариант A: чип секции в тёмной верхней полосе ───────────────────────
   Между статусом и контактами. Высота полосы расти не должна, поэтому чип
   укладывается в те же 20px, что и соседние блоки: строка одна, длинное имя
   обрезается многоточием, полное — в title. */
/* Чип центрируется сеткой из трёх колонок, а не flex-долями. Через flex не
   получалось: на 1024px блок контактов скрыт (display: none), элементов
   остаётся два, и чип уезжал от центра на 351px. У сетки колонка остаётся на
   месте, даже если сосед скрыт. */
.sp-etp .topstrip-inner {
  display: grid !important;
  grid-template-columns: 1fr auto 1fr !important;
  align-items: center !important;
}
.sp-etp .topstrip-status { grid-column: 1 !important; justify-self: start !important; min-width: 0 !important; }
.sp-etp .sp-section-badge { grid-column: 2 !important; justify-self: center !important; }
.sp-etp .topstrip-contacts { grid-column: 3 !important; justify-self: end !important; min-width: 0 !important; }

.sp-etp .sp-section-badge {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  gap: 6px !important;
  flex: 0 1 auto !important;
  min-width: 0 !important;
  /* высота не задана жёстко: если название не помещается в строку, слова
     переносятся и чип становится выше — так просил заказчик */
  min-height: 20px !important;
  margin: 2px 10px !important;
  padding: 2px 10px !important;
  border: 1px solid rgba(255, 255, 255, .18) !important;
  border-radius: var(--r-pill, 999px) !important;
  background: rgba(255, 255, 255, .10) !important;
  font-family: var(--font-body, sans-serif) !important;
  line-height: 1.2 !important;
  text-align: center !important;
  flex-wrap: wrap !important;
  white-space: normal !important;
  overflow-wrap: anywhere !important;
}
/* Подпись и название — одного кегля, оба капсом. */
.sp-etp .sp-section-badge__caption,
.sp-etp .sp-section-badge__value {
  font-size: 11px !important;
  font-weight: 700 !important;
  letter-spacing: .06em !important;
  text-transform: uppercase !important;
  line-height: 1.2 !important;
}
.sp-etp .sp-section-badge__caption {
  flex: 0 0 auto !important;
  color: rgba(255, 255, 255, .62) !important;
}
.sp-etp .sp-section-badge__value {
  min-width: 0 !important;
  color: #fff !important;
  white-space: normal !important;
  overflow-wrap: anywhere !important;
}


@media (max-width: 768px) {
  /* На телефоне и статус, и контакты скрыты, а сама полоса оставалась пустой
     тёмной лентой 32px. Прячем её целиком, если в ней нет бейджа секции, и
     убираем её высоту из отступа шапки. */
  body.sp-etp:not(:has(#sp-section-badge)),
  .sp-etp body:not(:has(#sp-section-badge)) { --sp-topstrip-h: 0px; }
  body.sp-etp:not(:has(#sp-section-badge)) .topstrip,
  .sp-etp body:not(:has(#sp-section-badge)) .topstrip { display: none !important; }
  /* В полосе на телефоне рядом со статусом места нет — чип уходит на второй
     план по ширине, но остаётся читаемым и не переносит строку. */
  /* На узких экранах статус «Все системы ЭТП…» скрывается целиком: места на
     обе надписи нет, а название секции важнее. Раньше статус имел
     flex: 0 0 auto, забирал строку и сжимал чип до нечитаемых 25px. */
  .sp-etp .topstrip-status { display: none !important; }
  .sp-etp .sp-section-badge {
    margin: 2px !important;
    padding: 2px 10px !important;
    max-width: calc(100vw - 32px) !important;
  }
}

@media print {
  .sp-etp .sp-section-badge { display: none !important; }
}

/* ── Подменю «Торговые секции» при большом их количестве ─────────────────
   Секций может быть много, а обычный выпадающий список рос бы одной колонкой
   и уходил за нижний край экрана. Раскладываем колонками по содержимому и
   ограничиваем высоту прокруткой: список остаётся в пределах экрана при любом
   количестве. */
.sp-etp nav.h-menu .sp-sections-sub {
  display: grid !important;
  grid-auto-flow: row !important;
  grid-template-columns: minmax(260px, 1fr) !important;
  /* 6px по вертикали вместо общих для подменю 2px: пункты бывают в две-три строки,
     и на наведении подсветка соседнего пункта вплотную читалась как наложение
     (замечание пользователя 14.09). */
  gap: 6px 8px !important;
  box-sizing: border-box !important;
  min-width: 300px !important;
  /* Ширина колонки под типовое название секции («Секция АО «Уральский комбинат питания»»):
     длинное имя переносится по словам, а не обрезается (решение пользователя 14.09.2026). */
  max-width: min(460px, calc(100vw - 32px)) !important;
  max-height: min(60vh, 420px) !important;
  overflow-y: auto !important;
  overscroll-behavior: contain !important;
}
/* Много колонок нужно только когда секций действительно много: до восьми
   штук список остаётся одной колонкой и выглядит как обычное меню.
   ШИРИНА здесь задаётся явно: выпадающий блок позиционирован абсолютно и
   сжимается по содержимому, поэтому repeat(auto-fit, …1fr) без width давал
   одну колонку — проверено замером. */
.sp-etp nav.h-menu .sp-sections-sub:has(li:nth-child(7)) {
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)) !important;
  width: min(880px, calc(100vw - 32px)) !important;
  max-width: min(880px, calc(100vw - 32px)) !important;
}
.sp-etp nav.h-menu .sp-sections-sub li { min-width: 0 !important; }
/* Название секции показываем целиком: раньше строка обрезалась многоточием
   («Секция АО «Уральский комб…»), и пункт нельзя было прочитать. Теперь текст
   переносится, а высота пункта растёт под него.
   ПОЧЕМУ НЕ flex (как у остальных пунктов подменю): текст в такой ссылке —
   анонимный flex-элемент; браузер берёт высоту строки по его гипотетическому
   размеру (одна строка), потом сжимает по ширине и текст переносится, а высота
   ссылки остаётся однострочной — длинное название наезжало на следующий пункт
   (замер на проде: текст 3 строки до y=183, низ ссылки y=159, следующий пункт
   с y=161). Поэтому блок + значок-стрелка абсолютом, отступ слева под него. */
.sp-etp nav.h-menu .sp-sections-sub a {
  display: block !important;
  position: relative !important;
  height: auto !important;
  padding: 10px 14px 10px 48px !important;
  overflow: visible !important;
  text-overflow: clip !important;
  white-space: normal !important;
  overflow-wrap: anywhere !important;
  line-height: 1.35 !important;
}
.sp-etp nav.h-menu .sp-sections-sub a::before {
  position: absolute !important;
  left: 14px !important;
  top: 9px !important;
}

@media (max-width: 1199px) {
  /* В выдвижной панели ширины на колонки нет: одна колонка, но со своей
     прокруткой, иначе длинный список выдавливает остальные пункты меню. */
  /* Селектор повторяет структуру правила выдвижной панели
     (.sp-etp-has-submenu > .hm-sub): у того overflow: visible !important, и
     без совпадения по специфичности прокрутка не включалась. */
  .sp-etp nav.h-menu .sp-etp-has-submenu > .hm-sub.sp-sections-sub {
    grid-template-columns: minmax(0, 1fr) !important;
    width: auto !important;
    min-width: 0 !important;
    max-width: 100% !important;
    max-height: 46vh !important;
    overflow-y: auto !important;
    overscroll-behavior: contain !important;
  }
  .sp-etp nav.h-menu .sp-sections-sub a { white-space: normal !important; overflow-wrap: anywhere !important; }
}

/* Кнопка чата висит в правом нижнем углу вьюпорта и в самом низу страницы
   накрывала правую колонку подвала — под ней пропадали телефон и почта
   техподдержки (замер: копирайт до x=1416, кнопка от x=1360). Запас снизу
   уводит текст из-под кнопки, не трогая её положение. */
.sp-etp .footer_wrap.ds-footer { padding-bottom: 72px !important; }

/* Телефон: резерв под кнопку чата — подвал отодвигаем, чтобы последняя строка
   («Техническая поддержка») не оказывалась под кнопкой при прокрутке до конца. */
@media (max-width: 480px) {
  .sp-etp .footer_wrap.ds-footer { padding-bottom: 76px !important; }
  .sp-etp .sp-standalone-footer { padding-bottom: 76px !important; }
}

/* ── Standalone-шапка как основная (2026-09-03) ───────────────────────────
   Полоса статуса и контакты в том же порядке и шрифте, что в шапке Border; навигация 14px/500. */
.sp-etp .sp-standalone-topstrip .topstrip-contacts { display: flex; align-items: center; gap: 18px; font-family: 'Geologica', 'Inter', system-ui, sans-serif; font-size: 12px; }
.sp-etp .sp-standalone-topstrip .topstrip-contacts .hc-brand { font-weight: 600; letter-spacing: .04em; text-transform: uppercase; opacity: .85; }
.sp-etp .sp-standalone-topstrip .topstrip-contacts a { color: inherit; text-decoration: none; font-weight: 600; }
.sp-etp .sp-standalone-nav a { font-size: 14px; font-weight: 500; padding: 0 14px; }
@media (max-width: 768px) {
  .sp-etp .sp-standalone-topstrip .topstrip-contacts .hc-brand, .sp-etp .sp-standalone-topstrip .topstrip-contacts a:not(.hc-phone) { display: none; }
  .sp-etp .sp-standalone-nav a:not(.sp-standalone-login) { display: none; }
}

/* ── Standalone-шапка на телефоне: без полосы статуса — от верха (2026-09-03) ──
   Полоса статуса на ≤768 скрыта, а шапка оставалась на 32px ниже и перекрывала заголовок страницы. */
@media (max-width: 768px) {
  .sp-etp .sp-standalone-header { top: 0 !important; }
  body.sp-etp.sp-standalone { padding-top: 72px !important; }
}

/* source: test-overrides/ui-redesign/etp/forms.css */
.sp-etp form, .sp-etp .spf, .sp-etp .formTable { min-width: 0; }
.sp-etp .sp-field:not(.sp-field--single) { display: grid; grid-template-columns: minmax(180px, 30%) minmax(0, 1fr); gap: 8px 16px; align-items: start; margin-bottom: 14px; }
.sp-etp .sp-field:not(.sp-field--single) > th, .sp-etp .sp-field:not(.sp-field--single) > td { width: auto !important; min-width: 0; padding: 0; }
/* Одиночная строка остаётся строкой таблицы: базовое .sp-ui .sp-field { display: grid } делало
   ячейку узкой по чекбоксу (32px), и подпись «Алтайский край» в диалоге выбора регионов
   переносилась на две строки. Мобильные карточки/стеки задают display с !important и не затронуты. */
.sp-etp tr.sp-field--single { display: table-row; }
.sp-etp .sp-control { width: 100% !important; max-width: 100%; min-height: 44px; }
.sp-etp input.sp-control:not([type='hidden']):not([type='button']):not([type='submit']):not([type='checkbox']):not([type='radio']),
.sp-etp select.sp-control,
.sp-etp textarea.sp-control {
  height: auto !important;
  min-height: 44px !important;
  margin: 0 !important;
  padding: 9px 12px !important;
  border: 1px solid var(--ink-200) !important;
  border-radius: var(--r-sm) !important;
  background: var(--surface-card) !important;
  color: var(--ink-900) !important;
  box-shadow: none !important;
  box-sizing: border-box !important;
}
.sp-etp input.sp-control:not([type='hidden']):not([type='button']):not([type='submit']):not([type='checkbox']):not([type='radio']):focus,
.sp-etp select.sp-control:focus,
.sp-etp textarea.sp-control:focus {
  border-color: var(--brand-blue-500) !important;
  outline: 0 !important;
  box-shadow: var(--shadow-focus) !important;
}
.sp-etp input.sp-control[readonly],
.sp-etp input.sp-control:disabled,
.sp-etp select.sp-control:disabled,
.sp-etp textarea.sp-control:disabled {
  background: var(--surface-subtle) !important;
  color: var(--ink-600) !important;
}
.sp-etp textarea.sp-control {
  min-height: 112px !important;
  padding-block: 10px !important;
  resize: vertical;
}
.sp-etp input[type='checkbox'].sp-control, .sp-etp input[type='radio'].sp-control { width: 20px !important; min-height: 20px; accent-color: var(--brand-blue-600); }
.sp-etp .sp-field__error { display: block; margin-top: 4px; color: var(--danger-700); font-size: 13px; }
.sp-etp .gwt-Button, .sp-etp button, .sp-etp input[type='button'], .sp-etp input[type='submit'] { min-height: 44px; border-radius: var(--r-sm); }
.sp-etp .queryFieldButton {
  /* The legacy wrapper is 14px taller than the input because its empty
     validation row remains in table layout. Anchor the 44px action to the
     48px input itself instead of centring it in that wrapper. */
  top: 2px !important;
  transform: none !important;
  width: 44px !important;
  height: 44px !important;
  padding: 0 !important;
  border-radius: var(--r-sm) !important;
}
.sp-etp table.searchPanel .queryFieldLayout input[type='text'],
.sp-etp .queryFieldLayout input[type='text'].sp-control,
.sp-etp .queryFieldLayout input.sp-control:not([type='hidden']):not([type='button']):not([type='submit']):not([type='checkbox']):not([type='radio']) {
  padding-right: 64px !important;
  text-overflow: ellipsis;
}
.sp-etp .queryFieldButton::before {
  flex: 0 0 18px;
  width: 18px !important;
  height: 18px !important;
}
.sp-etp table.searchPanel .queryFieldButton { top: 0 !important; }
.sp-etp .rec-go > input.invisible_input.sp-control {
  position: absolute !important;
  inset: 0 !important;
  z-index: 2 !important;
  display: block !important;
  width: 100% !important;
  max-width: none !important;
  height: 100% !important;
  min-height: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  opacity: 0 !important;
  pointer-events: auto !important;
  cursor: pointer !important;
}
.sp-etp .login-button-panel > .rec-go[style*='display'][style*='none'] {
  /* The legacy CryptoPro probe hides this wrapper when the browser plug-in
     is unavailable. Do not turn that explicit state back into a fake active
     action through the generic !important button layout. */
  display: none !important;
}
.sp-etp .login-button-panel > .sp-eds-unavailable {
  display: none !important;
  align-items: flex-start;
  gap: 8px;
  width: 100%;
  margin: 0;
  padding: 10px 12px;
  border: 1px solid var(--ink-200, #CFDBE8);
  border-radius: var(--r-sm, 6px);
  background: var(--ink-050, #F5F8FC);
  color: var(--ink-700, #40546C);
  font-size: 12px;
  line-height: 1.45;
  box-sizing: border-box;
}
.sp-etp .login-button-panel > .sp-eds-unavailable::before {
  content: 'i';
  display: inline-flex;
  flex: 0 0 20px;
  align-items: center;
  justify-content: center;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: var(--brand-blue-050, #F1F7FF);
  color: var(--brand-blue-700, #054BB0);
  font-size: 12px;
  font-weight: 700;
  line-height: 1;
}
.sp-etp .login-button-panel > .rec-go[id^='EDS'][style*='display'][style*='none'] + .sp-eds-unavailable {
  display: flex !important;
}
.sp-etp .rec-go:has(> input.invisible_input.sp-control:focus-visible) {
  box-shadow: 0 0 0 3px rgb(6 101 230 / 22%) !important;
}
.sp-etp .login_form .spf-input,
.sp-etp .login_form .spf-login-input {
  width: 100% !important;
  height: auto !important;
  min-height: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  border-radius: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
  box-sizing: border-box !important;
}
.sp-etp .login_form .spf-input > input.sp-control,
.sp-etp .login_form .spf-login-input > input.sp-control {
  width: 100% !important;
  min-height: 44px !important;
  box-sizing: border-box !important;
}
.sp-etp .login_form .separate_form > .spf-tabs {
  width: calc(100% + 40px) !important;
  max-width: calc(100% + 40px) !important;
  overflow-x: hidden !important;
  box-sizing: border-box !important;
}
.sp-etp .login_form .separate_form > .spf-tabs > .spf-tab {
  min-width: 0 !important;
}
.sp-etp .sp-control-shell {
  display: block !important;
  width: 100% !important;
  max-width: 100% !important;
  height: auto !important;
  min-height: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  border-radius: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
  box-sizing: border-box !important;
  overflow: visible !important;
}
.sp-etp .sp-control-shell > .sp-control {
  display: block !important;
  width: 100% !important;
  max-width: 100% !important;
  box-sizing: border-box !important;
}
.sp-etp .ecp-line.sp-field > .ecp-label,
.sp-etp .ecp-line.sp-field > .sp-control,
.sp-etp .ecp-line.sp-field > .sp-control-shell {
  min-width: 0 !important;
  max-width: 100% !important;
}
.sp-etp .ecp-line.sp-field > .ecp-label {
  padding-top: 10px !important;
  color: var(--ink-700) !important;
  font-size: 13px !important;
  font-weight: 600 !important;
  line-height: 1.35 !important;
}
.sp-etp .sp-date-control-shell {
  position: relative !important;
}
.sp-etp .sp-date-control-shell > input.sp-control {
  padding-right: 50px !important;
}
.sp-etp .sp-date-control-shell:has(> .sp-date-action--clear:not([style*='display: none'])) > input.sp-control {
  padding-right: 92px !important;
}
.sp-etp .sp-date-control-shell > br.clear { display: none !important; }
.sp-etp .sp-date-control-shell > a.sp-date-action {
  position: absolute !important;
  top: 2px !important;
  right: 2px !important;
  z-index: 2 !important;
  display: inline-flex !important;
  width: 40px !important;
  min-width: 40px !important;
  height: 40px !important;
  min-height: 40px !important;
  padding: 10px !important;
  border-radius: var(--r-sm) !important;
  color: var(--brand-blue-700) !important;
}
.sp-etp .sp-date-control-shell > a.sp-date-action--clear { right: 42px !important; }
.sp-etp .sp-date-control-shell > a.sp-date-action[style*='display: none'] { display: none !important; }
.sp-etp .sp-date-action > img { display: none !important; }
.sp-etp .sp-date-action::before {
  content: '';
  display: block;
  width: 20px;
  height: 20px;
  background-position: center;
  background-repeat: no-repeat;
  background-size: contain;
}
.sp-etp .sp-date-action--calendar::before {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23054BB0' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='5' width='18' height='16' rx='2'/%3E%3Cpath d='M16 3v4M8 3v4M3 10h18'/%3E%3C/svg%3E");
}
.sp-etp .sp-date-action--clear::before {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2340546C' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M7 7l10 10M17 7L7 17'/%3E%3C/svg%3E");
}
.sp-etp select.sp-native-select {
  position: static !important;
  display: block !important;
  visibility: visible !important;
  opacity: 1 !important;
  pointer-events: auto !important;
}
.sp-etp .sp-select-surrogate { display: none !important; }
.sp-etp .content_indent.ds-content form:has(.ecp_form) + .nomargin {
  clear: both !important;
  margin-top: 24px !important;
}
/* «Результаты поиска» + «Выгрузить в файл» под формой поиска (Реестр участников, 15.09):
   правило рядов кнопок ниже (вес 0,6,3) перебивало отступ 24px — строка прилипала к «Найти»;
   h2 держал margin-bottom 14px из `body:has(.list_table) h2` и стоял выше центра кнопки. */
.sp-etp .content_indent.ds-content > form:has(.ecp_form) + div.clearfix.nomargin:has(> .inlineCardTitle) {
  margin-top: 24px !important;
  gap: 16px !important;
  align-items: center !important;
}
.sp-etp .content_indent.ds-content > form:has(.ecp_form) + div.clearfix.nomargin > .inlineCardTitle { margin: 0 !important; }
@media (min-width: 769px) {
  .sp-etp .queryFieldButton { top: 0 !important; }
  .sp-etp .content_indent.ds-content .ecp_form > .ecp-colls_wrap > table.ecp-colls {
    display: block !important;
    width: 100% !important;
    max-width: 100% !important;
    border: 0 !important;
    border-spacing: 0 !important;
  }
  .sp-etp .content_indent.ds-content .ecp_form > .ecp-colls_wrap > table.ecp-colls > tbody {
    display: grid !important;
    grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
    gap: 18px 20px !important;
    width: 100% !important;
  }
  .sp-etp .content_indent.ds-content .ecp_form > .ecp-colls_wrap > table.ecp-colls > tbody > tr {
    display: contents !important;
  }
  .sp-etp .content_indent.ds-content .ecp_form > .ecp-colls_wrap > table.ecp-colls > tbody > tr > td.ecp-cell {
    display: block !important;
    width: auto !important;
    min-width: 0 !important;
    max-width: none !important;
    padding: 0 !important;
    border: 0 !important;
    vertical-align: top !important;
  }
  .sp-etp .content_indent.ds-content .ecp_form > .ecp-colls_wrap > table.ecp-colls > tbody > tr > td.ecp-cell[colspan] {
    grid-column: 1 / -1 !important;
  }
  .sp-etp .content_indent.ds-content .ecp_form > .ecp-colls_wrap > table.ecp-colls > tbody > tr > td.ecp-cell:has(> .ecp-line > .ecp-min_max) {
    grid-column: span 2 !important;
  }
  /* Сосед диапазона «с/по» в ряду (Реестр участников: «Состояние участника», 15.09): у диапазона
     над полями ещё подпись группы, поэтому соседнее поле прижимаем к низу ряда — его подпись
     встаёт на линию «с/по», список на линию полей дат. */
  .sp-etp .content_indent.ds-content .ecp_form > .ecp-colls_wrap > table.ecp-colls > tbody > tr > td.ecp-cell:has(> .ecp-line > .ecp-min_max) + td.ecp-cell,
  .sp-etp .content_indent.ds-content .ecp_form > .ecp-colls_wrap > table.ecp-colls > tbody > tr > td.ecp-cell:has(+ td.ecp-cell > .ecp-line > .ecp-min_max) {
    align-self: end !important;
  }
  .sp-etp .content_indent.ds-content .ecp_form .ecp-line.sp-field {
    display: grid !important;
    grid-template-columns: minmax(0, 1fr) !important;
    gap: 6px !important;
    width: 100% !important;
    min-width: 0 !important;
    margin: 0 !important;
  }
  .sp-etp .content_indent.ds-content .ecp_form .ecp-line.sp-field > .ecp-label {
    display: flex !important;
    align-items: flex-end !important;
    min-height: 36px !important;
    padding: 0 !important;
  }
  .sp-etp .content_indent.ds-content .ecp_form .ecp-line:not(.sp-field) > .ecp-label {
    display: flex !important;
    align-items: flex-end !important;
    min-height: 36px !important;
    margin-bottom: 6px !important;
    color: var(--ink-700) !important;
    font-size: 13px !important;
    font-weight: 600 !important;
    line-height: 1.35 !important;
  }
  .sp-etp .content_indent.ds-content .ecp_form .ecp-min_max,
  .sp-etp .content_indent.ds-content .ecp_form .ecp-min_max > table.ecp-colls {
    display: block !important;
    width: 100% !important;
    max-width: 100% !important;
  }
  .sp-etp .content_indent.ds-content .ecp_form .ecp-min_max > table.ecp-colls > tbody {
    display: grid !important;
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    /* зазор колонок = зазору сетки формы (20px): поля «с/по» совпадают с колонками над ними */
    gap: 12px 20px !important;
    width: 100% !important;
  }
  .sp-etp .content_indent.ds-content .ecp_form .ecp-min_max > table.ecp-colls > tbody > tr {
    display: contents !important;
  }
  .sp-etp .content_indent.ds-content .ecp_form .ecp-min_max > table.ecp-colls > tbody > tr > td.ecp-cell {
    display: block !important;
    width: auto !important;
    min-width: 0 !important;
    padding: 0 !important;
  }
  .sp-etp .content_indent.ds-content .ecp_form .ecp-min_max .ecp-line.sp-field > .ecp-label {
    min-height: 18px !important;
  }
  .sp-etp .content_indent.ds-content .ecp_form .ecpf-submit {
    width: min(100%, 220px) !important;
  }
}
.sp-etp table.sp-palette {
  display: block !important;
  width: 100% !important;
  max-width: 100% !important;
  border: 0 !important;
  border-spacing: 0 !important;
}
.sp-etp table.sp-palette > tbody {
  display: grid !important;
  grid-template-columns: minmax(0, 1fr) 52px minmax(0, 1fr) !important;
  grid-template-rows: auto minmax(52px, auto) !important;
  gap: 6px 12px !important;
  width: 100% !important;
}
.sp-etp table.sp-palette > tbody > tr { display: contents !important; }
.sp-etp table.sp-palette .available-header,
.sp-etp table.sp-palette .selected-header {
  display: block !important;
  padding: 0 !important;
  color: var(--ink-600) !important;
  font-size: 12px !important;
  font-weight: 700 !important;
  text-align: left !important;
}
.sp-etp table.sp-palette .available-header { grid-column: 1; grid-row: 1; }
.sp-etp table.sp-palette .selected-header { grid-column: 3; grid-row: 1; }
.sp-etp table.sp-palette .available-cell,
.sp-etp table.sp-palette .selected-cell {
  display: block !important;
  width: 100% !important;
  min-width: 0 !important;
  padding: 0 !important;
}
.sp-etp table.sp-palette .available-cell { grid-column: 1; grid-row: 2; }
.sp-etp table.sp-palette .selected-cell { grid-column: 3; grid-row: 2; }
.sp-etp table.sp-palette td.controls {
  grid-column: 2 !important;
  grid-row: 1 / 3 !important;
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  justify-content: center !important;
  gap: 8px !important;
  width: 52px !important;
  padding: 0 !important;
}
.sp-etp table.sp-palette select[multiple].sp-control {
  width: 100% !important;
  min-height: 132px !important;
  padding: 8px !important;
}
.sp-etp table.sp-palette select[multiple].sp-control:empty {
  height: 96px !important;
  min-height: 96px !important;
}
.sp-etp .sp-palette-action {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  width: 44px !important;
  min-width: 44px !important;
  height: 44px !important;
  min-height: 44px !important;
  padding: 0 !important;
  border: 1px solid var(--ink-200) !important;
  border-radius: var(--r-sm) !important;
  background: var(--surface-card) !important;
  color: var(--brand-blue-700) !important;
  font-size: 24px !important;
  line-height: 1 !important;
  text-decoration: none !important;
}
.sp-etp .sp-palette-action:hover,
.sp-etp .sp-palette-action:focus-visible {
  border-color: var(--brand-blue-200) !important;
  background: var(--brand-blue-050) !important;
}
.sp-etp .sp-palette-action > img { display: none !important; }
.sp-etp .sp-palette-action::before { content: '\2192'; }
.sp-etp .sp-palette-action--remove::before { content: '\2190'; }
.sp-etp [aria-busy='true'] { cursor: progress; opacity: .72; }
.sp-etp a.sp-icon-button {
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  width: 40px;
  min-width: 40px;
  height: 40px;
  min-height: 40px;
  padding: 8px !important;
  border-radius: var(--r-sm);
  background: transparent;
  box-sizing: border-box;
}
.sp-etp a.sp-icon-button:hover,
.sp-etp a.sp-icon-button:focus-visible { background: var(--brand-blue-050); }
.sp-etp a.sp-icon-button img { display: block; max-width: 24px; max-height: 24px; }

@media (max-width: 768px) {
  /* iOS zooms the whole visual viewport when a focused form control is
     rendered below 16px. Keep native controls at the platform-safe size;
     do not disable pinch zoom through the viewport meta tag. */
  .sp-etp {
    -webkit-text-size-adjust: 100% !important;
    text-size-adjust: 100% !important;
  }
  .sp-etp input:not([type]),
  .sp-etp input[type='text'],
  .sp-etp input[type='search'],
  .sp-etp input[type='email'],
  .sp-etp input[type='tel'],
  .sp-etp input[type='url'],
  .sp-etp input[type='number'],
  .sp-etp input[type='password'],
  .sp-etp input[type='date'],
  .sp-etp input[type='datetime-local'],
  .sp-etp input[type='time'],
  .sp-etp select,
  .sp-etp textarea {
    font-size: 16px !important;
  }
  .sp-etp table.searchPanel .queryFieldLayout input.gwt-TextBox.textField,
  .sp-etp table.searchPanel .queryFieldLayout input.gwt-TextBox,
  .sp-etp table.searchPanel .queryFieldLayout input.textField,
  .sp-etp table.searchPanel .queryFieldLayout input[type='text'] {
    font-size: 16px !important;
  }
  .sp-etp input,
  .sp-etp button,
  .sp-etp a,
  .sp-etp input[type='button'],
  .sp-etp input[type='submit'],
  .sp-etp input[type='reset'],
  .sp-etp input[type='checkbox'],
  .sp-etp input[type='radio'],
  .sp-etp select,
  .sp-etp textarea {
    touch-action: manipulation;
  }
  .sp-etp .content_indent.ds-content table.ecp-colls,
  .sp-etp .content_indent.ds-content table.ecp-colls > tbody,
  .sp-etp .content_indent.ds-content table.ecp-colls > tbody > tr,
  .sp-etp .content_indent.ds-content table.ecp-colls > tbody > tr > td {
    display: block !important;
    width: 100% !important;
    min-width: 0 !important;
    max-width: 100% !important;
    box-sizing: border-box !important;
  }
  .sp-etp .content_indent.ds-content table.ecp-colls > tbody > tr > td {
    padding: 0 0 14px !important;
    border: 0 !important;
  }
  .sp-etp .content_indent.ds-content .ecp-line.sp-field {
    width: 100% !important;
    min-width: 0 !important;
    max-width: 100% !important;
    margin: 0 !important;
    box-sizing: border-box !important;
  }
  .sp-etp .ecp-line.sp-field > .ecp-label { padding-top: 0 !important; }
  .sp-etp table.sp-palette > tbody {
    grid-template-columns: minmax(0, 1fr) !important;
    grid-template-rows: auto auto auto auto auto !important;
    gap: 6px !important;
  }
  .sp-etp table.sp-palette .available-header { grid-column: 1; grid-row: 1; }
  .sp-etp table.sp-palette .available-cell { grid-column: 1; grid-row: 2; }
  .sp-etp table.sp-palette td.controls {
    grid-column: 1 !important;
    grid-row: 3 !important;
    flex-direction: row !important;
    width: 100% !important;
    justify-content: center !important;
  }
  .sp-etp table.sp-palette .selected-header { grid-column: 1; grid-row: 4; }
  .sp-etp table.sp-palette .selected-cell { grid-column: 1; grid-row: 5; }
  .sp-etp .sp-palette-action--add::before { content: '\2193'; }
  .sp-etp .sp-palette-action--remove::before { content: '\2191'; }
}

/* ── Choice controls ─────────────────────────────────────────────────────
   Legacy radio/checkbox groups render the 20px control on the first line and
   the caption on the baseline of the next one. Keep control and caption on one
   axis and give the whole caption a 44px touch target. */
.sp-etp .ecp-radio {
  display: flex !important;
  align-items: center !important;
  gap: 10px !important;
  min-height: 32px !important;
  margin: 0 !important;
  padding: 2px 0 !important;
}
.sp-etp .ecp-radio > input.sp-control,
.sp-etp .ecp-radio > input[type='radio'],
.sp-etp .ecp-radio > input[type='checkbox'] {
  flex: 0 0 20px !important;
  width: 20px !important;
  height: 20px !important;
  min-height: 20px !important;
  margin: 0 !important;
}
/* 15.09: на телефоне подпись переносится в две строки, и flex с align-items: center ставил переключатель и флажок
   по середине блока — на 9–10px ниже первой строки («физическое лицо…», «Субъект малого и среднего…»).
   Выравниваем по первой строке: верх + сдвиг (элемент 22px, строка подписи 17–18px). На десктопе не меняется. */
.sp-etp .ecp-radio:has(> input + label.ecp-label) {
  align-items: flex-start !important;
}
.sp-etp .ecp-radio:has(> input + label.ecp-label) > input {
  margin-top: -2px !important;
}
.sp-etp .ecp-radio > label.ecp-label,
.sp-etp .ecp-line.sp-field > span > .ecp-radio > label.ecp-label {
  display: inline !important;
  min-height: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
  color: var(--ink-800) !important;
  font-size: 14px !important;
  font-weight: 500 !important;
  line-height: 1.4 !important;
  cursor: pointer;
}
.sp-etp label.ecp-label:has(> input[type='checkbox']),
.sp-etp label.ecp-label:has(> input[type='radio']),
.sp-etp .ecp-line.sp-field > label.ecp-label:has(> input[type='checkbox']),
.sp-etp .content_indent.ds-content .ecp_form .ecp-line.sp-field > label.ecp-label:has(> input[type='checkbox']) {
  display: inline-flex !important;
  align-items: flex-start !important;
  gap: 10px !important;
  min-height: 0 !important;
  padding: 2px 0 !important;
  color: var(--ink-800) !important;
  font-size: 14px !important;
  font-weight: 500 !important;
  line-height: 1.4 !important;
  cursor: pointer;
}
.sp-etp label.ecp-label > input[type='checkbox'].sp-control,
.sp-etp label.ecp-label > input[type='radio'].sp-control {
  flex: 0 0 20px !important;
  width: 20px !important;
  height: 20px !important;
  min-height: 20px !important;
  margin: 0 !important;
}
/* 15.09: флажок в строчной подписи (div.ecp-label.inline > input + label, регистрация: «совпадает с юридическим
   адресом») стоял на базовой линии — на 6px выше середины подписи. Flex здесь сдвигал многострочные подписи,
   поэтому строчное выравнивание по середине. */
.sp-etp .ecp-line.sp-field div.ecp-label.inline > input[type='checkbox'].sp-control {
  vertical-align: middle !important;
  margin-block: 0 !important;
}

/* ── Phone number group ──────────────────────────────────────────────────
   "+ [code] ( [region] ) [number]" is a nested table. Keep the three parts on
   one line on every width instead of stacking "+", "(" and ")" as separate
   full-width rows. */
.sp-etp table.ecp-colls:has(> tbody > tr > td.phoneCountryCodeField),
.sp-etp .content_indent.ds-content table.ecp-colls:has(> tbody > tr > td.phoneCountryCodeField) {
  display: block !important;
  width: 100% !important;
  border-spacing: 0 !important;
}
.sp-etp table.ecp-colls:has(> tbody > tr > td.phoneCountryCodeField) > tbody,
.sp-etp .content_indent.ds-content table.ecp-colls:has(> tbody > tr > td.phoneCountryCodeField) > tbody,
.sp-etp table.ecp-colls:has(> tbody > tr > td.phoneCountryCodeField) > tbody > tr,
.sp-etp .content_indent.ds-content table.ecp-colls:has(> tbody > tr > td.phoneCountryCodeField) > tbody > tr,
.sp-etp table.ecp-colls:has(> tbody > tr > td.phoneCountryCodeField) > tbody > tr.sp-field,
.sp-etp .content_indent.ds-content table.ecp-colls:has(> tbody > tr > td.phoneCountryCodeField) > tbody > tr.sp-field {
  display: flex !important;
  flex-wrap: nowrap !important;
  align-items: center !important;
  gap: 6px !important;
  width: 100% !important;
  min-width: 0 !important;
  margin: 0 !important;
}
.sp-etp table.ecp-colls:has(> tbody > tr > td.phoneCountryCodeField) > tbody > tr > td,
.sp-etp .content_indent.ds-content table.ecp-colls:has(> tbody > tr > td.phoneCountryCodeField) > tbody > tr > td {
  display: block !important;
  flex: 0 0 auto !important;
  width: auto !important;
  min-width: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  color: var(--ink-500) !important;
  font-size: 14px !important;
}
.sp-etp table.ecp-colls:has(> tbody > tr > td.phoneCountryCodeField) > tbody > tr > td.phoneCountryCodeField,
.sp-etp .content_indent.ds-content table.ecp-colls:has(> tbody > tr > td.phoneCountryCodeField) > tbody > tr > td.phoneCountryCodeField { flex: 0 0 64px !important; }
.sp-etp table.ecp-colls:has(> tbody > tr > td.phoneCountryCodeField) > tbody > tr > td.phoneRegionCodeField,
.sp-etp .content_indent.ds-content table.ecp-colls:has(> tbody > tr > td.phoneCountryCodeField) > tbody > tr > td.phoneRegionCodeField { flex: 0 0 88px !important; }
.sp-etp table.ecp-colls:has(> tbody > tr > td.phoneCountryCodeField) > tbody > tr > td.phoneNumberField,
.sp-etp .content_indent.ds-content table.ecp-colls:has(> tbody > tr > td.phoneCountryCodeField) > tbody > tr > td.phoneNumberField { flex: 1 1 120px !important; }
.sp-etp table.ecp-colls:has(> tbody > tr > td.phoneCountryCodeField) .rec-big,
.sp-etp .content_indent.ds-content table.ecp-colls:has(> tbody > tr > td.phoneCountryCodeField) .rec-big { font-size: 15px !important; font-weight: 600 !important; }
.sp-etp table.ecp-colls:has(> tbody > tr > td.phoneCountryCodeField) input.sp-control,
.sp-etp .content_indent.ds-content table.ecp-colls:has(> tbody > tr > td.phoneCountryCodeField) input.sp-control { padding-inline: 10px !important; text-align: center; }
.sp-etp table.ecp-colls:has(> tbody > tr > td.phoneCountryCodeField) td.phoneNumberField input.sp-control,
.sp-etp .content_indent.ds-content table.ecp-colls:has(> tbody > tr > td.phoneCountryCodeField) td.phoneNumberField input.sp-control { text-align: left; }

/* ── Inline actions inside the page title ────────────────────────────────
   The settings page keeps its reload form inside the H1. */
.sp-etp .content_indent > h1 > span:has(> form),
.sp-etp .content_indent.ds-content > h1 > span:has(> form) {
  display: inline-block !important;
  margin-left: 16px !important;
  vertical-align: middle !important;
  font: 400 13px/1 var(--font-body) !important;
  letter-spacing: normal !important;
}
.sp-etp .content_indent > h1 > span > form { display: inline-block !important; margin: 0 !important; }
.sp-etp .content_indent > h1 .sp-button,
.sp-etp .content_indent > h1 input[type='submit'] {
  min-height: 36px !important;
  padding: 0 14px !important;
  font-size: 13px !important;
  vertical-align: middle !important;
}
@media (max-width: 768px) {
  .sp-etp .content_indent > h1 > span:has(> form),
  .sp-etp .content_indent.ds-content > h1 > span:has(> form) { display: block !important; margin: 10px 0 0 !important; }
}

/* ── Stand-alone .ecp-line fields (password recovery, activation) ────────
   .ecp-line is always "label above control". Outside the registration grid
   the generic two-column field grid put the 250px legacy wrapper's input into
   a 70px column. */
.sp-etp .ecp-line.sp-field {
  grid-template-columns: minmax(0, 1fr) !important;
  gap: 6px !important;
}
.sp-etp .content_indent > form > div[style*='width:250px'],
.sp-etp .content_indent > form > div[style*='width: 250px'] {
  width: min(100%, 420px) !important;
}
.sp-etp .content_indent > form > .ecp-hr { display: none !important; }
.sp-etp .content_indent > form > .rec-go.ecpf-submit { margin-top: 16px !important; }

/* ── Legacy procedure search (/app/Search/page/) ─────────────────────────
   Three checkbox groups used to render as one tall column of raw inputs. */
.sp-etp #offerSearchForm .ors-boxes {
  display: inline-grid !important;
  vertical-align: top;
  gap: 8px !important;
  width: min(100%, 320px);
  margin: 0 16px 16px 0 !important;
  padding: 14px 16px 16px !important;
  border: 1px solid var(--ink-100) !important;
  border-radius: var(--r-md) !important;
  background: var(--surface-card) !important;
  box-shadow: var(--shadow-xs);
}
.sp-etp #offerSearchForm .orsb-title {
  display: flex !important;
  flex-direction: row-reverse !important;
  align-items: center !important;
  justify-content: flex-end !important;
  gap: 10px !important;
  margin: 0 0 4px !important;
  padding: 0 0 8px !important;
  border-bottom: 1px solid var(--ink-100) !important;
  color: var(--navy-900) !important;
  font: 700 14px/1.3 var(--font-display) !important;
}
.sp-etp #offerSearchForm .orsb-title > input[type='checkbox'] { flex: 0 0 20px !important; width: 20px !important; height: 20px !important; min-height: 20px !important; margin: 0 !important; }
.sp-etp #offerSearchForm .orsb-item { margin: 0 !important; }
.sp-etp #offerSearchForm .orsb-item > label {
  display: flex !important;
  align-items: center !important;
  gap: 10px !important;
  min-height: 28px !important;
  color: var(--ink-800) !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  cursor: pointer;
}
.sp-etp #offerSearchForm .orsb-item > label > input[type='checkbox'] { flex: 0 0 20px !important; width: 20px !important; height: 20px !important; min-height: 20px !important; margin: 0 !important; }
.sp-etp #offerSearchForm > .ecp_form { clear: both; margin-top: 8px; }
@media (max-width: 768px) {
  .sp-etp #offerSearchForm .ors-boxes { display: grid !important; width: 100% !important; margin: 0 0 12px !important; }
}
.sp-etp .ecp-line.sp-field > .ecp-label { padding-top: 0 !important; }

/* ── Checkbox/radio rows in form tables ──────────────────────────────────
   A row whose first cell holds only a checkbox (notification settings) is not
   a label/value pair: keep the control next to its caption. */
.sp-etp tr.sp-field:has(> td:first-child input[type='checkbox']):not(:has(> td:first-child input:not([type='checkbox']):not([type='hidden']))):not(:has(> td:nth-child(2) input:not([type='hidden']))),
.sp-etp tr.sp-field:has(> td:first-child input[type='radio']):not(:has(> td:first-child input:not([type='radio']):not([type='hidden']))):not(:has(> td:nth-child(2) input:not([type='hidden']))) {
  grid-template-columns: 32px minmax(0, 1fr) !important;
  align-items: center !important;
  gap: 0 8px !important;
  margin-bottom: 8px !important;
}
.sp-etp tr.sp-field:has(> td:first-child input[type='checkbox']):not(:has(> td:first-child input:not([type='checkbox']):not([type='hidden']))):not(:has(> td:nth-child(2) input:not([type='hidden']))) > td,
.sp-etp tr.sp-field:has(> td:first-child input[type='radio']):not(:has(> td:first-child input:not([type='radio']):not([type='hidden']))):not(:has(> td:nth-child(2) input:not([type='hidden']))) > td {
  padding: 0 !important;
  color: var(--ink-800) !important;
  font-size: 14px !important;
  line-height: 1.4 !important;
}
.sp-etp tr.sp-field > td:first-child > .line-margin-bottom { margin: 0 !important; display: flex; align-items: center; }
.sp-etp .sp-table--form > tbody > tr.vatop > th {
  padding: 0 0 8px !important;
  color: var(--ink-500) !important;
  font-size: 11px !important;
  font-weight: 700 !important;
  letter-spacing: .06em !important;
  text-align: left !important;
  text-transform: uppercase !important;
  background: transparent !important;
  border: 0 !important;
}
.sp-etp .content_indent > .sp-after-title { margin: -8px 0 16px !important; color: var(--ink-600); font-size: 14px; }

/* ── Action button groups rendered by GWT as stacked block wrappers ───────── */
.sp-etp .content_indent > div:not(.sp-action-row--empty):has(> .gwt-Button, > a.gwt-Button, > div > .gwt-Button):not(:has(table, form, select, textarea, input:not([type='button']):not([type='submit']))) {
  display: flex !important;
  flex-wrap: wrap !important;
  align-items: center !important;
  gap: 8px !important;
  margin: 0 0 16px !important;
}
.sp-etp .content_indent > div:not(.sp-action-row--empty):has(> .gwt-Button, > a.gwt-Button, > div > .gwt-Button):not(:has(table, form, select, textarea, input:not([type='button']):not([type='submit']))) > div { margin: 0 !important; float: none !important; }
.sp-etp .content_indent > div.sp-action-row--empty {
  display: none !important;
}
.sp-etp a.sp-link-with-icon { display: inline-flex !important; align-items: center; gap: 8px; color: var(--brand-blue-700) !important; font-weight: 600; text-decoration: none !important; }
.sp-etp a.sp-link-with-icon img { max-width: 20px; max-height: 20px; flex: 0 0 auto; }
.sp-etp a.sp-link-with-icon:hover { text-decoration: underline !important; }

/* GWT renders placeholder .gwt-Button divs with no content until the list has
   data; a generic primary-button skin turned them into bare blue squares. */
.sp-etp .gwt-Button.sp-button:empty { display: none !important; }

/* ── Регистрация участника: карта дефектов UI (2026-09-03) ────────────────
   Подписи полей были в двух стилях (legacy Arial Unicode MS 14/500 и ДС 13/700), подписи
   с подсказкой (acronym, .required как flex) были выше на 16px и разъезжали ряды; пустые
   ячейки трёхколоночной сетки оставляли дыры; капча с системной рамкой. */
.sp-etp .ecp_form label.ecp-label, .sp-etp .ecp_form .ecp-label { font-family: 'Geologica', 'Inter', system-ui, sans-serif !important; font-size: 13px !important; font-weight: 700 !important; color: var(--ink-700, #2C3E52) !important; line-height: 1.3 !important; }
.sp-etp .ecp_form .ecp-line.sp-field > .ecp-label, .sp-etp .ecp_form .ecp-line.sp-field > span > .ecp-label, .sp-etp .ecp_form .ecp-label.required { display: block !important; min-height: 17px; margin: 0 0 6px !important; }
.sp-etp .ecp_form .ecp-label acronym { border-bottom: 0 !important; text-decoration: underline dotted var(--ink-300, #B7C6D6) !important; text-underline-offset: 3px; cursor: help; }
.sp-etp .ecp_form .ecp-line.sp-field { align-items: end !important; }
.sp-etp img#captchaImage { border: 1px solid var(--ink-200, #D0DCE8) !important; border-radius: var(--r-sm, 6px) !important; }
@media (min-width: 769px) {
  .sp-etp .content_indent.ds-content .ecp_form > .ecp-colls_wrap > table.ecp-colls > tbody > tr > td.ecp-cell:not(:has(*)) { display: none !important; }
}
/* Standalone-страницы (Поиск торгов): ряды чекбоксов на телефоне — в одну колонку, без выхода за карточку */
@media (max-width: 768px) {
  .sp-etp .sp-standalone-main table.sp-table--form tr.sp-field:has(> td > label > input[type="checkbox"]),
  .sp-etp .sp-standalone-main table.sp-table--form tr.sp-field:has(> td > input[type="checkbox"]) { grid-template-columns: minmax(0, 1fr) !important; gap: 8px !important; }
  .sp-etp .sp-standalone-main table.sp-table--form tr.sp-field:has(> td > label > input[type="checkbox"]) > td,
  .sp-etp .sp-standalone-main table.sp-table--form tr.sp-field:has(> td > input[type="checkbox"]) > td { width: 100% !important; max-width: 100% !important; }
  .sp-etp .sp-standalone-main table.sp-table--form tr.sp-field label { white-space: normal !important; max-width: 100% !important; }
}

/* ── Регистрация: приоритет над правилами фильтра поиска (2026-09-03) ──────
   Правило фильтра (.ecp-line.sp-field > .ecp-label: flex 36px) делало подписи-прямые дети
   выше подписей в span на 19px; вес 600 против 700; подписи радиокнопок 14px. */
@media (min-width: 769px) {
  .sp-etp .content_indent.ds-content .ecp_form > .ecp-colls_wrap .ecp-line.sp-field > .ecp-label,
  .sp-etp .content_indent.ds-content .ecp_form > .ecp-colls_wrap .ecp-line:not(.sp-field) > .ecp-label,
  .sp-etp .content_indent.ds-content .ecp_form > .ecp-colls_wrap .ecp-line.sp-field > span > .ecp-label { display: block !important; min-height: 17px !important; padding: 0 !important; margin: 0 0 6px !important; }
}
.sp-etp .content_indent.ds-content .ecp_form .ecp-line.sp-field > .ecp-label,
.sp-etp .content_indent.ds-content .ecp_form .ecp-line:not(.sp-field) > .ecp-label,
.sp-etp .content_indent.ds-content .ecp_form .ecp-line.sp-field > span > .ecp-label { font-weight: 700 !important; font-size: 13px !important; }
.sp-etp .content_indent.ds-content .ecp_form .ecp-radio > label.ecp-label,
.sp-etp .content_indent.ds-content .ecp_form .ecp-line.sp-field > span > .ecp-radio > label.ecp-label { font-size: 13px !important; font-weight: 500 !important; }

/* ── Регистрация: составные строки и согласие (2026-09-03, волна 3) ─────────
   Подпись у составного телефона/факса (.ecp-line без .sp-field) была 36px высотой и 600 —
   поле уходило на 13px ниже соседей (правило выше расширено на .ecp-line:not(.sp-field));
   подпись-чекбокс «нерезидент» получала 14px/500 из общего правила чекбоксов;
   строка согласия с регламентом на 390 — плавающая подпись наезжала на чекбокс. */
.sp-etp .content_indent.ds-content .ecp_form .ecp-line > label.ecp-label:has(> input[type="checkbox"]),
.sp-etp .content_indent.ds-content .ecp_form .ecp-line.sp-field > label.ecp-label:has(> input[type="checkbox"]) { font-size: 13px !important; font-weight: 500 !important; display: flex !important; align-items: center !important; gap: 8px !important; min-height: 22px !important; }
.sp-etp .content_indent .block-margin-top:has(> input.checkbox + label) { display: flex !important; align-items: flex-start !important; gap: 10px !important; }
.sp-etp .content_indent .block-margin-top > input.checkbox { flex: 0 0 22px !important; float: none !important; margin: 1px 0 0 !important; }
.sp-etp .content_indent .block-margin-top > input.checkbox + label { flex: 1 1 auto !important; width: auto !important; float: none !important; margin: 0 !important; font-size: 13px; line-height: 1.5; }
/* Составная строка (телефон/факс) — блок, а не grid с gap 6px: подписи нужен отступ 12px,
   чтобы вложенная таблица полей встала на уровень соседних полей (1124px при проверке). */
.sp-etp .content_indent.ds-content .ecp_form .ecp-line:not(.sp-field) > .ecp-label,
.sp-etp .content_indent.ds-content .ecp_form > .ecp-colls_wrap .ecp-line:not(.sp-field) > .ecp-label { margin: 0 0 12px !important; }


/* ── Ряды нижних кнопок страниц (2026-09-11, пп. 2–3 разбора) ─────────────
   «Подать оферту»/«Удалить оферту» (карточка оферты) и «Подписание
   договора»/«Протокол разногласий» (карточка договора) — каждая кнопка лежит
   в своём блоке div.inlineButton шириной во всю колонку, блоки шли друг под
   другом и визуально слипались. Ставим пару в ряд с зазором и центрируем.
   Группы с заголовком (h3/.inlineCardTitle — например «Предложенные условия»
   с кнопкой «Выгрузить в Excel») не трогаем: там кнопка привязана к секции. */
.sp-etp div:has(> div.inlineButton + div.inlineButton):not(:has(> h3)):not(:has(> .inlineCardTitle)) {
  text-align: center !important;
}
.sp-etp div:has(> div.inlineButton + div.inlineButton):not(:has(> h3)):not(:has(> .inlineCardTitle)) > div.inlineButton {
  display: inline-block !important;
  width: auto !important;
  margin: 0 8px 8px !important;
  vertical-align: top !important;
}

/* ── Поле выбора и подпись «Поиск:» в одной строке (12.09, п.32) ───────────
   В диалоге операции по счету вендор кладёт в первую ячейку список участников,
   а во вторую — подпись «Поиск:». Подпись занимает свою ширину, список
   получает остаток строки — наименование участника больше не обрезается. */
.sp-etp .gwt-DialogBox tr:has(> td:first-child > select) > td:first-child { width: auto !important; }
.sp-etp .gwt-DialogBox tr:has(> td:first-child > select) > td:not(:first-child):not(:has(select, input, textarea)) {
  width: 1% !important;
  white-space: nowrap !important;
}

/* source: test-overrides/ui-redesign/etp/small-purchase-country-origin.css */
/* Small purchase offer: signed country-of-origin selector (OKSM). */
.sp-ui .sp-origin-row > td {
  padding: 10px 0 14px !important;
}

.sp-ui .sp-origin {
  /* 2026-09-11: в диалоге оферты блок лежит в ячейке CellTable шириной 231px,
     а min-width:280px выпирал за неё и обрезался (td.cellTableCell:overflow
     hidden) — текст подсказки, поиск и список стран резались по горизонтали.
     Блок теперь тянется по ячейке. */
  box-sizing: border-box;
  width: 100%;
  min-width: 0;
  margin: 0;
  padding: 14px;
  border: 1px solid var(--line-soft, #d9e2f1);
  border-radius: 12px;
  background: var(--surface-soft, #f7f9fc);
}

.sp-ui .sp-origin__legend {
  padding: 0 6px;
  color: var(--ink-1000, #0c1e45);
  font-size: 14px;
  font-weight: 700;
}

.sp-ui .sp-origin__help {
  margin: 0 0 10px;
  color: var(--ink-600, #55657e);
  font-size: 12px;
  line-height: 1.45;
}

.sp-ui .sp-origin__search {
  box-sizing: border-box;
  width: 100% !important;
  min-height: 38px;
  margin: 0 0 8px;
}

.sp-ui .sp-origin__summary {
  min-height: 20px;
  margin: 0 0 8px;
  color: var(--ink-800, #263b60);
  font-size: 12px;
  line-height: 1.45;
}

.sp-ui .sp-origin--empty .sp-origin__summary {
  color: var(--ink-500, #77859c);
}

.sp-ui .sp-origin__list {
  display: grid;
  max-height: 210px;
  overflow: auto;
  border: 1px solid var(--line-soft, #d9e2f1);
  border-radius: 8px;
  background: #fff;
}

.sp-ui .sp-origin__option {
  display: flex;
  gap: 9px;
  align-items: flex-start;
  padding: 7px 10px;
  border-bottom: 1px solid var(--line-faint, #edf1f7);
  color: var(--ink-900, #172a4f);
  cursor: pointer;
  font-size: 13px;
  line-height: 1.35;
}

.sp-ui .sp-origin__option[hidden] {
  display: none;
}

.sp-ui .sp-origin__option:last-child {
  border-bottom: 0;
}

.sp-ui .sp-origin__option:hover {
  background: var(--brand-050, #f1f6ff);
}

.sp-ui .sp-origin__option input {
  flex: 0 0 auto;
  width: 16px;
  height: 16px;
  margin: 1px 0 0;
}

.sp-ui .sp-origin__error {
  margin-top: 8px;
  color: var(--danger-700, #b42318);
  font-size: 12px;
  font-weight: 600;
}

.sp-ui .sp-origin[data-invalid="true"] {
  border-color: var(--danger-500, #d92d20);
  box-shadow: 0 0 0 2px rgba(217, 45, 32, 0.12);
}

.sp-ui .sp-origin__carrier {
  display: none !important;
}

.sp-ui textarea.sp-origin__details {
  box-sizing: border-box;
  width: 100% !important;
}

@media (max-width: 700px) {
  .sp-ui .sp-origin {
    min-width: 0;
    padding: 12px;
  }

  .sp-ui .sp-origin__list {
    max-height: 180px;
  }
}

/* source: test-overrides/ui-redesign/etp/registration.css */
/* ── Регистрация участника (2026-09-12, пп.19-20 разбора) ─────────────────
   Страница /app/ParticipantAccreditation/page/ живёт в семействе
   authentication вместе с входом, и общие правила семейства показывали на ней
   левый блок «Личный кабинет». На регистрации он лишний (п.19): блок и его
   ячейка убираются, содержимое занимает всю ширину, сама форма — не шире
   1120px, чтобы поля не растягивались во весь монитор.
   Сетка формы (п.20): общее правило раскладывает ячейки вендорской таблицы в
   три колонки и прячет пустые — ряды вендора (Наименование банка | Адрес
   банка, Корр. счёт | БИК) при этом перемешивались. На регистрации колонок
   две, как в разметке вендора, пустые ячейки остаются на месте, одиночная
   ячейка занимает весь ряд. */
/* Тот же aside по кнопке «Вход/регистрация» показывается как попап
   (body:has(#lk-toggle:checked) aside.left_side, position: fixed), а на
   регистрации он остаётся внутри td.ct-left. Поэтому блок скрыт только пока
   попап не открыт, а ячейка не display:none, а схлопнута до нуля с
   overflow: visible — иначе попап не появлялся (замечание 12.09). */
body.sp-etp[data-sp-route="/app/ParticipantAccreditation/page/"]:not(:has(#lk-toggle:checked)) aside.left_side {
  display: none !important;
  visibility: hidden !important;
}
body.sp-etp[data-sp-route="/app/ParticipantAccreditation/page/"] #content_table.ds-page-table > tbody > tr > td.ct-cell.ct-left {
  width: 0 !important;
  min-width: 0 !important;
  max-width: 0 !important;
  height: 0 !important;
  padding: 0 !important;
  margin: 0 !important;
  border: 0 !important;
  overflow: visible !important;
}
body.sp-etp[data-sp-route="/app/ParticipantAccreditation/page/"] #content_table.ds-page-table {
  width: 100% !important;
  max-width: 100% !important;
  margin-left: 0 !important;
  border-spacing: 0 !important;
  table-layout: fixed !important;
}
body.sp-etp[data-sp-route="/app/ParticipantAccreditation/page/"] #content_table.ds-page-table > tbody > tr > td.ct-cell.ds-content-cell {
  width: 100% !important;
  max-width: 100% !important;
}
body.sp-etp[data-sp-route="/app/ParticipantAccreditation/page/"] .content_indent.ds-content .ecp_form { max-width: 1120px !important; }

@media (min-width: 769px) {
  body.sp-etp[data-sp-route="/app/ParticipantAccreditation/page/"] .content_indent.ds-content .ecp_form > .ecp-colls_wrap > table.ecp-colls > tbody {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
  }
  body.sp-etp[data-sp-route="/app/ParticipantAccreditation/page/"] .content_indent.ds-content .ecp_form > .ecp-colls_wrap > table.ecp-colls > tbody > tr > td.ecp-cell:not(:has(*)) {
    display: block !important;
  }
  body.sp-etp[data-sp-route="/app/ParticipantAccreditation/page/"] .content_indent.ds-content .ecp_form > .ecp-colls_wrap > table.ecp-colls > tbody > tr > td.ecp-cell:only-child:not([colspan]) {
    grid-column: 1 / -1 !important;
  }
}

/* Обязательные поля (п.20): вендорная разметка помечает подписи классом
   required, но стили пометки живут в default.css, который скин «Спецтендер»
   не грузит, — звёздочки не было нигде. Красная звёздочка после подписи, как
   на портале; то же для подписей GWT-диалогов (адрес: Страна, Регион). */
.sp-etp .ecp_form label.ecp-label.required::after,
.sp-etp .gwt-DialogBox .gwt-Label.required::after {
  content: ' *';
  color: var(--danger-600, #C8392B);
  font-size: 1.35em;
  font-weight: 700;
  line-height: 0;
  vertical-align: -0.15em;
}

/* Замечания после выпуска (12.09): пометка обязательности была едва заметна,
   тексты «Поле должно быть заполнено» и «Отсутствует» выводились тем же
   тёмным шрифтом, что и значения, — стили вендора для них живут в
   незагружаемом default.css. Ошибки проверки — красные; «Отсутствует» у
   обязательных адресов и ОКВЭД — красным как незаполненное значение. */
.sp-etp .ecp_form div[id$="ValidString"]:not(:empty),
.sp-etp .ecp_form div[id$="ValidString"] .error,
.sp-etp .ecp_form div.error:not(:empty) {
  margin-top: 6px !important;
  color: var(--danger-600, #C8392B) !important;
  font: 600 13px/1.35 var(--font-body, 'Geologica', sans-serif) !important;
}
.sp-etp #gwtSelectAddressContainer > .formCaution,
.sp-etp #gwtSelectPostalAddressContainer > .formCaution,
.sp-etp #gwtOkveds2Container > .formCaution {
  color: var(--danger-600, #C8392B) !important;
  font-weight: 600 !important;
}
/* Чекбокс перед подписью (li > input.checkbox + label): подпись стояла на
   7px ниже квадрата — в одну линию по центру. */
.sp-etp .ecp_form li:has(> input[type="checkbox"] + label),
.sp-etp .ecp_form .ecp-line:has(> input[type="checkbox"] + label) {
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
}
.sp-etp .ecp_form li:has(> input[type="checkbox"] + label) > label,
.sp-etp .ecp_form .ecp-line:has(> input[type="checkbox"] + label) > label {
  display: block !important;
  min-height: 0 !important;
  margin: 0 !important;
}
.sp-etp .ecp_form li:has(> input[type="checkbox"] + label) > input[type="checkbox"],
.sp-etp .ecp_form .ecp-line:has(> input[type="checkbox"] + label) > input[type="checkbox"] {
  flex: 0 0 auto !important;
  margin: 0 !important;
}
/* 15.09: флажок в пункте списка или строке формы с двухстрочной подписью («Субъект малого и среднего предпринимательства»,
   «Подписка на публикацию торгово-закупочных процедур» на телефоне) — на уровне первой строки, а не по середине блока. Элемент 22px, строка подписи ≈17px → сдвиг −2px. */
.sp-etp .ecp_form li:has(> input[type="checkbox"] + label),
.sp-etp .ecp_form .ecp-line:has(> input[type="checkbox"] + label) {
  align-items: flex-start !important;
}
.sp-etp .ecp_form li:has(> input[type="checkbox"] + label) > input[type="checkbox"],
.sp-etp .ecp_form .ecp-line:has(> input[type="checkbox"] + label) > input[type="checkbox"] {
  margin-top: -2px !important;
}

/* Выбор сертификата (п.19): вместо маленького селекта — кнопка, по которой
   открывается то же окно «Выбрать сертификат», что и у входа по ЭП; рядом
   название выбранного сертификата. Сам селект остаётся в разметке скрытым:
   его наполняет и читает код вендора. */
/* Замечание 12.09: иконку сведений о сертификате убрать, название выбранного —
   справа от кнопки, по центру её высоты, во всю доступную ширину (ячейка
   сертификата занимает весь ряд сетки, пустая соседняя ячейка скрыта); на
   телефоне название уходит под кнопку. */
.sp-etp #certificateInfo,
.sp-etp td.minWidth:has(> #certificateInfo) { display: none !important; }
/* Таблицу вендора вокруг селекта общий адаптер раскладывает как ряд
   «подпись | значение» (tr.sp-field — grid, первая ячейка 336px): ячейка с
   кнопкой должна занимать всю ширину блока. */
.sp-etp table:has(> tbody > tr > td > .sp-cert-picker),
.sp-etp table:has(> tbody > tr > td > .sp-cert-picker) > tbody,
.sp-etp table:has(> tbody > tr > td > .sp-cert-picker) > tbody > tr,
.sp-etp table:has(> tbody > tr > td > .sp-cert-picker) > tbody > tr > td:has(> .sp-cert-picker) {
  display: block !important;
  width: 100% !important;
  min-width: 0 !important;
  max-width: 100% !important;
  padding: 0 !important;
}
.sp-etp .sp-cert-picker {
  display: flex !important;
  flex-wrap: nowrap !important;
  align-items: center !important;
  gap: 10px 16px !important;
  min-height: 44px !important;
}
@media (min-width: 769px) {
  body.sp-etp[data-sp-route="/app/ParticipantAccreditation/page/"] .content_indent.ds-content .ecp_form > .ecp-colls_wrap > table.ecp-colls > tbody > tr > td.ecp-cell:has(> .ecp-line > #certificateLabel) {
    grid-column: 1 / -1 !important;
  }
  body.sp-etp[data-sp-route="/app/ParticipantAccreditation/page/"] .content_indent.ds-content .ecp_form > .ecp-colls_wrap > table.ecp-colls > tbody > tr > td.ecp-cell:has(> .ecp-line > #certificateLabel) + td.ecp-cell:not(:has(*)) {
    display: none !important;
  }
}
@media (max-width: 768px) {
  .sp-etp .sp-cert-picker { flex-wrap: wrap !important; }
  .sp-etp .sp-cert-picker__chosen { flex-basis: 100% !important; }
}
.sp-etp .sp-cert-picker__button {
  flex: 0 0 auto !important;
  min-height: 40px !important;
  padding: 0 18px !important;
  border: 0 !important;
  border-radius: var(--r-md, 10px) !important;
  background: var(--brand-blue-600, #0553C7) !important;
  color: #fff !important;
  font: 700 14px/1.2 var(--font-body, 'Geologica', sans-serif) !important;
  cursor: pointer !important;
}
.sp-etp .sp-cert-picker__button:hover { background: var(--brand-blue-700, #0442A3) !important; }
.sp-etp .sp-cert-picker__button:focus-visible { outline: 2px solid var(--brand-blue-600, #0553C7) !important; outline-offset: 2px !important; }
.sp-etp .sp-cert-picker__chosen {
  flex: 1 1 auto !important;
  min-width: 0 !important;
  color: var(--ink-1000, #0A0E17) !important;
  font: 600 14px/1.4 var(--font-body, 'Geologica', sans-serif) !important;
  overflow-wrap: anywhere !important;
}
.sp-etp .sp-cert-picker__chosen--empty {
  color: var(--ink-500, #5E7A90) !important;
  font-weight: 500 !important;
}
.sp-etp select.sp-cert-picker__select {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  margin: -1px !important;
  padding: 0 !important;
  border: 0 !important;
  overflow: hidden !important;
  clip: rect(0 0 0 0) !important;
  white-space: nowrap !important;
}
.sp-etp #win #certificatesSelect {
  width: 100% !important;
  min-height: 160px !important;
  padding: 4px !important;
  border: 1px solid var(--ink-100, #E3EAF2) !important;
  border-radius: var(--r-md, 10px) !important;
  font: 500 14px/1.4 var(--font-body, 'Geologica', sans-serif) !important;
}
.sp-etp #win #certificatesSelect option { padding: 8px 10px !important; border-radius: 6px !important; }

/* Страница «Регистрация пройдена» (RegistrationDone, оба маршрута) и список
   «Аккредитация участников» оператора (AdminAccreditation; карта маршрутов
   относит его к семейству входа, и семейство показывало боковую панель) —
   боковая панель «Личный кабинет» не нужна (замечания 12.09): те же правила,
   что на регистрации — aside скрыт, пока не открыт попап входа, ячейка
   схлопнута, содержимое во всю ширину. */
body.sp-etp:is([data-sp-route="/app/RegistrationDone/page/"], [data-sp-route="/app/spectender/RegistrationDone/page/"], [data-sp-route="/app/AdminAccreditation/page/"]):not(:has(#lk-toggle:checked)) aside.left_side {
  display: none !important;
  visibility: hidden !important;
}
body.sp-etp:is([data-sp-route="/app/RegistrationDone/page/"], [data-sp-route="/app/spectender/RegistrationDone/page/"], [data-sp-route="/app/AdminAccreditation/page/"]) #content_table.ds-page-table {
  width: 100% !important;
  max-width: 100% !important;
  margin-left: 0 !important;
  border-spacing: 0 !important;
  table-layout: fixed !important;
}
body.sp-etp:is([data-sp-route="/app/RegistrationDone/page/"], [data-sp-route="/app/spectender/RegistrationDone/page/"], [data-sp-route="/app/AdminAccreditation/page/"]) #content_table.ds-page-table > tbody > tr > td.ct-cell.ct-left {
  width: 0 !important;
  min-width: 0 !important;
  max-width: 0 !important;
  height: 0 !important;
  padding: 0 !important;
  margin: 0 !important;
  border: 0 !important;
  overflow: visible !important;
}
body.sp-etp:is([data-sp-route="/app/RegistrationDone/page/"], [data-sp-route="/app/spectender/RegistrationDone/page/"], [data-sp-route="/app/AdminAccreditation/page/"]) #content_table.ds-page-table > tbody > tr > td.ct-cell.ds-content-cell {
  width: 100% !important;
  max-width: 100% !important;
}

/* ── Календарь вендора (div.calendar) ────────────────────────────────────
   Шапку (кнопки «<<»/«>>», селекты месяца и года) адаптер форм больше не
   размечает как строку «подпись | значение»; на случай уже размеченного
   узла — строгий сброс раскладки. Кнопки и селекты в шапке компактные. */
.sp-etp .calendar tr.sp-field,
.sp-etp .calendar tr { display: table-row !important; grid-template-columns: none !important; gap: 0 !important; }
.sp-etp .calendar tr.sp-field > td,
.sp-etp .calendar tr > td { display: table-cell !important; width: auto !important; padding: 2px 3px !important; vertical-align: middle !important; }
.sp-etp .calendar { width: 312px !important; max-width: calc(100vw - 32px) !important; box-sizing: border-box !important; }
.sp-etp .calendar .calendarHeader table,
.sp-etp .calendar .footerTable,
.sp-etp .calendar table.grid { width: 100% !important; }
.sp-etp .calendar .calendarHeader button {
  min-height: 32px !important;
  height: 32px !important;
  padding: 0 10px !important;
  font-size: 12px !important;
  line-height: 1 !important;
  white-space: nowrap !important;
}
.sp-etp .calendar .calendarHeader select {
  width: auto !important;
  min-width: 0 !important;
  height: 32px !important;
  min-height: 32px !important;
  padding: 0 24px 0 8px !important;
  font-size: 13px !important;
}
.sp-etp .calendar .calendarHeader tr > td:first-child,
.sp-etp .calendar .calendarHeader tr > td:last-child { width: 1% !important; white-space: nowrap !important; }
.sp-etp .calendar .calendarHeader tr > td:last-child { text-align: right !important; }
.sp-etp .calendar .calendarHeader td.labelContainer { width: auto !important; text-align: center !important; white-space: nowrap !important; }
.sp-etp .calendar .footerTable button { min-height: 34px !important; }

/* ── Карточки таблиц на узкой ширине: кнопки действий одной ширины ─────────
   В карточке «Заявки на аккредитацию» кнопка GWT («Подать заявку») была по
   содержимому, а «Удалить» — во всю ширину (замечание 12.09). Все кнопки
   действий в ячейках карточек — во всю ширину ячейки. */
@media (max-width: 768px) {
  .sp-etp .sp-table--data td div.inlineButton,
  .sp-etp .sp-table--data td div.inlineButton > .gwt-Label,
  .sp-etp .sp-table--data td .gwt-Label.rec-go,
  .sp-etp .sp-table--data td a.rec-go,
  .sp-etp .sp-table--data td span.rec-go,
  .sp-etp .sp-table--data td button.gwt-Button,
  .sp-etp .sp-table--data td input[type="submit"],
  .sp-etp .sp-table--data td input[type="button"] {
    display: block !important;
    width: 100% !important;
    max-width: 100% !important;
    margin: 0 0 8px !important;
    box-sizing: border-box !important;
    text-align: center !important;
  }
  .sp-etp .sp-table--data td div.inlineButton > .gwt-Label,
  .sp-etp .sp-table--data td .gwt-Label.rec-go { margin: 0 !important; }
}

/* ── Диалог GWT: лишние полосы прокрутки ───────────────────────────────────
   «Добавить файлы к документу?»: вертикальная полоса от inline-высоты
   ScrollPanel вендора при окне, которому есть куда расти, и горизонтальная от
   содержимого шириной 100% + отступы. Область содержимого растёт до потолка
   окна и только потом прокручивается; по горизонтали на десктопе ничего не
   прокручиваем, содержимое держим в ширине окна. */
@media (min-width: 769px) {
  .sp-etp .gwt-DialogBox .dialogContent { overflow-x: hidden !important; }
  .sp-etp .gwt-DialogBox .dialogContent > table > tbody:has(> tr > td > .formButtonsPanel) > tr:first-child > td > div[style*="overflow"] {
    height: auto !important;
    max-height: none !important;
  }
  .sp-etp .gwt-DialogBox .dialogContent table,
  .sp-etp .gwt-DialogBox .dialogContent input[type="text"],
  .sp-etp .gwt-DialogBox .dialogContent input[type="file"],
  .sp-etp .gwt-DialogBox .dialogContent select,
  .sp-etp .gwt-DialogBox .dialogContent textarea { max-width: 100% !important; box-sizing: border-box !important; }
  .sp-etp .gwt-DialogBox .dialogContent td { min-width: 0 !important; }
}

/* Заголовок-плашка h1.inlineCardTitle рассчитан на карточку с отступами 20px
   (margin: 0 -20px) — на странице «Аккредитация участников» он стоит прямо в
   .content_indent и выступал за колонку на 20px с каждой стороны (в узкой
   колонке — обрезался). Вне карточки поля обнуляем. */
.sp-etp .content_indent > .heading > h1.inlineCardTitle,
.sp-etp .content_indent > h1.inlineCardTitle {
  margin-left: 0 !important;
  margin-right: 0 !important;
  border-radius: var(--r-md, 10px) !important;
}

/* source: test-overrides/ui-redesign/etp/tables.css */
.sp-etp .sp-table--layout { width: 100%; max-width: 100%; border-collapse: collapse; }
.sp-etp .sp-table--form { width: 100%; border-collapse: separate; border-spacing: 0 8px; }
.sp-etp .sp-table-scroll { max-width: 100%; overflow: auto; border: 1px solid var(--ink-100); border-radius: var(--r-md); background: #fff; }
.sp-etp .sp-table--data, .sp-etp .sp-table--matrix { width: 100%; border-collapse: collapse; background: #fff; }
.sp-etp .sp-table--data th, .sp-etp .sp-table--matrix th { padding: 12px 14px; background: var(--surface-subtle); color: var(--ink-700); font-size: 13px; text-align: left; }
.sp-etp .sp-table--data td, .sp-etp .sp-table--matrix td { min-width: 0; padding: 12px 14px; border-top: 1px solid var(--ink-100); vertical-align: top; overflow-wrap: break-word; }
.sp-etp .sp-table--data tbody tr:hover { background: var(--brand-blue-050); }

/* SearchLots keeps a three-column legacy table even after the side panels are
   visually collapsed. Fixed table layout therefore reserved one third of the
   content width for every historical column. The form adapter also marks the
   one-cell query row as a generic two-column field. Reset only that desktop
   search composition; mobile data tables continue to use the card rules. */
@media (min-width: 769px) {
  .sp-etp table.searchPanel.sp-table--layout { table-layout: auto !important; }
  .sp-etp table.searchPanel .queryFieldLayout tr.sp-field,
  .sp-etp table.searchPanel .queryFieldLayout tr.sp-field > td {
    width: 100% !important;
    max-width: 100% !important;
  }
}
@media (min-width: 769px) and (max-width: 1024px) {
  .sp-etp table.searchPanel .queryFieldLayout tr.sp-field,
  .sp-etp table.searchPanel .queryFieldLayout tr.sp-field > td {
    display: block !important;
  }
}
@media (min-width: 1025px) {
  .sp-etp table.searchPanel .queryFieldLayout tr.sp-field {
    display: table-row !important;
  }
  .sp-etp table.searchPanel .queryFieldLayout tr.sp-field > td {
    display: table-cell !important;
  }
}

/* ── One data-table header for the whole ETP ─────────────────────────────
   `table.styled.list_table th` in the ported legacy stylesheet still painted a
   navy header, so registry and cabinet lists looked different from the search
   results. Every classified data table now uses the DS v2.5.0 table header. */
.sp-etp table.sp-table--data > thead > tr > th,
.sp-etp table.sp-table--data > tbody > tr > th,
.sp-etp table.sp-table--data th.cellTableHeader,
.sp-etp table.styled.list_table.sp-table--data th,
.sp-etp table.list_table.sp-table--data > thead > tr > th {
  padding: 12px 14px !important;
  border: 0 !important;
  border-bottom: 1px solid var(--ink-100) !important;
  background: var(--ink-050) !important;
  color: var(--ink-700) !important;
  font-family: var(--font-body) !important;
  font-size: 11px !important;
  /* 14.09.2026 по просьбе пользователя: подписи колонок по центру ячейки
     (и по горизонтали, и по вертикали) и чуть жирнее — 800 вместо 700
     (начертание самохостится, см. core/fonts.css). */
  font-weight: 800 !important;
  letter-spacing: .06em !important;
  line-height: 1.35 !important;
  text-transform: uppercase !important;
  text-align: center !important;
  vertical-align: middle !important;
  white-space: normal !important;
  overflow: visible !important;
  text-overflow: clip !important;
}
.sp-etp table.sp-table--data th a,
.sp-etp table.styled.list_table.sp-table--data th a { color: var(--brand-blue-700) !important; }
.sp-etp table.sp-table--data th.cellTableHeader .gwt-Label,
.sp-etp table.sp-table--data th.cellTableHeader div { white-space: normal !important; overflow: visible !important; text-overflow: clip !important; }

/* Procedure type: the legacy widget is an empty coloured pill. Show the human
   readable value inside data tables on every width. */
/* ── Procedure type: icon chip with a design-system tooltip ──────────────
   The legacy widget is an empty coloured pill whose only readable value is
   the title attribute. Long names ("Закупки коммерческих предприятий")
   wrapped to four lines and blew up the row height. The type now reads as a
   compact icon in its own semantic colour; the full name appears in a
   tooltip on hover/focus (and stays in aria-label for assistive tech). */
.sp-etp .sp-table--data .offerType.sp-offer-type--empty {
  position: relative !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  box-sizing: border-box !important;
  width: 32px !important;
  min-width: 32px !important;
  max-width: 32px !important;
  height: 32px !important;
  min-height: 32px !important;
  padding: 0 !important;
  border-radius: var(--r-sm, 6px) !important;
  cursor: help !important;
}
.sp-etp .sp-table--data .offerType.sp-offer-type--empty::before {
  content: '';
  width: 18px;
  height: 18px;
  background-color: currentColor;
  -webkit-mask-position: center;
  mask-position: center;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M14%203H7a2%202%200%200%200-2%202v14a2%202%200%200%200%202%202h10a2%202%200%200%200%202-2V8z'/%3E%3Cpath%20d='M14%203v5h5'/%3E%3Cpath%20d='M9%2013h6M9%2017h4'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M14%203H7a2%202%200%200%200-2%202v14a2%202%200%200%200%202%202h10a2%202%200%200%200%202-2V8z'/%3E%3Cpath%20d='M14%203v5h5'/%3E%3Cpath%20d='M9%2013h6M9%2017h4'/%3E%3C/svg%3E");
}
.sp-etp .sp-table--data .offerType.sp-offer-type--empty.buying::before { -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Ccircle%20cx='9'%20cy='20'%20r='1.4'/%3E%3Ccircle%20cx='18'%20cy='20'%20r='1.4'/%3E%3Cpath%20d='M2%203h2.2l2.6%2012.2h11.4l2.3-8.4H6.2'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Ccircle%20cx='9'%20cy='20'%20r='1.4'/%3E%3Ccircle%20cx='18'%20cy='20'%20r='1.4'/%3E%3Cpath%20d='M2%203h2.2l2.6%2012.2h11.4l2.3-8.4H6.2'/%3E%3C/svg%3E"); }
.sp-etp .sp-table--data .offerType.sp-offer-type--empty.sale::before { -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M20.6%2012.7l-7.9%207.9a2%202%200%200%201-2.8%200l-6.5-6.5a2%202%200%200%201-.6-1.4V4.5a1.5%201.5%200%200%201%201.5-1.5h8.2c.5%200%201%20.2%201.4.6l6.7%206.7a2%202%200%200%201%200%202.4z'/%3E%3Ccircle%20cx='8'%20cy='8'%20r='1.5'%20fill='black'%20stroke='none'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M20.6%2012.7l-7.9%207.9a2%202%200%200%201-2.8%200l-6.5-6.5a2%202%200%200%201-.6-1.4V4.5a1.5%201.5%200%200%201%201.5-1.5h8.2c.5%200%201%20.2%201.4.6l6.7%206.7a2%202%200%200%201%200%202.4z'/%3E%3Ccircle%20cx='8'%20cy='8'%20r='1.5'%20fill='black'%20stroke='none'/%3E%3C/svg%3E"); }
.sp-etp .sp-table--data .offerType.sp-offer-type--empty.rfi::before { -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Ccircle%20cx='11'%20cy='11'%20r='7'/%3E%3Cpath%20d='M20%2020l-3.6-3.6'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Ccircle%20cx='11'%20cy='11'%20r='7'/%3E%3Cpath%20d='M20%2020l-3.6-3.6'/%3E%3C/svg%3E"); }
/* Строка фильтров состояния и сортировки шла впритык к полю поиска —
   замер давал зазор ровно 0px.
   Отступ ставится на строку, где лежат И чипы, И «Упорядочить по»: это одна
   строка вложенной таблицы внутри .queryPanel. Двумя итерациями до этого:
   margin на обёртке чипов сдвигал только их (сортировка — соседний блок той
   же строки), а падинг на строке ВНЕШНЕЙ таблицы searchPanel уезжал вместе с
   полем поиска, потому что поле лежит в той же внешней строке. Верный
   уровень — .queryPanel > table, где ровно две строки: поле и фильтры.
   У ячеек margin не работает, поэтому padding-top. Потомок строго прямой:
   без '>' селектор ловил две вложенные таблицы сразу и давал 32px. */
.sp-etp .queryPanel > table > tbody > tr:has(.filterContainer) > td {
  padding-top: 16px !important;
}

/* ── Значок типа торгов: три вида по требованию заказчика ───────────────
   Вид определяется в overlays.js по enum SearchTableRow.OfferType: класс
   sale/buying даёт семейство, подпись отличает малую закупку. Заказчик
   закрепил три типа, поэтому «Запрос информации» сведён в закупку.
   Классы sp-offer-kind--* специфичнее легаси buying/sale/rfi выше,
   поэтому перекрывают их независимо от порядка в бандле. */
/* малая закупка — корзина */
.sp-etp .sp-table--data .offerType.sp-offer-type--empty.sp-offer-kind--small::before {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M3%209h18l-1.7%209.2a2%202%200%200%201-2%201.8H6.7a2%202%200%200%201-2-1.8z'/%3E%3Cpath%20d='M8.5%209L12%203l3.5%206'/%3E%3Cpath%20d='M10%2013v3'/%3E%3Cpath%20d='M14%2013v3'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M3%209h18l-1.7%209.2a2%202%200%200%201-2%201.8H6.7a2%202%200%200%201-2-1.8z'/%3E%3Cpath%20d='M8.5%209L12%203l3.5%206'/%3E%3Cpath%20d='M10%2013v3'/%3E%3Cpath%20d='M14%2013v3'/%3E%3C/svg%3E");
}
/* закупка — тележка */
.sp-etp .sp-table--data .offerType.sp-offer-type--empty.sp-offer-kind--buy::before {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Ccircle%20cx='9'%20cy='20'%20r='1.4'/%3E%3Ccircle%20cx='18'%20cy='20'%20r='1.4'/%3E%3Cpath%20d='M2%203h2.2l2.6%2012.2h11.4l2.3-8.4H6.2'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Ccircle%20cx='9'%20cy='20'%20r='1.4'/%3E%3Ccircle%20cx='18'%20cy='20'%20r='1.4'/%3E%3Cpath%20d='M2%203h2.2l2.6%2012.2h11.4l2.3-8.4H6.2'/%3E%3C/svg%3E");
}
/* продажа — ярлык */
.sp-etp .sp-table--data .offerType.sp-offer-type--empty.sp-offer-kind--sale::before {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M20.6%2012.7l-7.9%207.9a2%202%200%200%201-2.8%200l-6.5-6.5a2%202%200%200%201-.6-1.4V4.5a1.5%201.5%200%200%201%201.5-1.5h8.2c.5%200%201%20.2%201.4.6l6.7%206.7a2%202%200%200%201%200%202.4z'/%3E%3Ccircle%20cx='8'%20cy='8'%20r='1.5'%20fill='black'%20stroke='none'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M20.6%2012.7l-7.9%207.9a2%202%200%200%201-2.8%200l-6.5-6.5a2%202%200%200%201-.6-1.4V4.5a1.5%201.5%200%200%201%201.5-1.5h8.2c.5%200%201%20.2%201.4.6l6.7%206.7a2%202%200%200%201%200%202.4z'/%3E%3Ccircle%20cx='8'%20cy='8'%20r='1.5'%20fill='black'%20stroke='none'/%3E%3C/svg%3E");
}

/* анализ рынка (backend: Запрос информации) — лупа */
.sp-etp .sp-table--data .offerType.sp-offer-type--empty.sp-offer-kind--rfi::before {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Ccircle%20cx='11'%20cy='11'%20r='7'/%3E%3Cpath%20d='M20%2020l-3.6-3.6'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='black'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Ccircle%20cx='11'%20cy='11'%20r='7'/%3E%3Cpath%20d='M20%2020l-3.6-3.6'/%3E%3C/svg%3E");
}

/* Desktop: the caption is carried by the floating tooltip layer (see
   .sp-floating-tip) because anything positioned inside the table is cropped
   by its scroll container and row boundaries. The in-cell span stays for the
   phone layout, hidden here. */
.sp-etp .sp-table--data .offerType.sp-offer-type--empty .sp-offer-type__label {
  position: absolute !important;
  clip: rect(0 0 0 0) !important;
  clip-path: inset(50%) !important;
  width: 1px !important;
  height: 1px !important;
  overflow: hidden !important;
  white-space: nowrap !important;
}

/* ── Long values must not inflate row height ─────────────────────────────
   Organiser / customer names run to 100+ characters; clamped to three lines
   (two on phones) with the full text still reachable via the cell title. */
.sp-etp .sp-table--data td.sp-cell--clamp > div {
  display: -webkit-box !important;
  -webkit-box-orient: vertical !important;
  -webkit-line-clamp: 3 !important;
  line-clamp: 3 !important;
  overflow: hidden !important;
  overflow-wrap: anywhere !important;
}
/* Сама ячейка остаётся table-cell: display: -webkit-box на td не применяется, и обрезка
   шла по высоте с половиной строки (карта дефектов UI, 2026-09-03). */
.sp-etp .sp-table--data td.sp-cell--clamp { overflow-wrap: anywhere !important; }

/* ── Колонка «Организатор» — название целиком (решение пользователя 14.09.2026) ──
   Было: колонка 160 px, три строки с обрезкой и подсказка с полным названием.
   Стало: колонка шире за счёт «Предмета торгов», текст переносится и виден весь,
   подсказки нет (её снимает tables.js). Строка растёт под самое длинное название.
   Колонки помечает tables.js по заголовку (data-sp-col), а не по номеру: порядок
   колонок у вендора менялся. */
.sp-etp .sp-table--data td[data-sp-col='org'] {
  white-space: normal !important;
  overflow: visible !important;
  overflow-wrap: anywhere !important;
}
.sp-etp .sp-table--data td[data-sp-col='org'] > div {
  display: block !important;
  -webkit-line-clamp: none !important;
  line-clamp: none !important;
  overflow: visible !important;
}

/* Empty list message rendered by Tapestry lists. */
.sp-etp .tableObjectsNotFound,
.sp-etp .line-margin-top > .tableObjectsNotFound {
  display: grid !important;
  place-items: center !important;
  gap: 6px !important;
  margin: 8px 0 16px !important;
  padding: 32px 20px !important;
  border: 1px dashed var(--ink-200) !important;
  border-radius: var(--r-md) !important;
  background: var(--surface-card) !important;
  color: var(--ink-500) !important;
  font-size: 14px !important;
  text-align: center !important;
}
@media (min-width: 769px) {
  /* GWT CellTable uses table-layout: fixed; Chromium sizes such columns from
     the <col> elements, not from the header cells — a width on th alone is
     ignored here.
     140px dated from when this column showed the type as text. It now shows a
     32x32 icon, so the column only needs the icon plus air; the width it gives
     back goes to «Наименование», which was the column short of room. */
  .sp-etp table.sp-table--data[data-sp-type-column='first'] > colgroup > col:first-child,
  .sp-etp table.sp-table--data[data-sp-type-column='first'] > thead > tr > th:first-child { width: 64px !important; }

  /* «Организатор» вместо 160 px получает пятую часть ширины, чтобы название
     помещалось целиком; место отдаёт «Предмет торгов» — у него остаётся втрое
     больше, чем нужно строке-ссылке (решение пользователя 14.09.2026).
     В fixed-раскладке ширину берут <col> и ячейки первой строки — задаём обе. */
  .sp-etp table.sp-table--data > colgroup > col[data-sp-col='subject'],
  .sp-etp table.sp-table--data > thead > tr > th[data-sp-col='subject'] { width: 25.5% !important; }
  .sp-etp table.sp-table--data > colgroup > col[data-sp-col='org'],
  .sp-etp table.sp-table--data > thead > tr > th[data-sp-col='org'] { width: 26% !important; }

  /* Короткие значения — по центру колонки (просьба пользователя 14.09.2026):
     вид процедуры, НМЦД, обе даты. Только по горизонтали: по вертикали строка
     остаётся прижатой к верху, иначе в высокой строке (длинное название
     организатора) дата уезжала бы к середине и ряды читались бы вразнобой.
     Колонки помечает tables.js по подписи заголовка (data-sp-col).
     Правило только для широких экранов: на телефоне таблица — карточки, там
     каждое значение стоит под своей подписью слева. */
  .sp-etp table.sp-table--data > tbody > tr > td[data-sp-col='kind'],
  .sp-etp table.sp-table--data > tbody > tr > td[data-sp-col='price'],
  .sp-etp table.sp-table--data > tbody > tr > td[data-sp-col='published'],
  .sp-etp table.sp-table--data > tbody > tr > td[data-sp-col='deadline'] { text-align: center !important; }
}
@media (min-width: 769px) and (max-width: 1199px) {
  /* Планшет: колонка тоже только под значок. Прежнее правило разжимало чип
     под текстовую подпись — на этих ширинах она давно sr-only (её несёт
     плавающая подсказка), и padding/font-size только искажали бы значок. */
  .sp-etp table.sp-table--data[data-sp-type-column='first'] > colgroup > col:first-child,
  .sp-etp table.sp-table--data[data-sp-type-column='first'] > thead > tr > th:first-child { width: 64px !important; }
  .sp-etp table.cellTableWidget.sp-table--data > thead > tr > th,
  .sp-etp table.cellTableWidget.sp-table--data > tbody > tr > td { padding-inline: 10px !important; }
  .sp-etp table.cellTableWidget.sp-table--data > thead > tr > th { font-size: 10px !important; letter-spacing: .03em !important; }
  .sp-etp table.cellTableWidget.sp-table--data > tbody > tr > td.sp-cell--date { padding-inline: 6px 4px !important; font-size: 12px !important; }
}

/* ── Key/value info tables (procedure cards, certificate check) ─────────
   The legacy label column was nowrap + 240px; on narrow screens the value
   column was clipped to a few letters. Labels may wrap on desktop, and on
   phones every pair becomes a stacked label → value block. */
.sp-etp table.info_table > tbody > tr > td:first-child {
  width: 280px !important;
  max-width: 40% !important;
  white-space: normal !important;
  overflow-wrap: break-word;
}
@media (max-width: 768px) {
  .sp-etp table.info_table.sp-table--form,
  .sp-etp table.info_table.sp-table--form > tbody {
    display: block !important;
    width: 100% !important;
    max-width: 100% !important;
    border-spacing: 0 !important;
  }
  .sp-etp table.info_table.sp-table--form > tbody > tr:not([style*='display:none']):not([style*='display: none']) {
    display: grid !important;
    grid-template-columns: minmax(0, 1fr) !important;
    gap: 4px !important;
    width: 100% !important;
    padding: 10px 14px !important;
    border-bottom: 1px solid var(--ink-100) !important;
    box-sizing: border-box !important;
  }
  .sp-etp table.info_table.sp-table--form > tbody > tr:last-child { border-bottom: 0 !important; }
  .sp-etp table.info_table.sp-table--form > tbody > tr > th,
  .sp-etp table.info_table.sp-table--form > tbody > tr > td {
    display: block !important;
    width: 100% !important;
    min-width: 0 !important;
    max-width: 100% !important;
    padding: 0 !important;
    border: 0 !important;
    background: transparent !important;
    white-space: normal !important;
    overflow-wrap: anywhere;
    box-sizing: border-box !important;
  }
  .sp-etp table.info_table.sp-table--form > tbody > tr > td:first-child:not(:only-child),
  .sp-etp table.info_table.sp-table--form > tbody > tr > th:first-child:not(:only-child) {
    color: var(--ink-500) !important;
    font-size: 12px !important;
    font-weight: 600 !important;
    line-height: 1.35 !important;
  }
  .sp-etp table.info_table.sp-table--form > tbody > tr > td[width='100%'] { width: 100% !important; }
}
@media (min-width: 769px) {
  .sp-etp .sp-table--data td.sp-cell--date,
  .sp-etp .sp-table--data td.sp-cell--date > * { overflow-wrap: normal !important; word-break: keep-all !important; }
}

/* GWT's loading row survives in the DOM once the results arrive. Two extra
   classes outrank the phone rule that turns every row into a card, so the
   spinner card disappears as soon as the table has real rows — and comes back
   for a genuine load, when it is the only row left. */
.sp-etp .sp-table--data tbody tr.sp-row--loading.sp-row--idle {
  display: none !important;
}

/* Колонка «Тип» несёт только значок 32×32, но GWT раздавал ей 140px наравне
   с текстовыми колонками. Сужаем до значка с воздухом; ширина отдаётся
   «Наименованию», которому её не хватало. Только на десктопе — на телефоне
   строки превращаются в карточки, и колонок там нет. */
@media (min-width: 769px) {
  .sp-etp table.sp-table--data > thead > tr > th:first-child,
  .sp-etp table.sp-table--data > tbody > tr > td[data-label="Тип"]:not([colspan]) {
    padding-left: 10px !important;
    padding-right: 10px !important;
    text-align: center !important;
  }
  .sp-etp table.sp-table--data > tbody > tr > td[data-label="Тип"]:not([colspan]) > div {
    display: flex !important;
    justify-content: center !important;
  }
}

/* ── Плавающая полоса прокрутки (2026-09-03) ──────────────────────────────
   Широкая таблица в карточке обрезалась по краю без признака прокрутки (накладная полоса
   Chromium видна только при наведении). Как на портале: у нижней кромки окна висит
   полоса-дублёр .sp-table-scrollbar, синхронная с обёрткой; плюс тонкая полоса у обёртки. */
/* вид полосы (толщина, цвет) — общее правило core/components.css и токены --sp-scrollbar-* (15.09) */
/* Край, за которым таблица продолжается, затухает (Реестр участников, 15.09): иначе рамка
   резала заголовок «Представитель» на полуслове и таблица выглядела обрезанной. Классы
   ставит tables.js по scrollLeft; на телефоне таблица — карточки, прокрутки нет. */
@media (min-width: 769px) {
  /* первый слой маски — полоса прокрутки внизу обёртки: её не затухаем (ползунок у края остаётся ярким) */
  .sp-etp .sp-table-scroll--data:is(.sp-table-scroll--more-end, .sp-table-scroll--more-start) { -webkit-mask-size: 100% var(--sp-scrollbar-size, 16px), 100% 100%; mask-size: 100% var(--sp-scrollbar-size, 16px), 100% 100%; -webkit-mask-position: left bottom, 0 0; mask-position: left bottom, 0 0; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; }
  .sp-etp .sp-table-scroll--data.sp-table-scroll--more-end { -webkit-mask-image: linear-gradient(#000, #000), linear-gradient(to left, transparent 0, #000 48px); mask-image: linear-gradient(#000, #000), linear-gradient(to left, transparent 0, #000 48px); }
  .sp-etp .sp-table-scroll--data.sp-table-scroll--more-start { -webkit-mask-image: linear-gradient(#000, #000), linear-gradient(to right, transparent 0, #000 48px); mask-image: linear-gradient(#000, #000), linear-gradient(to right, transparent 0, #000 48px); }
  .sp-etp .sp-table-scroll--data.sp-table-scroll--more-start.sp-table-scroll--more-end { -webkit-mask-image: linear-gradient(#000, #000), linear-gradient(to right, transparent 0, #000 48px, #000 calc(100% - 48px), transparent 100%); mask-image: linear-gradient(#000, #000), linear-gradient(to right, transparent 0, #000 48px, #000 calc(100% - 48px), transparent 100%); }
}
.sp-etp .sp-table-scrollbar { position: fixed; bottom: 0; z-index: 40; display: none; height: var(--sp-scrollbar-size, 16px); overflow-x: auto; overflow-y: hidden; background: rgba(255,255,255,.94); box-shadow: 0 -1px 0 var(--ink-100, #E2EAF3); }
.sp-etp .sp-table-scrollbar > div { height: 1px; }
/* Таблица-каркас страницы (width:100% + внешние отступы) не шире окна */
.sp-etp table#content_table.ds-page-table { width: -webkit-fill-available !important; width: -moz-available !important; width: stretch !important; max-width: 100% !important; }


/* ── Широкие списки (9+ колонок) без лишней горизонтальной полосы (12.09, п.34) ──
   «Реестр заявок на участие»: девять колонок с датами не помещались в контейнер
   буквально на два десятка пикселей, и под таблицей появлялась полоса прокрутки.
   На больших ширинах ужимаем боковые поля ячеек — содержимое влезает целиком. */
@media (min-width: 1200px) {
  .sp-etp table.sp-table--data:has(> thead > tr > th:nth-child(9)) > thead > tr > th,
  .sp-etp table.sp-table--data:has(> thead > tr > th:nth-child(9)) > tbody > tr > td,
  .sp-etp table.list_table:has(> tbody > tr > th:nth-child(9)) > tbody > tr > th,
  .sp-etp table.list_table:has(> tbody > tr > th:nth-child(9)) > tbody > tr > td { padding-inline: 8px !important; }
}

/* source: test-overrides/ui-redesign/etp/overlays.css */
.sp-etp .sp-dialog { max-width: min(720px, calc(100vw - 32px)); max-height: calc(100vh - 32px); overflow: auto; border: 0; border-radius: var(--r-lg); background: #fff; box-shadow: var(--shadow-lg); }
.sp-etp .sp-date { min-height: 44px; border-radius: var(--r-sm); }
.sp-etp .sp-upload { max-width: 100%; min-height: 44px; padding: 10px; border: 1px dashed var(--brand-blue-300); border-radius: var(--r-md); background: var(--brand-blue-050); }
.sp-etp .sp-pagination { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-block: 16px; }
.sp-etp .sp-pagination a, .sp-etp .sp-pagination button { display: inline-grid; place-items: center; min-width: 44px; min-height: 44px; border: 1px solid var(--ink-200); border-radius: var(--r-sm); }
.sp-etp .sp-status { display: inline-flex; align-items: center; width: fit-content; min-height: 26px; padding: 2px 9px; border-radius: var(--r-pill); background: var(--surface-muted); color: var(--ink-700); font-size: 13px; font-weight: 700; }
.sp-etp .offerType .sp-offer-type__label { display: none; }

/* GWT keeps the closed filter in normal table flow. Collapse it without
   removing it from the accessibility tree or preventing a later open. */
.sp-etp #nmck-filter-td { width: 0 !important; min-width: 0 !important; max-width: 0 !important; padding: 0 !important; border: 0 !important; overflow: visible !important; }
.sp-etp #nmck-filter-panel.filterPanel { position: absolute !important; display: block !important; width: 1px !important; min-width: 1px !important; max-width: 1px !important; height: 1px !important; min-height: 1px !important; max-height: 1px !important; margin: -1px !important; padding: 0 !important; overflow: hidden !important; clip: rect(0 0 0 0) !important; clip-path: inset(50%) !important; visibility: hidden !important; pointer-events: none !important; border: 0 !important; }
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-td { display: table-cell !important; visibility: visible !important; pointer-events: auto !important; overflow: visible !important; }
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel { position: fixed !important; top: calc(32px + 72px + 12px) !important; left: 50% !important; right: auto !important; display: block !important; width: min(1100px, calc(100vw - 64px)) !important; min-width: 0 !important; max-width: calc(100vw - 64px) !important; height: auto !important; min-height: 0 !important; max-height: calc(100vh - 130px) !important; margin: 0 !important; padding: 16px 20px !important; overflow-x: hidden !important; overflow-y: auto !important; clip: auto !important; clip-path: none !important; visibility: visible !important; pointer-events: auto !important; transform: translateX(-50%) !important; }
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel .sp-filter-header { position: sticky; top: 0; z-index: 2; display: flex !important; align-items: center; justify-content: space-between; width: 100%; margin: 0 0 12px; padding: 0 0 10px; border-bottom: 1px solid var(--ink-100); background: #fff; text-align: left; box-sizing: border-box; }
.sp-etp .sp-filter-title { color: var(--ink-1000); font-family: var(--font-display); font-size: 16px; font-weight: 750; }
.sp-etp .sp-filter-close { display: inline-grid; place-items: center; flex: 0 0 44px; width: 44px; height: 44px; margin: 0; padding: 0; border: 1px solid var(--ink-200); border-radius: var(--r-sm); background: #fff; color: var(--ink-700); font: 24px/1 var(--font-body); cursor: pointer; }
.sp-etp .sp-filter-close:hover { border-color: var(--brand-blue-500); color: var(--brand-blue-700); background: var(--brand-blue-050); }
.sp-etp .sp-filter-close:focus-visible { outline: 3px solid rgba(6, 101, 230, 0.22); outline-offset: 2px; }

/* GWT filter fields are nested several tables deep. Reset only the tagged
   single-input cards so their controls use the card width instead of the
   intrinsic width of a legacy table cell. */
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-text-input > td > table.blockPanel,
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-text-input > td > table.blockPanel > tbody,
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-text-input > td > table.blockPanel > tbody > tr,
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-text-input > td > table.blockPanel > tbody > tr > td,
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-text-input .blockPanelContent,
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-text-input .blockPanelContent table,
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-text-input .blockPanelContent tbody,
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-text-input .blockPanelContent tr,
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-text-input .blockPanelContent td {
  display: block !important;
  width: 100% !important;
  min-width: 0 !important;
  max-width: 100% !important;
  box-sizing: border-box !important;
}
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-text-input input[type="text"],
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-text-input input[type="number"] {
  display: block !important;
  width: 100% !important;
  min-width: 0 !important;
  max-width: 100% !important;
  box-sizing: border-box !important;
}
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-text-input .blockPanelContent {
  padding: 6px 0 0 !important;
}
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-text-input .blockPanelContent td {
  padding: 0 !important;
}

/* Long “Особенности проведения” options use a separate text cell rather than
   the normal GWT label. Give each option a two-column row and allow its text
   to wrap inside the filter card. */
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-feature-card > td > table.blockPanel,
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-feature-card > td > table.blockPanel > tbody,
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-feature-card > td > table.blockPanel > tbody > tr,
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-feature-card > td > table.blockPanel > tbody > tr > td,
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-feature-card .blockPanelContent,
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-feature-card .blockPanelContent table,
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-feature-card .blockPanelContent tbody,
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-feature-card .blockPanelContent tr,
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-feature-card .blockPanelContent td {
  display: block !important;
  width: 100% !important;
  min-width: 0 !important;
  max-width: 100% !important;
  box-sizing: border-box !important;
  white-space: normal !important;
}
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-feature-card .blockPanelContent {
  padding: 6px 0 0 !important;
}
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-feature-card .blockPanelContent td {
  padding: 0 !important;
}
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-feature-card .blockPanelContent tr.sp-field {
  display: grid !important;
  grid-template-columns: 24px minmax(0, 1fr) !important;
  align-items: start !important;
  gap: 8px !important;
  width: 100% !important;
  min-width: 0 !important;
  max-width: 100% !important;
  padding: 5px 0 !important;
  box-sizing: border-box !important;
  white-space: normal !important;
}
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-feature-card .blockPanelContent tr.sp-field > td {
  display: block !important;
  width: auto !important;
  min-width: 0 !important;
  max-width: 100% !important;
  padding: 0 !important;
  box-sizing: border-box !important;
  white-space: normal !important;
}
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-feature-card .gwt-CheckBox {
  display: flex !important;
  align-items: flex-start !important;
  width: 24px !important;
  min-width: 0 !important;
  white-space: normal !important;
}
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-feature-card .gwt-CheckBox > label:empty { display: none !important; }
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel tr.nmck-feature-card .blockPanelCheckboxLabel {
  display: block !important;
  width: 100% !important;
  min-width: 0 !important;
  max-width: 100% !important;
  margin: 0 !important;
  color: var(--ink-700) !important;
  font-family: var(--font-body) !important;
  font-size: 13px !important;
  line-height: 1.45 !important;
  letter-spacing: 0 !important;
  text-align: left !important;
  text-transform: none !important;
  white-space: normal !important;
  overflow-wrap: anywhere !important;
  box-sizing: border-box !important;
}

/* A GWT pager nests the numbered pages in one anonymous group. Treat that
   group as a row of independent touch targets instead of one 36px button. */
.sp-etp .pages.sp-pagination { width: 100% !important; max-width: 100% !important; justify-content: center !important; flex-wrap: wrap !important; box-sizing: border-box !important; }
.sp-etp .pages.sp-pagination > .gwt-HTML { display: inline-flex !important; flex: 0 0 44px !important; width: 44px !important; min-width: 44px !important; max-width: 44px !important; height: 44px !important; min-height: 44px !important; padding: 0 !important; box-sizing: border-box !important; }
.sp-etp .pages.sp-pagination > .sp-pagination-pages { display: inline-flex !important; flex: 0 0 auto !important; align-items: center !important; width: auto !important; min-width: 0 !important; max-width: 100% !important; height: 44px !important; gap: 6px !important; padding: 0 !important; border: 0 !important; border-radius: 0 !important; background: transparent !important; box-shadow: none !important; }
.sp-etp .pages.sp-pagination .sp-pagination-page { display: inline-flex !important; flex: 0 0 44px !important; align-items: center !important; justify-content: center !important; width: 44px !important; min-width: 44px !important; max-width: 44px !important; height: 44px !important; min-height: 44px !important; padding: 0 !important; border: 1px solid var(--ink-200) !important; border-radius: var(--r-sm) !important; background: #fff !important; color: var(--ink-700) !important; box-sizing: border-box !important; box-shadow: none !important; }
.sp-etp .pages.sp-pagination .sp-pagination-page[aria-current="page"] { border-color: var(--brand-blue-600) !important; background: var(--brand-blue-600) !important; color: #fff !important; }
.sp-etp .pages.sp-pagination > .gwt-HTML > a,
.sp-etp .pages.sp-pagination > .gwt-HTML > b,
.sp-etp .pages.sp-pagination .sp-pagination-page > a,
.sp-etp .pages.sp-pagination .sp-pagination-page > b { display: inline-flex !important; align-items: center !important; justify-content: center !important; width: 100% !important; min-width: 0 !important; height: 100% !important; min-height: 0 !important; padding: 0 !important; border: 0 !important; border-radius: inherit !important; background: transparent !important; color: inherit !important; box-sizing: border-box !important; }
.sp-etp .pages.sp-pagination > [aria-disabled="true"] { cursor: default !important; opacity: 0.45; }

@media (max-width: 768px) {
  /* Colour alone cannot communicate a procedure type in a card. The legacy
     widget keeps its human-readable value only in title; the adapter mirrors
     it into this visible, non-duplicating label for the mobile card view. */
  .sp-etp .sp-table--data td[data-label='Тип'] .offerType {
    max-width: 100%;
    min-height: 32px;
    white-space: normal !important;
    text-transform: none !important;
    letter-spacing: normal !important;
    font-family: var(--font-body) !important;
    font-size: 13px !important;
    line-height: 1.35 !important;
  }
  .sp-etp .sp-table--data td[data-label='Тип'] .offerType .sp-offer-type__label {
    display: inline;
    min-width: 0;
    overflow-wrap: anywhere;
  }
  body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel { top: 104px !important; width: calc(100vw - 24px) !important; max-width: calc(100vw - 24px) !important; max-height: calc(100dvh - 116px) !important; padding: 14px !important; }
  body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel > tbody { grid-template-columns: minmax(0, 1fr) !important; }
  body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel > tbody > tr { grid-column: 1 / -1 !important; width: 100% !important; min-width: 0 !important; }
  body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel input[type="text"],
  body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel input[type="number"],
  body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel input[type="email"],
  body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel input[type="search"],
  body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel input[type="tel"],
  body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel input[type="url"],
  body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel input[type="password"],
  body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel select,
  body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel textarea {
    font-size: 16px !important;
    touch-action: manipulation;
  }
}
.sp-etp .pages.sp-pagination .sp-pagination-page[aria-disabled="true"] { color: var(--ink-400) !important; background: var(--surface-subtle) !important; cursor: default !important; }

/* ── GWT DialogBox geometry regardless of enhancement timing ───────────────
   Диалог GWT позиционируется абсолютно по документу: на длинной странице
   («Изменить перечень прикладываемых документов…») он уезжал вниз, и чтобы
   добраться до кнопок, приходилось прокручивать страницу под ним. Держим
   диалог в окне: фиксированное положение по центру, прокрутка — внутри
   (12.09, п.30). */
.sp-etp .gwt-DialogBox {
  box-sizing: border-box !important;
  position: fixed !important;
  left: 50% !important;
  top: 50% !important;
  right: auto !important;
  bottom: auto !important;
  margin: 0 !important;
  transform: translate(-50%, -50%) !important;
  max-width: calc(100vw - 24px) !important;
  max-height: calc(100vh - 24px) !important;
  overflow: auto !important;
}
.sp-etp .gwt-DialogBox > table,
.sp-etp .gwt-DialogBox .dialogContent,
.sp-etp .gwt-DialogBox .dialogMiddleCenterInner { max-width: 100% !important; box-sizing: border-box !important; }
.sp-etp .gwt-DialogBox .dialogContent { overflow-x: auto !important; }
.sp-etp .gwt-DialogBox .Caption {
  position: sticky !important;
  top: 0 !important;
  z-index: 2 !important;
  background: var(--ink-050) !important;
}
@media (max-width: 768px) {
  .sp-etp .gwt-DialogBox,
  .sp-etp .sp-dialog.gwt-DialogBox {
    position: fixed !important;
    top: 12px !important;
    left: 12px !important;
    right: 12px !important;
    /* На узких экранах диалог прижат к краям, центрирование трансформом
       (десктопное правило) здесь сдвинуло бы его за пределы экрана. */
    transform: none !important;
    width: calc(100vw - 24px) !important;
    max-height: calc(100dvh - 24px) !important;
  }
  .sp-etp .gwt-DialogBox table[style*='width'],
  .sp-etp .gwt-DialogBox .dialogContent table { width: 100% !important; max-width: 100% !important; }
  .sp-etp .gwt-DialogBox input[type='text'].sp-control,
  .sp-etp .gwt-DialogBox select.sp-control { width: 100% !important; max-width: 100% !important; }
}
.sp-etp .gwt-DialogBox .dialogContent input[type='text'].sp-control,
.sp-etp .gwt-DialogBox .dialogContent select.sp-control { width: 100% !important; min-width: 160px; max-width: 100% !important; }
.sp-etp .gwt-DialogBox .dialogContent table.sp-table--form,
.sp-etp .gwt-DialogBox .dialogContent table.sp-table--layout { width: 100% !important; }
/* Segmented tab strips wrap instead of hiding items behind a scroll edge. */
.sp-etp ul.tabs, .sp-etp .tabs-bar { flex-wrap: wrap !important; overflow: visible !important; }

/* Keep the action ROW in the scrollport: a sticky button table inside a
   single-height td cannot escape that cell. Do not move or clone GWT nodes. */
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel {
  scroll-padding-block: 76px 90px;
  overscroll-behavior: contain;
}
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel > tbody > tr:last-child:has(button.gwt-Button):not(:has(.blockPanelTitle)) {
  position: sticky !important;
  bottom: 0 !important;
  z-index: 3;
  padding: 12px 0 16px !important;
  border: 0 !important;
  border-top: 1px solid var(--ink-100) !important;
  border-radius: 0 !important;
  background: var(--surface-card, #fff) !important;
  box-shadow: 0 20px 0 var(--surface-card, #fff) !important;
}
body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel > tbody > tr:last-child:has(button.gwt-Button):not(:has(.blockPanelTitle)) > td {
  padding: 0 !important;
}

/* GWT decorates a dialog with several table wrappers. Flatten only this
   known shell so the caption stays outside the single content scrollport. */
.sp-etp .gwt-DialogBox:has(.dialogContent > table > tbody > tr > td > .formButtonsPanel) {
  display: flex !important;
  flex-direction: column !important;
  overflow: hidden !important;
  max-height: calc(100dvh - 24px) !important;
}
.sp-etp .gwt-DialogBox:has(.dialogContent > table > tbody > tr > td > .formButtonsPanel) > div,
.sp-etp .gwt-DialogBox:has(.dialogContent > table > tbody > tr > td > .formButtonsPanel) > div > table,
.sp-etp .gwt-DialogBox:has(.dialogContent > table > tbody > tr > td > .formButtonsPanel) > div > table > tbody,
.sp-etp .gwt-DialogBox:has(.dialogContent > table > tbody > tr > td > .formButtonsPanel) > table,
.sp-etp .gwt-DialogBox:has(.dialogContent > table > tbody > tr > td > .formButtonsPanel) > table > tbody {
  display: contents !important;
}
.sp-etp .gwt-DialogBox:has(.dialogContent > table > tbody > tr > td > .formButtonsPanel) .dialogTop {
  display: block !important;
  flex: 0 0 auto !important;
}
.sp-etp .gwt-DialogBox:has(.dialogContent > table > tbody > tr > td > .formButtonsPanel) .dialogTopCenter {
  display: block !important;
}
.sp-etp .gwt-DialogBox:has(.dialogContent > table > tbody > tr > td > .formButtonsPanel) .dialogMiddle,
.sp-etp .gwt-DialogBox:has(.dialogContent > table > tbody > tr > td > .formButtonsPanel) .dialogMiddleCenter {
  display: flex !important;
  flex-direction: column !important;
  flex: 1 1 auto !important;
  min-height: 0 !important;
  min-width: 0 !important;
}
.sp-etp .gwt-DialogBox:has(.dialogContent > table > tbody > tr > td > .formButtonsPanel) .dialogContent {
  display: flex !important;
  flex-direction: column !important;
  flex: 1 1 auto !important;
  min-height: 0 !important;
  overflow: hidden !important;
}
.sp-etp .gwt-DialogBox .dialogContent > table:has(> tbody > tr > td > .formButtonsPanel),
.sp-etp .gwt-DialogBox .dialogContent > table > tbody:has(> tr > td > .formButtonsPanel) {
  display: flex !important;
  flex-direction: column !important;
  flex: 1 1 auto !important;
  min-height: 0 !important;
}
.sp-etp .gwt-DialogBox .dialogContent > table > tbody:has(> tr > td > .formButtonsPanel) > tr:first-child,
.sp-etp .gwt-DialogBox .dialogContent > table > tbody:has(> tr > td > .formButtonsPanel) > tr:first-child > td {
  display: flex !important;
  flex-direction: column !important;
  flex: 1 1 auto !important;
  min-height: 0 !important;
  min-width: 0 !important;
  overflow: auto !important;
  overscroll-behavior: contain;
}
.sp-etp .gwt-DialogBox .dialogContent > table > tbody:has(> tr > td > .formButtonsPanel) > tr:first-child > td > div[style*="overflow"] {
  flex: 1 1 auto !important;
  min-height: 0 !important;
  overflow: auto !important;
  padding-bottom: 0 !important;
}
.sp-etp .gwt-DialogBox .dialogContent > table > tbody > tr:has(> td > .formButtonsPanel) {
  display: block !important;
  flex: 0 0 auto !important;
  z-index: 3;
  background: var(--surface-card, #fff) !important;
}
.sp-etp .gwt-DialogBox .dialogContent > table > tbody > tr:has(> td > .formButtonsPanel) > td {
  display: block !important;
}
.sp-etp .gwt-DialogBox .dialogContent > table > tbody > tr > td > .formButtonsPanel {
  position: static !important;
  margin: 0 !important;
  padding-block: 12px 20px !important;
}
@media (max-width: 768px) {
  body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel > tbody > tr:last-child:has(button.gwt-Button):not(:has(.blockPanelTitle)) {
    bottom: 0 !important;
    padding-bottom: 14px !important;
  }
}

/* Mobile browser chrome can cover the layout viewport. Keep actions inside
   both the small CSS viewport and the actual VisualViewport (also the keyboard).
   These bounds only affect mobile/narrow dialogs; desktop positioning stays native. */
.sp-etp { --sp-overlay-small-height: 100vh; }
@supports (height: 100svh) {
  .sp-etp { --sp-overlay-small-height: 100svh; }
}
@media (max-width: 768px), (hover: none) and (pointer: coarse) {
  body.sp-etp:has(#filter-toggle:checked) #nmck-filter-panel.filterPanel {
    top: calc(var(--sp-overlay-visible-top, 0px) + 104px) !important;
    max-height: calc(min(var(--sp-overlay-small-height), var(--sp-overlay-visible-height, 100vh)) - 116px - env(safe-area-inset-bottom, 0px)) !important;
    box-sizing: border-box !important;
  }
  .sp-etp .gwt-DialogBox:has(.dialogContent > table > tbody > tr > td > .formButtonsPanel) {
    position: fixed !important;
    top: calc(var(--sp-overlay-visible-top, 0px) + 12px) !important;
    max-height: calc(min(var(--sp-overlay-small-height), var(--sp-overlay-visible-height, 100vh)) - 24px - env(safe-area-inset-bottom, 0px)) !important;
    box-sizing: border-box !important;
  }
}


/* ── Шапка и нижние кнопки GWT-диалога (2026-09-11, п.1 разбора) ──────────
   Плашка диалога («Добавить предложение по позиции?») была светлой с тёмным
   текстом по левому краю и не совпадала с окнами портала — там тёмно-синяя
   полоса с белой надписью по центру. Разметка плашки: tr.dialogTop >
   td.dialogTopCenter > div.dialogTopCenterInner > table.Caption, внутри две
   ячейки — заголовок и «×» (a.formCloseButton). Заголовок центрируем по всей
   плашке: ячейке «×» задаём фиксированные 24px, ячейке заголовка — такой же
   отступ слева, тогда содержимое ровно посередине.
   Кнопки «Добавить»/«Отмена» лежат в table.formButtonsPanel, растянутой на
   всю ширину, и расходились по краям — таблицу сжимаем по содержимому и
   центрируем, между кнопками 16px. */
.sp-etp .gwt-DialogBox .dialogTopLeft,
.sp-etp .gwt-DialogBox .dialogTopLeftInner,
.sp-etp .gwt-DialogBox .dialogTopCenter,
.sp-etp .gwt-DialogBox .dialogTopCenterInner,
.sp-etp .gwt-DialogBox .dialogTopRight,
.sp-etp .gwt-DialogBox .dialogTopRightInner,
.sp-etp .gwt-DialogBox table.Caption,
.sp-etp .gwt-DialogBox .Caption {
  background: var(--navy-900, #0C1E45) !important;
  border-bottom: 0 !important;
}
.sp-etp .gwt-DialogBox table.Caption > tbody > tr > td:first-child {
  text-align: center !important;
  padding-left: 24px !important;
}
.sp-etp .gwt-DialogBox table.Caption > tbody > tr > td:last-child {
  width: 24px !important;
  min-width: 24px !important;
}
.sp-etp .gwt-DialogBox table.Caption .gwt-HTML,
.sp-etp .gwt-DialogBox .Caption .gwt-HTML {
  color: #fff !important;
  text-align: center !important;
}
.sp-etp .gwt-DialogBox table.Caption a.formCloseButton {
  filter: brightness(0) invert(1) !important;
  opacity: 0.85 !important;
}
.sp-etp .gwt-DialogBox table.Caption a.formCloseButton:hover {
  opacity: 1 !important;
}
.sp-etp .gwt-DialogBox .dialogContent > table > tbody > tr > td > .formButtonsPanel,
.sp-etp .gwt-DialogBox table.formButtonsPanel {
  width: auto !important;
  margin-inline: auto !important;
}
.sp-etp .gwt-DialogBox table.formButtonsPanel > tbody > tr > td {
  width: auto !important;
  padding-inline: 8px !important;
  text-align: center !important;
}
/* Ячейка CellTable режет содержимое (overflow: hidden) — на десктопе
   содержимое теперь всегда по ширине колонки, поэтому вместо молчаливой
   обрезки отдаём перенос. На узких экранах правило не включаем: там колонка
   ~140px уже минимальной ширины выбора страны (~230px), и без обрезки блок
   наезжал бы на соседнюю колонку. Мобильная раскладка этого диалога
   (содержимое шире окна) — отдельная задача, здесь её не трогаем. */
@media (min-width: 769px) {
  .sp-etp .gwt-DialogBox table.cellTableWidget.sp-table--data:has(td.textFieldValue) > tbody > tr > td.cellTableCell {
    overflow: visible !important;
    overflow-wrap: anywhere;
  }
}

/* ── Модальное уведомление о подписании договора (2026-09-11, п.4) ────────
   Результат подписания вендор показывает обычной надписью над заголовком.
   Показываем его модальным окном с «ОК» и крестиком; исходный текст остаётся
   в разметке, но скрыт. */
.sp-etp .sp-notice-source { display: none !important; }
.sp-etp .sp-notice-modal {
  position: fixed !important;
  inset: 0 !important;
  z-index: 99995 !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  padding: 24px !important;
  background: rgba(10, 23, 53, .5) !important;
}
.sp-etp .sp-notice-modal__box {
  position: relative !important;
  width: min(420px, calc(100vw - 48px)) !important;
  padding: 40px 28px 22px !important;
  border-radius: var(--r-lg, 14px) !important;
  background: #fff !important;
  box-shadow: 0 24px 64px rgba(10, 23, 53, .35) !important;
  text-align: center !important;
}
.sp-etp .sp-notice-modal__text {
  margin: 0 0 18px !important;
  color: var(--ink-1000, #0A0E17) !important;
  font: 600 16px/1.45 var(--font-body, 'Geologica', sans-serif) !important;
}
.sp-etp .sp-notice-modal__ok {
  min-width: 120px !important;
  padding: 10px 20px !important;
  border: 0 !important;
  border-radius: var(--r-md, 10px) !important;
  background: var(--brand-blue-600, #0553C7) !important;
  color: #fff !important;
  font-weight: 700 !important;
  cursor: pointer !important;
}
.sp-etp .sp-notice-modal__ok:hover { background: var(--brand-blue-700, #0442A3) !important; }
.sp-etp .sp-notice-modal__close {
  position: absolute !important;
  top: 8px !important;
  right: 10px !important;
  width: 32px !important;
  height: 32px !important;
  padding: 0 !important;
  border: 0 !important;
  border-radius: 8px !important;
  background: transparent !important;
  color: var(--ink-500, #5E7A90) !important;
  font-size: 24px !important;
  line-height: 1 !important;
  cursor: pointer !important;
}
.sp-etp .sp-notice-modal__close:hover { background: var(--ink-050, #F5F8FB) !important; color: var(--ink-800, #263B60) !important; }

/* ── Панель флеш-сообщений вендора (#flashMessage) ───────────────────────
   Скин «Спецтендер» грузит clean.css, а не default.css, поэтому вендорные
   правила .login-error* не применяются и любое сообщение (в том числе ошибка
   входа) выводилось обычным текстом. Возвращаем вид уведомления: тёмно-синяя
   плашка для информации, красная для ошибки, крестик вендора виден. */
.sp-etp #flashMessage,
.sp-etp .login-error,
.sp-etp .login-error-red {
  position: relative !important;
  margin: 12px 0 16px !important;
  padding: 14px 20px 14px 46px !important;
  border-radius: var(--r-md, 10px) !important;
  background: var(--navy-900, #0A1735) !important;
  color: #fff !important;
  font: 600 15px/1.45 var(--font-body, 'Geologica', sans-serif) !important;
}
.sp-etp #flashMessage.login-error-red,
.sp-etp .login-error-red { background: var(--danger-600, #C8392B) !important; }
.sp-etp #flashMessage > a,
.sp-etp .login-error > a,
.sp-etp .login-error-red > a {
  position: absolute !important;
  top: 50% !important;
  left: 16px !important;
  transform: translateY(-50%) !important;
  color: #fff !important;
  line-height: 1 !important;
  text-decoration: none !important;
}
.sp-etp #flashMessage .white_cross_icon,
.sp-etp .login-error .white_cross_icon,
.sp-etp .login-error-red .white_cross_icon {
  display: inline-block !important;
  width: 16px !important;
  height: 16px !important;
  background: none !important;
  color: inherit !important;
  font: 400 20px/16px var(--font-body, 'Geologica', sans-serif) !important;
  text-align: center !important;
}
.sp-etp #flashMessage .white_cross_icon::before,
.sp-etp .login-error .white_cross_icon::before,
.sp-etp .login-error-red .white_cross_icon::before { content: '\00d7'; }

/* ── Углы GWT-диалога и список подсказок (2026-09-12, пп.21-22) ────────────
   Плашка диалога собрана GWT из трёх ячеек: угловые td.dialogTopLeft/Right
   несут спрайты темы (10×8px) и в нашей раскладке дают над заголовком белую
   полосу высотой 8px («на шапку попала белая полоса»). Угловые ячейки
   убираем, строке плашки — тот же тёмно-синий фон.
   Список подсказок региона/района (.gwt-SuggestBoxPopup) GWT добавляет в
   body с z-index auto, а диалог стоит на 99999: список рисовался под
   диалогом, и выбрать значение было невозможно. Поднимаем список над
   диалогом и даём ему вид выпадающего меню. */
.sp-etp .gwt-DialogBox tr.dialogTop { background: var(--navy-900, #0C1E45) !important; }
.sp-etp .gwt-DialogBox td.dialogTopLeft,
.sp-etp .gwt-DialogBox td.dialogTopRight { display: none !important; }
.sp-etp .gwt-DialogBox .dialogTopLeftInner,
.sp-etp .gwt-DialogBox .dialogTopRightInner { width: 0 !important; height: 0 !important; }
/* Правило подсказок `.gwt-PopupPanel:not(.gwt-DialogBox):not(:has(table.filterPanel))`
   (legacy-redesign) имеет специфичность 0,3,1 и красило список в тёмный с белым
   11px текстом; селекторы ниже — с body, 0,3,1 и позже по порядку. Ширину
   таблицы вендор ставит по надписи «[не указано]» (86px) — список раскрываем
   до 320px, поле поиска и пункты — как контролы формы. */
body.sp-etp .gwt-PopupPanel.gwt-SuggestBoxPopup {
  position: absolute !important;
  z-index: 100001 !important;
  min-width: min(320px, calc(100vw - 32px)) !important;
  max-width: min(520px, calc(100vw - 32px)) !important;
  max-height: min(360px, calc(100vh - 32px)) !important;
  overflow: auto !important;
  padding: 8px !important;
  border: 1px solid var(--ink-100, #E3EAF2) !important;
  border-radius: var(--r-md, 10px) !important;
  background: #fff !important;
  color: var(--ink-1000, #0A0E17) !important;
  font: 500 14px/1.35 var(--font-body, 'Geologica', sans-serif) !important;
  box-shadow: var(--shadow-lg) !important;
}
body.sp-etp .gwt-SuggestBoxPopup .popupContent,
body.sp-etp .gwt-SuggestBoxPopup .popupContent > table { width: 100% !important; max-width: 100% !important; }
body.sp-etp .gwt-SuggestBoxPopup input.gwt-TextBox {
  width: 100% !important;
  min-width: 0 !important;
  margin-bottom: 6px !important;
  box-sizing: border-box !important;
}
body.sp-etp .gwt-SuggestBoxPopup .item {
  padding: 8px 12px !important;
  border-radius: 6px !important;
  color: var(--ink-1000, #0A0E17) !important;
  font: 500 14px/1.35 var(--font-body, 'Geologica', sans-serif) !important;
  cursor: pointer !important;
}
body.sp-etp .gwt-SuggestBoxPopup .item-selected,
body.sp-etp .gwt-SuggestBoxPopup .item:hover {
  background: var(--brand-blue-050, #EAF1FF) !important;
  color: var(--brand-blue-700, #0442A3) !important;
}
/* Заголовок плашки: ячейка вендора с inline vertical-align:top держала текст у
   верхнего края 28px полосы; ячейка «×» — 28px, а не 24, отсюда 2px сдвиг. */
.sp-etp .gwt-DialogBox table.Caption > tbody > tr > td { vertical-align: middle !important; }
.sp-etp .gwt-DialogBox table.Caption > tbody > tr > td:first-child { padding-left: 28px !important; }
.sp-etp .gwt-DialogBox table.Caption > tbody > tr > td:last-child { width: 28px !important; min-width: 28px !important; }

/* Инлайновый выбор GWT (span.gwt-SelectBox, «[не указано]»/выбранное значение)
   выглядел обычным текстом — по нему не было понятно, что это кликабельно.
   Указатель-рука и пунктирное подчёркивание в цвете ссылки (замечание 12.09). */
.sp-etp .gwt-DialogBox .gwt-SelectBox {
  cursor: pointer !important;
  color: var(--brand-blue-700, #0442A3) !important;
  text-decoration: underline dotted var(--brand-blue-300, #8FB4F0) !important;
  text-underline-offset: 3px !important;
}
.sp-etp .gwt-DialogBox .gwt-SelectBox:hover {
  color: var(--brand-blue-600, #0553C7) !important;
  text-decoration-style: solid !important;
}

/* ── Неактивные действия вендора (2026-09-12) ─────────────────────────────
   Скин не грузит вендорные default.css/env.css, поэтому .rec-go.disabled
   (у вендора серый #ddd/#999) выглядел активной синей кнопкой: правило
   .ecpf-submit из legacy-redesign.css с !important перекрывало всё, а
   div#help_tooltip — контейнер подсказок showPrompting — терял
   position:absolute и рисовался статичным блоком в начале body (за экраном).
   Причину недоступности показывает overlays.js (disabledActionHints): строкой
   .sp-action-hint под рядом кнопок и модалкой по клику; здесь — их вид. */
.sp-etp .rec-go.disabled,
.sp-etp .rec-go.ecpf-submit.disabled,
.sp-etp .rec-go.disabled:hover,
.sp-etp .rec-go.ecpf-submit.disabled:hover {
  background: var(--ink-100, #EBF0F6) !important;
  color: var(--ink-500, #5E7A90) !important;
  box-shadow: none !important;
  cursor: not-allowed !important;
  transition: none !important;
}
.sp-etp acronym:has(> .rec-go.disabled) {
  display: inline-block;
  border: 0 !important;
  text-decoration: none !important;
  cursor: not-allowed;
}
.sp-etp .sp-action-hint {
  position: relative;
  display: block;
  max-width: 720px;
  margin: 4px auto 12px;
  padding: 10px 14px 10px 42px;
  border-radius: var(--r-sm, 6px);
  background: var(--warning-050, #FFF8E8);
  color: var(--warning-700, #7A4500);
  font: 500 13px/1.45 var(--font-body, 'Geologica', Arial, sans-serif);
  text-align: left;
}
.sp-etp .sp-action-hint::before {
  content: '!';
  position: absolute;
  left: 14px;
  top: 50%;
  width: 18px;
  height: 18px;
  transform: translateY(-50%);
  border-radius: 50%;
  background: var(--warning-500, #D99212);
  color: #fff;
  font: 800 12px/18px var(--font-body, 'Geologica', Arial, sans-serif);
  text-align: center;
}
/* «Отсутствуют» в обязательной секции файлов, когда причина — про файлы. */
.sp-etp .line-margin-top.sp-files-missing {
  color: var(--warning-700, #7A4500) !important;
  font-weight: 600 !important;
}
.sp-etp .line-margin-top.sp-files-missing::before {
  content: '!';
  display: inline-block;
  width: 16px;
  height: 16px;
  margin-right: 6px;
  border-radius: 50%;
  background: var(--warning-500, #D99212);
  color: #fff;
  font: 800 11px/16px var(--font-body, 'Geologica', Arial, sans-serif);
  text-align: center;
  vertical-align: 1px;
}
/* Тултип вендора (funcs.js showPrompting → #help_tooltip): у курсора, а не в потоке.
   Фон — фирменный тёмно-синий, а не чёрный (12.09, п.39). */
.sp-etp #help_tooltip {
  position: absolute !important;
  z-index: 2000 !important;
  max-width: 320px;
  padding: 8px 12px;
  border-radius: var(--r-sm, 6px);
  background: var(--navy-900, #0C1E45);
  color: #fff;
  font: 500 13px/1.45 var(--font-body, 'Geologica', Arial, sans-serif);
  box-shadow: var(--shadow-md, 0 6px 20px rgba(15,24,42,0.10));
}

/* ── Сообщение о ходе операции (MessagePanel вендора ЭТП, 13.09, п.59) ───────
   «Идет обработка данных… Дождитесь завершения операции.»: GWT showMessage()
   — PopupPanel без своих классов, внутри gwt-HTML с /etp/img/loading.gif и
   текстом; ошибка — тот же gwt-HTML с inline color:red и без картинки. Общее
   правило подсказок красило панель чёрной плашкой 11px. Прогресс — белая
   карточка уведомления с кольцом загрузки, ошибка — карточка ошибки. */
@keyframes sp-msg-spin { to { transform: rotate(360deg); } }
body.sp-etp .gwt-PopupPanel:not(.gwt-DialogBox):has(> .popupContent > .gwt-HTML > img[src*="/img/loading.gif"]),
body.sp-etp .gwt-PopupPanel:not(.gwt-DialogBox):has(> .popupContent > .gwt-HTML[style*="color:red"]),
body.sp-etp .gwt-PopupPanel:not(.gwt-DialogBox):has(> .popupContent > .gwt-HTML[style*="color: red"]) {
  max-width: min(460px, calc(100vw - 24px)) !important;
  padding: 14px 16px !important;
  border: 1px solid var(--brand-blue-100, #DDE9FB) !important;
  border-left: 4px solid var(--brand-blue-600, #0553C7) !important;
  border-radius: var(--r-md, 10px) !important;
  background: #fff !important;
  color: var(--ink-800, #26313F) !important;
  font: 500 14px/1.45 var(--font-body, 'Geologica', Arial, sans-serif) !important;
  box-shadow: var(--shadow-md, 0 8px 24px rgba(10,23,53,.16)) !important;
}
body.sp-etp .gwt-PopupPanel:not(.gwt-DialogBox):has(> .popupContent > .gwt-HTML[style*="color:red"]),
body.sp-etp .gwt-PopupPanel:not(.gwt-DialogBox):has(> .popupContent > .gwt-HTML[style*="color: red"]) {
  border-color: var(--danger-100, #FEE8E4) !important;
  border-left-color: var(--danger-600, #C8392B) !important;
  background: var(--danger-050, #FFF4F2) !important;
}
body.sp-etp .gwt-PopupPanel:not(.gwt-DialogBox) > .popupContent > .gwt-HTML:has(> img[src*="/img/loading.gif"]) {
  position: relative !important;
  display: block !important;
  min-height: 20px;
  padding-left: 30px !important;
  color: inherit !important;
  font: inherit !important;
  overflow-wrap: anywhere;
}
body.sp-etp .gwt-PopupPanel:not(.gwt-DialogBox) > .popupContent > .gwt-HTML > img[src*="/img/loading.gif"] { display: none !important; }
body.sp-etp .gwt-PopupPanel:not(.gwt-DialogBox) > .popupContent > .gwt-HTML:has(> img[src*="/img/loading.gif"])::before {
  content: '';
  position: absolute;
  left: 0;
  top: 1px;
  width: 18px;
  height: 18px;
  box-sizing: border-box;
  border: 2px solid var(--brand-blue-100, #DDE9FB);
  border-top-color: var(--brand-blue-600, #0553C7);
  border-radius: 50%;
  animation: sp-msg-spin .8s linear infinite;
}
body.sp-etp .gwt-PopupPanel:not(.gwt-DialogBox) > .popupContent > .gwt-HTML[style*="color:red"],
body.sp-etp .gwt-PopupPanel:not(.gwt-DialogBox) > .popupContent > .gwt-HTML[style*="color: red"] {
  color: var(--danger-700, #902B20) !important;
  font: 600 14px/1.45 var(--font-body, 'Geologica', Arial, sans-serif) !important;
}
@media (prefers-reduced-motion: reduce) {
  body.sp-etp .gwt-PopupPanel:not(.gwt-DialogBox) > .popupContent > .gwt-HTML::before { animation: none !important; }
}

/* source: test-overrides/ui-redesign/etp/operator-fee-note.css */
/* ── Плашка «вознаграждение оператора» (перенос с прода, 2026-09-13) ─────────
   Прод-вариант с etpsp.ru — жёлто-оранжевая рамка 9px, Arial 700. В редизайне —
   тот же смысл и заметность средствами дизайн-системы: предупреждающий фон,
   акцентная левая граница, полужирный текст; по ширине ячейки, на мобильных — во
   всю ширину. Разметку создаёт etp/operator-fee-note.js. */
.sp-etp .sp-operator-fee-note {
  display: block;
  box-sizing: border-box;
  width: fit-content;
  max-width: min(620px, 100%);
  margin: 10px 0 0;
  padding: 12px 14px;
  border: 1px solid var(--warning-500, #D99212);
  border-left-width: 6px;
  border-radius: var(--r-sm, 6px);
  background: var(--warning-100, #FFF3DC);
  color: var(--ink-1000, #0A0E17);
  font: 600 14px/1.4 var(--font-body, 'Geologica', Arial, sans-serif);
  white-space: normal;
}
@media (max-width: 700px) {
  .sp-etp .sp-operator-fee-note { width: 100%; max-width: 100%; }
}

/* source: test-overrides/ui-redesign/etp/banners.css */
/* ════════════════════════════════════════════════════════════
   Лента баннеров под шапкой
   Legacy Border рендерит баннеры (обе группы, «sidetop» и «side»)
   внутри aside.left_side, который в редизайне скрыт и работает
   только как попап «Личный кабинет». Адаптер etp-banners
   переносит их наверх страницы; здесь — только оформление.

   Раскладка: горизонтальная лента со scroll-snap. Окно занимает всю
   ширину контента, а плитка — ровно 1 / --sp-banners-per-view этой ширины.
   Количество считает JS от фактической ширины окна: сколько плиток
   не уже --sp-banners-tile-min туда влезает, но не больше пяти. Поэтому
   «сколько в ряд» — инвариант вёрстки, а не медиазапрос, и на промежуточных
   ширинах нет обрывов (при брейкпоинтах плитка прыгала с 329 на 243 px
   от одного пикселя ширины окна).
   ════════════════════════════════════════════════════════════ */

.sp-etp .sp-banners {
  --sp-banners-per-view: 5;
  --sp-banners-gap: var(--space-5);
  /* Нижняя граница читаемости баннера. Пятая плитка появляется ровно там,
     где она в эту ширину влезает: на 1440 px и шире. Ниже лента сама
     переходит на 4 / 3 / 2, сохраняя плитку в диапазоне ~240…290 px. */
  --sp-banners-tile-min: 235px;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: var(--space-4);
  margin: 0 0 var(--space-8);
}

/* Горизонтальный скролл сам по себе даёт смахивание на тач-экранах и
   двупальцевый свайп на трекпаде; стрелки и точки — та же прокрутка
   программно. Полосу прокрутки прячем: её роль берут на себя стрелки. */
.sp-etp .sp-banners__viewport {
  /* Именно basis 0, а не auto: при auto базой становится max-content всей
     дорожки (ширина всех баннеров сразу), окно занимает строку целиком и
     стрелки уезжают на строки выше и ниже ленты. */
  flex: 1 1 0;
  max-width: 100%;
  min-width: 0;
  overflow-x: auto;
  overflow-y: hidden;
  overscroll-behavior-x: contain;
  scroll-snap-type: x mandatory;
  scrollbar-width: none;
  -ms-overflow-style: none;
}

.sp-etp .sp-banners__viewport::-webkit-scrollbar { width: 0; height: 0; }

.sp-etp .sp-banners__viewport:focus-visible {
  outline: 2px solid var(--brand-blue-500);
  outline-offset: 3px;
  border-radius: var(--r-md);
}

.sp-etp .sp-banners__track {
  display: flex !important;
  gap: var(--sp-banners-gap);
  margin: 0 !important;
  padding: 0 !important;
  list-style: none !important;
}

.sp-etp .sp-banners__slide {
  flex: 0 0 calc(
    (100% - (var(--sp-banners-per-view) - 1) * var(--sp-banners-gap)) /
    var(--sp-banners-per-view)
  );
  min-width: 0;
  margin: 0 !important;
  padding: 0 !important;
  list-style: none !important;
  scroll-snap-align: start;
  background: none !important;
}

.sp-etp .sp-banners__slide::before,
.sp-etp .sp-banners__slide::marker { content: none !important; }

.sp-etp .sp-banners__link {
  display: block !important;
  overflow: hidden;
  border: 1px solid var(--ink-100) !important;
  border-radius: var(--r-md) !important;
  background: var(--surface-card);
  box-shadow: var(--shadow-xs);
  text-decoration: none !important;
  transition:
    transform var(--d-fast) var(--ease-standard),
    box-shadow var(--d-fast) var(--ease-standard),
    border-color var(--d-fast) var(--ease-standard);
}

.sp-etp .sp-banners__link:hover {
  transform: translateY(-2px);
  border-color: var(--brand-blue-200) !important;
  box-shadow: var(--shadow-sm);
}

.sp-etp .sp-banners__link:focus-visible {
  outline: 2px solid var(--brand-blue-500);
  outline-offset: 2px;
}

/* Legacy-шаблон задаёт картинке инлайновые width: 210px и рамку —
   перебиваем, иначе плитка не примет заданный размер. Квадрат 1:1 —
   реальная пропорция всех баннеров площадки; contain страхует от
   искажения, если однажды загрузят картинку другой формы. */
.sp-etp .sp-banners__image {
  display: block !important;
  width: 100% !important;
  height: auto !important;
  aspect-ratio: 1 / 1;
  object-fit: contain;
  border: 0 !important;
  border-radius: 0 !important;
  background: var(--surface-card);
}

.sp-etp .sp-banners__nav {
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  padding: 0 !important;
  border: 1px solid var(--ink-200) !important;
  border-radius: 50% !important;
  background: var(--surface-card) !important;
  color: var(--ink-700) !important;
  box-shadow: var(--shadow-xs);
  cursor: pointer;
  transition:
    border-color var(--d-fast) var(--ease-standard),
    background var(--d-fast) var(--ease-standard),
    color var(--d-fast) var(--ease-standard);
}

.sp-etp .sp-banners__nav--prev { order: -1; }
.sp-etp .sp-banners__nav--next { order: 1; }

.sp-etp .sp-banners__nav:hover:not([disabled]) {
  border-color: var(--brand-blue-300) !important;
  background: var(--brand-blue-050) !important;
  color: var(--brand-blue-700) !important;
}

.sp-etp .sp-banners__nav:focus-visible {
  outline: 2px solid var(--brand-blue-500);
  outline-offset: 2px;
}

.sp-etp .sp-banners__nav[disabled] {
  opacity: .38;
  box-shadow: none;
  cursor: default;
}

.sp-etp .sp-banners__dots {
  flex: 1 0 100%;
  order: 2;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-3);
}

.sp-etp .sp-banners__dot {
  width: 8px;
  height: 8px;
  padding: 0 !important;
  border: 0 !important;
  border-radius: var(--r-pill) !important;
  background: var(--ink-200) !important;
  cursor: pointer;
  transition:
    width var(--d-fast) var(--ease-standard),
    background var(--d-fast) var(--ease-standard);
}

.sp-etp .sp-banners__dot[aria-current='true'] {
  width: 22px;
  background: var(--brand-blue-500) !important;
}

.sp-etp .sp-banners__dot:focus-visible {
  outline: 2px solid var(--brand-blue-500);
  outline-offset: 2px;
}

/* Лента помещается целиком — управление не нужно и не должно занимать
   место: display:none убирает стрелки из flex-строки, а точки — вместе
   с их отдельной строкой. */
.sp-etp .sp-banners--static .sp-banners__nav,
.sp-etp .sp-banners:not(.sp-banners--paged) .sp-banners__dots {
  display: none !important;
}

@media (max-width: 767px) {
  /* На телефоне ведём ленту смахиванием: стрелки съедали бы ширину плитки.
     Плитка тут уже ширины окна — из-за края выглядывает следующая, и сразу
     видно, что ленту можно тянуть. */
  .sp-etp .sp-banners__nav { display: none !important; }
  /* Плитка 78vw занимала весь первый экран телефона (~500px до заголовка
     страницы). Сжимаем: две плитки в ряд, лента ~180px, свайп остаётся. */
  .sp-etp .sp-banners { --sp-banners-gap: var(--space-3); margin-bottom: var(--space-5); }
  .sp-etp .sp-banners__slide { flex-basis: min(168px, 44vw); }
}

@media print {
  .sp-etp .sp-banners { display: none !important; }
}

/* source: test-overrides/ui-redesign/etp/responsive.css */
@media (max-width: 1280px) {
  .sp-etp .header__wrapper, .sp-etp .wrapper, .sp-etp .content_indent { padding-inline: 20px; }
  .sp-etp nav.h-menu .hm-link { padding-inline: 9px !important; font-size: 13px !important; }
}
@media (max-width: 359px) {
  body.sp-etp:has(#lk-toggle:checked) aside.left_side {
    right: 16px !important;
    width: calc(100vw - 32px) !important;
    max-width: calc(100vw - 32px) !important;
  }
  .sp-etp .login_form .spf-tab {
    padding-inline: 6px !important;
    font-size: 12px !important;
  }
}
@media (max-width: 1199px) {
  .sp-etp .topstrip-inner { padding-inline: 16px; }
  .sp-etp .topstrip-status__sep,
  .sp-etp .topstrip-status__secondary,
  .sp-etp .topstrip-contacts { display: none !important; }
  .sp-etp .header__wrapper { padding-inline: 16px !important; }
  .sp-etp .h-light { gap: 6px; }
  .sp-etp .sp-etp-menu-button { display: flex !important; flex-direction: column; align-items: center; justify-content: center; flex: 0 0 44px; width: 44px !important; margin-left: auto !important; }
  .sp-etp .sp-etp-menu-button span { flex: 0 0 2px !important; height: 2px !important; min-height: 2px !important; margin: 0 auto !important; padding: 0 !important; }
  .sp-etp .h-cta { margin-left: 0 !important; }
  .sp-etp .h-cta-btn--lk { width: 44px; min-width: 44px; min-height: 44px; padding: 0; }
  .sp-etp .h-cta-btn--logout { width: 44px; min-width: 44px; min-height: 44px; }
  .sp-etp .h-cta-btn__label,
  .sp-etp .h-cta-btn__caret { display: none; }
  .sp-etp nav.h-menu {
    position: fixed !important;
    inset: var(--sp-topstrip-h, 32px) 0 0 auto !important;
    z-index: 120 !important;
    display: block !important;
    box-sizing: border-box !important;
    width: min(328px, calc(100vw - 40px)) !important;
    max-width: calc(100vw - 40px) !important;
    height: calc(100dvh - var(--sp-topstrip-h, 32px)) !important;
    min-height: 0 !important;
    margin: 0 !important;
    padding: 60px 12px 24px !important;
    overflow-x: hidden !important;
    overflow-y: auto !important;
    overscroll-behavior: contain;
    border-left: 1px solid var(--ink-100) !important;
    background: var(--surface-card) !important;
    box-shadow: var(--shadow-lg) !important;
    transform: translateX(100%) !important;
    /* A closed drawer carries aria-hidden="true"; without visibility:hidden
       its links stay in the tab order and focus lands off-screen (WCAG:
       focusable content must not be aria-hidden). Visibility switches back
       instantly on open and only after the slide-out on close. */
    visibility: hidden !important;
    transition: transform var(--duration-base) var(--easing-standard),
                visibility 0s var(--duration-base) !important;
  }
  .sp-etp-nav-open nav.h-menu {
    transform: translateX(0) !important;
    visibility: visible !important;
    transition: transform var(--duration-base) var(--easing-standard),
                visibility 0s !important;
  }
  .sp-etp-nav-open { overflow: hidden !important; }
  .sp-etp-nav-open .nav-backdrop {
    top: var(--sp-topstrip-h, 32px) !important;
    z-index: 90 !important;
    opacity: 1 !important;
    visibility: visible !important;
    pointer-events: auto !important;
  }
  .sp-etp nav.h-menu > ul {
    display: grid !important;
    grid-template-columns: minmax(0, 1fr) !important;
    align-content: start !important;
    align-items: stretch !important;
    gap: 4px !important;
    box-sizing: border-box !important;
    width: 100% !important;
    min-width: 0 !important;
    height: auto !important;
    overflow: visible !important;
  }
  .sp-etp nav.h-menu > ul > li {
    display: block !important;
    box-sizing: border-box !important;
    width: 100% !important;
    min-width: 0 !important;
    max-width: 100% !important;
    height: auto !important;
    overflow: visible !important;
  }
  .sp-etp nav.h-menu > ul > li.sp-etp-has-submenu {
    display: grid !important;
    grid-template-columns: minmax(0, 1fr) 44px !important;
    align-items: start !important;
  }
  .sp-etp nav.h-menu .hm-link {
    display: flex !important;
    box-sizing: border-box !important;
    width: 100% !important;
    min-width: 0 !important;
    max-width: 100% !important;
    min-height: 44px !important;
    justify-content: flex-start !important;
    padding: 10px 12px !important;
    color: var(--ink-700) !important;
    line-height: 1.35 !important;
    white-space: normal !important;
    overflow-wrap: anywhere;
  }
  .sp-etp nav.h-menu .hm-link > .caret { display: none !important; }
  .sp-etp .sp-etp-nav-close,
  .sp-etp .sp-etp-submenu-toggle {
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    box-sizing: border-box !important;
    width: 44px !important;
    height: 44px !important;
    min-width: 44px !important;
    min-height: 44px !important;
    border: 1px solid var(--ink-100) !important;
    border-radius: var(--r-sm) !important;
    background: var(--surface-card) !important;
    color: var(--ink-700) !important;
    cursor: pointer !important;
  }
  /* The drawer's close control is the burger in its open state — give it the
     same tinted brand surface so it reads as one continuous control. */
  .sp-etp .sp-etp-nav-close {
    border-color: var(--brand-blue-100, #DDE9FB) !important;
    background: var(--brand-blue-050, #F1F6FE) !important;
    color: var(--brand-blue-600, #0553C7) !important;
  }
  .sp-etp .sp-etp-nav-close {
    position: absolute !important;
    top: 8px !important;
    right: 12px !important;
    z-index: 2 !important;
    font-size: 26px !important;
    line-height: 1 !important;
  }
  .sp-etp .sp-etp-submenu-toggle {
    grid-column: 2 !important;
    grid-row: 1 !important;
    border-color: transparent !important;
    font-size: 14px !important;
    transition: color var(--duration-fast) var(--easing-standard), background var(--duration-fast) var(--easing-standard) !important;
  }
  .sp-etp .sp-etp-nav-close:hover,
  .sp-etp .sp-etp-nav-close:focus-visible,
  .sp-etp .sp-etp-submenu-toggle:hover,
  .sp-etp .sp-etp-submenu-toggle:focus-visible {
    border-color: var(--brand-blue-100) !important;
    background: var(--brand-blue-050) !important;
    color: var(--brand-blue-700) !important;
  }
  .sp-etp .sp-etp-submenu-toggle span {
    display: block !important;
    transition: transform var(--duration-base) var(--easing-standard) !important;
  }
  .sp-etp .sp-etp-submenu-open > .sp-etp-submenu-toggle span { transform: rotate(180deg) !important; }
  .sp-etp nav.h-menu .sp-etp-has-submenu > .hm-sub {
    position: static !important;
    top: auto !important;
    left: auto !important;
    grid-column: 1 / -1 !important;
    display: none !important;
    box-sizing: border-box !important;
    width: 100% !important;
    min-width: 0 !important;
    max-width: 100% !important;
    margin: 4px 0 8px !important;
    padding: 4px !important;
    overflow: visible !important;
    border: 1px solid var(--ink-100) !important;
    border-radius: var(--r-sm) !important;
    background: var(--surface-subtle) !important;
    box-shadow: none !important;
    opacity: 0 !important;
    visibility: hidden !important;
    pointer-events: none !important;
    transform: none !important;
    transition: none !important;
  }
  .sp-etp nav.h-menu .sp-etp-has-submenu.sp-etp-submenu-open > .hm-sub {
    display: grid !important;
    opacity: 1 !important;
    visibility: visible !important;
    pointer-events: auto !important;
    transform: none !important;
  }
  .sp-etp nav.h-menu .hm-sub li { width: 100% !important; min-width: 0 !important; }
  .sp-etp nav.h-menu .hm-sub a { box-sizing: border-box !important; width: 100% !important; min-width: 0 !important; min-height: 44px !important; }
}
@media (min-width: 769px) and (max-width: 1024px) {
  .sp-etp table.searchPanel .queryPanel > table.sp-table--layout > tbody > tr:last-child > td > table.sp-table--layout > tbody > tr {
    display: grid !important;
    grid-template-columns: minmax(0, 1fr) auto !important;
    align-items: center !important;
    gap: 16px !important;
    width: 100% !important;
  }
  .sp-etp table.searchPanel .queryPanel > table.sp-table--layout > tbody > tr:last-child > td > table.sp-table--layout > tbody > tr > td {
    display: block !important;
    width: auto !important;
    min-width: 0 !important;
    max-width: 100% !important;
  }
  .sp-etp table.searchPanel table.filterContainer.sp-table--layout {
    display: block !important;
    width: fit-content !important;
    max-width: 100% !important;
  }
  .sp-etp table.searchPanel table.filterContainer.sp-table--layout > tbody,
  .sp-etp table.searchPanel table.filterContainer.sp-table--layout > tbody > tr {
    display: flex !important;
    width: max-content !important;
    min-width: 100% !important;
    align-items: stretch !important;
  }
  .sp-etp table.searchPanel table.filterContainer.sp-table--layout > tbody > tr > td {
    display: block !important;
    width: auto !important;
    min-width: 0 !important;
  }
  .sp-etp table.searchPanel .queryPanel > table.sp-table--layout > tbody > tr:last-child > td > table.sp-table--layout > tbody > tr > td:last-child > table.sp-table--layout {
    display: block !important;
    width: auto !important;
    max-width: 100% !important;
  }
  .sp-etp table.searchPanel .queryPanel > table.sp-table--layout > tbody > tr:last-child > td > table.sp-table--layout > tbody > tr > td:last-child > table.sp-table--layout > tbody,
  .sp-etp table.searchPanel .queryPanel > table.sp-table--layout > tbody > tr:last-child > td > table.sp-table--layout > tbody > tr > td:last-child > table.sp-table--layout > tbody > tr {
    display: flex !important;
    align-items: center !important;
    width: auto !important;
  }
  .sp-etp table.searchPanel .queryPanel > table.sp-table--layout > tbody > tr:last-child > td > table.sp-table--layout > tbody > tr > td:last-child > table.sp-table--layout > tbody > tr > td {
    display: block !important;
    width: auto !important;
    min-width: 0 !important;
  }
}
@media (max-width: 768px) {
  .sp-etp .sp-field { grid-template-columns: minmax(0, 1fr); gap: 5px; }
  .sp-etp .sp-table-scroll--data { width: 100%; max-width: 100%; overflow: visible !important; border: 0 !important; background: transparent; }
  .sp-etp table.sp-table--data { display: block !important; width: 100% !important; max-width: 100% !important; min-width: 0 !important; table-layout: auto !important; overflow: visible !important; border: 0 !important; border-collapse: separate !important; background: transparent !important; }
  .sp-etp .sp-table--data colgroup { display: none !important; }
  .sp-etp .sp-table--data thead { display: block !important; position: absolute !important; width: 1px !important; height: 1px !important; overflow: hidden !important; clip: rect(0,0,0,0) !important; clip-path: inset(50%) !important; white-space: nowrap !important; }
  .sp-etp .sp-table--data tbody { display: grid !important; width: 100% !important; gap: 12px; }
  .sp-etp .sp-table--data tbody tr { display: grid !important; width: 100% !important; gap: 10px; margin: 0 !important; padding: 14px; border: 1px solid var(--ink-100); border-radius: var(--r-md); background: #fff; box-shadow: var(--shadow-xs); }
  .sp-etp .sp-table--data tbody td { display: grid !important; grid-template-columns: minmax(112px, 36%) minmax(0, 1fr); width: 100% !important; max-width: 100% !important; height: auto !important; min-width: 0 !important; gap: 10px; padding: 0 !important; border: 0 !important; background: transparent !important; overflow: visible !important; overflow-wrap: anywhere; white-space: normal !important; }
  .sp-etp .sp-table--data td::before { content: attr(data-label); color: var(--ink-500); font-size: 13px; font-weight: 600; }
  .sp-etp .sp-table--data td > *, .sp-etp .sp-table--data td a { min-width: 0; max-width: 100%; white-space: normal !important; overflow-wrap: anywhere; }
  .sp-etp table.filterContainer { display: block !important; width: 100% !important; max-width: 100% !important; overflow: visible !important; }
  .sp-etp table.filterContainer > tbody { display: block !important; width: 100% !important; }
  .sp-etp table.filterContainer > tbody > tr,
  .sp-etp table.searchPanel table.filterContainer.sp-table--layout > tbody > tr { display: grid !important; grid-template-columns: repeat(2, minmax(0, 1fr)) !important; width: 100% !important; min-width: 0 !important; gap: 4px; }
  .sp-etp table.filterContainer > tbody > tr > td { display: block !important; width: auto !important; min-width: 0 !important; }
  .sp-etp table.filterContainer .filterItem { width: 100% !important; min-width: 0 !important; padding-inline: 8px !important; white-space: normal !important; text-align: center; }
  .sp-etp .sp-table-scroll--matrix { overflow-x: auto; overscroll-behavior-inline: contain; }
  .sp-etp .sp-table--matrix { min-width: max-content; }
  .sp-etp .sp-dialog { width: calc(100vw - 24px) !important; max-width: none; max-height: calc(100vh - 24px); }
}
@media (max-width: 480px) {
  .sp-etp .sp-table--data tbody td { grid-template-columns: minmax(0, 1fr); gap: 2px; }
}
@media (max-width: 480px) {
  /* Авторизованному на телефоне нужно место под кнопку выхода рядом с ЛК:
     бургер 44 + ЛК 44 + выход 44 с зазорами не помещаются рядом с логотипом
     с подписью на 390–430px. Подпись прячем (как и для всех на ≤375px),
     сам логотип остаётся; у гостя кнопки нет — его шапка не меняется. */
  .sp-etp:has(.h-cta-btn--logout) .h-logo .logo-text small { display: none !important; }
}
@media (max-width: 375px) {
  .sp-etp .header__wrapper, .sp-etp .wrapper, .sp-etp .content_indent { padding-inline: 12px !important; }
  body.sp-etp { padding-top: 96px !important; }
  .sp-etp .header.ds-header { height: 64px !important; min-height: 64px; }
  .sp-etp .header__wrapper, .sp-etp .h-light { min-height: 64px; }
  .sp-etp .h-logo .logo-text { font-size: 13px !important; }
  .sp-etp .h-logo .logo-text small { display: none !important; }
  .sp-etp .content_indent .sp-button, .sp-etp .content_indent .gwt-Button { max-width: 100%; }
}
@media (max-width: 320px) {
  .sp-etp .header__wrapper { min-height: 64px; }
  .sp-etp .header img.logo-mark { height: 30px !important; }
  .sp-etp .logo-lockup { gap: 7px; }
  .sp-etp .h-logo .logo-text { font-size: 12px !important; }
  .sp-etp .sp-dialog { width: calc(100vw - 16px) !important; }
}
@media (max-width: 1024px) {
  /* Registration, activation and password recovery keep the inline login card
     in the left table cell. On a phone that card used to push the actual page
     (its heading and form) a full screen down. Show the content first and the
     secondary login card after it; the header button still opens the same card
     as a popover. */
  body.sp-etp.sp-family-authentication:not(.sp-participant-cabinet):not([data-sp-route="/app/Login/page/"]) #content_table.ds-page-table > tbody > tr {
    display: flex !important;
    flex-direction: column !important;
    width: 100% !important;
  }
  body.sp-etp.sp-family-authentication:not(.sp-participant-cabinet):not([data-sp-route="/app/Login/page/"]) #content_table.ds-page-table > tbody > tr > td.ct-cell.ct-left {
    order: 2 !important;
    margin-top: 24px !important;
  }
  body.sp-etp.sp-family-authentication:not(.sp-participant-cabinet):not([data-sp-route="/app/Login/page/"]) #content_table.ds-page-table > tbody > tr > td.ct-cell.ds-content-cell {
    order: 1 !important;
  }
}

@media (max-width: 768px) {
  /* two lines are enough on a phone card */
  .sp-etp .sp-table--data td.sp-cell--clamp,
  .sp-etp .sp-table--data td.sp-cell--clamp > div { -webkit-line-clamp: 2 !important; line-clamp: 2 !important; }
  /* Phones have no hover, so the type shows as icon + caption on one line
     instead of an icon whose tooltip can never be opened. */
  .sp-etp .sp-table--data .offerType.sp-offer-type--empty {
    width: auto !important;
    max-width: 100% !important;
    min-width: 0 !important;
    height: auto !important;
    min-height: 28px !important;
    gap: 8px !important;
    padding: 4px 12px 4px 8px !important;
    border-radius: var(--r-pill, 999px) !important;
    cursor: default !important;
  }
  .sp-etp .sp-table--data .offerType.sp-offer-type--empty::before { width: 16px; height: 16px; flex: 0 0 16px; }
  /* Phones have no hover, so the floating tooltip never fires and the caption
     must be readable inline. This undoes the desktop sr-only recipe in full —
     clip/clip-path/width/height included, or the label collapses to 1×1 and
     the type becomes an unlabelled icon. */
  .sp-etp .sp-table--data .offerType.sp-offer-type--empty .sp-offer-type__label {
    position: static !important;
    clip: auto !important;
    clip-path: none !important;
    width: auto !important;
    height: auto !important;
    max-width: none !important;
    padding: 0 !important;
    transform: none !important;
    border-radius: 0 !important;
    background: transparent !important;
    color: inherit !important;
    font: 600 12px/1.3 var(--font-body) !important;
    box-shadow: none !important;
    opacity: 1 !important;
    visibility: visible !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
    white-space: normal !important;
    transition: none !important;
  }
}

/* ── Вложенные таблицы внутри карточек (2026-09-03) ───────────────────────
   На телефоне строки data-таблиц становятся карточками, но правила были
   написаны потомковыми селекторами и захватывали строки/ячейки таблиц,
   вложенных в ячейку (диалог «Добавить предложение по позиции»: CellTable с
   GWT-виджетами внутри — пустые «пилюли» строк ошибок, карточка в карточке).
   Вложенным таблицам возвращаем табличную раскладку. */
@media (max-width: 768px) {
  .sp-etp .sp-table--data > tbody > tr > td table { display: table !important; width: 100% !important; max-width: 100% !important; margin: 0 !important; border: 0 !important; box-shadow: none !important; background: transparent !important; }
  .sp-etp .sp-table--data > tbody > tr > td table > tbody { display: table-row-group !important; gap: 0 !important; width: auto !important; }
  .sp-etp .sp-table--data > tbody > tr > td table > thead { display: table-header-group !important; position: static !important; width: auto !important; height: auto !important; overflow: visible !important; clip: auto !important; clip-path: none !important; white-space: normal !important; }
  .sp-etp .sp-table--data > tbody > tr > td table > colgroup { display: table-column-group !important; }
  .sp-etp .sp-table--data > tbody > tr > td table tr { display: table-row !important; width: auto !important; gap: 0 !important; margin: 0 !important; padding: 0 !important; border: 0 !important; border-radius: 0 !important; background: transparent !important; box-shadow: none !important; }
  .sp-etp .sp-table--data > tbody > tr > td table td,
  .sp-etp .sp-table--data > tbody > tr > td table th { display: table-cell !important; grid-template-columns: none !important; width: auto !important; max-width: none !important; gap: 0 !important; padding: 2px 4px !important; vertical-align: top; }
  .sp-etp .sp-table--data > tbody > tr > td table td::before,
  .sp-etp .sp-table--data > tbody > tr > td table th::before { content: none !important; }
  /* одиночные ячейки с полем занимают всю ширину карточки */
  .sp-etp .sp-table--data > tbody > tr > td table td.textFieldValue > .sp-control,
  .sp-etp .sp-table--data > tbody > tr > td table td.textFieldValue > .sp-control-shell { width: 100% !important; max-width: 100% !important; box-sizing: border-box !important; }
}

/* source: test-overrides/ui-redesign/etp/audit-polish.css */
/* ── Правки по аудиту dev, пункты 7–16 ─────────────────────────────────
   Каждый блок закрывает измеренный дефект; замеры — в design.md
   (аудит 2026-09-01). Файл идёт после legacy-* и tables/responsive, поэтому
   побеждает их при равной специфичности. */

/* ── 7. Заголовок карточки процедуры ──────────────────────────────────────
   Легаси: <h2 class="inlineCardTitle">Лот <span.identifier>0013326067DP.lot1
   </span> <span>|</span> <span.identifierPrice>1 000.00 руб.</span></h2> и
   под ним <div class="etpp-small">перенос торгов</div>. Скрипт (audit-polish
   в shell.js) переносит предмет в заголовок и помечает h2 классом
   sp-card-title; идентификатор и цена становятся чипами. Формат цены — как
   есть (решение пользователя). */
.sp-etp .sp-card-title {
  display: flex !important;
  flex-wrap: wrap !important;
  align-items: center !important;
  gap: 8px 10px !important;
  margin: 0 0 18px !important;
}
.sp-etp .sp-card-title__subject {
  flex: 1 1 100% !important;
  font-family: var(--font-display, 'Onest', 'Geologica', sans-serif) !important;
  font-size: clamp(20px, 2.2vw, 26px) !important;
  font-weight: 600 !important;
  line-height: 1.3 !important;
  letter-spacing: -0.3px !important;
  color: var(--navy, #0C1E45) !important;
}
.sp-etp .sp-card-title__kind,
.sp-etp .sp-card-title__lot,
.sp-etp .sp-card-title .identifier,
.sp-etp .sp-card-title .identifierPrice {
  display: inline-flex !important;
  align-items: center !important;
  padding: 4px 10px !important;
  border-radius: 999px !important;
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 13px !important;
  font-weight: 600 !important;
  line-height: 1.3 !important;
  letter-spacing: 0 !important;
  white-space: nowrap !important;
}
.sp-etp .sp-card-title__kind { background: var(--brand-blue-050, #F1F6FE) !important; color: var(--brand-blue-700, #0442A3) !important; }
.sp-etp .sp-card-title .identifier { background: var(--ink-050, #F5F8FB) !important; color: var(--ink-700, #2C3E52) !important; font-family: var(--font-mono, monospace) !important; font-weight: 500 !important; }
.sp-etp .sp-card-title .identifierPrice { background: var(--brand-orange-050, #FEF3EC) !important; color: var(--brand-orange-700, #A43E12) !important; }
.sp-etp .sp-card-title .sp-card-title__sep { display: none !important; }
/* «.lot1» в идентификаторе — служебный суффикс, наружу показываем номер лота чипом */
.sp-etp .sp-card-title .sp-card-title__lot { background: var(--ink-050, #F5F8FB) !important; color: var(--ink-700, #2C3E52) !important; }
.sp-etp .etpp-small.sp-card-title__moved { display: none !important; }

/* ── Меню «Личный кабинет»: группы «заголовок → пункты» ──────────────────
   Легаси-разметка ставит заголовок <b> ПЕРЕД <hr>, а margin групп обнулён
   (.login_form .spf-line { margin: 0 }), поэтому заголовок читался как хвост
   предыдущей группы, а линия — как разрыв между ним и его же пунктами.
   Теперь разделитель и воздух — НАД группой, заголовок — капителью, пункты
   плотно под ним. Заголовки помечены в Border.html классом .spf-group-title;
   у карточки пользователя (без заголовка) <hr> остаётся, но с ровным отступом.
   Одинаково для администратора и участника — разметка групп у них общая. */
.sp-etp .login_form .spf-line:has(> .spf-group-title) {
  margin-top: 18px !important;
  padding-top: 16px !important;
  border-top: 1px solid var(--ink-100, #E3EAF2) !important;
  gap: 6px !important;
}
.sp-etp .login_form .spf-line:has(> .spf-group-title) > hr { display: none !important; }
.sp-etp .login_form .spf-group-title {
  display: block !important;
  margin: 0 0 6px !important;
  font-family: var(--font-body, 'Geologica', sans-serif) !important;
  font-size: 11px !important;
  line-height: 1.3 !important;
  font-weight: 700 !important;
  letter-spacing: .08em !important;
  text-transform: uppercase !important;
  color: var(--ink-500, #6F7E92) !important;
}
.sp-etp .login_form .spf-line.block-margin-bottom > hr {
  margin: 12px 0 !important;
  border: 0 !important;
  border-top: 1px solid var(--ink-100, #E3EAF2) !important;
}
.sp-etp .login_form .spf-line:has(> .ecpf-submit) {
  margin-top: 20px !important;
  padding-top: 16px !important;
  border-top: 1px solid var(--ink-100, #E3EAF2) !important;
}

/* ── 8. Заголовки разделов внутри карточек — один стиль ───────────────────
   «Краткие сведения лота» (h3.inlineCardTitle в .clearfix.nomargin) получал
   inline-block и короткую черту, остальные h3 — синюю линию во всю ширину.
   Оставляем линию во всю ширину всем. */
.sp-etp .content_indent .clearfix.nomargin h3.inlineCardTitle,
.sp-etp .content_indent h3.inlineCardTitle {
  display: block !important;
  width: 100% !important;
  margin: 28px 0 14px !important;
  padding-bottom: 8px !important;
  border-bottom: 2px solid var(--brand-blue-600, #0553C7) !important;
  font-size: 17px !important;
}
.sp-etp .content_indent .clearfix.nomargin h3.inlineCardTitle::after,
.sp-etp .content_indent h3.inlineCardTitle::after { content: none !important; }
.sp-etp .content_indent .clearfix.nomargin { margin: 0 !important; }
/* заголовок с кнопкой справа остаётся строкой */
.sp-etp .content_indent .clearfix.nomargin.line-margin-bottom h3.inlineCardTitle,
.sp-etp .content_indent .cardTitleRow h3.inlineCardTitle { width: auto !important; flex: 1 1 auto !important; margin: 0 !important; }

/* ── 11. Подписи фактов: без моноширинного капса ──────────────────────────
   «НАЧАЛЬНАЯ (МАКСИМАЛЬНАЯ) ЦЕНА ДОГОВОРА (ЛОТА)» капсом 10–13px мономи
   переносилась на три строки, а во вложенной таблице цены тем же стилем
   были набраны и значения. Подписи — обычный шрифт 13px серым, значения —
   14px обычного начертания. */
.sp-etp table.sp-table--form td.oit-h,
.sp-etp table.sp-table--form th,
.sp-etp .info_table td:first-child.oit-h {
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  color: var(--ink-600, #5E7A90) !important;
  line-height: 1.45 !important;
}
.sp-etp table.sp-table--form td:not(.oit-h) {
  font-size: 14px !important;
  font-weight: 500 !important;
  color: var(--ink-1000, #0C1E45) !important;
}
/* вложенная таблица цены: значения не должны выглядеть заголовками */
.sp-etp table.sp-table--form table.sp-table--form td,
.sp-etp table.sp-table--form table.sp-table--form th {
  font-family: 'Geologica', Arial, sans-serif !important;
  text-transform: none !important;
  letter-spacing: 0 !important;
  font-size: 13.5px !important;
}
.sp-etp table.sp-table--form table.sp-table--form td:first-child { font-weight: 600 !important; color: var(--ink-1000, #0C1E45) !important; }
.sp-etp table.sp-table--form table.sp-table--form td:last-child:not(:first-child) { color: var(--ink-600, #5E7A90) !important; font-weight: 400 !important; }

/* ── 12. Мелкое и бледное ─────────────────────────────────────────────────
   Стрелка «▾» была 10px при контрасте 3,11:1; подписи «Логин/Пароль» — 10px
   моноширинным капсом. */
.sp-etp .filter-fab .filter-fab__caret {
  font-size: 14px !important;
  color: var(--ink-600, #5E7A90) !important;
}
/* та же стрелка в пунктах меню шапки: 10px при 3,11:1 */
.sp-etp .hm-link .caret {
  font-size: 12px !important;
  color: var(--ink-600, #5E7A90) !important;
}
.sp-etp .login_form .spf-label,
.sp-etp #nmck-lk-panel .spf-label {
  font-family: 'Geologica', Arial, sans-serif !important;
  font-size: 12px !important;
  font-weight: 600 !important;
  letter-spacing: 0.02em !important;
  text-transform: none !important;
  color: var(--ink-600, #5E7A90) !important;
}
/* «Для организатора» на вкладке было 4,23:1 — на одну ступень темнее */
.sp-etp .login_form .spf-tab { color: var(--ink-700, #2C3E52) !important; }

/* ── 13. Карточка входа: без пустой полосы и двойной рамки ────────────────
   Между «Личный кабинет» и вкладками оставалась полоса 16px от
   .separate_form, а сама форма обводилась второй рамкой внутри карточки. */
.sp-etp .login_form > .title { padding: 14px 20px 12px !important; }
.sp-etp .login_form .separate_form { padding: 0 20px 20px !important; }
.sp-etp .login_form .spf-tabs { margin: 0 -20px 16px !important; }
.sp-etp .login_form .separate_form > .sp-panel,
.sp-etp .login_form .separate_form > div[class*="card"],
.sp-etp .login_form .separate_form > .spf-form {
  border: 0 !important;
  box-shadow: none !important;
  padding: 0 !important;
}

/* ── 10. Цели нажатия на телефоне ─────────────────────────────────────────
   Названия процедур 15px, «Регистрация участника»/«Восстановить пароль»,
   «загрузить», ссылки подвала — все ниже 44px. Ссылкам в таблицах, списках
   и подвале даём вертикальные отступы на сенсорных экранах; ссылки внутри
   текста не трогаем. */
@media (max-width: 767px) and (pointer: coarse) {
  .sp-etp .sp-table--data td a,
  .sp-etp .login_form .spf-bottom a,
  .sp-etp .login_form .spf-reg a,
  .sp-etp #nmck-lk-panel .spf-bottom a,
  .sp-etp .footer_wrap.ds-footer .f-copy a,
  .sp-etp .sp-standalone-footer a,
  .sp-etp .content_indent > .spf-line a,
  .sp-etp .content_indent table.sp-table--form td a,
  .sp-etp .certificateTable a {
    display: inline-block !important;
    padding: 8px 0 !important;
    min-height: 44px !important;
    box-sizing: border-box !important;
    line-height: 1.5 !important;
  }
  .sp-etp .footer_wrap.ds-footer .f-copy a { padding: 10px 4px !important; }
}

/* ── 9. Компактные карточки результатов на телефоне ───────────────────────
   Было: семь строк «подпись / значение», ~420px на результат. Стало:
   название заголовком, чип типа, факты в две колонки, вся карточка ведёт
   в процедуру. Столбцы: 1 Тип, 2 Вид процедуры, 3 Предмет торгов,
   4 Организатор, 5 НМЦД, 6 Дата публикации, 7 Дата и время завершения. */
@media (max-width: 767px) {
  .sp-etp.sp-family-search-list .sp-table--data tbody tr {
    display: grid !important;
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    grid-template-areas:
      "subject subject"
      "type kind"
      "org org"
      "price end"
      "pub pub" !important;
    gap: 8px 12px !important;
    padding: 14px 14px 12px !important;
    position: relative !important;
  }
  .sp-etp.sp-family-search-list .sp-table--data tbody td { grid-template-columns: minmax(0, 1fr) !important; gap: 2px !important; }
  .sp-etp.sp-family-search-list .sp-table--data tbody td:nth-child(1) { grid-area: type; }
  .sp-etp.sp-family-search-list .sp-table--data tbody td:nth-child(2) { grid-area: kind; }
  .sp-etp.sp-family-search-list .sp-table--data tbody td:nth-child(3) { grid-area: subject; }
  .sp-etp.sp-family-search-list .sp-table--data tbody td:nth-child(4) { grid-area: org; }
  .sp-etp.sp-family-search-list .sp-table--data tbody td:nth-child(5) { grid-area: price; }
  .sp-etp.sp-family-search-list .sp-table--data tbody td:nth-child(6) { grid-area: pub; }
  .sp-etp.sp-family-search-list .sp-table--data tbody td:nth-child(7) { grid-area: end; }
  /* название — заголовок карточки, без подписи «Предмет торгов» */
  .sp-etp.sp-family-search-list .sp-table--data tbody td:nth-child(3)::before { display: none !important; }
  .sp-etp.sp-family-search-list .sp-table--data tbody td:nth-child(3) a {
    display: block !important;
    font-size: 16px !important;
    font-weight: 700 !important;
    line-height: 1.35 !important;
    color: var(--navy, #0C1E45) !important;
    padding: 0 !important;
    min-height: 0 !important;
  }
  /* чип типа говорит сам за себя — подпись «Тип» лишняя */
  .sp-etp.sp-family-search-list .sp-table--data tbody td:nth-child(1)::before { display: none !important; }
  /* длинные подписи колонок на телефоне занимали по три строки — короткие
     синонимы; полный текст остаётся в data-label для читалок */
  .sp-etp.sp-family-search-list .sp-table--data tbody td:nth-child(2)::before { content: 'Процедура' !important; }
  .sp-etp.sp-family-search-list .sp-table--data tbody td:nth-child(5)::before { content: 'НМЦ' !important; }
  .sp-etp.sp-family-search-list .sp-table--data tbody td:nth-child(6)::before { content: 'Опубликовано' !important; }
  .sp-etp.sp-family-search-list .sp-table--data tbody td:nth-child(7)::before { content: 'Приём заявок до' !important; }
  .sp-etp.sp-family-search-list .sp-table--data td::before { font-size: 11px !important; font-weight: 600 !important; letter-spacing: 0.04em !important; text-transform: uppercase !important; color: var(--ink-500, #6F7E92) !important; }
  .sp-etp.sp-family-search-list .sp-table--data tbody td { font-size: 14px !important; line-height: 1.4 !important; }
  /* организатор — название целиком: карточка растёт под текст (14.09.2026;
     раньше здесь были две строки с обрезкой и подсказка) */
  .sp-etp.sp-family-search-list .sp-table--data tbody td:nth-child(4) { display: block !important; overflow: visible !important; }
  .sp-etp.sp-family-search-list .sp-table--data tbody td:nth-child(4)::before { display: block !important; }
  .sp-etp.sp-family-search-list .sp-table--data tbody td:nth-child(4) > * {
    display: block !important; -webkit-line-clamp: none !important; line-clamp: none !important; overflow: visible !important; overflow-wrap: anywhere !important;
  }
  /* вся карточка ведёт в процедуру: растягиваем область ссылки */
  .sp-etp.sp-family-search-list .sp-table--data tbody td:nth-child(3) a::after {
    content: '' !important; position: absolute !important; inset: 0 !important; border-radius: inherit !important;
  }
  .sp-etp.sp-family-search-list .sp-table--data tbody tr:active { background: var(--brand-blue-050, #F1F6FE) !important; }
}

/* ── 15. Обрезанные названия организаторов ────────────────────────────────
   На десктопе «МУНИЦИПАЛЬНОЕ БЮДЖЕТНОЕ УЧРЕЖДЕНИЕ…» — три строки с обрезкой;
   полное название — в title (ставит скрипт) и в data-sp-tip. */
.sp-etp .sp-table--data td[data-sp-tip] { cursor: help; }

/* ── 16. Скрытый заголовок страницы для читалок ───────────────────────────
   На странице входа h1 не было: скрипт добавляет визуально скрытый h1 с
   названием страницы. */
.sp-etp .sp-visually-hidden {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  margin: -1px !important;
  padding: 0 !important;
  overflow: hidden !important;
  clip: rect(0 0 0 0) !important;
  clip-path: inset(50%) !important;
  white-space: nowrap !important;
  border: 0 !important;
}

/* source: test-overrides/ui-redesign/etp/breadcrumbs.css */
/* ── Хлебные крошки (breadcrumbs.js, 14.09.2026) ──────────────────────────
   Строка пути над заголовком страницы: «Главная → Поиск торгов → <процедура>».
   Вендорная полоса в баннере торговой секции скрывается, чтобы путь на странице
   был один. */
.sp-etp .sp-breadcrumbs {
  /* Легаси-правила оформляют любой <nav> как тёмную панель меню — гасим их:
     крошки это навигационный ориентир, а не панель. */
  background: transparent !important;
  border: 0 !important;
  box-shadow: none !important;
  min-height: 0 !important;
  color: var(--ink-500, #6F7E92) !important;
  margin: 0 0 12px !important;
  padding: 0 !important;
  max-width: 100% !important;
  overflow-x: auto !important;
  overscroll-behavior-x: contain !important;
  scrollbar-width: none !important;
}
.sp-etp .sp-breadcrumbs::-webkit-scrollbar { display: none !important; }

.sp-etp .sp-breadcrumbs__list {
  display: flex !important;
  flex-wrap: wrap !important;
  align-items: center !important;
  gap: 2px 6px !important;
  margin: 0 !important;
  padding: 0 !important;
  list-style: none !important;
}
.sp-etp .sp-breadcrumbs__item {
  display: inline-flex !important;
  align-items: center !important;
  margin: 0 !important;
  padding: 0 !important;
  list-style: none !important;
  min-width: 0 !important;
}
/* Разделитель — стрелка перед каждым элементом, кроме первого. */
.sp-etp .sp-breadcrumbs__item + .sp-breadcrumbs__item::before {
  content: "→" !important;
  margin-right: 6px !important;
  color: var(--ink-400, #8C9AAD) !important;
  font-size: 12px !important;
  line-height: 1 !important;
}
.sp-etp .sp-breadcrumbs__link {
  font-family: var(--font-body, 'Geologica', Arial, sans-serif) !important;
  font-size: 13px !important;
  line-height: 1.35 !important;
  color: var(--brand-blue-700, #0849B3) !important;
  text-decoration: none !important;
  border-radius: var(--r-sm, 6px) !important;
  padding: 2px 0 !important;
}
.sp-etp a.sp-breadcrumbs__link:hover,
.sp-etp a.sp-breadcrumbs__link:focus-visible { text-decoration: underline !important; }
.sp-etp .sp-breadcrumbs__link[aria-current="page"] {
  color: var(--ink-600, #4A5768) !important;
  font-weight: 600 !important;
  cursor: default !important;
}

/* Телефон: путь в одну строку с горизонтальной прокруткой. Промежуточные шаги не
   прячем — именно они и нужны для перехода на уровень выше; вместо этого обрезаем
   подпись текущей страницы, она бывает длиной в предложение. */
@media (max-width: 560px) {
  .sp-etp .sp-breadcrumbs__list { flex-wrap: nowrap !important; white-space: nowrap !important; }
  .sp-etp .sp-breadcrumbs__link { font-size: 12px !important; }
  .sp-etp .sp-breadcrumbs__item:last-child .sp-breadcrumbs__link {
    display: inline-block !important;
    max-width: 60vw !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
    white-space: nowrap !important;
    vertical-align: bottom !important;
  }
}

/* Вендорная полоса крошек в баннере секции: путь теперь один и живёт над заголовком. */
.sp-etp .header-section-breadcrumbs { display: none !important; }

@media print {
  .sp-etp .sp-breadcrumbs { display: none !important; }
}
