/**
 * SCHUV PPE — canonical UI (tables, buttons, page-specific).
 * {% static 'ppe/css/ppe-ui.css' %} in ppe/base.html
 */

/* === Global layout, tables, buttons === */
    .status-overdue { color: #dc3545; font-weight: 600; }
    .status-done { color: #198754; }
    .nav-ppe {
      background: var(--ppe-navbar-bg);
      border-bottom: 1px solid var(--ppe-navbar-border);
    }
    .nav-ppe .nav-link {
      color: var(--ppe-navbar-text);
    }
    .nav-ppe .nav-link:hover,
    .nav-ppe .nav-link:focus {
      color: var(--ppe-navbar-link-hover);
    }
    .nav-ppe .navbar-brand {
      color: var(--ppe-navbar-text);
    }
    .nav-ppe .navbar-brand:hover {
      color: var(--ppe-navbar-link-hover);
    }

    :root {
      /* School portal palette (schuv.mskobr.ru footer gradient). */
      --ppe-gradient-lime: #c8e49c;
      --ppe-gradient-sky: #9ec7e8;
      --ppe-gradient-periwinkle: #a1a9da;
      --ppe-brand: #1a3a5c;
      --ppe-brand-rgb: 26, 58, 92;
      --ppe-brand-hover: #15304d;
      --ppe-brand-muted: rgba(var(--ppe-brand-rgb), 0.72);
      --ppe-brand-border: rgba(var(--ppe-brand-rgb), 0.22);
      --ppe-brand-border-strong: rgba(var(--ppe-brand-rgb), 0.38);
      --ppe-accent-orange: #ffa63e;
      --ppe-accent-sky: var(--ppe-gradient-sky);
      --ppe-gradient-horizontal: linear-gradient(
        90deg,
        var(--ppe-gradient-lime) 0%,
        var(--ppe-gradient-sky) 50%,
        var(--ppe-gradient-periwinkle) 100%
      );
      --ppe-gradient-vertical: linear-gradient(
        180deg,
        var(--ppe-gradient-lime) 0%,
        var(--ppe-gradient-sky) 50%,
        var(--ppe-gradient-periwinkle) 100%
      );
      --ppe-btn-primary-gradient: linear-gradient(
        135deg,
        var(--ppe-gradient-sky) 0%,
        var(--ppe-gradient-periwinkle) 100%
      );
      --ppe-btn-height-default: 2.375rem;
      --ppe-btn-height-touch: 2.75rem;
      --ppe-radius-pill: 50rem;
      --ppe-radius-card: 0.375rem;
      --ppe-sidebar-width: 280px;
      --ppe-sidebar-width-collapsed: 72px;
      /* Intent: JS пишет фактическую высоту `.nav-ppe` → sticky/fixed расчеты по высоте не «плывут». */
      --ppe-navbar-height: 56px;
      /* JS: фактическая высота #ppeSidebarDesktop → динамический sticky top без inner scroll. */
      --ppe-sidebar-height: 0px;
      --ppe-safe-top: env(safe-area-inset-top, 0px);
      --ppe-safe-bottom: env(safe-area-inset-bottom, 0px);
      --ppe-safe-left: env(safe-area-inset-left, 0px);
      --ppe-safe-right: env(safe-area-inset-right, 0px);
      --ppe-table-border-width: 1px;
      --ppe-cell-pad-y: 0.4rem;
      --ppe-cell-pad-x: 0.55rem;
      --ppe-device-preview-width: 390px;
      --ppe-device-preview-min-height: 844px;
      /* Pastel building-row tints stay light in every theme — cell text stays dark. */
      --ppe-row-building-text: #1a3a5c;
      --ppe-row-building-text-muted: rgba(26, 58, 92, 0.72);
      --ppe-row-building-link: #0b5ed7;
      /* Код ППЭ: насыщенный акцент поверх пастельных оттенков строки. */
      --ppe-code-color: #0a2d6b;
      --ppe-code-font-size-table: 0.9375rem;
      --ppe-code-font-size-mobile: 1.25rem;
    }

    [data-theme="light"] {
      color-scheme: light;
      --ppe-body-bg: transparent;
      --ppe-main-bg: transparent;
      --ppe-text: #1a3a5c;
      --ppe-text-muted: rgba(26, 58, 92, 0.72);
      --ppe-banner-size: cover;
      --ppe-banner-opacity: 0.56;
      --ppe-banner-blur: 0px;
      --ppe-banner-filter: saturate(1.08);
      --ppe-banner-overlay: rgba(244, 247, 251, 0.22);
      --ppe-navbar-bg: var(--ppe-gradient-horizontal);
      --ppe-navbar-text: var(--ppe-brand);
      --ppe-navbar-text-muted: var(--ppe-brand-muted);
      --ppe-navbar-border: var(--ppe-brand-border);
      --ppe-navbar-link-hover: var(--ppe-brand-hover);
      --ppe-sidebar-bg: var(--ppe-gradient-vertical);
      --ppe-sidebar-text: var(--ppe-brand);
      --ppe-sidebar-text-muted: var(--ppe-brand-muted);
      --ppe-sidebar-border: var(--ppe-brand-border);
      --ppe-sidebar-link: var(--ppe-brand);
      --ppe-sidebar-link-hover-color: var(--ppe-brand-hover);
      --ppe-sidebar-link-hover-bg: rgba(255, 255, 255, 0.38);
      --ppe-sidebar-link-active-color: var(--ppe-brand);
      --ppe-sidebar-link-active-bg: rgba(255, 255, 255, 0.58);
      --ppe-sidebar-accent: var(--ppe-brand);
      --ppe-sidebar-toggle-bg: rgba(255, 255, 255, 0.82);
      --ppe-sidebar-toggle-border: var(--ppe-brand-border-strong);
      --ppe-surface-bg: #ffffff;
      --ppe-surface-bg-alt: #f8fafc;
      --ppe-modal-bg: #fafbfc;
      --ppe-modal-header-bg: #ffffff;
      --bs-modal-bg: var(--ppe-modal-bg);
      --ppe-surface-border: #c2c9d3;
      --ppe-surface-border-translucent: rgba(0, 0, 0, 0.14);
      --ppe-table-border-color: #adb5bd;
      --ppe-table-border-color-strong: #868e96;
      --ppe-table-head-bg: rgba(0, 0, 0, 0.04);
      --ppe-hr-color: rgba(0, 0, 0, 0.22);
      --ppe-glass-bg: rgba(255, 255, 255, 0.2);
      --ppe-glass-bg-hover: rgba(255, 255, 255, 0.34);
      --ppe-glass-border: rgba(255, 255, 255, 0.42);
      --ppe-glass-blur: 12px;
      --ppe-glass-surface-bg: rgba(255, 255, 255, 0.16);
      --ppe-glass-surface-bg-alt: rgba(255, 255, 255, 0.1);
      --ppe-glass-surface-table-head: rgba(255, 255, 255, 0.38);
      --ppe-glass-surface-table-body: rgba(255, 255, 255, 0.42);
      --ppe-row-glass-base: transparent;
      --ppe-row-glass-mix: 28%;
      --ppe-row-glass-mix-hover: 36%;
      --ppe-row-danger-glass-mix: 22%;
      --ppe-row-danger-glass-mix-hover: 30%;
      --ppe-btn-primary-glow: 0 4px 16px rgba(158, 199, 232, 0.45);
      --ppe-btn-primary-text: var(--ppe-brand);
      --ppe-theme-toggle-bg: rgba(255, 255, 255, 0.55);
      --ppe-theme-toggle-bg-hover: rgba(255, 255, 255, 0.78);
      --ppe-theme-toggle-border: var(--ppe-brand-border-strong);
      --ppe-theme-toggle-color: var(--ppe-brand);
    }

    [data-theme="dark"] {
      color-scheme: dark;
      --ppe-body-bg: transparent;
      --ppe-main-bg: transparent;
      --ppe-text: #e8edf5;
      --ppe-text-muted: #c8d4e4;
      --ppe-banner-size: cover;
      --ppe-banner-opacity: 0.5;
      --ppe-banner-blur: 0px;
      --ppe-banner-filter: brightness(0.58) saturate(0.94) contrast(1.06);
      --ppe-banner-overlay: rgba(11, 15, 20, 0.4);
      --ppe-navbar-bg: rgba(11, 15, 20, 0.88);
      --ppe-navbar-text: #e8edf4;
      --ppe-navbar-text-muted: #c8d4e4;
      --ppe-navbar-border: rgba(255, 255, 255, 0.1);
      --ppe-navbar-link-hover: #ffffff;
      --ppe-sidebar-bg: linear-gradient(
        180deg,
        #121820 0%,
        #0f141c 45%,
        #0b0f14 100%
      );
      --ppe-sidebar-text: #e8edf4;
      --ppe-sidebar-text-muted: #a8b8cc;
      --ppe-sidebar-border: rgba(255, 255, 255, 0.1);
      --ppe-sidebar-link: #d4dce8;
      --ppe-sidebar-link-hover-color: #ffffff;
      --ppe-sidebar-link-hover-bg: rgba(255, 255, 255, 0.08);
      --ppe-sidebar-link-active-color: #ffffff;
      --ppe-sidebar-link-active-bg: rgba(158, 199, 232, 0.16);
      --ppe-sidebar-accent: var(--ppe-gradient-sky);
      --ppe-sidebar-toggle-bg: rgba(255, 255, 255, 0.1);
      --ppe-sidebar-toggle-border: rgba(255, 255, 255, 0.18);
      --ppe-surface-bg: #151b24;
      --ppe-surface-bg-alt: #1a222d;
      --ppe-modal-bg: #1a2230;
      --ppe-modal-header-bg: #151b24;
      --bs-modal-bg: var(--ppe-modal-bg);
      --ppe-surface-border: rgba(255, 255, 255, 0.12);
      --ppe-surface-border-translucent: rgba(255, 255, 255, 0.1);
      --ppe-table-border-color: rgba(255, 255, 255, 0.14);
      --ppe-table-border-color-strong: rgba(255, 255, 255, 0.22);
      --ppe-table-head-bg: rgba(255, 255, 255, 0.06);
      --ppe-hr-color: rgba(255, 255, 255, 0.16);
      --ppe-glass-bg: rgba(255, 255, 255, 0.05);
      --ppe-glass-bg-hover: rgba(255, 255, 255, 0.1);
      --ppe-glass-border: rgba(255, 255, 255, 0.14);
      --ppe-glass-blur: 12px;
      --ppe-glass-surface-bg: rgba(255, 255, 255, 0.04);
      --ppe-glass-surface-bg-alt: rgba(255, 255, 255, 0.03);
      --ppe-glass-surface-table-head: rgba(255, 255, 255, 0.08);
      --ppe-glass-surface-table-body: rgba(21, 27, 36, 0.48);
      /* Pastel tints mix into page base (#070a0e), not transparent — subtler on star bg. */
      --ppe-row-glass-base: #070a0e;
      /* Pre-darken inline pastel (~brightness 0.5) before glass mix (see dark row blocks). */
      --ppe-row-glass-prep-dim: 50%;
      --ppe-row-glass-prep-mix: 55%;
      --ppe-row-glass-mix: 10%;
      --ppe-row-glass-mix-hover: 15%;
      --ppe-row-danger-glass-mix: 10%;
      --ppe-row-danger-glass-mix-hover: 14%;
      --ppe-row-building-text: #e8edf5;
      --ppe-row-building-text-muted: rgba(200, 212, 228, 0.85);
      --ppe-row-building-link: #9ec7e8;
      --ppe-code-color: #7ec8f0;
      --ppe-code-font-size-table: 0.9375rem;
      --ppe-code-font-size-mobile: 1.3rem;
      --ppe-btn-primary-gradient: linear-gradient(
        135deg,
        rgba(158, 199, 232, 0.55) 0%,
        rgba(161, 169, 218, 0.5) 100%
      );
      --ppe-btn-primary-bg-solid: linear-gradient(
        135deg,
        #7eb3d4 0%,
        #8a94c4 100%
      );
      --ppe-btn-primary-glow: 0 4px 18px rgba(158, 199, 232, 0.28);
      --ppe-btn-primary-glow-hover: 0 6px 22px rgba(158, 199, 232, 0.38),
        inset 0 1px 0 rgba(255, 255, 255, 0.24);
      --ppe-btn-primary-glow-active: 0 2px 10px rgba(158, 199, 232, 0.22),
        inset 0 1px 0 rgba(255, 255, 255, 0.18);
      --ppe-glass-inset-highlight: inset 0 1px 0 rgba(255, 255, 255, 0.22);
      --ppe-btn-primary-text: #0b0f14;
      --ppe-btn-semantic-border: rgba(255, 255, 255, 0.2);
      --ppe-btn-success-glass: rgba(25, 135, 84, 0.72);
      --ppe-btn-success-glass-hover: rgba(25, 135, 84, 0.84);
      --ppe-btn-danger-glass: rgba(220, 53, 69, 0.72);
      --ppe-btn-danger-glass-hover: rgba(220, 53, 69, 0.84);
      --ppe-btn-warning-glass: rgba(255, 166, 62, 0.78);
      --ppe-btn-warning-glass-hover: rgba(255, 166, 62, 0.9);
      --ppe-btn-warning-text: #0b0f14;
      --ppe-theme-toggle-bg: rgba(255, 255, 255, 0.12);
      --ppe-theme-toggle-bg-hover: rgba(255, 255, 255, 0.22);
      --ppe-theme-toggle-border: rgba(255, 255, 255, 0.22);
      --ppe-theme-toggle-color: #e8edf5;
      /* Bootstrap 5 tokens — keep in sync with custom palette. */
      --bs-body-color: #e8edf5;
      --bs-body-bg: transparent;
      --bs-emphasis-color: #ffffff;
      --bs-secondary-color: #c8d4e4;
      --bs-secondary-bg: #1a222d;
      --bs-tertiary-color: rgba(200, 212, 228, 0.72);
      --bs-tertiary-bg: #1a222d;
      --bs-border-color: rgba(255, 255, 255, 0.12);
      --bs-border-color-translucent: rgba(255, 255, 255, 0.1);
      --bs-link-color: #9ec7e8;
      --bs-link-hover-color: #c5dff0;
    }

    body.bg-light {
      background-color: var(--ppe-body-bg, transparent) !important;
    }

    /* Self-hosted Phosphor Duotone font: CDN glyph CSS + local woff2 (unpkg blocked in some networks/CSP). */
    @font-face {
      font-family: "Phosphor-Duotone";
      src: url("../fonts/Phosphor-Duotone.woff2") format("woff2");
      font-weight: normal;
      font-style: normal;
      font-display: block;
    }

    html, body { height: 100%; }
    .ppe-device-preview-chrome {
      display: flex;
      flex-direction: column;
      flex: 1 0 auto;
      min-height: 0;
    }
    @media (max-width: 991.98px) {
      html {
        touch-action: manipulation;
      }
    }
    body {
      min-height: 100vh;
      display: flex;
      flex-direction: column;
      font-family: "Roboto", system-ui, -apple-system, "Segoe UI", sans-serif;
      background-color: var(--ppe-body-bg, transparent);
      color: var(--ppe-text, var(--ppe-brand));
      /* Do not clip horizontally: wide tables must stay reachable (via `.ppe-main` / `.table-responsive`). */
      overflow-x: visible;
      overflow-y: auto;
    }
    .ppe-navbar-logo {
      height: 38px;
      width: auto;
      max-height: 40px;
      object-fit: contain;
      flex-shrink: 0;
    }
    .ppe-navbar-brand-text {
      font-weight: 600;
      font-size: 1.1rem;
      letter-spacing: 0.02em;
      line-height: 1.2;
    }
    .ppe-login-logo {
      width: auto;
      max-width: 160px;
      height: auto;
      max-height: 72px;
      object-fit: contain;
    }
    .ppe-page-login .card {
      border-color: var(--ppe-brand-border);
      border-top: 3px solid var(--ppe-gradient-sky);
    }
    .ppe-page-login .btn-primary {
      --bs-btn-bg: var(--ppe-brand);
      --bs-btn-border-color: var(--ppe-brand);
      --bs-btn-hover-bg: var(--ppe-brand-hover);
      --bs-btn-hover-border-color: var(--ppe-brand-hover);
      --bs-btn-active-bg: var(--ppe-brand-hover);
      --bs-btn-active-border-color: var(--ppe-brand-hover);
      background-color: var(--ppe-brand);
    }
    .ppe-page-login a:not(.btn) {
      color: var(--ppe-brand);
    }
    .ppe-page-login a:not(.btn):hover {
      color: var(--ppe-brand-hover);
    }
    .nav-ppe {
      position: sticky;
      top: 0;
      z-index: 1020; /* Bootstrap sticky-top z-index */
      padding-top: var(--ppe-safe-top);
      padding-left: var(--ppe-safe-left);
      padding-right: var(--ppe-safe-right);
    }
    .nav-ppe > .container-fluid {
      position: relative;
      z-index: 1;
    }
    [data-theme="light"] .nav-ppe::before {
      content: "";
      position: absolute;
      inset: 0;
      z-index: 0;
      pointer-events: none;
      background: linear-gradient(
        180deg,
        rgba(255, 255, 255, 0.38) 0%,
        rgba(255, 255, 255, 0.14) 100%
      );
      backdrop-filter: blur(10px);
      -webkit-backdrop-filter: blur(10px);
    }
    [data-theme="dark"] .nav-ppe {
      backdrop-filter: blur(14px);
      -webkit-backdrop-filter: blur(14px);
      box-shadow: 0 1px 0 rgba(255, 255, 255, 0.06);
    }
    [data-theme="dark"] .nav-ppe::after {
      content: "";
      position: absolute;
      left: 0;
      right: 0;
      bottom: 0;
      height: 3px;
      z-index: 2;
      pointer-events: none;
      background: var(--ppe-gradient-horizontal);
    }
    .ppe-layout {
      flex: 1 1 auto;
      min-height: 0;
      align-items: stretch;
      background-color: transparent;
      /* `overflow: hidden` here clips negative margins (Bootstrap `.row`) and horizontal scroll containers. */
      overflow: visible;
    }
    .ppe-main {
      position: relative;
      isolation: isolate;
      min-height: calc(100vh - var(--ppe-navbar-height) - var(--ppe-safe-top));
      overflow-y: auto;
      background-color: var(--ppe-main-bg, transparent);
      /* Critical for flex layouts: allow main column shrink without horizontal overflow */
      min-width: 0;
      /* Do not create an extra horizontal scroll container here.
         Let inner `.table-responsive` / dedicated wrappers handle horizontal scrolling. */
      overflow-x: visible;
    }

    /* Hero banner (schuv.mskobr.ru) — one centered star + hex; fixed in main zone. */
    .ppe-main::before {
      content: "";
      position: fixed;
      top: calc(var(--ppe-navbar-height) + var(--ppe-safe-top));
      right: 0;
      bottom: 0;
      left: 0;
      z-index: 0;
      pointer-events: none;
      background-image: url("../img/schuv_hero_banner.jpg");
      background-repeat: no-repeat;
      background-position: center center;
      background-size: var(--ppe-banner-size, cover);
      filter: blur(var(--ppe-banner-blur, 0px)) var(--ppe-banner-filter, none);
      opacity: var(--ppe-banner-opacity, 0.56);
    }

    .ppe-main::after {
      content: "";
      position: fixed;
      top: calc(var(--ppe-navbar-height) + var(--ppe-safe-top));
      right: 0;
      bottom: 0;
      left: 0;
      z-index: 0;
      pointer-events: none;
      background: var(--ppe-banner-overlay, transparent);
    }

    @media (min-width: 992px) {
      html:not(.ppe-device-preview)
        .ppe-layout:has(.ppe-sidebar-desktop)
        .ppe-main::before,
      html:not(.ppe-device-preview)
        .ppe-layout:has(.ppe-sidebar-desktop)
        .ppe-main::after {
        left: var(--ppe-sidebar-width);
      }

      html:not(.ppe-device-preview).ppe-sidebar-collapsed
        .ppe-layout:has(.ppe-sidebar-desktop)
        .ppe-main::before,
      html:not(.ppe-device-preview).ppe-sidebar-collapsed
        .ppe-layout:has(.ppe-sidebar-desktop)
        .ppe-main::after {
        left: var(--ppe-sidebar-width-collapsed);
      }
    }

    /* Device preview: banner on .ppe-layout (non-scrolling); .ppe-main scrolls inside chrome. */
    html.ppe-device-preview .ppe-main::before,
    html.ppe-device-preview .ppe-main::after {
      content: none;
    }

    html.ppe-device-preview .ppe-layout::before {
      content: "";
      position: absolute;
      inset: 0;
      z-index: 0;
      pointer-events: none;
      background-image: url("../img/schuv_hero_banner.jpg");
      background-repeat: no-repeat;
      background-position: center center;
      background-size: var(--ppe-banner-size, cover);
      filter: blur(var(--ppe-banner-blur, 0px)) var(--ppe-banner-filter, none);
      opacity: var(--ppe-banner-opacity, 0.56);
    }

    html.ppe-device-preview .ppe-layout::after {
      content: "";
      position: absolute;
      inset: 0;
      z-index: 0;
      pointer-events: none;
      background: var(--ppe-banner-overlay, transparent);
    }

    /* Real viewport: body scrolls; fixed banner anchors to viewport (not .ppe-main). */
    html:not(.ppe-device-preview) .ppe-main {
      overflow-y: visible;
    }

    @media (max-width: 991.98px) {
      html:not(.ppe-device-preview) .ppe-main::before,
      html:not(.ppe-device-preview) .ppe-main::after {
        position: fixed;
        top: calc(var(--ppe-navbar-height) + var(--ppe-safe-top));
        left: 0;
        right: 0;
        bottom: 0;
        -webkit-transform: translateZ(0);
        transform: translateZ(0);
        -webkit-backface-visibility: hidden;
        backface-visibility: hidden;
      }
    }

    /* iOS Safari: fixed pseudo-elements inside scroll/flex trees can drift — body layer. */
    @supports (-webkit-touch-callout: none) {
      @media (max-width: 991.98px) {
        html:not(.ppe-device-preview) body.bg-light::before {
          content: "";
          position: fixed;
          top: calc(var(--ppe-navbar-height) + var(--ppe-safe-top));
          left: 0;
          right: 0;
          bottom: 0;
          z-index: 0;
          pointer-events: none;
          background-image: url("../img/schuv_hero_banner.jpg");
          background-repeat: no-repeat;
          background-position: center center;
          background-size: var(--ppe-banner-size, cover);
          filter: blur(var(--ppe-banner-blur, 0px)) var(--ppe-banner-filter, none);
          opacity: var(--ppe-banner-opacity, 0.56);
          -webkit-transform: translateZ(0);
          transform: translateZ(0);
        }

        html:not(.ppe-device-preview) body.bg-light::after {
          content: "";
          position: fixed;
          top: calc(var(--ppe-navbar-height) + var(--ppe-safe-top));
          left: 0;
          right: 0;
          bottom: 0;
          z-index: 0;
          pointer-events: none;
          background: var(--ppe-banner-overlay, transparent);
        }

        html:not(.ppe-device-preview) .ppe-main::before,
        html:not(.ppe-device-preview) .ppe-main::after {
          content: none;
        }
      }
    }

    .ppe-main > .ppe-content {
      position: relative;
      z-index: 1;
    }

    /* Content width: constrain main area (not sidebar). */
    .ppe-content {
      max-width: 1400px;
      margin-left: auto;
      margin-right: auto;
      width: 100%;
    }

    /* Sidebar: school portal gradient (schuv.mskobr.ru contacts/footer palette). */
    .sidebar {
      flex: 0 0 var(--ppe-sidebar-width);
      width: var(--ppe-sidebar-width);
      min-width: var(--ppe-sidebar-width);
      max-width: var(--ppe-sidebar-width);
      align-self: stretch;
      background: var(--ppe-sidebar-bg);
      color: var(--ppe-sidebar-text);
      border-right: 1px solid var(--ppe-sidebar-border);
      /* Make room for the toggle button on the right. */
      padding: 0.75rem 2.5rem 0.75rem 0.5rem;
      overflow: hidden;
      box-sizing: border-box;
      display: flex;
      flex-direction: column;
      min-height: 0;
    }
    /* Mobile offcanvas: single scroll on offcanvas-body (avoid nested scrollbars). */
    .ppe-sidebar-offcanvas .offcanvas-body {
      overflow-y: auto;
      -webkit-overflow-scrolling: touch;
      overscroll-behavior: contain;
      background: transparent;
    }
    .ppe-sidebar-offcanvas .offcanvas-body .sidebar {
      overflow: visible;
      flex: 0 0 auto;
      align-self: stretch;
      max-height: none;
      border-right: none;
      background: transparent;
      color: inherit;
    }
    /* Desktop #ppeSidebarDesktop: content-height box for sticky; column bg via layout pseudo. */
    .ppe-sidebar-desktop {
      position: relative;
      z-index: 1010;
      align-self: flex-start;
      height: auto;
      max-height: none;
      overflow: visible;
      flex-shrink: 0;
      transition: width 0.2s ease, min-width 0.2s ease, max-width 0.2s ease,
        flex-basis 0.2s ease, padding 0.2s ease;
    }

    @supports (height: 100dvh) {
      body { min-height: 100dvh; }
    }

    @media (min-width: 992px) {
      .ppe-layout {
        align-items: stretch;
        flex: 1 0 auto;
        min-height: 0;
        padding-left: 0;
      }
      /* Full-height sidebar column bg (decoupled from sticky content box height). */
      html:not(.ppe-device-preview) .ppe-layout:has(.ppe-sidebar-desktop) {
        position: relative;
      }
      html:not(.ppe-device-preview) .ppe-layout:has(.ppe-sidebar-desktop)::before {
        content: "";
        position: absolute;
        top: 0;
        bottom: 0;
        left: 0;
        width: var(--ppe-sidebar-width);
        z-index: 0;
        pointer-events: none;
        background: var(--ppe-sidebar-bg);
        border-right: 1px solid var(--ppe-sidebar-border);
      }
      html:not(.ppe-device-preview).ppe-sidebar-collapsed
        .ppe-layout:has(.ppe-sidebar-desktop)::before {
        width: var(--ppe-sidebar-width-collapsed);
      }
      html.ppe-sidebar-collapsed .ppe-layout {
        padding-left: 0;
      }
      .ppe-main {
        overflow-y: visible;
        min-height: calc(100vh - var(--ppe-navbar-height) - var(--ppe-safe-top));
      }
      /* Desktop-only и не в device-preview: там другая раскладка/скролл. */
      /* Sticky без inner scroll: top сжимается для длинного меню (--ppe-sidebar-height из JS). */
      html:not(.ppe-device-preview) .ppe-sidebar-desktop.sidebar {
        position: sticky;
        top: min(
          var(--ppe-navbar-height),
          calc(
            100vh - var(--ppe-sidebar-height) - var(--ppe-safe-bottom)
          )
        );
        align-self: flex-start;
        height: auto;
        overflow: visible;
      }
    }
    .ppe-sidebar-offcanvas {
      --bs-offcanvas-width: var(--ppe-sidebar-width);
      /* Bootstrap offcanvas uses background-color; gradients need `background`. */
      --bs-offcanvas-bg: transparent;
      background: var(--ppe-sidebar-bg);
      color: var(--ppe-sidebar-text);
      border-right: 1px solid var(--ppe-sidebar-border);
      z-index: 1055;
    }
    .ppe-sidebar-offcanvas .offcanvas-header {
      background: transparent;
      border-bottom-color: var(--ppe-sidebar-border);
      color: var(--ppe-sidebar-text);
    }
    .ppe-sidebar-offcanvas .offcanvas-header .offcanvas-title,
    .ppe-sidebar-offcanvas .offcanvas-header .ppe-navbar-brand {
      color: var(--ppe-sidebar-text);
    }
    [data-theme="dark"] .ppe-sidebar-offcanvas .offcanvas-header .btn-close {
      filter: var(--bs-btn-close-white-filter);
    }

    /* Hide mobile sidebar drawer on desktop; device preview overrides below. */
    @media (min-width: 992px) {
      html:not(.ppe-device-preview) .ppe-sidebar-offcanvas {
        display: none !important;
      }
    }

    @media (max-width: 991.98px) {
      .offcanvas-backdrop.show {
        z-index: 1050;
      }
    }
    .sidebar .nav-link {
      color: var(--ppe-sidebar-link);
      display: flex;
      align-items: center;
      gap: 0.5rem;
      padding: 0.3rem 0.55rem;
      border-radius: 0.375rem;
      font-size: 0.95rem;
      line-height: 1.15;
      border-left: 3px solid transparent;
    }
    .sidebar .nav-link:hover,
    .sidebar .nav-link:focus-visible {
      color: var(--ppe-sidebar-link-hover-color);
      background: var(--ppe-sidebar-link-hover-bg);
    }
    .sidebar .nav-link.active {
      color: var(--ppe-sidebar-link-active-color);
      background: var(--ppe-sidebar-link-active-bg);
      font-weight: 600;
      border-left-color: var(--ppe-sidebar-accent);
      backdrop-filter: blur(10px);
      -webkit-backdrop-filter: blur(10px);
      box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.35);
    }
    [data-theme="dark"] .sidebar .nav-link.active {
      box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08);
    }
    .sidebar .nav-title {
      font-size: 0.7rem;
      font-weight: 600;
      text-transform: uppercase;
      color: var(--ppe-sidebar-text-muted);
      margin: 0.5rem 0.55rem 0.15rem;
      letter-spacing: 0.04em;
    }
    .sidebar .sidebar-bottom {
      margin-top: 0.75rem;
      padding-top: 0.5rem;
      flex-shrink: 0;
    }
    .ppe-sidebar-desktop .sidebar-bottom {
      padding-bottom: max(0.5rem, var(--ppe-safe-bottom));
    }
    /* Desktop: единый поток без inner scroll; «Служебное»/«Выход» внизу aside. */
    @media (min-width: 992px) {
      html:not(.ppe-device-preview) .ppe-sidebar-desktop.sidebar .ppe-sidebar-nav-scroll {
        flex: 0 0 auto;
        overflow: visible;
      }
      html:not(.ppe-device-preview) .ppe-sidebar-desktop.sidebar .sidebar-bottom {
        margin-top: 0.5rem;
        flex-shrink: 0;
      }
    }
    .ppe-sidebar-offcanvas .ppe-sidebar-nav-scroll {
      flex: 0 0 auto;
      overflow: visible;
    }

    .ppe-sidebar-toggle {
      position: absolute;
      top: 50%;
      right: 0.5rem;
      transform: translateY(-50%);
      z-index: 10;
      width: 2rem;
      height: 2rem;
      padding: 0;
      display: inline-flex;
      align-items: center;
      justify-content: center;
      border-radius: 50%;
      border: 1px solid var(--ppe-sidebar-toggle-border);
      background: var(--ppe-sidebar-toggle-bg);
      color: var(--ppe-sidebar-text);
      line-height: 1;
      box-shadow: 0 1px 4px rgba(26, 58, 92, 0.12);
    }
    .ppe-sidebar-toggle:hover,
    .ppe-sidebar-toggle:focus-visible {
      color: var(--ppe-sidebar-link-hover-color);
      background: var(--ppe-sidebar-link-hover-bg);
      border-color: var(--ppe-sidebar-border);
    }
    .ppe-sidebar-toggle i {
      font-size: 1rem;
      transition: transform 0.2s ease;
    }
    html.ppe-sidebar-collapsed .ppe-sidebar-toggle i {
      transform: rotate(180deg);
    }

    html.ppe-sidebar-collapsed .sidebar.ppe-sidebar-desktop {
      flex: 0 0 var(--ppe-sidebar-width-collapsed);
      width: var(--ppe-sidebar-width-collapsed);
      min-width: var(--ppe-sidebar-width-collapsed);
      max-width: var(--ppe-sidebar-width-collapsed);
      padding-left: 0.5rem;
      padding-right: 2.25rem;
    }
    html.ppe-sidebar-collapsed .sidebar.ppe-sidebar-desktop .nav-title,
    html.ppe-sidebar-collapsed .sidebar.ppe-sidebar-desktop .ppe-nav-label {
      display: none !important;
    }
    html.ppe-sidebar-collapsed .sidebar.ppe-sidebar-desktop .nav-link {
      justify-content: center;
      gap: 0;
      padding-left: 0.5rem;
      padding-right: 0.5rem;
    }
    html.ppe-sidebar-collapsed .sidebar.ppe-sidebar-desktop .nav-link i {
      font-size: 1.2rem;
      margin: 0;
    }

    /* Phosphor Duotone sidebar icons (nav preview) */
    .sidebar .nav-link > i.ph-duotone,
    .ppe-sidebar-offcanvas .sidebar .nav-link > i.ph-duotone {
      display: inline-flex;
      align-items: center;
      justify-content: center;
      font-size: 1.2rem;
      width: 1.35rem;
      min-width: 1.35rem;
      line-height: 1;
      flex-shrink: 0;
      text-align: center;
      color: inherit;
      font-style: normal;
    }

    .sidebar .nav-link > i.ppe-ph-ref {
      color: #2f6fad;
    }

    .sidebar .nav-link > i.ppe-ph-admin {
      color: #6b4fa8;
    }

    .sidebar .nav-link > i.ppe-ph-svc {
      color: #4a6278;
    }

    [data-theme="dark"] .sidebar .nav-link > i.ppe-ph-ref {
      color: #7eb8e8;
    }

    [data-theme="dark"] .sidebar .nav-link > i.ppe-ph-admin {
      color: #b39ddb;
    }

    [data-theme="dark"] .sidebar .nav-link > i.ppe-ph-svc {
      color: #9eb0c4;
    }

    .sidebar .nav-link.active > i.ph-duotone {
      color: var(--ppe-sidebar-link-active-color);
    }

    html.ppe-sidebar-collapsed .sidebar.ppe-sidebar-desktop .nav-link > i.ph-duotone {
      font-size: 1.25rem;
      width: 1.35rem;
      min-width: 1.35rem;
      margin: 0;
    }

    /* Tables: ensure horizontal scroll works on small screens */
    .table-responsive {
      overflow-x: auto !important;
      max-width: 100%;
      -webkit-overflow-scrolling: touch;
    }
    .table-responsive > .table {
      margin-bottom: 0;
    }

    /* Medium+ desktop: flex column must shrink; page clip, tables scroll inside cards */
    @media (min-width: 992px) {
      body {
        overflow-x: clip;
      }

      .ppe-layout {
        max-width: 100%;
        min-width: 0;
      }

      .ppe-main.container-fluid {
        max-width: 100%;
        min-width: 0;
      }

      .ppe-main > .ppe-content,
      .ppe-main .row.g-2 > .col,
      [data-ppe-collapse-section] [data-ppe-collapse-panel] > .card-body {
        min-width: 0;
        max-width: 100%;
      }
    }

    /* Horizontal scroll: drag-to-scroll affordance */
    .ppe-hscroll-grab {
      cursor: grab;
    }
    .ppe-hscroll-grabbing {
      cursor: grabbing;
    }
    body.ppe-hscroll-dragging {
      user-select: none;
    }

    /* Explicit grid lines for all data tables (Bootstrap defaults are too faint) */
    .ppe-main .table {
      --bs-table-border-color: var(--ppe-table-border-color);
      border-collapse: collapse;
      border: var(--ppe-table-border-width) solid var(--ppe-table-border-color);
    }

    .ppe-main .table > :not(caption) > * > * {
      border: var(--ppe-table-border-width) solid var(--ppe-table-border-color);
    }

    .ppe-main .table thead th,
    .ppe-main .table thead td {
      border-bottom-color: var(--ppe-table-border-color-strong);
    }

    .ppe-main .table.table-bordered {
      border-color: var(--ppe-table-border-color);
    }

    .ppe-main .table.table-bordered > :not(caption) > * {
      border-width: var(--ppe-table-border-width);
    }

    .ppe-main .table.table-bordered > :not(caption) > * > * {
      border-width: var(--ppe-table-border-width);
      border-color: var(--ppe-table-border-color);
    }

    /* Global UI separators (Bootstrap defaults are often too subtle) */
    .ppe-main {
      --bs-border-color: var(--ppe-surface-border, #c2c9d3);
      --bs-border-color-translucent: var(--ppe-surface-border-translucent, rgba(0, 0, 0, 0.14));
      --bs-body-color: var(--ppe-text, var(--ppe-brand));
      --bs-body-bg: var(--ppe-main-bg, transparent);
      --bs-secondary-color: var(--ppe-text-muted, rgba(26, 58, 92, 0.72));
      --bs-table-bg: var(--ppe-surface-bg, #ffffff);
      --bs-table-color: var(--ppe-text, var(--ppe-brand));
      --bs-table-border-color: var(--ppe-table-border-color, #adb5bd);
    }

    .ppe-main hr {
      opacity: 1;
      border-top-color: var(--ppe-hr-color, rgba(0, 0, 0, 0.22));
    }

    .ppe-main .card,
    .ppe-main .accordion-item,
    .ppe-main .list-group-item,
    .ppe-main .modal-content,
    .ppe-main .offcanvas,
    .ppe-main .dropdown-menu {
      border-color: var(--bs-border-color);
      color: var(--ppe-text, inherit);
    }

    .ppe-main .card {
      border-radius: var(--ppe-radius-card);
      --bs-card-bg: transparent;
      background-color: var(--ppe-glass-bg);
      backdrop-filter: blur(var(--ppe-glass-blur));
      -webkit-backdrop-filter: blur(var(--ppe-glass-blur));
      border: 1px solid var(--ppe-glass-border);
      box-shadow: 0 1px 0 var(--ppe-surface-border-translucent, rgba(0, 0, 0, 0.06));
    }
    .ppe-main .card-body {
      background-color: transparent;
    }
    .ppe-main .card-header,
    .ppe-main .card-footer {
      background-color: transparent;
      backdrop-filter: blur(var(--ppe-glass-blur));
      -webkit-backdrop-filter: blur(var(--ppe-glass-blur));
      border-color: var(--ppe-glass-border);
      color: var(--ppe-text, inherit);
    }
    .ppe-main .card.bg-light,
    .ppe-main a.ppe-overview-stat.bg-light,
    .ppe-main .ppe-overview-stat.bg-light {
      --bs-card-bg: transparent;
      background-color: var(--ppe-glass-bg) !important;
      backdrop-filter: blur(var(--ppe-glass-blur));
      -webkit-backdrop-filter: blur(var(--ppe-glass-blur));
      border: 1px solid var(--ppe-glass-border);
    }
    .ppe-main .accordion-item {
      background-color: var(--ppe-glass-surface-bg);
      backdrop-filter: blur(var(--ppe-glass-blur));
      -webkit-backdrop-filter: blur(var(--ppe-glass-blur));
      border: 1px solid var(--ppe-glass-border);
    }
    [data-ppe-collapse-section].card,
    [data-ppe-session-collapse-section].card,
    [data-ppe-session-collapse-section] .card {
      --bs-card-bg: transparent;
      background-color: var(--ppe-glass-bg);
      backdrop-filter: blur(var(--ppe-glass-blur));
      -webkit-backdrop-filter: blur(var(--ppe-glass-blur));
    }
    .ppe-main .list-group-item {
      background-color: var(--ppe-surface-bg, #ffffff);
    }
    .ppe-main .modal-content,
    .ppe-main .dropdown-menu {
      background-color: var(--ppe-modal-bg, var(--ppe-surface-bg, #ffffff));
    }

    /* Modals: opaque surface (body-level + in-page). Glass theme applies to cards only. */
    .modal {
      --bs-modal-bg: var(--ppe-modal-bg, var(--ppe-surface-bg, #ffffff));
      --bs-backdrop-opacity: 0.55;
      /* Above dropdown sheets (1080), device preview chrome, offcanvas (1055). */
      --bs-backdrop-zindex: 1090;
      --bs-modal-zindex: 1100;
      z-index: var(--bs-modal-zindex);
    }
    .modal-content {
      background-color: var(--ppe-modal-bg, var(--ppe-surface-bg, #ffffff));
      backdrop-filter: none;
      -webkit-backdrop-filter: none;
      border-color: var(--ppe-surface-border, #c2c9d3);
      color: var(--ppe-text, inherit);
      pointer-events: auto;
    }
    .modal-header,
    .modal-footer {
      background-color: var(
        --ppe-modal-header-bg,
        var(--ppe-modal-bg, var(--ppe-surface-bg, #ffffff))
      );
      backdrop-filter: none;
      -webkit-backdrop-filter: none;
      border-color: var(--ppe-surface-border, #c2c9d3);
      pointer-events: auto;
    }
    .modal-body {
      background-color: var(--ppe-modal-bg, var(--ppe-surface-bg, #ffffff));
      pointer-events: auto;
    }
    .modal.show .modal-dialog {
      pointer-events: none;
    }
    .modal-backdrop {
      --bs-backdrop-opacity: 0.55;
      --bs-backdrop-zindex: 1090;
      z-index: var(--bs-backdrop-zindex);
    }
    .modal-backdrop.show {
      opacity: var(--bs-backdrop-opacity);
    }
    body.modal-open .modal.show {
      z-index: var(--bs-modal-zindex);
    }

    .ppe-main .nav-tabs {
      border-bottom-color: var(--ppe-hr-color, rgba(0, 0, 0, 0.22));
    }
    .ppe-main .nav-tabs .nav-link {
      border-color: var(--bs-border-color);
      color: var(--ppe-text-muted, inherit);
    }
    .ppe-main .nav-tabs .nav-link.active {
      background-color: var(--ppe-surface-bg, #ffffff);
      color: var(--ppe-text, inherit);
      border-color: var(--bs-border-color) var(--bs-border-color) var(--ppe-surface-bg, #ffffff);
    }

    .ppe-main .table {
      background-color: var(--ppe-surface-bg, #ffffff);
    }
    .ppe-main .table thead th,
    .ppe-main .table thead td {
      background-color: var(--ppe-table-head-bg, rgba(0, 0, 0, 0.04));
      color: var(--ppe-text, inherit);
      border-color: var(--ppe-table-border-color, #adb5bd);
    }
    .ppe-main .table > :not(caption) > * > * {
      border-color: var(--ppe-table-border-color, #adb5bd);
    }
    /* Tables inside glass cards: wrapper translucent, cells slightly denser. */
    .ppe-main .card .table,
    .ppe-main .card > .table-responsive > .table {
      --bs-table-bg: transparent;
      background-color: transparent;
    }
    .ppe-main .card .table thead th,
    .ppe-main .card .table thead td,
    .ppe-main .card > .table-responsive > .table thead th,
    .ppe-main .card > .table-responsive > .table thead td {
      background-color: var(--ppe-glass-surface-table-head);
    }
    .ppe-main .card .table > tbody > tr > *,
    .ppe-main .card > .table-responsive > .table > tbody > tr > * {
      background-color: var(--ppe-glass-surface-table-body);
      backdrop-filter: blur(var(--ppe-glass-blur));
      -webkit-backdrop-filter: blur(var(--ppe-glass-blur));
    }
    @media (prefers-reduced-transparency: reduce) {
      .ppe-main .card,
      .ppe-main .card.bg-light,
      .ppe-main a.ppe-overview-stat.bg-light,
      .ppe-main .accordion-item,
      [data-ppe-collapse-section].card,
      [data-ppe-session-collapse-section].card,
      [data-ppe-session-collapse-section] .card {
        backdrop-filter: none;
        -webkit-backdrop-filter: none;
        background-color: var(--ppe-surface-bg, #ffffff);
      }
      .ppe-main .card-header,
      .ppe-main .card-footer {
        background-color: var(--ppe-surface-bg-alt, #f8fafc);
      }
      .ppe-main .card .table > tbody > tr > *,
      .ppe-main .card > .table-responsive > .table > tbody > tr > * {
        background-color: var(--ppe-surface-bg, #ffffff);
        backdrop-filter: none;
        -webkit-backdrop-filter: none;
      }
      .ppe-main .table tbody tr.ppe-row-building:not(.table-danger) > * {
        background-color: var(--ppe-row-building-bg, var(--ppe-surface-bg, #ffffff)) !important;
        backdrop-filter: none;
        -webkit-backdrop-filter: none;
      }
      .ppe-main .table tbody tr.ppe-row-building.table-danger > * {
        background-color: var(
          --bs-danger-bg-subtle,
          rgba(var(--bs-danger-rgb), 0.12)
        ) !important;
        backdrop-filter: none;
        -webkit-backdrop-filter: none;
      }
      .ppe-main .table tbody tr.ppe-row-building.table-danger > :first-child {
        box-shadow: none;
      }
      .ppe-main .card.ppe-row-building:not(.table-danger),
      .ppe-main article.ppe-row-building:not(.table-danger) {
        background-color: var(--ppe-row-building-bg, var(--ppe-surface-bg, #ffffff));
        backdrop-filter: none;
        -webkit-backdrop-filter: none;
      }
      .ppe-main .card.ppe-row-building.table-danger,
      .ppe-main article.ppe-row-building.table-danger {
        background-color: var(
          --bs-danger-bg-subtle,
          rgba(var(--bs-danger-rgb), 0.12)
        ) !important;
        border-left: 3px solid var(--bs-danger);
        backdrop-filter: none;
        -webkit-backdrop-filter: none;
      }
      .ppe-main .card .table thead th,
      .ppe-main .card .table thead td,
      .ppe-main .card > .table-responsive > .table thead th,
      .ppe-main .card > .table-responsive > .table thead td {
        background-color: var(--ppe-table-head-bg, rgba(0, 0, 0, 0.04));
      }
      .modal-content,
      .modal-header,
      .modal-body,
      .modal-footer {
        backdrop-filter: none;
        -webkit-backdrop-filter: none;
        background-color: var(--ppe-modal-bg, var(--ppe-surface-bg, #ffffff));
      }
      .modal-header,
      .modal-footer {
        background-color: var(
          --ppe-modal-header-bg,
          var(--ppe-modal-bg, var(--ppe-surface-bg, #ffffff))
        );
      }
    }
    [data-theme="dark"] .text-dark,
    [data-theme="dark"] .text-body,
    [data-theme="dark"] .offcanvas-title.text-dark {
      color: var(--ppe-text) !important;
    }
    [data-theme="dark"] .text-muted,
    [data-theme="dark"] small,
    [data-theme="dark"] .small,
    [data-theme="dark"] .text-body-secondary,
    [data-theme="dark"] .ppe-main .text-muted,
    [data-theme="dark"] .ppe-navbar-user-info .text-muted,
    [data-theme="dark"] .alert .text-muted {
      color: var(--ppe-text-muted) !important;
    }
    [data-theme="dark"] .ppe-navbar-user-info.text-dark {
      color: var(--ppe-navbar-text) !important;
    }
    [data-theme="dark"] .nav-ppe.navbar-light {
      --bs-navbar-color: var(--ppe-navbar-text);
      --bs-navbar-hover-color: var(--ppe-navbar-link-hover);
      --bs-navbar-active-color: #ffffff;
      --bs-navbar-brand-color: var(--ppe-navbar-text);
      --bs-navbar-brand-hover-color: var(--ppe-navbar-link-hover);
    }
    [data-theme="dark"] .nav-ppe .dropdown-menu {
      --bs-dropdown-bg: var(--ppe-surface-bg);
      --bs-dropdown-color: var(--ppe-text);
      --bs-dropdown-link-color: var(--ppe-text);
      --bs-dropdown-link-hover-color: #ffffff;
      --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.08);
      --bs-dropdown-link-active-color: #ffffff;
      --bs-dropdown-link-active-bg: rgba(158, 199, 232, 0.18);
      --bs-dropdown-border-color: var(--ppe-surface-border);
    }
    [data-theme="dark"] .ppe-navbar-search .form-control {
      background-color: rgba(255, 255, 255, 0.1);
      border-color: rgba(255, 255, 255, 0.18);
      color: var(--ppe-navbar-text);
    }
    [data-theme="dark"] .ppe-navbar-search .form-control::placeholder {
      color: var(--ppe-navbar-text-muted);
    }
    [data-theme="dark"] .ppe-navbar-search .form-control:focus {
      background-color: rgba(255, 255, 255, 0.16);
      color: var(--ppe-navbar-text);
      border-color: var(--ppe-gradient-sky);
      box-shadow: 0 0 0 0.2rem rgba(158, 199, 232, 0.22);
    }
    [data-theme="dark"] .ppe-theme-toggle:hover,
    [data-theme="dark"] .ppe-theme-toggle:focus-visible,
    [data-theme="dark"] .ppe-theme-toggle[aria-pressed="true"] {
      color: #ffffff;
      border-color: rgba(255, 255, 255, 0.32);
    }
    [data-theme="dark"] .btn-outline-secondary {
      --bs-btn-color: var(--ppe-text);
      --bs-btn-border-color: var(--ppe-glass-border);
      --bs-btn-hover-color: #ffffff;
      --bs-btn-hover-bg: var(--ppe-glass-bg-hover);
      --bs-btn-hover-border-color: rgba(255, 255, 255, 0.28);
      --bs-btn-active-color: #ffffff;
      --bs-btn-active-bg: var(--ppe-glass-bg-hover);
      --bs-btn-active-border-color: rgba(255, 255, 255, 0.28);
    }
    [data-theme="dark"] .btn-outline-primary {
      --bs-btn-color: var(--ppe-gradient-sky);
      --bs-btn-hover-color: #ffffff;
      --bs-btn-hover-border-color: var(--ppe-gradient-sky);
      --bs-btn-active-color: #ffffff;
    }
    [data-theme="dark"] .btn-outline-dark {
      --bs-btn-color: var(--ppe-text);
      --bs-btn-border-color: rgba(255, 255, 255, 0.35);
      --bs-btn-hover-color: #0b0f14;
      --bs-btn-hover-bg: #e8edf5;
      --bs-btn-hover-border-color: #e8edf5;
      --bs-btn-active-color: #0b0f14;
      --bs-btn-active-bg: #e8edf5;
      --bs-btn-active-border-color: #e8edf5;
    }
    [data-theme="dark"] .btn-link {
      --bs-btn-color: var(--bs-link-color);
      --bs-btn-hover-color: var(--bs-link-hover-color);
    }
    [data-theme="dark"] .ppe-main a:not(.btn):not(.nav-link):not(.dropdown-item):not(.page-link) {
      color: var(--bs-link-color);
    }
    [data-theme="dark"] .ppe-main a:not(.btn):not(.nav-link):not(.dropdown-item):not(.page-link):hover {
      color: var(--bs-link-hover-color);
    }
    [data-theme="dark"] .ppe-main .form-label,
    [data-theme="dark"] .ppe-main legend,
    [data-theme="dark"] .ppe-main .col-form-label {
      color: var(--ppe-text);
    }
    [data-theme="dark"] .ppe-main .form-control,
    [data-theme="dark"] .ppe-main .form-select,
    [data-theme="dark"] .ppe-main .form-control:disabled,
    [data-theme="dark"] .ppe-main .form-select:disabled {
      background-color: var(--ppe-surface-bg-alt);
      border-color: rgba(255, 255, 255, 0.18);
      color: var(--ppe-text);
    }
    [data-theme="dark"] .ppe-main .form-control::placeholder {
      color: rgba(200, 212, 228, 0.55);
    }
    [data-theme="dark"] .ppe-main .form-control:focus,
    [data-theme="dark"] .ppe-main .form-select:focus {
      background-color: #1e2733;
      border-color: var(--ppe-gradient-sky);
      color: var(--ppe-text);
      box-shadow: 0 0 0 0.2rem rgba(158, 199, 232, 0.2);
    }
    [data-theme="dark"] .ppe-main .input-group-text {
      background-color: var(--ppe-surface-bg-alt);
      border-color: rgba(255, 255, 255, 0.18);
      color: var(--ppe-text-muted);
    }
    [data-theme="dark"] .ppe-main .form-check-input[type="checkbox"] {
      background-color: var(--ppe-surface-bg-alt);
    }
    [data-theme="dark"] .ppe-main .form-check-input[type="checkbox"]:not(:checked):not(:indeterminate) {
      border-color: rgba(255, 255, 255, 0.4);
      box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.06) inset;
    }
    [data-theme="dark"] .ppe-main .form-check-input:disabled {
      border-color: rgba(255, 255, 255, 0.16);
    }
    [data-theme="dark"] .ppe-main .form-check-label {
      color: var(--ppe-text);
    }
    [data-theme="dark"] .ppe-main .table > tbody > tr > td,
    [data-theme="dark"] .ppe-main .table > tbody > tr > th {
      color: var(--ppe-text);
    }
    [data-theme="dark"] .ppe-main .table-striped > tbody > tr:nth-of-type(odd) > * {
      --bs-table-bg-type: var(--ppe-surface-bg-alt);
      --bs-table-color-type: var(--ppe-text);
      color: var(--ppe-text);
      background-color: var(--ppe-surface-bg-alt);
    }
    [data-theme="dark"] .ppe-main .table-hover > tbody > tr:hover > * {
      --bs-table-bg-state: rgba(255, 255, 255, 0.05);
      color: var(--ppe-text);
    }
    [data-theme="dark"] .badge.bg-light.text-dark {
      background-color: var(--ppe-surface-bg-alt) !important;
      color: var(--ppe-text) !important;
      border: 1px solid var(--ppe-surface-border);
    }
    [data-theme="dark"] a.ppe-overview-stat:hover {
      background-color: rgba(255, 255, 255, 0.06) !important;
    }

    /* All Bootstrap tables in main content: centered data cells (wrap via .ppe-td-wrap). */
    .ppe-main .table > :not(caption) > * > th,
    .ppe-main .table > :not(caption) > * > td,
    .ppe-content .table > :not(caption) > * > th,
    .ppe-content .table > :not(caption) > * > td {
      text-align: center;
      vertical-align: middle;
    }
    .ppe-main .table > :not(caption) > * > th.text-start,
    .ppe-main .table > :not(caption) > * > th.text-end,
    .ppe-main .table > :not(caption) > * > td.text-start,
    .ppe-main .table > :not(caption) > * > td.text-end {
      text-align: center !important;
    }
    .ppe-main .table td.ppe-actions-cell,
    .ppe-main .table td.ppe-td-actions,
    .ppe-main .table th.ppe-th-actions {
      white-space: nowrap;
    }

    /* Uniform cell padding: equal left/right inset; text cells wrap inside the cell. */
    .ppe-table-uniform-pad > :not(caption) > * > th,
    .ppe-table-uniform-pad > :not(caption) > * > td,
    .ppe-main .table:not(.permission-matrix):not(.ppe-gia-import-preview-table) > :not(caption) > * > th,
    .ppe-main .table:not(.permission-matrix):not(.ppe-gia-import-preview-table) > :not(caption) > * > td {
      padding-top: var(--ppe-cell-pad-y);
      padding-bottom: var(--ppe-cell-pad-y);
      padding-left: var(--ppe-cell-pad-x);
      padding-right: var(--ppe-cell-pad-x);
    }
    .ppe-table-uniform-pad > :not(caption) > * > th,
    .ppe-table-uniform-pad > :not(caption) > * > td,
    .ppe-main .table:not(.permission-matrix):not(.ppe-gia-import-preview-table) > :not(caption) > * > th,
    .ppe-main .table:not(.permission-matrix):not(.ppe-gia-import-preview-table) > :not(caption) > * > td {
      white-space: normal;
      overflow-wrap: anywhere;
      word-break: break-word;
    }
    .ppe-table-uniform-pad > :not(caption) > * > th.ppe-th-actions,
    .ppe-table-uniform-pad > :not(caption) > * > td.ppe-actions-cell,
    .ppe-table-uniform-pad > :not(caption) > * > td.ppe-td-actions,
    .ppe-table-uniform-pad > :not(caption) > * > th.ppe-th-checkbox,
    .ppe-table-uniform-pad > :not(caption) > * > td.ppe-td-checkbox,
    .ppe-main .table:not(.permission-matrix) > :not(caption) > * > th.ppe-th-actions,
    .ppe-main .table:not(.permission-matrix) > :not(caption) > * > td.ppe-actions-cell,
    .ppe-main .table:not(.permission-matrix) > :not(caption) > * > td.ppe-td-actions,
    .ppe-main .table:not(.permission-matrix) > :not(caption) > * > th.ppe-th-checkbox,
    .ppe-main .table:not(.permission-matrix) > :not(caption) > * > td.ppe-td-checkbox {
      white-space: nowrap;
      overflow-wrap: normal;
      word-break: normal;
    }
    table.stages-table.ppe-table-uniform-pad th.st-col-actions,
    table.stages-table.ppe-table-uniform-pad td.ppe-stage-actions-cell,
    table.stages-table.ppe-table-uniform-pad th.st-col-photo,
    table.stages-table.ppe-table-uniform-pad td.ppe-stage-photo-cell {
      white-space: nowrap;
      overflow-wrap: normal;
      word-break: normal;
    }

    /* GIA Excel import preview: PPE codes stay on one line; address/FIO wrap. */
    .ppe-main .ppe-gia-import-preview-wrap.table-responsive {
      overflow-x: hidden;
    }
    .ppe-main table.ppe-gia-import-preview-table {
      table-layout: fixed;
      width: 100%;
    }
    /* Same alignment as .ppe-table-center; scoped to GIA import preview only. */
    .ppe-main table.ppe-gia-import-preview-table > :not(caption) > * > th,
    .ppe-main table.ppe-gia-import-preview-table > :not(caption) > * > td {
      text-align: center;
      vertical-align: middle;
      min-width: 0;
    }
    .ppe-main table.ppe-gia-import-preview-table .ppe-gia-import-col-code {
      text-align: center;
      white-space: nowrap;
      overflow-wrap: normal;
      word-break: normal;
      width: 1%;
      min-width: 4.5rem;
    }
    .ppe-main table.ppe-gia-import-preview-table .ppe-gia-import-col-count,
    .ppe-main table.ppe-gia-import-preview-table .ppe-gia-import-col-short {
      white-space: nowrap;
      overflow-wrap: normal;
      word-break: normal;
      width: 1%;
    }
    .ppe-main table.ppe-gia-import-preview-table .ppe-gia-import-col-count {
      min-width: 2.75rem;
      text-align: center;
    }
    .ppe-main table.ppe-gia-import-preview-table .ppe-gia-import-col-short {
      text-align: center;
      min-width: 4.5rem;
    }
    .ppe-main table.ppe-gia-import-preview-table .ppe-gia-import-col-wrap {
      white-space: normal;
      overflow-wrap: break-word;
      word-break: break-word;
    }
    .ppe-main table.ppe-gia-import-preview-table--assignees col.ppe-gia-col-fio {
      width: 22%;
    }
    .ppe-main table.ppe-gia-import-preview-table--assignees col.ppe-gia-col-role {
      width: 14%;
    }
    .ppe-main table.ppe-gia-import-preview-table--assignees col.ppe-gia-col-code {
      width: 8%;
    }
    .ppe-main table.ppe-gia-import-preview-table--assignees col.ppe-gia-col-status {
      width: 56%;
    }
    .ppe-main table.ppe-gia-import-preview-table--buildings col.ppe-gia-col-code {
      width: 10%;
    }
    .ppe-main table.ppe-gia-import-preview-table--buildings col.ppe-gia-col-title {
      width: 32%;
    }
    .ppe-main table.ppe-gia-import-preview-table--buildings col.ppe-gia-col-wrap {
      width: 58%;
    }
    .ppe-main table.ppe-gia-import-preview-table--distribution col.ppe-gia-col-code {
      width: 9%;
    }
    .ppe-main table.ppe-gia-import-preview-table--distribution col.ppe-gia-col-count {
      width: 7%;
    }
    .ppe-main table.ppe-gia-import-preview-table--distribution col.ppe-gia-col-short {
      width: 11%;
    }
    .ppe-main table.ppe-gia-import-preview-table--distribution col.ppe-gia-col-wrap {
      width: 36.5%;
    }
    .ppe-main table.ppe-gia-import-preview-table--sessions-create col.ppe-gia-col-date {
      width: 12%;
    }
    .ppe-main table.ppe-gia-import-preview-table--sessions-create col.ppe-gia-col-code {
      width: 9%;
    }
    .ppe-main table.ppe-gia-import-preview-table--sessions-create col.ppe-gia-col-type {
      width: 18%;
    }
    .ppe-main table.ppe-gia-import-preview-table--sessions-create col.ppe-gia-col-class {
      width: 8%;
    }
    .ppe-main table.ppe-gia-import-preview-table--sessions-create col.ppe-gia-col-wrap {
      width: 53%;
    }
    .ppe-main table.ppe-gia-import-preview-table td.ppe-gia-import-status {
      white-space: normal;
      overflow-wrap: break-word;
      word-break: break-word;
    }
    .ppe-main table.ppe-gia-import-preview-table .ppe-gia-import-status-badge {
      display: inline-block;
      margin-bottom: 0.25rem;
    }
    .ppe-main table.ppe-gia-import-preview-table .ppe-gia-import-status-msg {
      display: block;
      font-size: 0.875em;
      line-height: 1.35;
    }

    .ppe-main .ppe-gia-import-apply-footer {
      display: flex;
      justify-content: flex-end;
    }

    @media (max-width: 767.98px) {
      .ppe-main .ppe-gia-import-apply-footer {
        position: sticky;
        bottom: 0;
        z-index: 2;
        margin-left: -0.5rem;
        margin-right: -0.5rem;
        padding-left: 0.5rem;
        padding-right: 0.5rem;
        padding-bottom: 0.5rem;
        background: var(--bs-body-bg);
        box-shadow: 0 -0.25rem 0.5rem rgba(0, 0, 0, 0.08);
      }
    }

    .ppe-main .table .ppe-actions,
    .ppe-main .table .btn-toolbar,
    .ppe-main .table .btn-group {
      justify-content: center;
    }

    /* Explicit marker (toolbars); cell alignment from rules above. */
    .ppe-table-center th,
    .ppe-table-center td {
      text-align: center;
      vertical-align: middle;
    }
    .ppe-table-center .ppe-td-wrap,
    .ppe-table-center .ppe-th-wrap {
      white-space: normal !important;
      word-break: normal;
      overflow-wrap: break-word;
    }
    .ppe-table-center .ppe-td-anywhere,
    .ppe-table-center .ppe-th-anywhere {
      word-break: break-word;
      overflow-wrap: anywhere;
    }
    /* Common action toolbars inside centered tables */
    .ppe-table-center .ppe-actions,
    .ppe-table-center .btn-toolbar,
    .ppe-table-center .btn-group {
      justify-content: center;
    }

    /* Building row coloring (Bootstrap 5) — glass tint so star/bg shows through.
       Inline `--ppe-row-building-bg` stays opaque hex; color-mix makes it translucent. */
    .ppe-main .table tbody tr.ppe-row-building:not(.table-danger) {
      --ppe-row-glass-bg: color-mix(
        in srgb,
        var(--ppe-row-building-bg, transparent) var(--ppe-row-glass-mix, 28%),
        var(--ppe-row-glass-base, transparent)
      );
      --bs-table-bg: var(--ppe-row-glass-bg);
      --bs-table-accent-bg: var(--ppe-row-glass-bg);
      --bs-table-bg-state: var(--ppe-row-glass-bg);
      --bs-table-hover-bg: var(--ppe-row-glass-bg);
      --bs-table-striped-bg: var(--ppe-row-glass-bg);
    }
    .ppe-main .table tbody tr.ppe-row-building:not(.table-danger) > * {
      background-color: var(--ppe-row-glass-bg) !important;
      backdrop-filter: blur(var(--ppe-glass-blur));
      -webkit-backdrop-filter: blur(var(--ppe-glass-blur));
      background-clip: padding-box;
    }
    .ppe-main .table tbody tr.ppe-row-building:not(.table-danger) > :first-child {
      background-color: var(--ppe-row-glass-bg) !important;
      background-clip: padding-box;
    }
    .ppe-main .table.table-hover tbody tr.ppe-row-building:not(.table-danger):hover {
      --ppe-row-glass-bg: color-mix(
        in srgb,
        var(--ppe-row-building-bg, transparent) var(--ppe-row-glass-mix-hover, 36%),
        var(--ppe-row-glass-base, transparent)
      );
      --bs-table-bg: var(--ppe-row-glass-bg);
      --bs-table-accent-bg: var(--ppe-row-glass-bg);
      --bs-table-bg-state: var(--ppe-row-glass-bg);
    }
    .ppe-main .table.table-hover tbody tr.ppe-row-building:not(.table-danger):hover > * {
      --bs-table-bg-state: var(--ppe-row-glass-bg) !important;
      --bs-table-bg: var(--ppe-row-glass-bg) !important;
      --bs-table-accent-bg: var(--ppe-row-glass-bg) !important;
      background-color: var(--ppe-row-glass-bg) !important;
    }

    /* Pastel `--ppe-row-building-bg` tints stay light — force dark cell text (badges unchanged). */
    .ppe-main .table tbody tr.ppe-row-building:not(.table-danger) {
      --bs-table-color: var(--ppe-row-building-text);
      --bs-table-color-state: var(--ppe-row-building-text);
      --bs-table-color-type: var(--ppe-row-building-text);
    }
    .ppe-main .table tbody tr.ppe-row-building:not(.table-danger) > * {
      color: var(--ppe-row-building-text);
    }
    .ppe-main .table tbody tr.ppe-row-building:not(.table-danger) .text-muted,
    .ppe-main .table tbody tr.ppe-row-building:not(.table-danger) small,
    .ppe-main .table tbody tr.ppe-row-building:not(.table-danger) .small,
    .ppe-main .table tbody tr.ppe-row-building:not(.table-danger) .text-body-secondary,
    .ppe-main .table tbody tr.ppe-row-building:not(.table-danger) .ppe-nearest-task-exam-date {
      color: var(--ppe-row-building-text-muted) !important;
    }
    .ppe-main .table tbody tr.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item) {
      color: var(--ppe-row-building-link);
    }
    .ppe-main .table tbody tr.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item):hover,
    .ppe-main .table tbody tr.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item):focus-visible {
      color: #0a58ca;
    }

    /* Overdue glass rows: dark body text; `.text-danger` cells keep Bootstrap danger color. */
    .ppe-main .table tbody tr.ppe-row-building.table-danger {
      --bs-table-color: var(--ppe-row-building-text);
      --bs-table-color-state: var(--ppe-row-building-text);
      --bs-table-color-type: var(--ppe-row-building-text);
    }
    .ppe-main .table tbody tr.ppe-row-building.table-danger > :not(.text-danger) {
      color: var(--ppe-row-building-text);
    }
    .ppe-main .table tbody tr.ppe-row-building.table-danger .text-muted:not(.text-danger),
    .ppe-main .table tbody tr.ppe-row-building.table-danger small:not(.text-danger),
    .ppe-main .table tbody tr.ppe-row-building.table-danger .small:not(.text-danger),
    .ppe-main .table tbody tr.ppe-row-building.table-danger .text-body-secondary:not(.text-danger),
    .ppe-main .table tbody tr.ppe-row-building.table-danger .ppe-nearest-task-exam-date:not(.text-danger) {
      color: var(--ppe-row-building-text-muted) !important;
    }

    [data-theme="dark"] .ppe-main .table > tbody > tr.ppe-row-building:not(.table-danger) > td,
    [data-theme="dark"] .ppe-main .table > tbody > tr.ppe-row-building:not(.table-danger) > th,
    [data-theme="dark"] .ppe-main .table > tbody > tr.ppe-row-building.table-danger > :not(.text-danger) {
      color: var(--ppe-row-building-text);
    }
    [data-theme="dark"] .ppe-main .table > tbody > tr.ppe-row-building:not(.table-danger) .text-muted,
    [data-theme="dark"] .ppe-main .table > tbody > tr.ppe-row-building:not(.table-danger) small,
    [data-theme="dark"] .ppe-main .table > tbody > tr.ppe-row-building:not(.table-danger) .small,
    [data-theme="dark"] .ppe-main .table > tbody > tr.ppe-row-building:not(.table-danger) .text-body-secondary,
    [data-theme="dark"] .ppe-main .table > tbody > tr.ppe-row-building:not(.table-danger) .ppe-nearest-task-exam-date,
    [data-theme="dark"] .ppe-main .table > tbody > tr.ppe-row-building.table-danger .text-muted:not(.text-danger),
    [data-theme="dark"] .ppe-main .table > tbody > tr.ppe-row-building.table-danger small:not(.text-danger),
    [data-theme="dark"] .ppe-main .table > tbody > tr.ppe-row-building.table-danger .small:not(.text-danger),
    [data-theme="dark"] .ppe-main .table > tbody > tr.ppe-row-building.table-danger .text-body-secondary:not(.text-danger),
    [data-theme="dark"] .ppe-main .table > tbody > tr.ppe-row-building.table-danger .ppe-nearest-task-exam-date:not(.text-danger) {
      color: var(--ppe-row-building-text-muted) !important;
    }
    [data-theme="dark"] .ppe-main .table > tbody > tr.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item) {
      color: var(--ppe-row-building-link);
    }
    [data-theme="dark"] .ppe-main .table tbody tr.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item):hover,
    [data-theme="dark"] .ppe-main .table tbody tr.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item):focus-visible {
      color: #c5dff0;
    }

    .ppe-nearest-tasks-table .table thead th {
      color: var(--ppe-text, #1a3a5c);
      font-weight: 600;
    }

    /* Overdue rows: danger glass tint + left accent (overrides building color). */
    .ppe-main .table tbody tr.ppe-row-building.table-danger {
      --ppe-row-glass-bg: color-mix(
        in srgb,
        var(--bs-danger) var(--ppe-row-danger-glass-mix, 22%),
        var(--ppe-row-glass-base, transparent)
      );
      --bs-table-bg: var(--ppe-row-glass-bg);
      --bs-table-accent-bg: var(--ppe-row-glass-bg);
      --bs-table-bg-state: var(--ppe-row-glass-bg);
      --bs-table-hover-bg: var(--ppe-row-glass-bg);
      --bs-table-striped-bg: var(--ppe-row-glass-bg);
    }
    .ppe-main .table tbody tr.ppe-row-building.table-danger > * {
      background-color: var(--ppe-row-glass-bg) !important;
      backdrop-filter: blur(var(--ppe-glass-blur));
      -webkit-backdrop-filter: blur(var(--ppe-glass-blur));
      background-clip: padding-box;
    }
    .ppe-main .table tbody tr.ppe-row-building.table-danger > :first-child {
      box-shadow: inset 3px 0 0 var(--bs-danger);
    }
    .ppe-main .table.table-hover tbody tr.ppe-row-building.table-danger:hover {
      --ppe-row-glass-bg: color-mix(
        in srgb,
        var(--bs-danger) var(--ppe-row-danger-glass-mix-hover, 30%),
        var(--ppe-row-glass-base, transparent)
      );
      --bs-table-bg: var(--ppe-row-glass-bg);
      --bs-table-accent-bg: var(--ppe-row-glass-bg);
      --bs-table-bg-state: var(--ppe-row-glass-bg);
    }
    .ppe-main .table.table-hover tbody tr.ppe-row-building.table-danger:hover > * {
      --bs-table-bg-state: var(--ppe-row-glass-bg) !important;
      --bs-table-bg: var(--ppe-row-glass-bg) !important;
      --bs-table-accent-bg: var(--ppe-row-glass-bg) !important;
      background-color: var(--ppe-row-glass-bg) !important;
    }

    /* Same glass tint on mobile task tiles and calendar list (inline --ppe-row-building-bg). */
    .ppe-main .card.ppe-row-building:not(.table-danger),
    .ppe-main article.ppe-row-building:not(.table-danger) {
      --bs-card-bg: transparent;
      background-color: color-mix(
        in srgb,
        var(--ppe-row-building-bg, transparent) var(--ppe-row-glass-mix, 28%),
        var(--ppe-row-glass-base, transparent)
      ) !important;
      backdrop-filter: blur(var(--ppe-glass-blur));
      -webkit-backdrop-filter: blur(var(--ppe-glass-blur));
    }
    .ppe-main .card.ppe-row-building:not(.table-danger) > .card-body,
    .ppe-main article.ppe-row-building:not(.table-danger) > .card-body {
      background-color: transparent;
    }
    .ppe-main .card.ppe-row-building.table-danger,
    .ppe-main article.ppe-row-building.table-danger,
    .ppe-main .card.ppe-row-building.table-danger > .card-body,
    .ppe-main article.ppe-row-building.table-danger > .card-body {
      background-color: color-mix(
        in srgb,
        var(--bs-danger) var(--ppe-row-danger-glass-mix, 22%),
        var(--ppe-row-glass-base, transparent)
      ) !important;
      backdrop-filter: blur(var(--ppe-glass-blur));
      -webkit-backdrop-filter: blur(var(--ppe-glass-blur));
      border-left: 3px solid var(--bs-danger);
    }
    .ppe-main .list-group-item.ppe-row-building.ppe-exam-calendar-event {
      background-color: color-mix(
        in srgb,
        var(--ppe-row-building-bg, transparent) var(--ppe-row-glass-mix, 28%),
        var(--ppe-row-glass-base, transparent)
      );
      backdrop-filter: blur(var(--ppe-glass-blur));
      -webkit-backdrop-filter: blur(var(--ppe-glass-blur));
    }
    .ppe-main .list-group-item.ppe-row-building.ppe-exam-calendar-event:hover,
    .ppe-main .list-group-item.ppe-row-building.ppe-exam-calendar-event:focus {
      background-color: color-mix(
        in srgb,
        var(--ppe-row-building-bg, transparent) var(--ppe-row-glass-mix-hover, 36%),
        var(--ppe-row-glass-base, transparent)
      );
    }

    /* Dark: mute bright inline pastels — dim pastel, prep-mix into base, then low glass mix. */
    [data-theme="dark"] .ppe-main .table tbody tr.ppe-row-building:not(.table-danger) {
      --ppe-row-glass-prep-source: color-mix(
        in srgb,
        var(--ppe-row-building-bg, transparent) var(--ppe-row-glass-prep-dim, 50%),
        #000000
      );
      --ppe-row-glass-tint: color-mix(
        in srgb,
        var(--ppe-row-glass-prep-source) var(--ppe-row-glass-prep-mix, 55%),
        var(--ppe-row-glass-base, #070a0e)
      );
      --ppe-row-glass-bg: color-mix(
        in srgb,
        var(--ppe-row-glass-tint) var(--ppe-row-glass-mix, 10%),
        var(--ppe-row-glass-base, #070a0e)
      );
      --bs-table-bg: var(--ppe-row-glass-bg);
      --bs-table-accent-bg: var(--ppe-row-glass-bg);
      --bs-table-bg-state: var(--ppe-row-glass-bg);
      --bs-table-hover-bg: var(--ppe-row-glass-bg);
      --bs-table-striped-bg: var(--ppe-row-glass-bg);
    }
    [data-theme="dark"] .ppe-main .table.table-hover tbody tr.ppe-row-building:not(.table-danger):hover {
      --ppe-row-glass-bg: color-mix(
        in srgb,
        var(--ppe-row-glass-tint) var(--ppe-row-glass-mix-hover, 15%),
        var(--ppe-row-glass-base, #070a0e)
      );
      --bs-table-bg: var(--ppe-row-glass-bg);
      --bs-table-accent-bg: var(--ppe-row-glass-bg);
      --bs-table-bg-state: var(--ppe-row-glass-bg);
    }
    [data-theme="dark"] .ppe-main .card.ppe-row-building:not(.table-danger),
    [data-theme="dark"] .ppe-main article.ppe-row-building:not(.table-danger) {
      background-color: color-mix(
        in srgb,
        color-mix(
          in srgb,
          color-mix(
            in srgb,
            var(--ppe-row-building-bg, transparent) var(--ppe-row-glass-prep-dim, 50%),
            #000000
          ) var(--ppe-row-glass-prep-mix, 55%),
          var(--ppe-row-glass-base, #070a0e)
        ) var(--ppe-row-glass-mix, 10%),
        var(--ppe-row-glass-base, #070a0e)
      ) !important;
    }
    [data-theme="dark"] .ppe-main .list-group-item.ppe-row-building.ppe-exam-calendar-event {
      background-color: color-mix(
        in srgb,
        color-mix(
          in srgb,
          color-mix(
            in srgb,
            var(--ppe-row-building-bg, transparent) var(--ppe-row-glass-prep-dim, 50%),
            #000000
          ) var(--ppe-row-glass-prep-mix, 55%),
          var(--ppe-row-glass-base, #070a0e)
        ) var(--ppe-row-glass-mix, 10%),
        var(--ppe-row-glass-base, #070a0e)
      );
    }
    [data-theme="dark"] .ppe-main .list-group-item.ppe-row-building.ppe-exam-calendar-event:hover,
    [data-theme="dark"] .ppe-main .list-group-item.ppe-row-building.ppe-exam-calendar-event:focus {
      background-color: color-mix(
        in srgb,
        color-mix(
          in srgb,
          color-mix(
            in srgb,
            var(--ppe-row-building-bg, transparent) var(--ppe-row-glass-prep-dim, 50%),
            #000000
          ) var(--ppe-row-glass-prep-mix, 55%),
          var(--ppe-row-glass-base, #070a0e)
        ) var(--ppe-row-glass-mix-hover, 15%),
        var(--ppe-row-glass-base, #070a0e)
      );
    }
    [data-theme="dark"] .ppe-main #today-tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
    [data-theme="dark"] .ppe-main #today-tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
    [data-theme="dark"] .ppe-main #tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
    [data-theme="dark"] .ppe-main #tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
    [data-theme="dark"] .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
    [data-theme="dark"] .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
    [data-theme="dark"] #today-tasks .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
    [data-theme="dark"] #tasks .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger) {
      background-color: color-mix(
        in srgb,
        color-mix(
          in srgb,
          color-mix(
            in srgb,
            var(--ppe-row-building-bg, transparent) var(--ppe-row-glass-prep-dim, 50%),
            #000000
          ) var(--ppe-row-glass-prep-mix, 55%),
          var(--ppe-row-glass-base, #070a0e)
        ) var(--ppe-row-glass-mix, 10%),
        var(--ppe-row-glass-base, #070a0e)
      ) !important;
    }
    [data-theme="dark"] .ppe-main .table tbody tr.ppe-row-building.table-danger {
      --ppe-row-glass-bg: color-mix(
        in srgb,
        var(--bs-danger) var(--ppe-row-danger-glass-mix, 10%),
        var(--ppe-row-glass-base, #070a0e)
      );
      --bs-table-bg: var(--ppe-row-glass-bg);
      --bs-table-accent-bg: var(--ppe-row-glass-bg);
      --bs-table-bg-state: var(--ppe-row-glass-bg);
      --bs-table-hover-bg: var(--ppe-row-glass-bg);
      --bs-table-striped-bg: var(--ppe-row-glass-bg);
    }
    [data-theme="dark"] .ppe-main .table.table-hover tbody tr.ppe-row-building.table-danger:hover {
      --ppe-row-glass-bg: color-mix(
        in srgb,
        var(--bs-danger) var(--ppe-row-danger-glass-mix-hover, 14%),
        var(--ppe-row-glass-base, #070a0e)
      );
      --bs-table-bg: var(--ppe-row-glass-bg);
      --bs-table-accent-bg: var(--ppe-row-glass-bg);
      --bs-table-bg-state: var(--ppe-row-glass-bg);
    }
    [data-theme="dark"] .ppe-main .card.ppe-row-building.table-danger,
    [data-theme="dark"] .ppe-main article.ppe-row-building.table-danger,
    [data-theme="dark"] .ppe-main #today-tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building.table-danger,
    [data-theme="dark"] .ppe-main #today-tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building.table-danger,
    [data-theme="dark"] .ppe-main #tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building.table-danger,
    [data-theme="dark"] .ppe-main #tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building.table-danger,
    [data-theme="dark"] .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building.table-danger,
    [data-theme="dark"] .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building.table-danger,
    [data-theme="dark"] #today-tasks .ppe-task-mobile-card.card.ppe-row-building.table-danger,
    [data-theme="dark"] #tasks .ppe-task-mobile-card.card.ppe-row-building.table-danger {
      background-color: color-mix(
        in srgb,
        var(--bs-danger) var(--ppe-row-danger-glass-mix, 10%),
        var(--ppe-row-glass-base, #070a0e)
      ) !important;
    }
    [data-theme="dark"] .ppe-main .card.ppe-row-building:not(.table-danger) .card-body,
    [data-theme="dark"] .ppe-main article.ppe-row-building:not(.table-danger) .card-body,
    [data-theme="dark"] .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger) .card-body,
    [data-theme="dark"] .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger) .card-body {
      color: var(--ppe-row-building-text);
    }
    [data-theme="dark"] .ppe-main .card.ppe-row-building:not(.table-danger) .text-muted,
    [data-theme="dark"] .ppe-main article.ppe-row-building:not(.table-danger) .text-muted,
    [data-theme="dark"] .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger) .text-muted,
    [data-theme="dark"] .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger) .text-muted,
    [data-theme="dark"] .ppe-main .card.ppe-row-building:not(.table-danger) small,
    [data-theme="dark"] .ppe-main article.ppe-row-building:not(.table-danger) small,
    [data-theme="dark"] .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger) small,
    [data-theme="dark"] .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger) small {
      color: var(--ppe-row-building-text-muted) !important;
    }
    [data-theme="dark"] .ppe-main .card.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge),
    [data-theme="dark"] .ppe-main article.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge),
    [data-theme="dark"] .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge),
    [data-theme="dark"] .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge) {
      color: var(--ppe-row-building-link);
    }

    /* GIA marker styles were removed; keep only building row fill. */

    /* Make unchecked checkboxes more visible */
    .ppe-main .form-check-input[type="checkbox"] {
      background-color: #fff;
    }
    .ppe-main .form-check-input[type="checkbox"]:not(:checked):not(:indeterminate) {
      border-color: rgba(0, 0, 0, 0.45);
      box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.06) inset;
    }
    .ppe-main .form-check-input[type="checkbox"]:not(:checked):not(:indeterminate):focus {
      border-color: rgba(0, 0, 0, 0.55);
      box-shadow:
        0 0 0 1px rgba(0, 0, 0, 0.08) inset,
        0 0 0 0.25rem rgba(13, 110, 253, 0.18);
    }
    /* Make checked checkboxes clearly filled.
       Note: some checkboxes in tables are not wrapped with `.form-check`,
       so we target the input itself. */
    .ppe-main .form-check-input[type="checkbox"]:checked,
    .ppe-main .form-check-input[type="checkbox"]:indeterminate {
      background-color: var(--bs-primary);
      border-color: var(--bs-primary);
    }
    .ppe-main .form-check-input[type="checkbox"]:checked:hover,
    .ppe-main .form-check-input[type="checkbox"]:indeterminate:hover {
      filter: brightness(0.95);
    }
    .ppe-main .form-check-input[type="checkbox"]:checked:focus,
    .ppe-main .form-check-input[type="checkbox"]:indeterminate:focus {
      border-color: var(--bs-primary);
      box-shadow: 0 0 0 0.25rem rgba(var(--bs-primary-rgb), 0.25);
    }
    .ppe-main .form-check-input:disabled {
      border-color: rgba(0, 0, 0, 0.22);
    }

    /* Dense tables: fit viewport, ellipsis + title tooltip for full text */
    .ppe-table-compact {
      table-layout: fixed;
      width: 100%;
    }
    .ppe-table-compact th,
    .ppe-table-compact td {
      overflow: hidden;
      max-width: 0;
      vertical-align: middle;
    }
    .ppe-table-compact th.ppe-th-actions,
    .ppe-table-compact td.ppe-actions-cell,
    .ppe-table-compact td.ppe-td-actions,
    .ppe-table-compact th.ppe-td-no-clip,
    .ppe-table-compact td.ppe-td-no-clip,
    .ppe-table-compact td.ppe-stage-deadlines-cell {
      max-width: none;
    }
    .ppe-table-compact th.ppe-td-no-clip,
    .ppe-table-compact td.ppe-td-no-clip,
    .ppe-table-compact td.ppe-stage-deadlines-cell {
      overflow: visible;
      position: relative;
    }
    .ppe-table-compact th.ppe-stage-photo-cell,
    .ppe-table-compact td.ppe-stage-photo-cell,
    table.stages-table.ppe-table-compact th.st-col-photo,
    table.stages-table.ppe-table-compact td.ppe-stage-photo-cell {
      max-width: none;
      overflow: visible;
      position: relative;
    }
    .ppe-table-compact th .ppe-th-label {
      display: block;
      max-width: 100%;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
      min-width: 0;
    }
    .ppe-table-compact th .ppe-th-label a {
      display: inline-block;
      max-width: 100%;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
      vertical-align: bottom;
    }

    /* Client-side sortable columns (.ppe-table-sortable + ppe-table-sort.js) */
    table.ppe-table-sortable th,
    table.ppe-table-sortable td {
      text-align: center;
      vertical-align: middle;
    }
    table.ppe-table-sortable thead th {
      vertical-align: middle;
      text-align: center;
    }
    table.ppe-table-sortable .ppe-table-sort-btn {
      display: inline-flex;
      align-items: center;
      justify-content: center;
      gap: 0.25rem;
      max-width: 100%;
      width: 100%;
      margin: 0;
      padding: 0;
      border: 0;
      background: transparent;
      color: inherit;
      font: inherit;
      font-weight: 600;
      text-align: center;
      cursor: pointer;
      pointer-events: auto;
      text-decoration: underline;
      text-decoration-style: dotted;
      text-underline-offset: 0.15em;
    }
    table.ppe-table-sortable .ppe-table-sort-btn:hover,
    table.ppe-table-sortable .ppe-table-sort-btn:focus-visible {
      color: var(--bs-primary);
      outline: none;
    }
    table.ppe-table-sortable .ppe-table-sort-btn::after {
      display: inline-block;
      min-width: 0.85em;
      font-size: 0.75em;
      line-height: 1;
      opacity: 0.45;
      text-decoration: none;
    }
    table.ppe-table-sortable th[aria-sort="ascending"] .ppe-table-sort-btn::after {
      content: "▲";
      opacity: 1;
    }
    table.ppe-table-sortable th[aria-sort="descending"] .ppe-table-sort-btn::after {
      content: "▼";
      opacity: 1;
    }
    .ppe-table-compact td.ppe-actions-cell,
    .ppe-table-compact td.ppe-td-actions {
      overflow: hidden;
      white-space: nowrap;
    }
    .ppe-table-compact td.ppe-actions-cell > .btn-toolbar,
    .ppe-table-compact td.ppe-actions-cell > .ppe-actions,
    .ppe-table-compact td.ppe-td-actions > .btn-toolbar,
    .ppe-table-compact td.ppe-td-actions > .ppe-actions {
      display: inline-flex;
      flex-wrap: nowrap;
      align-items: center;
      justify-content: center;
      max-width: 100%;
      margin: 0;
      overflow-x: auto;
      overflow-y: hidden;
      -webkit-overflow-scrolling: touch;
      scrollbar-width: thin;
    }
    .ppe-table-compact td.ppe-actions-cell .btn-group,
    .ppe-table-compact td.ppe-td-actions .btn-group {
      flex-wrap: nowrap !important;
    }
    .ppe-table-compact td .badge:not(.ppe-badge-wrap) {
      display: inline-block;
      max-width: 100%;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
      vertical-align: middle;
    }
    .ppe-table-compact .ppe-cell-truncate {
      display: block;
      max-width: 100%;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
    }
    .ppe-table-compact .ppe-cell-wrap {
      display: block;
      max-width: 100%;
      white-space: normal;
      word-break: normal;
      overflow-wrap: break-word;
      min-width: 0;
    }
    .ppe-table-compact .ppe-cell-wrap-2 {
      display: -webkit-box;
      -webkit-box-orient: vertical;
      -webkit-line-clamp: 2;
      overflow: hidden;
      max-width: 100%;
      white-space: normal;
      word-break: normal;
      overflow-wrap: break-word;
      min-width: 0;
      line-height: 1.25;
    }
    .ppe-table-compact col.ppe-col-deadline { width: 7.25rem; }
    .ppe-table-compact col.ppe-col-building { width: 6.5rem; }
    .ppe-table-compact col.ppe-col-status { width: 5.75rem; }
    .ppe-table-compact col.ppe-col-actions { width: 4.75rem; }
    .ppe-table-compact col.ppe-col-date { width: 6.25rem; }
    .ppe-table-compact col.ppe-col-exam { width: 26%; }
    .ppe-table-compact col.ppe-col-stage { width: 30%; }
    .ppe-table-compact col.ppe-col-name { width: 38%; }
    .ppe-table-compact col.ppe-col-gia { width: 5rem; }
    /* Home «Ближайшие экзамены»: narrow name; room for date/status badges */
    .ppe-table-compact.ppe-table-exams col.ppe-col-exam-date { width: 10%; }
    .ppe-table-compact.ppe-table-exams col.ppe-col-exam-building { width: 11%; }
    .ppe-table-compact.ppe-table-exams col.ppe-col-exam-name { width: 24%; }
    .ppe-table-compact.ppe-table-exams col.ppe-col-exam-status { width: 45%; }
    .ppe-table-compact.ppe-table-exams col.ppe-col-exam-actions { width: 10%; }

    /* Home «Ближайшие экзамены»: карусель этапов (prev · current · next) — боковые как текст таблицы */
    .ppe-stage-carousel {
      --ppe-stage-carousel-scale-side: 1;
      --ppe-stage-carousel-scale-center: 1.02;
      --ppe-stage-carousel-rotate-side: 0deg;
      --ppe-stage-carousel-translate-z-side: 0px;
      --ppe-stage-carousel-translate-z-center: 0px;
      --ppe-stage-carousel-translate-x-side: 6%;
      --ppe-stage-carousel-translate-y-side: 0px;
      --ppe-stage-carousel-slot-overlap: 4%;
      --ppe-stage-carousel-slot-radius: 14px;
      --ppe-stage-carousel-blur-side: 0.65px;
      --ppe-stage-carousel-pill-bg: rgba(0, 0, 0, 0.055);
      --ppe-stage-carousel-pill-bg-center: transparent;
      --ppe-stage-carousel-pill-bg-side: transparent;
      display: grid;
      grid-template-columns: minmax(0, 0.76fr) minmax(0, 1.55fr) minmax(0, 0.76fr);
      gap: 0;
      align-items: center;
      width: 100%;
      max-width: 100%;
      position: relative;
      isolation: isolate;
      padding: 0.25rem 0;
    }
    /* Edge backdrop-blur и mask-fade убраны: давали мутность на prev/next (особенно справа) */
    .ppe-stage-carousel__slot {
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      min-width: 0;
      text-align: center;
      color: inherit;
      background: transparent;
      border: none;
      box-shadow: none;
      padding: 0;
      transform-origin: center center;
      backface-visibility: visible;
      -webkit-font-smoothing: antialiased;
      -moz-osx-font-smoothing: grayscale;
      transition: transform 0.32s cubic-bezier(0.22, 1, 0.36, 1);
      will-change: auto;
    }
    /* Скруглённая «плашка» — видимый контур на прозрачном фоне слота */
    .ppe-stage-carousel__pill {
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      gap: 0.2rem;
      width: 100%;
      max-width: 100%;
      min-width: 0;
      padding: 0.28rem 0.5rem;
      border-radius: var(--ppe-stage-carousel-slot-radius);
      background: var(--ppe-stage-carousel-pill-bg);
      border: none;
      box-shadow: none;
      outline: none;
      overflow: hidden;
      -webkit-font-smoothing: antialiased;
      -moz-osx-font-smoothing: grayscale;
    }
    .ppe-stage-carousel__slot--empty {
      visibility: hidden;
      pointer-events: none;
    }
    .ppe-stage-carousel__slot--prev,
    .ppe-stage-carousel__slot--next {
      opacity: 0.88;
      font-size: inherit;
      font-weight: inherit;
      line-height: inherit;
      color: inherit;
      filter: blur(var(--ppe-stage-carousel-blur-side));
      border: none;
      box-shadow: none;
      outline: none;
      position: relative;
      z-index: 1;
    }
    .ppe-stage-carousel__slot--prev .ppe-stage-carousel__pill,
    .ppe-stage-carousel__slot--next .ppe-stage-carousel__pill {
      background: var(--ppe-stage-carousel-pill-bg-side);
      border: none;
      box-shadow: none;
      outline: none;
    }
    .ppe-stage-carousel__slot--prev {
      margin-inline-end: calc(-1 * var(--ppe-stage-carousel-slot-overlap));
      transform:
        translateX(var(--ppe-stage-carousel-translate-x-side));
    }
    .ppe-stage-carousel__slot--next {
      margin-inline-start: calc(-1 * var(--ppe-stage-carousel-slot-overlap));
      transform:
        translateX(calc(-1 * var(--ppe-stage-carousel-translate-x-side)));
    }
    .ppe-stage-carousel__slot--current {
      opacity: 1;
      font-size: inherit;
      line-height: inherit;
      color: inherit;
      transform: scale(var(--ppe-stage-carousel-scale-center));
      border: none;
      box-shadow: none;
      outline: none;
      filter: none !important;
      position: relative;
      isolation: isolate;
      z-index: 10;
      will-change: auto;
    }
    .ppe-stage-carousel__slot--current .ppe-stage-carousel__pill {
      padding: 0.34rem 0.58rem;
      background: var(--ppe-stage-carousel-pill-bg-center);
      border: none;
      box-shadow: none;
      outline: none;
      filter: none !important;
    }
    .ppe-stage-carousel__title {
      display: block;
      max-width: 100%;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
      font-weight: inherit;
      color: inherit;
      -webkit-font-smoothing: antialiased;
      -moz-osx-font-smoothing: grayscale;
    }
    .ppe-stage-carousel__slot--current .ppe-stage-carousel__title {
      font-weight: 600;
      filter: none !important;
    }
    .ppe-stage-carousel__slot--current .ppe-stage-carousel__badge {
      filter: none !important;
    }
    .ppe-stage-carousel__badge {
      font-size: 0.75em;
      font-weight: 600;
      max-width: 100%;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
      opacity: 1;
      -webkit-font-smoothing: antialiased;
      -moz-osx-font-smoothing: grayscale;
    }
    .ppe-stage-carousel__slot--prev .ppe-stage-carousel__badge,
    .ppe-stage-carousel__slot--next .ppe-stage-carousel__badge {
      font-size: 0.75em;
      font-weight: 600;
      opacity: 1;
    }
    .ppe-home-sessions-mobile .ppe-stage-carousel {
      grid-template-columns: minmax(0, 0.8fr) minmax(0, 1.4fr) minmax(0, 0.8fr);
      --ppe-stage-carousel-scale-side: 1;
      --ppe-stage-carousel-scale-center: 1.02;
      --ppe-stage-carousel-rotate-side: 0deg;
      --ppe-stage-carousel-translate-z-side: 0px;
      --ppe-stage-carousel-translate-z-center: 0px;
      --ppe-stage-carousel-translate-x-side: 5%;
      --ppe-stage-carousel-translate-y-side: 0px;
      --ppe-stage-carousel-slot-overlap: 3%;
      --ppe-stage-carousel-slot-radius: 12px;
      --ppe-stage-carousel-blur-side: 0.55px;
    }
    .ppe-home-sessions-mobile .ppe-stage-carousel__pill {
      padding: 0.24rem 0.42rem;
    }
    .ppe-home-sessions-mobile .ppe-stage-carousel__slot--current .ppe-stage-carousel__pill {
      padding: 0.28rem 0.48rem;
    }
    [data-theme="dark"] .ppe-stage-carousel {
      --ppe-stage-carousel-pill-bg: rgba(255, 255, 255, 0.055);
      --ppe-stage-carousel-pill-bg-center: transparent;
      --ppe-stage-carousel-pill-bg-side: transparent;
    }
    @media (prefers-reduced-motion: reduce) {
      .ppe-stage-carousel__slot {
        transition: none;
        will-change: auto;
        /* 3D-позиции остаются; без анимации переключения */
      }
    }
    /* Ближайшие экзамены: раскрытие этапов */
    .ppe-upcoming-session-expand-btn .ppe-upcoming-session-expand-icon {
      transition: transform 0.2s ease;
    }
    .ppe-upcoming-session-expand-btn[aria-expanded="true"] .ppe-upcoming-session-expand-icon {
      transform: rotate(180deg);
    }
    .ppe-upcoming-session-stages-panel {
      background: var(--bs-tertiary-bg, rgba(0, 0, 0, 0.02));
      border-top: 1px solid var(--bs-border-color-translucent, rgba(0, 0, 0, 0.08));
      padding: 0.5rem 0.75rem;
    }
    .ppe-upcoming-session-stages-table-wrap {
      max-width: 100%;
    }
    .ppe-upcoming-session-stages-table {
      font-size: 0.8125rem;
    }
    .ppe-upcoming-session-stages-table th,
    .ppe-upcoming-session-stages-table td {
      vertical-align: middle;
    }
    tr.ppe-upcoming-session-stages-collapse > td {
      background: transparent;
    }
    .ppe-home-sessions-table tr.ppe-upcoming-session-stages-collapse.collapse:not(.show) {
      display: none;
    }
    .ppe-upcoming-session-card .ppe-upcoming-session-stages-panel {
      border-top: 1px solid var(--bs-border-color-translucent, rgba(0, 0, 0, 0.08));
      border-radius: 0.375rem;
    }
    [data-theme="dark"] .ppe-upcoming-session-stages-panel {
      background: rgba(255, 255, 255, 0.03);
    }
    /* Session detail: задействованная техника (тип / кол-во / удалить) */
    .ppe-table-compact.ppe-exam-equipment-table col.ppe-col-exam-eq-type { width: 58%; }
    .ppe-table-compact.ppe-exam-equipment-table col.ppe-col-exam-eq-qty { width: 7rem; }
    .ppe-table-compact.ppe-exam-equipment-table col.ppe-col-exam-eq-actions { width: 3.25rem; }
    table.ppe-exam-equipment-table th.ppe-col-exam-eq-qty,
    table.ppe-exam-equipment-table td.ppe-col-exam-eq-qty {
      min-width: 5.25rem;
      max-width: none;
      width: 7rem;
    }
    table.ppe-exam-equipment-table th.ppe-col-exam-eq-actions,
    table.ppe-exam-equipment-table td.ppe-col-exam-eq-actions {
      min-width: 2.75rem;
      max-width: none;
      width: 3.25rem;
      overflow: visible;
    }
    table.ppe-exam-equipment-table td.ppe-col-exam-eq-type {
      min-width: 0;
    }
    table.ppe-exam-equipment-table td.ppe-col-exam-eq-type .form-select {
      width: 100%;
      max-width: 100%;
      min-width: 0;
    }
    table.ppe-exam-equipment-table td.ppe-col-exam-eq-qty .form-control {
      width: 100%;
      max-width: 5.5rem;
      min-width: 3.25rem;
      margin-inline: auto;
    }
    /* Session detail: нехватка техники (здание / тип / кол-во / удалить) */
    .ppe-table-compact.ppe-exam-shortage-table col.ppe-col-shortage-building { width: 25%; }
    .ppe-table-compact.ppe-exam-shortage-table col.ppe-col-shortage-type { width: 35%; }
    .ppe-table-compact.ppe-exam-shortage-table col.ppe-col-shortage-qty { width: 20%; }
    .ppe-table-compact.ppe-exam-shortage-table col.ppe-col-shortage-actions { width: 20%; }
    table.ppe-exam-shortage-table th.ppe-col-shortage-qty,
    table.ppe-exam-shortage-table td.ppe-col-shortage-qty {
      min-width: 5.25rem;
      max-width: none;
      width: 20%;
    }
    table.ppe-exam-shortage-table th.ppe-col-shortage-actions,
    table.ppe-exam-shortage-table td.ppe-col-shortage-actions {
      min-width: 2.75rem;
      max-width: none;
      width: 20%;
      overflow: visible;
      white-space: nowrap;
    }
    table.ppe-exam-shortage-table td.ppe-col-shortage-building,
    table.ppe-exam-shortage-table td.ppe-col-shortage-type {
      min-width: 0;
    }
    table.ppe-exam-shortage-table td.ppe-col-shortage-building .form-select,
    table.ppe-exam-shortage-table td.ppe-col-shortage-type .form-select {
      width: 100%;
      max-width: 100%;
      min-width: 0;
    }
    table.ppe-exam-shortage-table td.ppe-col-shortage-qty .form-control {
      width: 100%;
      max-width: 5.5rem;
      min-width: 3.25rem;
      margin-inline: auto;
    }
    .ppe-table-exams td.ppe-exam-name {
      min-width: 0;
    }
    .ppe-table-exams .ppe-exam-name-text {
      display: -webkit-box;
      -webkit-box-orient: vertical;
      -webkit-line-clamp: 2;
      overflow: hidden;
      max-width: 100%;
      white-space: normal;
      word-break: normal;
      overflow-wrap: break-word;
    }
    .ppe-table-exams td.ppe-exam-status {
      overflow: visible;
      min-width: 0;
    }
    .ppe-table-exams td.ppe-exam-status .badge {
      white-space: normal;
      word-break: normal;
      overflow-wrap: break-word;
      text-align: center;
      line-height: 1.25;
    }
    .ppe-inline-truncate {
      display: inline-block;
      max-width: min(100%, 20rem);
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
      vertical-align: bottom;
    }

    /* Compact UI: physical density (not only Bootstrap `btn-sm`) */
    .ppe-main {
      --ppe-btn-compact-font-size: 0.8125rem;
      --ppe-btn-compact-line-height: 1.2;
      --ppe-btn-compact-padding-y: 0.125rem;
      --ppe-btn-compact-padding-x: 0.375rem;
      --ppe-btn-icon-padding-y: 0.1rem;
      --ppe-btn-icon-padding-x: 0.28rem;
      --ppe-btn-icon-font-size: 0.9rem;
      --ppe-actions-gap: 0.125rem;
      --ppe-btn-toolbar-gap: 0.125rem;
    }
    .ppe-main .btn-sm,
    .ppe-main .btn-group-sm > .btn {
      --bs-btn-padding-y: var(--ppe-btn-compact-padding-y);
      --bs-btn-padding-x: var(--ppe-btn-compact-padding-x);
      --bs-btn-font-size: var(--ppe-btn-compact-font-size);
      --bs-btn-line-height: var(--ppe-btn-compact-line-height);
    }
    .ppe-main .btn.ppe-btn-compact {
      --bs-btn-padding-y: 0.05rem;
      --bs-btn-padding-x: 0.3rem;
    }
    .ppe-main .btn.ppe-btn-icon {
      padding: var(--ppe-btn-icon-padding-y) var(--ppe-btn-icon-padding-x);
      line-height: 1;
    }
    .ppe-main .btn.ppe-btn-icon i {
      font-size: var(--ppe-btn-icon-font-size);
      line-height: 1;
      vertical-align: 0;
    }

    /* Interactive states: Bootstrap 5 focus ring (0.25rem spread) makes buttons look enlarged after click. */
    .ppe-main .btn:focus,
    .ppe-main .btn:focus-visible,
    .ppe-main .btn:active:not(:disabled):not(.disabled),
    .ppe-main .btn.active,
    .ppe-main .btn.show,
    .ppe-main .btn:first-child:active,
    .ppe-main :not(.btn-check) + .btn:active {
      --bs-btn-focus-box-shadow: none;
      --bs-btn-active-shadow: none;
      box-shadow: none;
      transform: none;
      outline: 0;
    }
    .ppe-main .btn:focus-visible {
      outline: 1px solid rgba(var(--bs-primary-rgb), 0.4);
      outline-offset: 0;
    }
    .ppe-main .btn-primary:focus-visible:not(:disabled):not(.disabled),
    .ppe-main .btn-secondary:focus-visible:not(:disabled):not(.disabled),
    .ppe-main .btn-outline-secondary:focus-visible:not(:disabled):not(.disabled),
    .ppe-main .btn-outline-primary:focus-visible:not(:disabled):not(.disabled) {
      outline: 1px solid rgba(158, 199, 232, 0.45);
      outline-offset: 2px;
    }
    .ppe-main .btn-sm:focus,
    .ppe-main .btn-sm:focus-visible,
    .ppe-main .btn-sm:active:not(:disabled):not(.disabled),
    .ppe-main .btn-sm.active,
    .ppe-main .btn-group-sm > .btn:focus,
    .ppe-main .btn-group-sm > .btn:focus-visible,
    .ppe-main .btn-group-sm > .btn:active:not(:disabled):not(.disabled),
    .ppe-main .btn-group-sm > .btn.active {
      --bs-btn-padding-y: var(--ppe-btn-compact-padding-y);
      --bs-btn-padding-x: var(--ppe-btn-compact-padding-x);
      --bs-btn-font-size: var(--ppe-btn-compact-font-size);
      --bs-btn-line-height: var(--ppe-btn-compact-line-height);
    }
    .ppe-main .btn.ppe-btn-compact:focus,
    .ppe-main .btn.ppe-btn-compact:focus-visible,
    .ppe-main .btn.ppe-btn-compact:active:not(:disabled):not(.disabled),
    .ppe-main .btn.ppe-btn-compact.active {
      --bs-btn-padding-y: 0.05rem;
      --bs-btn-padding-x: 0.3rem;
    }
    .ppe-main .btn.ppe-btn-icon:focus,
    .ppe-main .btn.ppe-btn-icon:focus-visible,
    .ppe-main .btn.ppe-btn-icon:active:not(:disabled):not(.disabled),
    .ppe-main .btn.ppe-btn-icon.active,
    .ppe-main .btn.ppe-btn-icon.show {
      padding: var(--ppe-btn-icon-padding-y) var(--ppe-btn-icon-padding-x);
      line-height: 1;
    }

    .ppe-main .btn-toolbar {
      gap: var(--ppe-btn-toolbar-gap);
      margin-bottom: 0;
    }
    .ppe-main .btn-toolbar .btn-group + .btn-group,
    .ppe-main .btn-toolbar .btn-group + form,
    .ppe-main .btn-toolbar form + .btn-group {
      margin-left: var(--ppe-btn-toolbar-gap);
    }
    .ppe-main .ppe-page-header-actions {
      gap: var(--ppe-actions-gap);
    }
    .ppe-main .ppe-page-header-actions .btn-group-sm > .btn {
      white-space: nowrap;
    }
    .ppe-main .ppe-form-actions {
      display: flex;
      flex-wrap: wrap;
      align-items: center;
      gap: var(--ppe-actions-gap);
    }
    .ppe-main .ppe-form-actions .btn,
    .ppe-main .ppe-form-actions form {
      margin: 0;
    }
    /* Login: slightly larger tap targets */
    .ppe-main .ppe-page-login .btn-sm {
      --bs-btn-padding-y: 0.25rem;
      --bs-btn-padding-x: 0.75rem;
      --bs-btn-font-size: 0.875rem;
    }

    /* Compact action buttons (lists/tables) */
    .ppe-actions {
      display: flex;
      gap: var(--ppe-actions-gap);
      justify-content: flex-end;
      flex-wrap: wrap;
      align-items: center;
    }
    .ppe-table-compact .ppe-actions {
      flex-wrap: nowrap;
      justify-content: center;
      max-width: 100%;
      overflow-x: auto;
      overflow-y: hidden;
    }
    .ppe-actions .btn {
      white-space: nowrap;
    }
    .ppe-actions-compact .btn-group {
      flex-wrap: nowrap;
    }
    .ppe-table-compact col.ppe-col-actions {
      width: 4.25rem;
    }
    .ppe-table-compact.ppe-table-exams col.ppe-col-exam-actions {
      width: 3.5rem;
    }
    .ppe-main .table td .btn-toolbar .btn-group {
      flex-wrap: nowrap !important;
    }
    .ppe-main .table td .btn-toolbar form {
      display: inline-flex;
      margin: 0;
      vertical-align: middle;
    }

    /* Back link helper (template: `ppe/includes/back_link.html`) */
    .ppe-back-link {
      display: inline-flex;
      align-items: center;
      gap: 0.25rem;
    }
    .ppe-back-link i {
      font-size: 0.95rem;
      line-height: 1;
    }

    /* Admin tables / inline formsets (see docs/UI_PATTERNS.md) */
    .ppe-formset-form .ppe-formset-footer {
      border-top: 1px solid var(--bs-border-color);
    }
    .ppe-formset-table td.ppe-actions-cell {
      white-space: nowrap;
    }
    .ppe-actions-compact .btn {
      white-space: nowrap;
    }
    .ppe-actions-compact .btn + .btn,
    .ppe-actions-compact form + .btn,
    .ppe-actions-compact .btn + form {
      margin-left: 0;
    }

  .ppe-navbar-search {
      flex: 1 1 auto;
      min-width: 0;
      max-width: 22rem;
    }
    .ppe-navbar-search .form-control {
      background-color: rgba(255, 255, 255, 0.72);
      border-color: var(--ppe-brand-border);
      color: var(--ppe-navbar-text);
    }
    .ppe-navbar-search .form-control::placeholder {
      color: var(--ppe-navbar-text-muted);
    }
    .ppe-navbar-search .form-control:focus {
      background-color: rgba(255, 255, 255, 0.92);
      color: var(--ppe-navbar-text);
      border-color: var(--ppe-gradient-sky);
      box-shadow: 0 0 0 0.2rem rgba(var(--ppe-brand-rgb), 0.18);
    }

    /* Palette-aware outline buttons (navbar + content). */
    .btn-outline-secondary {
      --bs-btn-color: var(--ppe-brand);
      --bs-btn-border-color: var(--ppe-brand-border-strong);
      --bs-btn-hover-color: var(--ppe-brand-hover);
      --bs-btn-hover-bg: rgba(var(--ppe-brand-rgb), 0.08);
      --bs-btn-hover-border-color: var(--ppe-brand);
      --bs-btn-active-color: var(--ppe-brand);
      --bs-btn-active-bg: rgba(var(--ppe-brand-rgb), 0.14);
      --bs-btn-active-border-color: var(--ppe-brand);
      --bs-btn-focus-shadow-rgb: var(--ppe-brand-rgb);
    }
    .nav-ppe .btn-outline-secondary {
      --bs-btn-bg: var(--ppe-glass-bg);
      --bs-btn-hover-bg: var(--ppe-glass-bg-hover);
      --bs-btn-active-bg: var(--ppe-glass-bg-hover);
    }

    /* Pill glass buttons — primary/secondary/outline only (not danger/warning). */
    .btn-primary {
      --bs-btn-border-radius: var(--ppe-radius-pill);
      --bs-btn-bg: transparent;
      --bs-btn-border-color: var(--ppe-glass-border);
      --bs-btn-color: var(--ppe-btn-primary-text, var(--ppe-brand));
      --bs-btn-hover-color: var(--ppe-btn-primary-text, var(--ppe-brand-hover));
      --bs-btn-hover-border-color: rgba(255, 255, 255, 0.55);
      --bs-btn-active-color: var(--ppe-btn-primary-text, var(--ppe-brand));
      --bs-btn-focus-shadow-rgb: 158, 199, 232;
      border-radius: var(--ppe-radius-pill);
      background-image: var(--ppe-btn-primary-gradient);
      background-color: transparent;
      border: 1px solid var(--ppe-glass-border);
      box-shadow: var(--ppe-btn-primary-glow), inset 0 1px 0 rgba(255, 255, 255, 0.35);
      font-weight: 600;
    }
    .btn-primary:hover,
    .btn-primary:focus-visible {
      background-image: var(--ppe-btn-primary-gradient);
      filter: brightness(1.04);
      box-shadow: 0 6px 20px rgba(158, 199, 232, 0.5), inset 0 1px 0 rgba(255, 255, 255, 0.42);
    }
    .btn-primary:active {
      filter: brightness(0.98);
      box-shadow: 0 2px 8px rgba(158, 199, 232, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.28);
    }
    .btn-secondary,
    .btn-outline-secondary,
    .btn-outline-primary {
      --bs-btn-border-radius: var(--ppe-radius-pill);
      border-radius: var(--ppe-radius-pill);
      backdrop-filter: blur(10px);
      -webkit-backdrop-filter: blur(10px);
    }
    .btn-secondary {
      --bs-btn-bg: var(--ppe-glass-bg);
      --bs-btn-border-color: var(--ppe-glass-border);
      --bs-btn-color: var(--ppe-text, var(--ppe-brand));
      --bs-btn-hover-bg: var(--ppe-glass-bg-hover);
      --bs-btn-hover-border-color: var(--ppe-glass-border);
      --bs-btn-hover-color: var(--ppe-text, var(--ppe-brand-hover));
      --bs-btn-active-bg: var(--ppe-glass-bg-hover);
      --bs-btn-active-border-color: var(--ppe-glass-border);
      --bs-btn-focus-shadow-rgb: var(--ppe-brand-rgb);
      background-color: var(--ppe-glass-bg);
      border: 1px solid var(--ppe-glass-border);
    }
    .btn-outline-secondary,
    .btn-outline-primary {
      --bs-btn-bg: var(--ppe-glass-bg);
      --bs-btn-hover-bg: var(--ppe-glass-bg-hover);
      --bs-btn-active-bg: var(--ppe-glass-bg-hover);
      background-color: var(--ppe-glass-bg);
      border: 1px solid var(--ppe-glass-border);
    }
    .btn-outline-primary {
      --bs-btn-color: var(--ppe-brand);
      --bs-btn-border-color: var(--ppe-glass-border);
      --bs-btn-hover-color: var(--ppe-brand-hover);
      --bs-btn-hover-border-color: var(--ppe-gradient-sky);
      --bs-btn-active-color: var(--ppe-brand);
      --bs-btn-focus-shadow-rgb: var(--ppe-brand-rgb);
    }

    /* Glass pill buttons: center label + icon. Standalone = pill/circle; fused btn-group = chain radii below. */
    .btn-primary:not(.ppe-action-btn-square):not(.btn-link),
    .btn-secondary:not(.ppe-action-btn-square):not(.btn-link),
    .btn-outline-primary:not(.ppe-action-btn-square):not(.btn-link),
    .btn-outline-secondary:not(.ppe-action-btn-square):not(.btn-link) {
      --ppe-btn-pill-min-height: 1.875rem;
      display: inline-flex;
      align-items: center;
      justify-content: center;
      gap: 0.25rem;
      line-height: 1;
      min-height: var(--ppe-btn-pill-min-height);
    }
    .btn-sm.btn-primary:not(.ppe-action-btn-square),
    .btn-sm.btn-secondary:not(.ppe-action-btn-square),
    .btn-sm.btn-outline-primary:not(.ppe-action-btn-square),
    .btn-sm.btn-outline-secondary:not(.ppe-action-btn-square),
    .btn-group-sm > .btn:not(.ppe-action-btn-square):not(.btn-link) {
      --ppe-btn-pill-min-height: 1.625rem;
      min-height: var(--ppe-btn-pill-min-height);
    }
    .btn-primary:not(.ppe-action-btn-square) > .bi,
    .btn-secondary:not(.ppe-action-btn-square) > .bi,
    .btn-outline-primary:not(.ppe-action-btn-square) > .bi,
    .btn-outline-secondary:not(.ppe-action-btn-square) > .bi {
      line-height: 1;
      vertical-align: 0;
      flex-shrink: 0;
      padding-top: 0;
      margin-top: 0;
    }
    .btn-group > .btn:not(.ppe-action-btn-square):not(.btn-link),
    .btn-group-sm > .btn:not(.ppe-action-btn-square):not(.btn-link) {
      display: inline-flex;
      align-items: center;
      justify-content: center;
    }

    /* Fused btn-group: pill chain (override glass pill radius on every .btn). */
    .btn-group > .btn:first-child:not(:last-child),
    .btn-group-sm > .btn:first-child:not(:last-child) {
      border-top-left-radius: var(--ppe-radius-pill) !important;
      border-bottom-left-radius: var(--ppe-radius-pill) !important;
      border-top-right-radius: 0 !important;
      border-bottom-right-radius: 0 !important;
      --bs-btn-border-radius: 0;
    }
    .btn-group > .btn:last-child:not(:first-child),
    .btn-group-sm > .btn:last-child:not(:first-child) {
      border-top-right-radius: var(--ppe-radius-pill) !important;
      border-bottom-right-radius: var(--ppe-radius-pill) !important;
      border-top-left-radius: 0 !important;
      border-bottom-left-radius: 0 !important;
      --bs-btn-border-radius: 0;
    }
    .btn-group > .btn:not(:first-child):not(:last-child),
    .btn-group-sm > .btn:not(:first-child):not(:last-child) {
      border-radius: 0 !important;
      --bs-btn-border-radius: 0;
    }
    .btn-group-vertical > .btn:first-child:not(:last-child),
    .btn-group-vertical.btn-group-sm > .btn:first-child:not(:last-child) {
      border-top-left-radius: var(--ppe-radius-pill) !important;
      border-top-right-radius: var(--ppe-radius-pill) !important;
      border-bottom-left-radius: 0 !important;
      border-bottom-right-radius: 0 !important;
      --bs-btn-border-radius: 0;
    }
    .btn-group-vertical > .btn:last-child:not(:first-child),
    .btn-group-vertical.btn-group-sm > .btn:last-child:not(:first-child) {
      border-bottom-left-radius: var(--ppe-radius-pill) !important;
      border-bottom-right-radius: var(--ppe-radius-pill) !important;
      border-top-left-radius: 0 !important;
      border-top-right-radius: 0 !important;
      --bs-btn-border-radius: 0;
    }
    .btn-group-vertical > .btn:not(:first-child):not(:last-child),
    .btn-group-vertical.btn-group-sm > .btn:not(:first-child):not(:last-child) {
      border-radius: 0 !important;
      --bs-btn-border-radius: 0;
    }
    .btn-group > .btn:only-child:not(
        :is(:has(> .bi:only-child), :has(> i:only-child), :has(> .bi):has(> .visually-hidden), :has(> i):has(> .visually-hidden))
      ):not(.ppe-action-btn-square),
    .btn-group-sm > .btn:only-child:not(
        :is(:has(> .bi:only-child), :has(> i:only-child), :has(> .bi):has(> .visually-hidden), :has(> i):has(> .visually-hidden))
      ):not(.ppe-action-btn-square) {
      border-radius: var(--ppe-radius-pill) !important;
      --bs-btn-border-radius: var(--ppe-radius-pill);
    }

    .ppe-theme-toggle {
      --ppe-theme-toggle-size: 2.25rem;
      display: inline-flex !important;
      align-items: center;
      justify-content: center;
      width: var(--ppe-theme-toggle-size) !important;
      height: var(--ppe-theme-toggle-size) !important;
      min-width: var(--ppe-theme-toggle-size) !important;
      min-height: var(--ppe-theme-toggle-size) !important;
      max-width: var(--ppe-theme-toggle-size) !important;
      max-height: var(--ppe-theme-toggle-size) !important;
      aspect-ratio: 1 / 1;
      flex: 0 0 auto !important;
      flex-shrink: 0;
      flex-grow: 0;
      box-sizing: border-box;
      padding: 0 !important;
      --bs-btn-padding-y: 0;
      --bs-btn-padding-x: 0;
      line-height: 1;
      border-radius: 50% !important;
      --bs-btn-border-radius: 50%;
      border: 1px solid var(--ppe-theme-toggle-border);
      background: var(--ppe-theme-toggle-bg);
      color: var(--ppe-theme-toggle-color);
      backdrop-filter: blur(8px);
      -webkit-backdrop-filter: blur(8px);
      box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
      transition:
        background-color 0.15s ease,
        border-color 0.15s ease,
        color 0.15s ease,
        box-shadow 0.15s ease;
    }
    .ppe-theme-toggle:hover,
    .ppe-theme-toggle:focus-visible {
      background: var(--ppe-theme-toggle-bg-hover);
      color: var(--ppe-brand-hover);
      border-color: var(--ppe-brand-border-strong);
    }
    .ppe-theme-toggle:focus-visible {
      outline: 0;
      box-shadow: 0 0 0 0.2rem rgba(var(--ppe-brand-rgb), 0.28);
    }
    .ppe-theme-toggle[aria-pressed="true"] {
      background: var(--ppe-theme-toggle-bg-hover);
      border-color: var(--ppe-brand-border-strong);
    }
    .ppe-theme-toggle .bi {
      font-size: 1rem;
      line-height: 1;
    }
    .ppe-theme-toggle:hover,
    .ppe-theme-toggle:focus,
    .ppe-theme-toggle:focus-visible,
    .ppe-theme-toggle:active:not(:disabled):not(.disabled) {
      width: var(--ppe-theme-toggle-size) !important;
      height: var(--ppe-theme-toggle-size) !important;
      min-width: var(--ppe-theme-toggle-size) !important;
      min-height: var(--ppe-theme-toggle-size) !important;
      max-width: var(--ppe-theme-toggle-size) !important;
      max-height: var(--ppe-theme-toggle-size) !important;
      padding: 0 !important;
    }

/* === Page: sessions === */
/* Локально для таблицы "Экзамены", чтобы не ломать другие таблицы.
       Общая ширина/центрирование задаётся на уровне layout (`.ppe-content`). */
    .ppe-sessions-table-container {
      width: 100%;
      min-width: 0;
    }
    .ppe-sessions-table-container > .table-responsive {
      min-width: 0;
      max-width: 100%;
    }
    @media (min-width: 992px) {
      .ppe-sessions-table-container > .table-responsive {
        overflow-x: clip !important;
      }
    }
    .ppe-sessions-table {
      table-layout: fixed;
      width: 100%;
      max-width: 100%;
      min-width: 0;
    }
    .ppe-sessions-table col.ppe-col-sessions-title {
      width: 14rem;
      max-width: 14rem;
    }
    .ppe-sessions-table th {
      overflow: visible;
      max-width: none;
    }
    /* Единые отступы как у `.ppe-table-center` / `--ppe-cell-pad-*`. */
    .ppe-sessions-table.table-sm > :not(caption) > * > * {
      padding: var(--ppe-cell-pad-y) var(--ppe-cell-pad-x);
    }
    .ppe-sessions-table th,
    .ppe-sessions-table td {
      vertical-align: middle;
      line-height: 1.15;
      min-width: 0;
      /* Не полагаемся на overflow у table-cell (в некоторых браузерах клип работает нестабильно).
         Ограничение/обрезка делается на внутренних обёртках. */
    }
    /* Перебиваем `.ppe-table-center .ppe-td-wrap { white-space: normal !important }` из base.html:
       на ~1400px с сайдбаром viewport >992px, и период/здание/название раньше переносились на 2+ строки. */
    .ppe-sessions-table.ppe-table-center th.ppe-th-wrap,
    .ppe-sessions-table.ppe-table-center td.ppe-td-wrap {
      white-space: nowrap !important;
      word-break: normal !important;
      overflow-wrap: normal !important;
    }
    /* «Название»: узкая колонка с переносом по словам, по центру. */
    .ppe-sessions-table.ppe-table-center th.ppe-th-title,
    .ppe-sessions-table.ppe-table-center td.ppe-td-title {
      white-space: normal !important;
      word-break: normal !important;
      overflow-wrap: break-word !important;
      text-align: center;
    }
    .ppe-sessions-table .ppe-cell-ellipsis {
      display: block;
      max-width: 100%;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
      min-width: 0;
    }
    .ppe-sessions-table .ppe-cell-wrap-2 {
      max-width: 100%;
      display: -webkit-box;
      -webkit-box-orient: vertical;
      -webkit-line-clamp: 2;
      overflow: hidden;
      word-break: normal;
      overflow-wrap: break-word;
      min-width: 0;
    }
    .ppe-sessions-table .ppe-cell-wrap {
      display: block;
      max-width: 100%;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
      word-break: normal;
      overflow-wrap: normal;
      min-width: 0;
      line-height: 1.15;
    }
    .ppe-sessions-table th.ppe-th-title {
      min-width: 0;
      max-width: 14rem;
      width: 14rem;
    }
    .ppe-sessions-table th .ppe-th-label {
      display: block;
      max-width: 100%;
      overflow: visible;
      text-overflow: clip;
      white-space: nowrap;
      min-width: 0;
    }
    .ppe-sessions-table th .ppe-th-label a {
      display: inline;
      max-width: none;
      overflow: visible;
      text-overflow: clip;
      white-space: nowrap;
      vertical-align: baseline;
    }
    .ppe-sessions-table td.ppe-td-title {
      min-width: 0;
      max-width: 14rem;
      width: 14rem;
    }
    .ppe-sessions-table td.ppe-td-title .ppe-cell-wrap-2 {
      text-align: center;
      white-space: normal;
      word-break: normal;
      overflow-wrap: break-word;
      -webkit-line-clamp: unset;
      display: block;
      overflow: visible;
    }

    /* === Page: template set templates (desktop table in .ppe-list-desktop) === */
    .ppe-template-set-templates-table {
      table-layout: fixed;
      width: 100%;
    }
    .ppe-template-set-templates-table.table-sm > :not(caption) > * > * {
      padding: 0.2rem 0.45rem;
    }
    .ppe-template-set-templates-table th,
    .ppe-template-set-templates-table td {
      vertical-align: middle;
      line-height: 1.2;
    }
    .ppe-template-set-templates-table td[data-label="Окно"] .text-muted.small {
      margin-top: 0 !important;
      line-height: 1.15;
    }
    .ppe-template-set-templates-table .ppe-cell-ellipsis {
      display: block;
      max-width: 100%;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
      min-width: 0;
    }
    .ppe-template-set-templates-table td.ppe-actions-cell > .btn-toolbar {
      margin: 0;
    }

    /*
     * Desktop list tables: never stack cells like mobile-cards (label ::before + display:block
     * on td ≈ 400–500px row). Applies even if .ppe-table-mobile-cards leaked onto markup.
     */
    html:not(.ppe-mobile-simplified) .ppe-list-desktop table.ppe-table-rows-compact tbody tr,
    html:not(.ppe-mobile-simplified)
      .ppe-list-desktop
      table.ppe-template-set-templates-table
      tbody
      tr {
      display: table-row !important;
      width: auto !important;
      max-width: none !important;
      margin: 0 !important;
      border: 0 !important;
      border-radius: 0 !important;
      overflow: visible !important;
    }

    html:not(.ppe-mobile-simplified) .ppe-list-desktop table.ppe-table-rows-compact tbody td,
    html:not(.ppe-mobile-simplified)
      .ppe-list-desktop
      table.ppe-template-set-templates-table
      tbody
      td {
      display: table-cell !important;
      width: auto !important;
      min-width: 0 !important;
      min-height: 0 !important;
      height: auto !important;
      padding: 0.25rem 0.5rem !important;
      border-top: var(--bs-border-width) solid var(--bs-border-color) !important;
      overflow: hidden;
      vertical-align: middle !important;
    }

    html:not(.ppe-mobile-simplified)
      .ppe-list-desktop
      table.ppe-table-rows-compact.ppe-table-center
      tbody
      td,
    html:not(.ppe-mobile-simplified)
      .ppe-list-desktop
      table.ppe-template-set-templates-table.ppe-table-center
      tbody
      td {
      text-align: center !important;
    }

    html:not(.ppe-mobile-simplified) .ppe-list-desktop table.ppe-table-rows-compact tbody td::before,
    html:not(.ppe-mobile-simplified)
      .ppe-list-desktop
      table.ppe-template-set-templates-table
      tbody
      td::before {
      display: none !important;
      content: none !important;
      margin: 0 !important;
    }

    html:not(.ppe-mobile-simplified) .ppe-list-desktop table.ppe-table-rows-compact tbody td > *,
    html:not(.ppe-mobile-simplified)
      .ppe-list-desktop
      table.ppe-template-set-templates-table
      tbody
      td
      > * {
      display: inline-block;
      width: auto;
      max-width: 100%;
      min-width: 0;
      min-height: 0;
      vertical-align: middle;
    }

    html:not(.ppe-mobile-simplified)
      .ppe-list-desktop
      table.ppe-table-rows-compact
      tbody
      td
      > form,
    html:not(.ppe-mobile-simplified)
      .ppe-list-desktop
      table.ppe-table-rows-compact
      tbody
      td
      > .dropdown,
    html:not(.ppe-mobile-simplified)
      .ppe-list-desktop
      table.ppe-table-rows-compact
      tbody
      td
      > .btn-toolbar,
    html:not(.ppe-mobile-simplified)
      .ppe-list-desktop
      table.ppe-template-set-templates-table
      tbody
      td
      > form,
    html:not(.ppe-mobile-simplified)
      .ppe-list-desktop
      table.ppe-template-set-templates-table
      tbody
      td
      > .dropdown,
    html:not(.ppe-mobile-simplified)
      .ppe-list-desktop
      table.ppe-template-set-templates-table
      tbody
      td
      > .btn-toolbar,
    html:not(.ppe-mobile-simplified)
      .ppe-list-desktop
      table.ppe-template-set-templates-table
      tbody
      td
      > .ppe-actions-mobile,
    html:not(.ppe-mobile-simplified)
      .ppe-list-desktop
      table.ppe-template-set-templates-table
      tbody
      td
      > .ppe-actions-desktop,
    html:not(.ppe-mobile-simplified)
      .ppe-list-desktop
      table.ppe-template-set-templates-table
      tbody
      td
      > div:not(.dropdown-menu) {
      display: inline-flex;
      width: auto;
      max-width: 100%;
    }

    /* Admin list tables (≥992): tighter rows than Bootstrap .table-sm alone. */
    @media (min-width: 992px) {
      .ppe-list-desktop .ppe-table-compact.table-sm > :not(caption) > * > * {
        padding-top: 0.2rem;
        padding-bottom: 0.2rem;
      }
      .ppe-list-desktop .ppe-table-compact th,
      .ppe-list-desktop .ppe-table-compact td {
        vertical-align: middle;
        line-height: 1.2;
      }
    }
    .ppe-sessions-table th.ppe-th-status,
    .ppe-sessions-table td.ppe-td-status {
      min-width: 0;
      max-width: 8.5rem;
    }
    /* Статус: одна строка на всех ширинах (не только &lt;992px — с сайдбаром viewport шире). */
    .ppe-sessions-table td.ppe-td-status {
      white-space: nowrap;
      overflow: hidden;
    }
    .ppe-sessions-table td.ppe-td-status .ppe-cell-wrap {
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
      word-break: normal;
      overflow-wrap: normal;
    }
    .ppe-sessions-table td.ppe-td-status .badge {
      display: inline-block;
      max-width: 100%;
      vertical-align: middle;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
      word-break: normal;
      overflow-wrap: normal;
      font-size: 0.75rem;
      padding: 0.1em 0.45em;
      line-height: 1.1;
      max-height: 1.35rem;
    }
    .ppe-sessions-table th.ppe-th-actions,
    .ppe-sessions-table td.ppe-td-actions {
      white-space: nowrap;
      min-width: 0;
      max-width: 10.5rem;
      overflow: hidden;
    }
    .ppe-sessions-table td.ppe-td-actions .ppe-action-btn-square {
      --ppe-action-btn-size: 1.7rem;
    }
    .ppe-sessions-table td.ppe-td-actions .ppe-icon-btn-toolbar-inner {
      gap: 0.1rem !important;
    }
    .ppe-sessions-table td.ppe-td-actions.ppe-actions-cell .btn-toolbar,
    .ppe-sessions-table td.ppe-td-actions .btn-toolbar {
      margin: 0;
      display: inline-flex;
      flex-wrap: nowrap;
      align-items: center;
      gap: 0;
      max-width: 100%;
    }
    .ppe-sessions-table td.ppe-td-actions .btn-group {
      flex-wrap: nowrap !important;
      align-items: center;
    }
    .ppe-sessions-table td.ppe-td-actions form {
      display: inline-flex;
      margin: 0;
      vertical-align: middle;
    }

/* === Page: session_detail === */
.ppe-session-detail-highlight {
  margin-top: 0.15rem;
}
.ppe-session-detail-ppe-code,
.ppe-session-detail-highlight .ppe-nearest-task-exam-date {
  font-size: 1.0625rem;
  line-height: 1.35;
  max-width: 100%;
}
.ppe-session-detail-ppe-code {
  color: var(--ppe-code-color) !important;
  font-weight: 700 !important;
  letter-spacing: 0.03em;
  background-color: color-mix(
    in srgb,
    var(--ppe-code-color) 14%,
    var(--ppe-surface-bg, #fff)
  ) !important;
  border: 1px solid color-mix(in srgb, var(--ppe-code-color) 28%, transparent);
}
.ppe-session-detail-highlight .ppe-nearest-task-exam-date {
  margin-top: 0;
}
.ppe-session-detail-highlight--external .ppe-session-detail-meta-item {
  display: inline-flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.35rem;
  max-width: 100%;
}
.ppe-session-detail-highlight--external .ppe-session-detail-meta-label {
  font-size: 0.8125rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.02em;
}

/* GIA assignments: те же оттенки строк, что в списке экзаменов ({% ppe_row_style %}) */
.ppe-main .gia-date-accordion > .accordion-item.ppe-row-building,
.ppe-main .gia-external-assignees-accordion > .accordion-item.ppe-row-building {
  background-color: var(--ppe-row-building-bg, var(--bs-accordion-bg, #fff));
  border-color: var(--bs-border-color);
}

.ppe-main .gia-date-accordion > .accordion-item.ppe-row-building > .accordion-header .accordion-button,
.ppe-main .gia-external-assignees-accordion > .accordion-item.ppe-row-building > .accordion-header .accordion-button {
  background-color: var(--ppe-row-building-bg, var(--bs-accordion-bg, #fff));
}

.ppe-main .gia-date-accordion > .accordion-item.ppe-row-building > .accordion-header .accordion-button:not(.collapsed),
.ppe-main .gia-external-assignees-accordion > .accordion-item.ppe-row-building > .accordion-header .accordion-button:not(.collapsed) {
  background-color: var(--ppe-row-building-bg, var(--bs-accordion-bg, #fff));
  box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-border-color);
}

.ppe-main .gia-date-accordion > .accordion-item.ppe-row-building .accordion-body,
.ppe-main .gia-external-assignees-accordion > .accordion-item.ppe-row-building .accordion-body {
  background-color: var(--ppe-row-building-bg, var(--bs-accordion-bg, #fff));
}

[data-theme="dark"] .ppe-main .gia-date-accordion > .accordion-item.ppe-row-building,
[data-theme="dark"] .ppe-main .gia-external-assignees-accordion > .accordion-item.ppe-row-building,
[data-theme="dark"] .ppe-main .gia-date-accordion > .accordion-item.ppe-row-building > .accordion-header .accordion-button,
[data-theme="dark"] .ppe-main .gia-external-assignees-accordion > .accordion-item.ppe-row-building > .accordion-header .accordion-button,
[data-theme="dark"] .ppe-main .gia-date-accordion > .accordion-item.ppe-row-building > .accordion-header .accordion-button:not(.collapsed),
[data-theme="dark"] .ppe-main .gia-external-assignees-accordion > .accordion-item.ppe-row-building > .accordion-header .accordion-button:not(.collapsed),
[data-theme="dark"] .ppe-main .gia-date-accordion > .accordion-item.ppe-row-building .accordion-body,
[data-theme="dark"] .ppe-main .gia-external-assignees-accordion > .accordion-item.ppe-row-building .accordion-body {
  background-color: color-mix(
    in srgb,
    color-mix(
      in srgb,
      var(--ppe-row-building-bg, transparent) var(--ppe-row-glass-prep-mix, 40%),
      var(--ppe-row-glass-base, #0b0f14)
    ) var(--ppe-row-glass-mix, 12%),
    var(--ppe-row-glass-base, #0b0f14)
  );
}

/* Код ППЭ в заголовке аккордеона — насыщенный текст на пастельном фоне бейджа */
.ppe-main .gia-date-accordion .accordion-button .ppe-building-badge,
.ppe-main .gia-external-assignees-accordion .accordion-button .ppe-building-badge {
  color: var(--ppe-code-color);
  font-weight: 700;
  letter-spacing: 0.03em;
  border: 1px solid color-mix(in srgb, var(--ppe-code-color) 22%, transparent);
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.35);
}

@media (max-width: 991.98px) {
  .ppe-main .gia-date-accordion .accordion-button,
  .ppe-main .gia-external-assignees-accordion .accordion-button {
    flex-wrap: wrap;
    align-items: flex-start;
    gap: 0.35rem 0.5rem;
    padding-top: 0.65rem;
    padding-bottom: 0.65rem;
    min-height: var(--ppe-btn-height-touch, 2.75rem);
    line-height: 1.3;
  }

  .ppe-main .gia-date-accordion .accordion-button .text-nowrap,
  .ppe-main .gia-external-assignees-accordion .accordion-button .text-nowrap {
    white-space: normal;
  }

  .ppe-main .gia-date-accordion .accordion-button .text-truncate,
  .ppe-main .gia-external-assignees-accordion .accordion-button .text-truncate {
    white-space: normal;
    overflow: visible;
    text-overflow: unset;
    flex: 1 1 100%;
    max-width: 100%;
  }

  .ppe-main .gia-external-assignees-accordion .accordion-button .text-muted {
    flex: 1 1 auto;
    min-width: 0;
  }

  .ppe-main .ppe-gia-external-assignees-table.table-responsive,
  .ppe-main .gia-date-accordion .table-responsive {
    overflow-x: visible;
    max-width: 100%;
  }
}

/* GIA «Назначенные в сторонние ППЭ»: узкий № ППЭ, адрес без ellipsis */
.ppe-main table.ppe-gia-external-assignees-table col.ppe-col-gia-ext-fio {
  width: 22%;
}
.ppe-main table.ppe-gia-external-assignees-table col.ppe-col-gia-ext-position {
  width: 20%;
}
.ppe-main table.ppe-gia-external-assignees-table col.ppe-col-gia-ext-ppe-code {
  width: 4.5rem;
}
.ppe-main table.ppe-gia-external-assignees-table col.ppe-col-gia-ext-address {
  width: auto;
}
.ppe-main table.ppe-gia-external-assignees-table.ppe-table-compact th.ppe-col-gia-ext-ppe-code,
.ppe-main table.ppe-gia-external-assignees-table.ppe-table-compact td.ppe-col-gia-ext-ppe-code {
  width: 1%;
  max-width: none;
  min-width: 4.25rem;
  white-space: nowrap;
  overflow: visible;
  text-align: center;
  padding-left: 0.35rem;
  padding-right: 0.35rem;
}
.ppe-main table.ppe-gia-external-assignees-table.ppe-table-compact th.ppe-col-gia-ext-address,
.ppe-main table.ppe-gia-external-assignees-table.ppe-table-compact td.ppe-col-gia-ext-address {
  max-width: none;
  overflow: visible;
  white-space: normal;
}
.ppe-main table.ppe-gia-external-assignees-table.ppe-table-compact td.ppe-col-gia-ext-address .ppe-cell-wrap {
  display: block;
  overflow: visible;
  -webkit-line-clamp: unset;
  -webkit-box-orient: unset;
}

.ppe-session-detail-ppe-address {
  font-size: 1.0625rem;
  line-height: 1.35;
  max-width: 100%;
  white-space: normal;
  text-align: left;
}
.ppe-session-detail-meta-subline {
  font-size: 0.8rem;
  line-height: 1.45;
}
@media (max-width: 575.98px) {
  .ppe-session-detail-ppe-code,
  .ppe-session-detail-ppe-address,
  .ppe-session-detail-highlight .ppe-nearest-task-exam-date {
    font-size: 1rem;
  }
}
#completeWithTimeModal .air-datepicker {
  z-index: 1065;
  --adp-color: #212529;
  --adp-color-secondary: #495057;
  --adp-color-current-date: #0d6efd;
  --adp-color-disabled: #adb5bd;
  --adp-background-color-hover: #e9ecef;
  --adp-background-color-active: #cfe2ff;
  --adp-border-color: #dee2e6;
  --adp-border-color-cell: #dee2e6;
  --adp-btn-color: #212529;
  --adp-btn-color-hover: #0d6efd;
  --adp-time-day-period-color: #212529;
  --adp-font-size: 0.9375rem;
}
#completeWithTimeModal .air-datepicker-cell.-day- {
  color: #212529;
  font-weight: 500;
}
#completeWithTimeModal .air-datepicker-cell.-disabled- {
  color: #adb5bd;
}
[data-theme="dark"] #completeWithTimeModal .air-datepicker {
  --adp-color: #e8edf5;
  --adp-color-secondary: #c8d4e4;
  --adp-color-current-date: #9ec7e8;
  --adp-color-disabled: rgba(200, 212, 228, 0.38);
  --adp-background-color-hover: rgba(255, 255, 255, 0.08);
  --adp-background-color-active: rgba(158, 199, 232, 0.22);
  --adp-border-color: rgba(255, 255, 255, 0.14);
  --adp-border-color-cell: rgba(255, 255, 255, 0.12);
  --adp-btn-color: #e8edf5;
  --adp-btn-color-hover: #9ec7e8;
  --adp-time-day-period-color: #c8d4e4;
  background: var(--ppe-surface-bg);
}
[data-theme="dark"] #completeWithTimeModal .air-datepicker-cell.-day- {
  color: #e8edf5;
}
[data-theme="dark"] #completeWithTimeModal .air-datepicker-cell.-disabled- {
  color: rgba(200, 212, 228, 0.38);
}
.ppe-notif-recipient-scroll {
  max-height: min(18rem, 50vh);
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
}
/* Desktop table readability */
  table.stages-table th,
  table.stages-table td {
    text-align: center;
    vertical-align: middle;
  }
  table.stages-table .ppe-stage-deadlines {
    align-items: center;
  }
  table.stages-table .ppe-stage-deadline-line {
    justify-content: center;
  }
  table.stages-table .ppe-stage-photo-actions,
  table.stages-table .ppe-stage-actions,
  table.stages-table .ppe-stage-done-control,
  table.stages-table .ppe-stage-photo-manage-actions {
    justify-content: center;
  }
  table.stages-table {
    /* Let the table define its intrinsic width so the scroll container
       can reach the real far-right edge. */
    table-layout: auto;
    width: max-content;
    min-width: 100%;
    /* Stronger grid than global default; colors aligned with site tokens */
    --bs-border-color: var(--ppe-table-border-color);
    --bs-table-border-color: var(--ppe-table-border-color);
  }
  /* Make the scrollbar visible/usable under sticky layout constraints */
  .table-responsive {
    padding-bottom: 0.25rem;
  }
  table.stages-table.table-bordered > :not(caption) > * {
    border-width: 2px;
  }
  /* Stronger cell borders (Bootstrap sometimes keeps thin separators) */
  table.stages-table.table-bordered > :not(caption) > * > * {
    border-width: 2px;
  }
  table.stages-table .st-col-num {
    width: 2.25rem;
    max-width: 2.5rem;
    min-width: 1.75rem;
    white-space: nowrap;
  }
  table.stages-table th.st-col-num,
  table.stages-table td.ppe-stage-num-cell {
    font-variant-numeric: tabular-nums;
  }
  .ppe-stage-order {
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
  }
  table.stages-table .st-col-stage {
    width: 8.75rem;
    max-width: 8.75rem;
    min-width: 7rem;
  }
  table.stages-table th.st-col-stage,
  table.stages-table td.ppe-stage-title-cell,
  table.stages-table td[data-label="Этап"] {
    max-width: 8.75rem;
    white-space: normal;
    overflow: hidden;
  }
  table.stages-table .ppe-stage-title {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 3;
    line-clamp: 3;
    overflow: hidden;
    max-width: 100%;
    min-width: 0;
    white-space: normal;
    word-break: break-word;
    overflow-wrap: break-word;
    text-overflow: unset;
    line-height: 1.3;
  }
  .ppe-stage-delivery-badges {
    flex: 0 0 auto;
    max-width: 100%;
  }
  .ppe-stage-delivery-badge {
    font-size: 0.6875rem;
    font-weight: 600;
    letter-spacing: 0.01em;
    line-height: 1.2;
    padding: 0.2em 0.45em;
  }
  .ppe-stage-delivery-badge--written {
    color: var(--bs-primary-text-emphasis, #052c65);
    background-color: var(--bs-primary-bg-subtle, #cfe2ff) !important;
    border-color: var(--bs-primary-border-subtle, #9ec5fe) !important;
  }
  .ppe-stage-delivery-badge--computer {
    color: var(--bs-info-text-emphasis, #055160);
    background-color: var(--bs-info-bg-subtle, #cff4fc) !important;
    border-color: var(--bs-info-border-subtle, #9eeaf9) !important;
  }
  .ppe-stage-delivery-badge--listening {
    color: var(--bs-warning-text-emphasis, #664d03);
    background-color: var(--bs-warning-bg-subtle, #fff3cd) !important;
    border-color: var(--bs-warning-border-subtle, #ffe69c) !important;
  }
  /* Плитка экзамена: комп / письм / ауд */
  .ppe-exam-delivery-badges {
    flex: 0 0 auto;
    max-width: 100%;
    vertical-align: middle;
  }
  .ppe-exam-delivery-badge {
    font-size: 0.6875rem;
    font-weight: 600;
    letter-spacing: 0.01em;
    line-height: 1.2;
    padding: 0.15em 0.4em;
    text-transform: lowercase;
  }
  .ppe-exam-delivery-badge--written {
    color: var(--bs-primary-text-emphasis, #052c65);
    background-color: var(--bs-primary-bg-subtle, #cfe2ff) !important;
    border-color: var(--bs-primary-border-subtle, #9ec5fe) !important;
  }
  .ppe-exam-delivery-badge--computer {
    color: var(--bs-info-text-emphasis, #055160);
    background-color: var(--bs-info-bg-subtle, #cff4fc) !important;
    border-color: var(--bs-info-border-subtle, #9eeaf9) !important;
  }
  .ppe-exam-delivery-badge--listening {
    color: var(--bs-warning-text-emphasis, #664d03);
    background-color: var(--bs-warning-bg-subtle, #fff3cd) !important;
    border-color: var(--bs-warning-border-subtle, #ffe69c) !important;
  }
  table.stages-table .st-col-window {
    width: 17%;
    min-width: 14rem;
  }
  table.stages-table.ppe-table-compact th.st-col-window,
  table.stages-table.ppe-table-compact td.ppe-stage-deadlines-cell,
  table.stages-table.ppe-table-compact td[data-label="Сроки"] {
    max-width: none;
    overflow: visible;
    min-width: 14rem;
    white-space: normal;
  }
  .ppe-stage-deadlines {
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
    min-width: 0;
    max-width: 100%;
  }
  .ppe-stage-deadline-line {
    display: flex;
    align-items: center;
    gap: 0.35rem;
    flex-wrap: wrap;
    min-width: 0;
    max-width: 100%;
    white-space: normal;
    overflow: visible;
    text-overflow: unset;
    word-break: break-word;
    overflow-wrap: break-word;
  }
  .ppe-stage-deadline-icon {
    flex: 0 0 auto;
    line-height: 1.35;
  }
  .ppe-stage-deadline-text {
    flex: 1 1 auto;
    min-width: 0;
    white-space: normal;
    overflow: visible;
    text-overflow: unset;
    word-break: break-word;
    overflow-wrap: break-word;
  }
  .ppe-stage-deadline-time {
    white-space: nowrap;
  }

  input.ppe-input-time-24[type="time"],
  input.ppe-input-time-24[type="datetime-local"] {
    min-width: 8.5rem;
  }

  input.ppe-input-time-24[data-ppe-time24-fallback="1"]::placeholder {
    font-variant-numeric: tabular-nums;
  }
  .ppe-stage-deadline-text .ppe-stage-deadline-time {
    display: inline-block;
    margin-left: 0.2em;
  }
  @media (min-width: 992px) {
    .ppe-stage-deadline-text .ppe-stage-deadline-time {
      display: inline;
      margin-left: 0.2em;
      white-space: nowrap;
    }
  }
  table.stages-table .st-col-status {
    width: 22%;
  }
  table.stages-table .st-col-late-comment {
    width: 12rem;
    max-width: 14rem;
    min-width: 9rem;
  }
  table.stages-table th.st-col-late-comment,
  table.stages-table td.ppe-stage-late-comment-cell,
  table.stages-table td[data-label="Причина опоздания"] {
    white-space: normal;
    word-break: break-word;
    overflow-wrap: break-word;
  }
  table.stages-table .ppe-stage-late-comment {
    display: block;
    font-size: 0.875rem;
    line-height: 1.35;
  }
  table.stages-table .st-col-photo {
    width: 7.5rem;
    max-width: 7.5rem;
    min-width: 5.75rem;
  }
  table.stages-table .st-col-actions {
    /* Actions are icon-buttons only: keep the column as narrow as possible. */
    width: 1%;
    max-width: 1%;
    min-width: 0;
    white-space: nowrap;
    overflow: visible;
  }
  /* Dedicated scroll container: allows dropdowns to overflow vertically. */
  .stages-scroll {
    overflow-x: auto;
    overflow-y: visible;
    -webkit-overflow-scrolling: touch;
    padding-bottom: 0.25rem; /* keep scrollbar visible */
  }

  table.stages-table th.st-col-actions,
  table.stages-table td.ppe-stage-actions-cell {
    position: relative;
    white-space: nowrap;
    overflow: visible;
  }
  /* Vertical separators for key columns */
  table.stages-table th.st-col-window,
  table.stages-table td[data-label="Сроки"] {
    border-right-width: 3px;
  }
  table.stages-table th.st-col-status,
  table.stages-table td[data-label="Статус"] {
    border-right-width: 3px;
  }
  table.stages-table th.st-col-late-comment,
  table.stages-table td[data-label="Причина опоздания"] {
    border-right-width: 3px;
  }
  table.stages-table th.st-col-photo,
  table.stages-table td[data-label="Фото"],
  table.stages-table td.ppe-stage-photo-cell {
    border-right-width: 3px;
    overflow: visible;
    max-width: 7.5rem;
    width: 7.5rem;
    min-width: 5.75rem;
    position: relative;
  }
  table.stages-table.ppe-table-compact th.st-col-photo,
  table.stages-table.ppe-table-compact td.ppe-stage-photo-cell {
    max-width: 7.5rem;
    width: 7.5rem;
    min-width: 5.75rem;
  }
  table.stages-table.ppe-table-compact th.st-col-actions,
  table.stages-table.ppe-table-compact td.ppe-stage-actions-cell {
    /* Keep consistent with non-compact (narrow actions column). */
    width: 1%;
    max-width: 1%;
    min-width: 0;
    white-space: nowrap;
    overflow: visible;
  }
  table.stages-table.ppe-table-compact tbody tr:has(td.ppe-stage-photo-cell .dropdown.show) {
    position: relative;
    z-index: 2;
  }
  table.stages-table td.ppe-stage-photo-cell .dropdown {
    position: static;
  }
  table.stages-table td.ppe-stage-photo-cell .dropdown-menu {
    z-index: 1080;
    position: absolute;
  }
  table.stages-table td.ppe-stage-photo-cell .ppe-attachment-source {
    overflow: visible;
  }
  /* Override dense-table clipping for stages grid (stage title: 3-line clamp) */
  table.stages-table.ppe-table-compact th,
  table.stages-table.ppe-table-compact td {
    max-width: none;
  }
  table.stages-table.ppe-table-compact th.st-col-stage,
  table.stages-table.ppe-table-compact td.ppe-stage-title-cell,
  table.stages-table.ppe-table-compact td[data-label="Этап"] {
    width: 8.75rem;
    max-width: 8.75rem;
    overflow: hidden;
    white-space: normal;
  }
  table.stages-table.ppe-table-compact .ppe-stage-title {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 3;
    line-clamp: 3;
    overflow: hidden;
    white-space: normal;
    word-break: break-word;
    overflow-wrap: break-word;
    text-overflow: unset;
  }
  table.stages-table.ppe-table-compact td.ppe-stage-status-cell,
  table.stages-table.ppe-table-compact td.ppe-stage-photo-cell,
  table.stages-table.ppe-table-compact td.ppe-stage-actions-cell {
    overflow: visible;
    white-space: normal;
  }
  table.stages-table.ppe-table-compact td.ppe-stage-actions-cell {
    white-space: nowrap;
  }
  table.stages-table .ppe-stage-photo-actions,
  table.stages-table .ppe-stage-actions,
  table.stages-table .ppe-stage-done-control,
  table.stages-table .ppe-stage-photo-manage-actions {
    min-width: 0;
    max-width: 100%;
  }
  table.stages-table .ppe-stage-photo-upload-inline,
  table.stages-table .ppe-stage-photo-upload-mobile,
  table.stages-table .ppe-stage-photo-upload-desktop {
    display: inline-flex;
    flex-wrap: nowrap;
    max-width: 100%;
    min-width: 5rem;
  }
  table.stages-table .ppe-stage-photo-upload-inline > .btn,
  table.stages-table .ppe-stage-photo-upload-mobile > .btn,
  table.stages-table .ppe-stage-photo-upload-desktop > .btn {
    flex: 1 1 0;
    min-width: 2.5rem;
    display: inline-flex;
    align-items: center;
    justify-content: center;
  }
  table.stages-table .ppe-stage-photo-upload-inline .ppe-att-btn-text,
  table.stages-table .ppe-stage-photo-upload-mobile .ppe-att-btn-text,
  table.stages-table .ppe-stage-photo-upload-desktop .ppe-att-btn-text {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
  }
  table.stages-table .ppe-stage-photo-upload-inline .btn,
  table.stages-table .ppe-stage-photo-upload-mobile .btn,
  table.stages-table .ppe-stage-photo-upload-desktop .btn {
    padding-left: 0.45rem;
    padding-right: 0.45rem;
  }
  table.stages-table .ppe-stage-photo-upload-inline .ms-1,
  table.stages-table .ppe-stage-photo-upload-mobile .ms-1,
  table.stages-table .ppe-stage-photo-upload-desktop .ms-1 {
    margin-left: 0 !important;
  }
  table.stages-table td.ppe-stage-photo-cell .ppe-attachment-source .ppe-visually-hidden-file-input {
    left: -9999px !important;
    opacity: 0 !important;
  }

  /* Contextual row colors (Bootstrap tr classes + card/mobile layout) */
  table.stages-table tbody tr.ppe-stage-row.table-success > td,
  table.stages-table tbody tr.ppe-stage-row.table-success {
    --bs-table-bg: var(--bs-success-bg-subtle);
    --bs-table-hover-bg: var(--bs-success-bg-subtle);
    background-color: var(--bs-success-bg-subtle);
  }
  table.stages-table tbody tr.ppe-stage-row.table-warning > td,
  table.stages-table tbody tr.ppe-stage-row.table-warning {
    --bs-table-bg: var(--bs-warning-bg-subtle);
    --bs-table-hover-bg: var(--bs-warning-bg-subtle);
    background-color: var(--bs-warning-bg-subtle);
  }
  table.stages-table tbody tr.ppe-stage-row.table-danger > td,
  table.stages-table tbody tr.ppe-stage-row.table-danger {
    --bs-table-bg: var(--bs-danger-bg-subtle);
    --bs-table-hover-bg: var(--bs-danger-bg-subtle);
    background-color: var(--bs-danger-bg-subtle);
  }

  [data-theme="dark"] table.stages-table tbody tr.ppe-stage-row.table-success > td,
  [data-theme="dark"] table.stages-table tbody tr.ppe-stage-row.table-success {
    --bs-table-bg: color-mix(in srgb, var(--bs-success) 14%, #0b0f14);
    --bs-table-hover-bg: color-mix(in srgb, var(--bs-success) 18%, #0b0f14);
    background-color: var(--bs-table-bg);
  }
  [data-theme="dark"] table.stages-table tbody tr.ppe-stage-row.table-warning > td,
  [data-theme="dark"] table.stages-table tbody tr.ppe-stage-row.table-warning {
    --bs-table-bg: color-mix(in srgb, var(--bs-warning) 14%, #0b0f14);
    --bs-table-hover-bg: color-mix(in srgb, var(--bs-warning) 18%, #0b0f14);
    background-color: var(--bs-table-bg);
  }
  [data-theme="dark"] table.stages-table tbody tr.ppe-stage-row.table-danger > td,
  [data-theme="dark"] table.stages-table tbody tr.ppe-stage-row.table-danger {
    --bs-table-bg: color-mix(in srgb, var(--bs-danger) 14%, #0b0f14);
    --bs-table-hover-bg: color-mix(in srgb, var(--bs-danger) 18%, #0b0f14);
    background-color: var(--bs-table-bg);
  }

  /*
   * Session stages: markup keeps Bootstrap bg-white (session_detail.html) while dark theme
   * sets light text globally — mobile card rows (≤991px) end up light-on-white.
   */
  [data-theme="dark"] .ppe-stages-table-wrap.bg-white,
  [data-theme="dark"] .ppe-stages-wizard-panel .ppe-wizard-card.bg-white {
    background-color: var(--ppe-surface-bg) !important;
    color: var(--ppe-text);
  }
  [data-theme="dark"] table.stages-table.bg-white {
    --bs-table-bg: var(--ppe-surface-bg);
    --bs-table-color: var(--ppe-text);
    background-color: var(--ppe-surface-bg) !important;
    color: var(--ppe-text);
  }
  [data-theme="dark"] table.stages-table tbody tr.ppe-stage-row:not(.table-success):not(.table-warning):not(.table-danger),
  [data-theme="dark"] table.stages-table tbody tr.ppe-stage-row:not(.table-success):not(.table-warning):not(.table-danger) > td {
    background-color: var(--ppe-surface-bg);
    color: var(--ppe-text);
  }
  [data-theme="dark"] table.stages-table .ppe-stage-title,
  [data-theme="dark"] table.stages-table .ppe-stage-deadline-text,
  [data-theme="dark"] table.stages-table .fw-semibold {
    color: var(--ppe-text);
  }
  [data-theme="dark"] table.stages-table tbody td::before {
    color: var(--ppe-text-muted);
  }
  [data-theme="dark"] table.stages-table tbody tr:nth-child(even):not(.table-success):not(.table-warning):not(.table-info):not(.table-secondary):not(.table-danger) td {
    background-color: var(--ppe-surface-bg-alt);
  }
  [data-theme="dark"] table.stages-table tbody tr:hover td {
    box-shadow: inset 0 0 0 9999px rgba(255, 255, 255, 0.04);
  }

  /* Zebra stripes without overriding status row colors */
  table.stages-table tbody tr:nth-child(even):not(.table-success):not(.table-warning):not(.table-info):not(.table-secondary):not(.table-danger) td {
    background-color: rgba(0, 0, 0, 0.03);
  }
  /* Gentle hover, keep contextual colors readable */
  table.stages-table tbody tr:hover td {
    box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.03);
  }
  table.stages-table tbody tr.table-success:hover td,
  table.stages-table tbody tr.table-warning:hover td,
  table.stages-table tbody tr.table-danger:hover td {
    box-shadow: none;
  }

  /* Desktop: dates in «Сроки» always wrap; status/photo cells may wrap controls */
  @media (min-width: 992px) {
    table.stages-table td.ppe-stage-status-cell,
    table.stages-table td[data-label="Статус"] {
      white-space: normal;
    }
    table.stages-table.ppe-table-compact td.ppe-stage-deadlines-cell,
    table.stages-table.ppe-table-compact td[data-label="Сроки"] {
      white-space: normal;
      overflow: visible;
      max-width: none;
      text-overflow: unset;
    }
    table.stages-table td[data-label="Сроки"] > .ppe-stage-deadlines {
      min-width: 0;
      max-width: 100%;
      width: 100%;
    }
    table.stages-table .ppe-stage-deadline-line,
    table.stages-table .ppe-stage-deadline-text,
    table.stages-table .stages-window-line,
    table.stages-table .stages-deadline-line {
      white-space: normal;
      word-break: break-word;
      overflow-wrap: break-word;
      overflow: visible;
      text-overflow: unset;
    }
  }

  /* Tablet / narrow + card view: wrap long dates and audit lines (less horizontal scroll) */
  @media (max-width: 991.98px) {
    table.stages-table {
      width: 100%;
      min-width: 0;
      max-width: 100%;
      table-layout: fixed;
    }
    table.stages-table th.st-col-window,
    table.stages-table th.st-col-status {
      white-space: normal;
    }
    table.stages-table td[data-label="Сроки"],
    table.stages-table td[data-label="Статус"],
    table.stages-table .ppe-stage-deadline-line,
    table.stages-table .ppe-stage-deadline-text,
    table.stages-table .stages-window-line,
    table.stages-table .stages-deadline-line,
    table.stages-table .stages-meta-line {
      white-space: normal;
      word-break: break-word;
      overflow-wrap: break-word;
      overflow: visible;
      text-overflow: unset;
    }
    table.stages-table tbody td[data-label="Сроки"] > .ppe-stage-deadlines {
      flex: 1 1 100%;
      max-width: 100% !important;
      width: 100%;
    }
    table.stages-table .stages-status-meta {
      max-width: 100%;
    }
    table.stages-table th.st-col-stage,
    table.stages-table td.ppe-stage-title-cell,
    table.stages-table td[data-label="Этап"] {
      width: auto;
      max-width: none;
      min-width: 0;
    }
    table.stages-table .ppe-stage-title {
      display: block;
      -webkit-line-clamp: unset;
      line-clamp: unset;
      overflow: visible;
    }
  }

/* Card layout for stages-table: see «Mobile layout (max-width: 991.98px)» below. */

/* === List filters offcanvas (shared) === */
.ppe-list-filters-offcanvas {
  --bs-offcanvas-width: min(100vw - 1.5rem, 22rem);
}

@media (max-width: 991.98px) {
  .ppe-list-filters-offcanvas.offcanvas-end {
    top: auto;
    bottom: 0;
    right: 0;
    left: 0;
    width: 100%;
    max-width: 100%;
    height: auto;
    max-height: min(85vh, 32rem);
    border-right: 0;
    border-left: 0;
    border-bottom: 0;
    transform: translateY(100%);
  }

  .ppe-list-filters-offcanvas.offcanvas-end.showing,
  .ppe-list-filters-offcanvas.offcanvas-end.show:not(.hiding) {
    transform: none;
  }

  .ppe-list-filters-offcanvas.offcanvas-end.hiding {
    transform: translateY(100%);
  }
}

/* === Page: instructions === */
.instruction-table {
    table-layout: fixed;
    width: 100%;
  }

  .instruction-col-main {
    min-width: 0;
    vertical-align: middle;
  }

  .instruction-col-narrow {
    width: 8%;
    min-width: 4.75rem;
    text-align: center;
  }

  .instruction-table th.instruction-col-narrow {
    white-space: normal;
    overflow: visible;
    line-height: 1.2;
  }

  .instruction-table td.instruction-col-narrow {
    white-space: nowrap;
  }

  .instruction-name {
    display: block;
    max-width: 100%;
    white-space: normal;
    word-break: break-word;
    overflow-wrap: break-word;
  }

  .instruction-table th,
  .instruction-table td {
    overflow: hidden;
    vertical-align: middle;
  }

  .instruction-table td.instruction-col-main {
    max-width: 0;
    min-width: 0;
  }

  .instruction-table td.ppe-actions-cell {
    white-space: nowrap;
  }

  .instruction-table td.ppe-actions-cell .btn-toolbar {
    justify-content: center;
    max-width: 100%;
    overflow-x: auto;
    overflow-y: hidden;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: thin;
  }

  .instruction-table td.ppe-actions-cell .btn-group {
    flex-wrap: nowrap !important;
  }

  .instruction-folder-actions .btn-toolbar {
    justify-content: center;
  }

  .instruction-preview-toolbar .btn {
    --bs-btn-padding-y: 0.15rem;
    --bs-btn-padding-x: 0.45rem;
    --bs-btn-font-size: 0.825rem;
  }

  .instruction-preview-frame {
    width: 100%;
    height: 70vh;
    border: 0;
    background: var(--bs-body-bg);
  }

  @media (max-width: 576px) {
    .instruction-preview-frame {
      height: 55vh;
    }
  }

  .instruction-audio {
    width: 320px;
    max-width: 100%;
    height: 32px;
    vertical-align: middle;
  }

  .instruction-video {
    width: 100%;
    max-height: 70vh;
    background: #000;
  }

/* === Page: instruction_bulk_edit === */
/* Bulk edit: keep layout compact and prevent huge vertical growth */
  .ppe-instruction-bulk-edit {
    max-width: 1100px;
    margin: 0 auto;
  }

  .ppe-instruction-bulk-edit .ppe-bulk-toolbar {
    position: sticky;
    top: 0.5rem;
    z-index: 5;
    background: var(--bs-body-bg);
  }

  .ppe-instruction-bulk-edit .card-body {
    padding: 0.75rem 0.75rem;
  }

  .ppe-instruction-bulk-edit .table-responsive {
    max-height: 70vh;
  }

  .ppe-instruction-bulk-edit thead th {
    position: sticky;
    top: 0;
    z-index: 3;
    background: var(--bs-body-bg);
    box-shadow: inset 0 -1px 0 var(--bs-border-color);
  }

  .ppe-instruction-bulk-edit td {
    vertical-align: top;
  }

  /* Compact editors inside the table */
  .ppe-instruction-bulk-edit input[type='text'],
  .ppe-instruction-bulk-edit select,
  .ppe-instruction-bulk-edit textarea {
    font-size: 0.875rem;
  }

  .ppe-instruction-bulk-edit input[type='text'],
  .ppe-instruction-bulk-edit select,
  .ppe-instruction-bulk-edit textarea {
    width: 100%;
    box-sizing: border-box;
  }

  .ppe-instruction-bulk-edit textarea {
    min-height: 3rem;
    height: 3.25rem;
    resize: vertical;
  }

  .ppe-instruction-bulk-edit input[type='checkbox'] {
    width: 1rem;
    height: 1rem;
  }

/* === Page: subjects === */
/* Subjects table: fixed layout + compact actions */
    .subjects-table {
      table-layout: fixed;
      width: 100%;
    }
    .subjects-table th,
    .subjects-table td {
      vertical-align: middle;
    }
    .subjects-table th {
      white-space: normal;
      overflow-wrap: break-word;
      word-break: break-word;
    }
    .subjects-table .cell-ellipsis {
      display: block;
      min-width: 0;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
    }
    .subjects-table .cell-name {
      display: -webkit-box;
      -webkit-box-orient: vertical;
      -webkit-line-clamp: 2;
      line-clamp: 2;
      white-space: normal;
      overflow: hidden;
      overflow-wrap: break-word;
    }
    .subjects-table .form-control,
    .subjects-table .form-select {
      width: 100%;
      min-width: 0;
    }
    .subjects-table .form-control,
    .subjects-table .form-select,
    .subjects-table input,
    .subjects-table select,
    .subjects-table textarea {
      max-width: 100%;
    }
    .subjects-table td input,
    .subjects-table td select,
    .subjects-table td textarea {
      width: 100%;
      min-width: 0;
      box-sizing: border-box;
      display: block;
    }
    .subjects-table .cell-code input,
    .subjects-table .cell-code select {
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
    }
    .subjects-table .form-check {
      min-height: unset;
    }
    .subjects-table .cell-active {
      display: flex;
      justify-content: center;
    }

/* === Page: buildings === */
.ppe-buildings-table {
      table-layout: fixed;
      width: 100%;
    }
    .ppe-buildings-table .ppe-cell-ellipsis {
      display: block;
      max-width: 100%;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
      min-width: 0;
    }
    .ppe-buildings-table .ppe-cell-clamp-2 {
      display: -webkit-box;
      -webkit-box-orient: vertical;
      -webkit-line-clamp: 2;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: normal;
      max-width: 100%;
      min-width: 0;
      line-height: 1.25;
      word-break: normal;
      overflow-wrap: break-word;
    }
    .ppe-buildings-table td.ppe-actions-cell .ppe-actions {
      justify-content: center;
    }

/* Building list cards (#buildings): school title, address, PPE code below */
#buildings .ppe-building-list-card .ppe-building-list-meta,
.ppe-list-cards-grid .ppe-building-list-card .ppe-building-list-meta {
  font-size: 0.8125rem;
  line-height: 1.35;
  min-width: 0;
}

#buildings .ppe-building-list-card .ppe-building-list-address,
.ppe-list-cards-grid .ppe-building-list-card .ppe-building-list-address {
  overflow-wrap: anywhere;
  word-break: break-word;
  opacity: 0.92;
}

#buildings .ppe-building-list-card .ppe-building-list-code-row,
.ppe-list-cards-grid .ppe-building-list-card .ppe-building-list-code-row {
  min-width: 0;
  gap: 0.5rem;
}

#buildings .ppe-building-list-card .ppe-building-list-code-row .ppe-building-list-code,
.ppe-list-cards-grid .ppe-building-list-card .ppe-building-list-code-row .ppe-building-list-code {
  flex: 1 1 auto;
  min-width: 0;
}

#buildings .ppe-building-list-card .ppe-building-list-code-row .ppe-actions-mobile,
.ppe-list-cards-grid .ppe-building-list-card .ppe-building-list-code-row .ppe-actions-mobile {
  flex: 0 0 auto;
  margin-left: auto;
  align-self: center;
}

#buildings .ppe-building-list-card .ppe-building-list-code,
.ppe-list-cards-grid .ppe-building-list-card .ppe-building-list-code {
  font-size: var(--ppe-code-font-size-mobile);
  font-weight: 800;
  letter-spacing: 0.04em;
  color: var(--ppe-code-color);
  line-height: 1.2;
  overflow-wrap: anywhere;
  word-break: break-word;
}

[data-theme="dark"] #buildings .ppe-building-list-card .ppe-building-list-code,
[data-theme="dark"] .ppe-list-cards-grid .ppe-building-list-card .ppe-building-list-code {
  color: var(--ppe-code-color) !important;
}

[data-theme="dark"] #buildings .ppe-building-list-card .ppe-building-list-meta,
[data-theme="dark"] .ppe-list-cards-grid .ppe-building-list-card .ppe-building-list-meta {
  color: var(--bs-secondary-color) !important;
}

/* === Page: users === */
.ppe-users-page {
      max-width: 100%;
      min-width: 0;
    }
    /* Bootstrap `.row` negative margins must not widen the page */
    .ppe-users-page .ppe-users-create-card {
      max-width: 100%;
      overflow-x: clip;
    }
    .ppe-users-page .ppe-users-create-buildings .form-check {
      flex: 0 1 auto;
      min-width: 0;
    }
    .ppe-users-page .ppe-list-desktop .table-responsive {
      max-width: 100%;
    }
    .ppe-users-table {
      table-layout: fixed;
      width: 100%;
      max-width: 100%;
    }
    .ppe-users-table .ppe-cell-ellipsis {
      display: block;
      max-width: 100%;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
      min-width: 0;
    }
    .ppe-users-table .ppe-cell-wrap-2 {
      max-width: 100%;
      display: -webkit-box;
      -webkit-box-orient: vertical;
      -webkit-line-clamp: 2;
      overflow: hidden;
      white-space: normal;
      word-break: break-word;
      overflow-wrap: break-word;
      min-width: 0;
    }
    /* ФИО: делаем колонку компактнее и разрешаем переносы */
    .ppe-users-table td.ppe-users-full-name {
      white-space: normal;
      word-break: break-word;
      overflow-wrap: break-word;
    }
    /* Действия: перенос иконок вместо расширения таблицы / скролла страницы */
    .ppe-users-table td.ppe-users-actions {
      white-space: normal;
      overflow: visible;
      vertical-align: middle;
    }
    .ppe-users-table td.ppe-users-actions .btn-toolbar,
    .ppe-users-table td.ppe-users-actions .btn-group,
    .ppe-users-table td.ppe-users-actions .ppe-actions {
      flex-wrap: wrap !important;
      justify-content: center;
      max-width: 100%;
      overflow-x: visible;
    }

/* === Page: roles === */
.ppe-roles-table {
      table-layout: fixed;
      width: 100%;
    }
    .ppe-roles-table .ppe-cell-ellipsis {
      display: block;
      max-width: 100%;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
      min-width: 0;
    }

/* === Page: holidays === */
.ppe-year-calendar-grid {
      display: grid;
      grid-template-columns: repeat(3, minmax(0, 1fr));
      gap: 12px;
    }
    @media (max-width: 1200px) {
      .ppe-year-calendar-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
      }
    }
    @media (max-width: 768px) {
      .ppe-year-calendar-grid {
        grid-template-columns: 1fr;
      }
    }

    .ppe-month-card {
      border: 1px solid var(--bs-border-color);
      border-radius: 0.5rem;
      padding: 0.75rem;
      background: var(--bs-body-bg);
    }
    .ppe-month-title {
      font-weight: 600;
      margin-bottom: 0.5rem;
    }
    .ppe-month-table {
      width: 100%;
      border-collapse: separate;
      border-spacing: 2px;
      table-layout: fixed;
    }
    .ppe-month-table th {
      font-size: 0.75rem;
      font-weight: 600;
      text-align: center;
      color: var(--bs-secondary-color);
      padding: 2px 0;
    }
    .ppe-day-cell {
      height: 28px;
      width: 100%;
      text-align: center;
      vertical-align: middle;
      font-size: 0.75rem;
      border-radius: 4px;
      user-select: none;
      cursor: default;
    }
    .ppe-day-button {
      appearance: none;
      border: 0;
      background: transparent;
      padding: 0;
      margin: 0;
      width: 100%;
      height: 100%;
      color: inherit;
      text-decoration: none;
      display: block;
      border-radius: 4px;
    }
    .ppe-day-button:hover,
    .ppe-day-button:focus-visible {
      outline: none;
      box-shadow: 0 0 0 0.2rem rgba(13, 110, 253, 0.18);
    }
    .ppe-day-cell-content {
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      gap: 1px;
      line-height: 1;
    }
    .ppe-day-number {
      line-height: 1;
    }
    .ppe-day-markers {
      display: flex;
      align-items: center;
      justify-content: center;
      gap: 2px;
      height: 8px;
    }
    .ppe-day-marker {
      width: 6px;
      height: 6px;
      border-radius: 999px;
      border: 1px solid rgba(0, 0, 0, 0.12);
      display: inline-block;
    }
    .ppe-day-marker--exam { background: var(--ppe-cal-exam-marker, #6f42c1); }
    .ppe-day-marker--stage-start { background: var(--ppe-cal-stage-start, #20c997); }
    .ppe-day-marker--stage-deadline { background: var(--ppe-cal-stage-deadline, #fd7e14); }
    [data-theme="dark"] .ppe-day-marker {
      border-color: rgba(255, 255, 255, 0.2);
      filter: brightness(0.72) saturate(0.82);
    }
    .ppe-day-cell--weekday {
      background: var(--ppe-cal-weekday-bg, #ffffff);
      border: 1px solid rgba(0, 0, 0, 0.08);
    }
    .ppe-day-cell--weekend {
      background: var(--ppe-cal-weekend-bg, #e7f1ff);
      border: 1px solid rgba(13, 110, 253, 0.20);
    }
    .ppe-day-cell--holiday {
      background: var(--ppe-cal-holiday-bg, #ffe7e7);
      border: 1px solid rgba(220, 53, 69, 0.25);
    }
    .ppe-day-cell--empty {
      background: transparent;
      border: 1px solid transparent;
    }

    .ppe-calendar-legend {
      display: flex;
      flex-wrap: wrap;
      gap: 12px;
      align-items: center;
    }
    .ppe-legend-item {
      display: inline-flex;
      align-items: center;
      gap: 6px;
      font-size: 0.875rem;
      color: var(--bs-body-color);
    }
    .ppe-legend-swatch {
      width: 14px;
      height: 14px;
      border-radius: 3px;
      border: 1px solid rgba(0, 0, 0, 0.12);
      display: inline-block;
    }
    .ppe-legend-swatch--weekday {
      background: var(--ppe-cal-weekday-bg, #ffffff);
    }
    .ppe-legend-swatch--weekend {
      background: var(--ppe-cal-weekend-bg, #e7f1ff);
    }
    .ppe-legend-swatch--holiday {
      background: var(--ppe-cal-holiday-bg, #ffe7e7);
    }
    .ppe-legend-swatch--exam {
      background: var(--ppe-cal-exam-marker, #6f42c1);
      border-color: rgba(111, 66, 193, 0.35);
    }
    .ppe-legend-swatch--stage-start {
      background: var(--ppe-cal-stage-start, #20c997);
      border-color: rgba(32, 201, 151, 0.35);
    }
    .ppe-legend-swatch--stage-deadline {
      background: var(--ppe-cal-stage-deadline, #fd7e14);
      border-color: rgba(253, 126, 20, 0.35);
    }

    /* Легенда цветов зданий (списки экзаменов, главная, календарь) */
    .ppe-building-color-legend__list {
      display: flex;
      flex-wrap: wrap;
      align-items: center;
      gap: 0.35rem 0.85rem;
      list-style: none;
      margin: 0;
      padding: 0;
    }
    .ppe-building-color-legend__item {
      display: inline-flex;
      align-items: center;
      gap: 0.35rem;
      max-width: 100%;
      min-width: 0;
    }
    .ppe-building-color-legend__swatch {
      width: 0.9rem;
      height: 0.9rem;
      flex-shrink: 0;
      border-color: rgba(0, 0, 0, 0.12) !important;
    }
    .ppe-building-color-legend__name {
      font-size: inherit;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
      max-width: min(14rem, 72vw);
    }

    .ppe-holidays-table {
      table-layout: fixed;
      width: 100%;
    }
    .ppe-holidays-table .ppe-cell-ellipsis {
      display: block;
      max-width: 100%;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
      min-width: 0;
    }
    .ppe-holidays-table .ppe-cell-wrap-2 {
      max-width: 100%;
      display: -webkit-box;
      -webkit-box-orient: vertical;
      -webkit-line-clamp: 2;
      overflow: hidden;
      white-space: normal;
      word-break: normal;
      overflow-wrap: break-word;
      hyphens: auto;
      min-width: 0;
    }

/* === Page: holiday_calendar_detail === */
.ppe-holiday-dates-table {
      table-layout: fixed;
      width: 100%;
    }
    .ppe-holiday-dates-table .ppe-cell-ellipsis {
      display: block;
      max-width: 100%;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
      min-width: 0;
    }
    .ppe-holiday-dates-table .ppe-cell-wrap-2 {
      max-width: 100%;
      display: -webkit-box;
      -webkit-box-orient: vertical;
      -webkit-line-clamp: 2;
      overflow: hidden;
      white-space: normal;
      word-break: normal;
      overflow-wrap: break-word;
      hyphens: auto;
      min-width: 0;
    }

/* === Page: permissions === */
/* Group accent colors (matrix row headers + legend swatches) */
  .ppe-perm-legend,
  .permission-matrix,
  .ppe-perm-matrix-mobile {
    --ppe-perm-group-stages: #2563eb;
    --ppe-perm-group-instructions: #16a34a;
    --ppe-perm-group-sessions: #7c3aed;
    --ppe-perm-group-exam-rooms: #ca8a04;
    --ppe-perm-group-buildings: #dc2626;
    --ppe-perm-group-tech: #0891b2;
    --ppe-perm-group-subjects: #64748b;
    --ppe-perm-group-templates: #4f46e5;
    --ppe-perm-group-users: #ea580c;
    --ppe-perm-group-matrix: #be185d;
    --ppe-perm-group-holidays: #059669;
    --ppe-perm-group-colors: #d97706;
    --ppe-perm-group-audit: #6b7280;
    --ppe-perm-group-notifications: #0284c7;
    --ppe-perm-group-email: #0d9488;
    --ppe-perm-theme-operations: #2563eb;
    --ppe-perm-theme-catalog: #059669;
    --ppe-perm-theme-admin: #be185d;
    --ppe-perm-theme-communications: #0284c7;
  }

  .ppe-perm-legend-swatch--theme-operations {
    background: var(--ppe-perm-theme-operations);
  }
  .ppe-perm-legend-swatch--theme-catalog {
    background: var(--ppe-perm-theme-catalog);
  }
  .ppe-perm-legend-swatch--theme-admin {
    background: var(--ppe-perm-theme-admin);
  }
  .ppe-perm-legend-swatch--theme-communications {
    background: var(--ppe-perm-theme-communications);
  }

  .ppe-perm-matrix-accordion .accordion-button:not(.collapsed) {
    font-weight: 600;
  }
  .ppe-perm-theme--operations > .accordion-header .accordion-button::before,
  .ppe-perm-theme--catalog > .accordion-header .accordion-button::before,
  .ppe-perm-theme--admin > .accordion-header .accordion-button::before,
  .ppe-perm-theme--communications > .accordion-header .accordion-button::before {
    content: "";
    display: inline-block;
    width: 0.35rem;
    align-self: stretch;
    min-height: 1.25rem;
    margin-right: 0.5rem;
    border-radius: 2px;
    flex-shrink: 0;
  }
  .ppe-perm-theme--operations > .accordion-header .accordion-button::before {
    background: var(--ppe-perm-theme-operations);
  }
  .ppe-perm-theme--catalog > .accordion-header .accordion-button::before {
    background: var(--ppe-perm-theme-catalog);
  }
  .ppe-perm-theme--admin > .accordion-header .accordion-button::before {
    background: var(--ppe-perm-theme-admin);
  }
  .ppe-perm-theme--communications > .accordion-header .accordion-button::before {
    background: var(--ppe-perm-theme-communications);
  }

  .ppe-perm-legend {
    font-size: 0.8125rem;
  }

  .ppe-perm-legend__heading {
    font-weight: 600;
    margin-bottom: 0.35rem;
  }

  .ppe-perm-legend__list {
    display: flex;
    flex-wrap: wrap;
    gap: 0.35rem 0.85rem;
    align-items: center;
  }

  .ppe-perm-legend__list--groups .ppe-perm-legend__group-label {
    max-width: 11rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    display: inline-block;
    vertical-align: bottom;
  }

  @media (min-width: 576px) {
    .ppe-perm-legend__list--groups .ppe-perm-legend__group-label {
      max-width: none;
      white-space: normal;
    }
  }

  .ppe-perm-legend-swatch {
    width: 12px;
    height: 12px;
    border-radius: 2px;
    border: 1px solid rgba(0, 0, 0, 0.14);
    flex-shrink: 0;
  }

  .ppe-perm-legend-swatch--col-view {
    background: rgba(13, 110, 253, 0.22);
    border-color: rgba(13, 110, 253, 0.35);
  }

  .ppe-perm-legend-swatch--col-edit {
    background: rgba(25, 135, 84, 0.24);
    border-color: rgba(25, 135, 84, 0.35);
  }

  .ppe-perm-legend-swatch--col-single {
    background: rgba(108, 117, 125, 0.14);
    border-color: rgba(108, 117, 125, 0.28);
  }

  .ppe-perm-legend-swatch--superadmin {
    background: rgba(111, 66, 193, 0.16);
    border-color: rgba(111, 66, 193, 0.32);
  }

  .ppe-perm-legend-swatch--stages { background: var(--ppe-perm-group-stages); }
  .ppe-perm-legend-swatch--instructions { background: var(--ppe-perm-group-instructions); }
  .ppe-perm-legend-swatch--sessions { background: var(--ppe-perm-group-sessions); }
  .ppe-perm-legend-swatch--exam-rooms { background: var(--ppe-perm-group-exam-rooms); }
  .ppe-perm-legend-swatch--buildings { background: var(--ppe-perm-group-buildings); }
  .ppe-perm-legend-swatch--tech { background: var(--ppe-perm-group-tech); }
  .ppe-perm-legend-swatch--subjects { background: var(--ppe-perm-group-subjects); }
  .ppe-perm-legend-swatch--templates { background: var(--ppe-perm-group-templates); }
  .ppe-perm-legend-swatch--users { background: var(--ppe-perm-group-users); }
  .ppe-perm-legend-swatch--matrix { background: var(--ppe-perm-group-matrix); }
  .ppe-perm-legend-swatch--holidays { background: var(--ppe-perm-group-holidays); }
  .ppe-perm-legend-swatch--colors { background: var(--ppe-perm-group-colors); }
  .ppe-perm-legend-swatch--audit { background: var(--ppe-perm-group-audit); }
  .ppe-perm-legend-swatch--notifications { background: var(--ppe-perm-group-notifications); }
  .ppe-perm-legend-swatch--email { background: var(--ppe-perm-group-email); }

  .permission-matrix tr.perm-group--stages {
    --ppe-perm-group-accent: var(--ppe-perm-group-stages);
  }
  .permission-matrix tr.perm-group--instructions {
    --ppe-perm-group-accent: var(--ppe-perm-group-instructions);
  }
  .permission-matrix tr.perm-group--sessions {
    --ppe-perm-group-accent: var(--ppe-perm-group-sessions);
  }
  .permission-matrix tr.perm-group--exam-rooms {
    --ppe-perm-group-accent: var(--ppe-perm-group-exam-rooms);
  }
  .permission-matrix tr.perm-group--buildings {
    --ppe-perm-group-accent: var(--ppe-perm-group-buildings);
  }
  .permission-matrix tr.perm-group--tech {
    --ppe-perm-group-accent: var(--ppe-perm-group-tech);
  }
  .permission-matrix tr.perm-group--subjects {
    --ppe-perm-group-accent: var(--ppe-perm-group-subjects);
  }
  .permission-matrix tr.perm-group--templates {
    --ppe-perm-group-accent: var(--ppe-perm-group-templates);
  }
  .permission-matrix tr.perm-group--users {
    --ppe-perm-group-accent: var(--ppe-perm-group-users);
  }
  .permission-matrix tr.perm-group--matrix {
    --ppe-perm-group-accent: var(--ppe-perm-group-matrix);
  }
  .permission-matrix tr.perm-group--holidays {
    --ppe-perm-group-accent: var(--ppe-perm-group-holidays);
  }
  .permission-matrix tr.perm-group--colors {
    --ppe-perm-group-accent: var(--ppe-perm-group-colors);
  }
  .permission-matrix tr.perm-group--audit {
    --ppe-perm-group-accent: var(--ppe-perm-group-audit);
  }
  .permission-matrix tr.perm-group--notifications {
    --ppe-perm-group-accent: var(--ppe-perm-group-notifications);
  }
  .permission-matrix tr.perm-group--email {
    --ppe-perm-group-accent: var(--ppe-perm-group-email);
  }

  .permission-matrix tr[class*="perm-group--"] {
    --ppe-perm-group-bg: color-mix(in srgb, var(--ppe-perm-group-accent) 12%, var(--bs-gray-100));
  }

  .permission-matrix tbody tr.perm-group-boundary .perm-group-cell {
    border-top: 2px solid var(--ppe-perm-border-color-strong, var(--ppe-table-border-color-strong));
  }

  .ppe-perm-matrix-mobile .perm-group--stages .perm-group-mobile-header {
    border-left: 4px solid var(--ppe-perm-group-stages);
    background: color-mix(in srgb, var(--ppe-perm-group-stages) 10%, var(--bs-card-cap-bg, var(--bs-gray-100)));
  }
  .ppe-perm-matrix-mobile .perm-group--instructions .perm-group-mobile-header {
    border-left: 4px solid var(--ppe-perm-group-instructions);
    background: color-mix(in srgb, var(--ppe-perm-group-instructions) 10%, var(--bs-card-cap-bg, var(--bs-gray-100)));
  }
  .ppe-perm-matrix-mobile .perm-group--sessions .perm-group-mobile-header {
    border-left: 4px solid var(--ppe-perm-group-sessions);
    background: color-mix(in srgb, var(--ppe-perm-group-sessions) 10%, var(--bs-card-cap-bg, var(--bs-gray-100)));
  }
  .ppe-perm-matrix-mobile .perm-group--exam-rooms .perm-group-mobile-header {
    border-left: 4px solid var(--ppe-perm-group-exam-rooms);
    background: color-mix(in srgb, var(--ppe-perm-group-exam-rooms) 10%, var(--bs-card-cap-bg, var(--bs-gray-100)));
  }
  .ppe-perm-matrix-mobile .perm-group--buildings .perm-group-mobile-header {
    border-left: 4px solid var(--ppe-perm-group-buildings);
    background: color-mix(in srgb, var(--ppe-perm-group-buildings) 10%, var(--bs-card-cap-bg, var(--bs-gray-100)));
  }
  .ppe-perm-matrix-mobile .perm-group--tech .perm-group-mobile-header {
    border-left: 4px solid var(--ppe-perm-group-tech);
    background: color-mix(in srgb, var(--ppe-perm-group-tech) 10%, var(--bs-card-cap-bg, var(--bs-gray-100)));
  }
  .ppe-perm-matrix-mobile .perm-group--subjects .perm-group-mobile-header {
    border-left: 4px solid var(--ppe-perm-group-subjects);
    background: color-mix(in srgb, var(--ppe-perm-group-subjects) 10%, var(--bs-card-cap-bg, var(--bs-gray-100)));
  }
  .ppe-perm-matrix-mobile .perm-group--templates .perm-group-mobile-header {
    border-left: 4px solid var(--ppe-perm-group-templates);
    background: color-mix(in srgb, var(--ppe-perm-group-templates) 10%, var(--bs-card-cap-bg, var(--bs-gray-100)));
  }
  .ppe-perm-matrix-mobile .perm-group--users .perm-group-mobile-header {
    border-left: 4px solid var(--ppe-perm-group-users);
    background: color-mix(in srgb, var(--ppe-perm-group-users) 10%, var(--bs-card-cap-bg, var(--bs-gray-100)));
  }
  .ppe-perm-matrix-mobile .perm-group--matrix .perm-group-mobile-header {
    border-left: 4px solid var(--ppe-perm-group-matrix);
    background: color-mix(in srgb, var(--ppe-perm-group-matrix) 10%, var(--bs-card-cap-bg, var(--bs-gray-100)));
  }
  .ppe-perm-matrix-mobile .perm-group--holidays .perm-group-mobile-header {
    border-left: 4px solid var(--ppe-perm-group-holidays);
    background: color-mix(in srgb, var(--ppe-perm-group-holidays) 10%, var(--bs-card-cap-bg, var(--bs-gray-100)));
  }
  .ppe-perm-matrix-mobile .perm-group--colors .perm-group-mobile-header {
    border-left: 4px solid var(--ppe-perm-group-colors);
    background: color-mix(in srgb, var(--ppe-perm-group-colors) 10%, var(--bs-card-cap-bg, var(--bs-gray-100)));
  }
  .ppe-perm-matrix-mobile .perm-group--audit .perm-group-mobile-header {
    border-left: 4px solid var(--ppe-perm-group-audit);
    background: color-mix(in srgb, var(--ppe-perm-group-audit) 10%, var(--bs-card-cap-bg, var(--bs-gray-100)));
  }
  .ppe-perm-matrix-mobile .perm-group--notifications .perm-group-mobile-header {
    border-left: 4px solid var(--ppe-perm-group-notifications);
    background: color-mix(in srgb, var(--ppe-perm-group-notifications) 10%, var(--bs-card-cap-bg, var(--bs-gray-100)));
  }
  .ppe-perm-matrix-mobile .perm-group--email .perm-group-mobile-header {
    border-left: 4px solid var(--ppe-perm-group-email);
    background: color-mix(in srgb, var(--ppe-perm-group-email) 10%, var(--bs-card-cap-bg, var(--bs-gray-100)));
  }

/* Density + column sizing (matrix) */
  .permission-matrix [data-role].perm-col-hidden {
    display: none !important;
  }

  .permission-matrix .perm-visible-roles-checkboxes {
    max-width: 100%;
  }

  .permission-matrix .perm-role-filter-row th {
    vertical-align: middle;
  }

  .permission-matrix {
    table-layout: fixed;
    width: 100%;
    /* Borders: align with global table tokens, keep matrix emphasis */
    --ppe-perm-border-color: var(--ppe-table-border-color);
    --ppe-perm-border-color-strong: var(--ppe-table-border-color-strong);
    --ppe-perm-border-width: 1px;
    --ppe-perm-border-width-strong: 2px;
    --ppe-perm-cell-px: 0.2rem;
    --ppe-perm-cell-py: 0.2rem;
    --ppe-perm-checkbox-col-width: 48px;
    --ppe-perm-superadmin-pair-width: 96px;
    --ppe-perm-subheader-font-size: 0.65rem;
    --ppe-perm-subheader-line-height: 1.15;
    --ppe-perm-role-header-font-size: 0.75rem;
    --ppe-perm-superadmin-note-font-size: 0.6rem;
  }

  .permission-matrix th,
  .permission-matrix td {
    padding: var(--ppe-perm-cell-py) var(--ppe-perm-cell-px);
    border-color: var(--ppe-perm-border-color) !important;
    border-width: var(--ppe-perm-border-width) !important;
    overflow: hidden;
    vertical-align: middle;
  }

  /* Stronger row/column separators */
  .permission-matrix thead th,
  .permission-matrix thead td {
    border-bottom-color: var(--ppe-perm-border-color-strong) !important;
    border-bottom-width: var(--ppe-perm-border-width-strong) !important;
  }

  /* Vertical separators between role groups (cells with border-start) */
  .permission-matrix th.border-start,
  .permission-matrix td.border-start {
    border-left-color: var(--ppe-perm-border-color-strong) !important;
    border-left-width: var(--ppe-perm-border-width-strong) !important;
  }

  /* Keep the sticky «Раздел» visually separated */
  .permission-matrix .perm-sticky-col-1 {
    border-right-color: var(--ppe-perm-border-color-strong) !important;
    border-right-width: var(--ppe-perm-border-width-strong) !important;
  }

  /* Checkbox columns: fixed + centered */
  .permission-matrix .perm-col-view,
  .permission-matrix .perm-col-edit,
  .permission-matrix .perm-cell-view,
  .permission-matrix .perm-cell-edit {
    width: var(--ppe-perm-checkbox-col-width);
    min-width: var(--ppe-perm-checkbox-col-width);
    max-width: var(--ppe-perm-checkbox-col-width);
    box-sizing: border-box;
  }

  /* Sub-header row: abbreviations, no overlap */
  .permission-matrix thead .perm-col-view,
  .permission-matrix thead .perm-col-edit {
    font-size: var(--ppe-perm-subheader-font-size);
    line-height: var(--ppe-perm-subheader-line-height);
    white-space: normal;
    overflow: hidden;
    text-overflow: ellipsis;
    padding-left: 0.1rem;
    padding-right: 0.1rem;
    vertical-align: bottom;
  }

  .permission-matrix thead .perm-subheader-label {
    display: inline-block;
    max-width: 100%;
  }

  /* Superadmin: one compact pair (colspan=2), do not stretch table */
  .permission-matrix .perm-role-superadmin,
  .permission-matrix td.perm-cell-superadmin {
    width: var(--ppe-perm-superadmin-pair-width);
    min-width: var(--ppe-perm-superadmin-pair-width);
    max-width: var(--ppe-perm-superadmin-pair-width);
    box-sizing: border-box;
    white-space: normal;
    word-break: break-word;
    text-align: center;
    vertical-align: middle;
    padding-left: 0.15rem;
    padding-right: 0.15rem;
  }

  .permission-matrix .perm-role-superadmin-title {
    display: block;
    font-size: var(--ppe-perm-role-header-font-size);
    font-weight: 600;
    line-height: 1.1;
  }

  .permission-matrix .perm-role-superadmin-note {
    display: block;
    margin-top: 0.1rem;
    font-size: var(--ppe-perm-superadmin-note-font-size);
    font-weight: 400;
    line-height: 1.15;
    color: var(--bs-secondary-color);
  }

  .permission-matrix td.perm-cell-superadmin {
    font-size: var(--ppe-perm-subheader-font-size);
  }

  /* Top role header: compact abbreviations */
  .permission-matrix thead th[data-role]:not(.perm-role-superadmin) {
    font-size: var(--ppe-perm-role-header-font-size);
    line-height: 1.15;
    white-space: nowrap;
    padding-left: 0.25rem;
    padding-right: 0.25rem;
  }

  @media (min-width: 992px) {
    .permission-matrix thead .perm-col-view .perm-subheader-label,
    .permission-matrix thead .perm-col-edit .perm-subheader-label {
      writing-mode: vertical-rl;
      transform: rotate(180deg);
      white-space: nowrap;
      font-size: 0.62rem;
      letter-spacing: -0.02em;
      padding: 0.15rem 0;
    }
  }

  /* Subtle coloring to make view/edit toggles obvious */
  .permission-matrix thead th {
    vertical-align: middle;
  }

  .permission-matrix .perm-group-cell {
    background: var(--ppe-perm-group-bg, var(--bs-gray-100));
    border-left: 3px solid var(--ppe-perm-group-accent, var(--bs-border-color));
    white-space: normal;
    word-break: break-word;
    overflow-wrap: break-word;
    vertical-align: middle;
  }

  .permission-matrix thead .perm-sticky-col-1 {
    vertical-align: middle;
  }

  /* View vs Edit column tint */
  .permission-matrix .perm-col-view,
  .permission-matrix .perm-cell-view {
    background: rgba(13, 110, 253, 0.06); /* Bootstrap primary */
  }
  .permission-matrix .perm-col-edit,
  .permission-matrix .perm-cell-edit {
    background: rgba(25, 135, 84, 0.07); /* Bootstrap success */
  }

  /* Zebra within each section (group) */
  .permission-matrix tbody tr.perm-row-even td {
    background: rgba(0, 0, 0, 0.015);
  }

  /* Hover/focus: emphasize row + active cell (no JS) */
  .permission-matrix tbody td {
    transition: background-color 120ms ease, box-shadow 120ms ease, outline-color 120ms ease;
  }

  .permission-matrix tbody tr:hover td,
  .permission-matrix tbody tr:hover th {
    background-color: rgba(0, 0, 0, 0.055);
  }

  .permission-matrix tbody td:hover,
  .permission-matrix tbody td:focus-within {
    outline: 2px solid rgba(0, 0, 0, 0.22);
    outline-offset: -2px; /* keep table layout stable */
    box-shadow: inset 0 0 0 2px rgba(255, 255, 255, 0.55);
  }

  /* Keep tint visible on hover */
  .permission-matrix tbody tr:hover td.perm-cell-view {
    background: rgba(13, 110, 253, 0.10);
  }
  .permission-matrix tbody tr:hover td.perm-cell-edit {
    background: rgba(25, 135, 84, 0.11);
  }

  /* Stronger highlight when the specific cell is hovered/focused */
  .permission-matrix td.perm-cell-view:hover,
  .permission-matrix td.perm-cell-view:focus-within {
    background: rgba(13, 110, 253, 0.18);
    box-shadow:
      inset 0 0 0 2px rgba(13, 110, 253, 0.30),
      inset 0 0 0 9999px rgba(13, 110, 253, 0.08);
  }
  .permission-matrix td.perm-cell-edit:hover,
  .permission-matrix td.perm-cell-edit:focus-within {
    background: rgba(25, 135, 84, 0.19);
    box-shadow:
      inset 0 0 0 2px rgba(25, 135, 84, 0.30),
      inset 0 0 0 9999px rgba(25, 135, 84, 0.08);
  }

  /* Completion / standalone: single checkbox spanning both columns */
  .permission-matrix tbody td[colspan="2"]:not(.perm-cell-superadmin) {
    background: rgba(108, 117, 125, 0.06);
  }

  .permission-matrix tbody tr:hover td[colspan="2"]:not(.perm-cell-superadmin) {
    background: rgba(108, 117, 125, 0.10);
  }

  /* Completion row cells / any colspan=2 checkbox cell */
  .permission-matrix tbody td[colspan="2"]:hover,
  .permission-matrix tbody td[colspan="2"]:focus-within {
    background: rgba(0, 0, 0, 0.07);
    box-shadow:
      inset 0 0 0 2px rgba(0, 0, 0, 0.16),
      inset 0 0 0 9999px rgba(0, 0, 0, 0.03);
  }

  /* Make checkboxes easier to visually locate */
  .permission-matrix td .form-check-input {
    transform: scale(1);
  }

  /* Narrow desktop (~1017px content): 7 role pairs + sticky «Раздел» */
  @media (min-width: 992px) and (max-width: 1199.98px) {
    .permission-matrix {
      --ppe-perm-checkbox-col-width: 44px;
      --ppe-perm-col-1-width: 156px;
    }
  }

  /* Keep «Раздел» visible while scrolling (desktop) */
  @media (min-width: 992px) {
    .permission-matrix {
      --ppe-perm-col-1-width: 168px;
      isolation: isolate;
    }

    .permission-matrix .perm-sticky-col-1 {
      position: sticky;
      left: 0;
      z-index: 4;
      min-width: var(--ppe-perm-col-1-width);
      max-width: var(--ppe-perm-col-1-width);
      width: var(--ppe-perm-col-1-width);
      background: var(--bs-body-bg);
      background-clip: padding-box;
      box-shadow: 4px 0 6px -2px rgba(0, 0, 0, 0.14);
      white-space: normal;
      word-break: break-word;
      overflow-wrap: break-word;
      overflow: visible;
    }

    .permission-matrix thead .perm-sticky-col-1 {
      z-index: 6;
      background: var(--bs-gray-100);
    }

    .permission-matrix .perm-group-cell.perm-sticky-col-1 {
      background: var(--ppe-perm-group-bg, var(--bs-gray-100));
      white-space: normal;
      word-break: break-word;
      overflow-wrap: break-word;
      overflow: visible;
    }

    .permission-matrix tbody tr:hover .perm-sticky-col-1 {
      background-color: var(--bs-body-bg);
    }

    .permission-matrix tbody tr:hover .perm-group-cell.perm-sticky-col-1 {
      background-color: var(--ppe-perm-group-bg, var(--bs-gray-100));
    }

    .permission-matrix tbody tr:hover .perm-sticky-col-1,
    .permission-matrix tbody tr:hover .perm-group-cell.perm-sticky-col-1 {
      box-shadow:
        4px 0 6px -2px rgba(0, 0, 0, 0.14),
        inset 0 0 0 9999px rgba(0, 0, 0, 0.055);
    }
  }

  /* Mobile: tighten spacing */
  @media (max-width: 767.98px) {
    .permission-matrix {
      font-size: 0.875rem;
    }
    .permission-matrix th,
    .permission-matrix td {
      padding: 0.25rem 0.3rem;
    }
    .permission-matrix td .form-check-input {
      transform: scale(1);
    }
  }

/* === Page: audit_log === */
.ppe-audit-table {
      table-layout: fixed;
      width: 100%;
    }
    .ppe-audit-table .ppe-cell-ellipsis {
      display: block;
      max-width: 100%;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
      min-width: 0;
    }
    .ppe-audit-table .ppe-cell-wrap-2 {
      max-width: 100%;
      display: -webkit-box;
      -webkit-box-orient: vertical;
      -webkit-line-clamp: 2;
      overflow: hidden;
      white-space: normal;
      word-break: normal;
      overflow-wrap: break-word;
      hyphens: auto;
      min-width: 0;
    }

/* === Page: user_form === */
.ppe-user-overrides-table {
      table-layout: fixed;
      width: 100%;
    }
    .ppe-user-overrides-table .ppe-cell-wrap-2 {
      max-width: 100%;
      display: -webkit-box;
      -webkit-box-orient: vertical;
      -webkit-line-clamp: 2;
      overflow: hidden;
      white-space: normal;
      word-break: normal;
      overflow-wrap: break-word;
      hyphens: auto;
      min-width: 0;
    }
    .ppe-user-overrides-table .ppe-col-radio {
      width: 4.5rem;
    }
    .ppe-user-overrides-table .ppe-col-effect {
      width: 10.5rem;
    }
    .ppe-user-overrides-table .ppe-col-perm {
      width: 26rem;
    }

    /* Главная — карточки метрик в блоке «Обзор» */
    a.ppe-overview-stat {
      color: inherit;
      cursor: pointer;
      transition: background-color 0.15s ease, box-shadow 0.15s ease;
    }
    a.ppe-overview-stat:hover {
      background-color: var(--ppe-glass-bg-hover) !important;
      box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
    }
    a.ppe-overview-stat:focus-visible {
      outline: 2px solid var(--bs-primary);
      outline-offset: 2px;
      box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
    }

    /* Главная — плитки «Обзор»: одинаковый размер, центр, цифры на одной линии */
    .ppe-home-overview.row.ppe-home-overview-lines {
      align-items: stretch;
    }

    .ppe-home-overview.row.ppe-home-overview-lines > .col {
      display: flex;
      min-width: 0;
    }

    .ppe-home-overview.row.ppe-home-overview-lines .ppe-overview-stat,
    .ppe-home-overview.row.ppe-home-overview-lines .col > .card {
      flex: 1 1 auto;
      width: 100%;
      min-height: 5rem;
      display: flex;
      flex-direction: column;
    }

    .ppe-home-overview.row.ppe-home-overview-lines .ppe-overview-stat-body,
    .ppe-home-overview.row.ppe-home-overview-lines .ppe-overview-stat .card-body,
    .ppe-home-overview.row.ppe-home-overview-lines .col > .card .card-body {
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: flex-start;
      text-align: center;
      flex: 1 1 auto;
      padding: 0.5rem 0.45rem;
      min-height: 5rem;
    }

    .ppe-home-overview.row.ppe-home-overview-lines .ppe-overview-stat-label,
    .ppe-home-overview.row.ppe-home-overview-lines .col > .card .ppe-overview-stat-label {
      width: 100%;
      min-height: 2.2em;
      margin: 0;
      line-height: 1.25;
      text-align: center;
      display: -webkit-box;
      -webkit-box-orient: vertical;
      -webkit-line-clamp: 2;
      overflow: hidden;
      word-break: normal;
      overflow-wrap: normal;
      hyphens: none;
    }

    .ppe-home-overview.row.ppe-home-overview-lines .ppe-overview-stat-value,
    .ppe-home-overview.row.ppe-home-overview-lines .col > .card .ppe-overview-stat-value,
    .ppe-home-overview.row.ppe-home-overview-lines .ppe-overview-stat .fs-4,
    .ppe-home-overview.row.ppe-home-overview-lines .col > .card .fs-4 {
      flex: 0 0 auto;
      margin: 0;
      margin-top: auto;
      padding-top: 0.25rem;
      font-size: 1.35rem !important;
      line-height: 1.2;
      text-align: center;
    }

/* === Device preview (dev / superadmin) === */
html.ppe-device-preview {
  background: #1a1a1a;
}

html.ppe-device-preview body {
  background: #1a1a1a;
  overflow-y: auto;
  align-items: center;
  justify-content: center;
  min-height: 100dvh;
  padding: 0.75rem 0 calc(4.25rem + var(--ppe-safe-bottom));
  box-sizing: border-box;
}

html.ppe-device-preview .ppe-device-preview-chrome {
  display: flex;
  flex-direction: column;
  flex: 0 0 auto;
  width: var(--ppe-device-preview-width);
  max-width: var(--ppe-device-preview-width);
  max-height: min(var(--ppe-device-preview-min-height), 100dvh);
  min-height: min(24rem, 100dvh);
  margin: auto;
  border-radius: 1.35rem;
  box-shadow:
    0 0 0 10px #0d0d0d,
    0 18px 40px rgba(0, 0, 0, 0.45);
  overflow: hidden;
  background: transparent;
  position: relative;
}

html.ppe-device-preview .ppe-layout {
  position: relative;
  isolation: isolate;
  flex: 1 1 auto;
  min-height: 0;
  overflow: hidden;
}

html.ppe-device-preview .ppe-main {
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  flex: 1 1 auto;
  min-height: 0;
}

html.ppe-device-preview {
  /* Synced from `.ppe-device-preview-chrome` getBoundingClientRect() in base.html */
  --ppe-device-preview-frame-left: 0px;
  --ppe-device-preview-frame-top: 0px;
  --ppe-device-preview-frame-height: min(
    var(--ppe-device-preview-min-height),
    100dvh
  );
}

@media (min-width: 992px) {
  /* Bootstrap `d-lg-none` hides the menu button on wide viewports; show in phone preview. */
  html.ppe-device-preview .ppe-navbar-offcanvas-btn {
    display: inline-flex !important;
  }

  /* Drawer stays in DOM on wide preview; keep closed panel off-screen until Bootstrap `.show`. */
  html.ppe-device-preview .ppe-sidebar-offcanvas:not(.show):not(.showing) {
    visibility: hidden !important;
    pointer-events: none;
  }

  html.ppe-device-preview .ppe-sidebar-offcanvas.offcanvas-start {
    top: var(--ppe-device-preview-frame-top);
    left: var(--ppe-device-preview-frame-left);
    bottom: auto;
    height: var(--ppe-device-preview-frame-height);
    width: min(var(--ppe-sidebar-width), var(--ppe-device-preview-width));
    max-width: var(--ppe-device-preview-width);
  }

  html.ppe-device-preview .offcanvas-backdrop {
    top: var(--ppe-device-preview-frame-top);
    left: var(--ppe-device-preview-frame-left);
    width: var(--ppe-device-preview-width);
    height: var(--ppe-device-preview-frame-height);
    right: auto;
    bottom: auto;
  }
}

html.ppe-device-preview .offcanvas-backdrop {
  z-index: 1090;
}

html.ppe-device-preview .offcanvas.ppe-sidebar-offcanvas {
  z-index: 1095;
}

html.ppe-device-preview .ppe-device-preview-chrome::before {
  content: "390 × 844";
  position: absolute;
  top: 0.35rem;
  left: 50%;
  transform: translateX(-50%);
  z-index: 1030;
  font-size: 0.65rem;
  letter-spacing: 0.04em;
  color: rgba(255, 255, 255, 0.55);
  pointer-events: none;
}

html.ppe-device-preview .ppe-sidebar-desktop {
  display: none !important;
}

html.ppe-device-preview .ppe-device-preview-chrome .ppe-layout {
  padding-left: 0 !important;
}

html.ppe-device-preview .nav-ppe .ppe-navbar-search {
  display: none !important;
}

@media (max-width: 991.98px) {
  .ppe-device-preview-control {
    display: none !important;
  }
}

.ppe-device-preview-bar {
  position: fixed;
  left: 50%;
  bottom: calc(0.75rem + var(--ppe-safe-bottom));
  transform: translateX(-50%);
  z-index: 1080;
  gap: 0.5rem;
  align-items: center;
  justify-content: center;
  padding-left: var(--ppe-safe-left);
  padding-right: var(--ppe-safe-right);
}

/* Cursor Dev Hub — фиксированная тёмная плашка (superadmin / system_admin). */
.ppe-dev-hub-bar {
  position: fixed;
  left: 50%;
  bottom: calc(0.75rem + var(--ppe-safe-bottom));
  transform: translateX(-50%);
  z-index: 1075;
  text-decoration: none;
  padding-left: calc(0.65rem + var(--ppe-safe-left));
  padding-right: calc(0.65rem + var(--ppe-safe-right));
}

html.ppe-device-preview .ppe-dev-hub-bar {
  bottom: calc(3.25rem + var(--ppe-safe-bottom));
}

.ppe-scroll-hint--mobile {
  display: none !important;
}

@media (max-width: 991.98px) {
  .ppe-scroll-hint--desktop {
    display: none !important;
  }

  .ppe-scroll-hint--mobile {
    display: inline !important;
  }

  .ppe-scroll-hint-block.ppe-scroll-hint--mobile {
    display: block !important;
  }
}

.ppe-pwa-install-banner {
  position: fixed;
  left: var(--ppe-safe-left);
  right: var(--ppe-safe-right);
  bottom: calc(0.5rem + var(--ppe-safe-bottom));
  z-index: 1045;
  margin: 0 0.5rem;
  max-width: 24rem;
}

.ppe-pwa-install-banner--ios {
  max-width: min(28rem, calc(100vw - 1rem - var(--ppe-safe-left) - var(--ppe-safe-right)));
}

.ppe-pwa-install-banner__body {
  min-width: 0;
}

.ppe-pwa-install-steps {
  padding-left: 1.15rem;
  margin-bottom: 0.35rem;
  font-size: 0.8125rem;
  line-height: 1.35;
}

.ppe-pwa-install-steps li + li {
  margin-top: 0.2rem;
}

.ppe-pwa-install-note {
  color: var(--bs-warning-text-emphasis, #664d03);
  background: rgba(var(--bs-warning-rgb, 255, 193, 7), 0.12);
  border-radius: 0.25rem;
  padding: 0.35rem 0.5rem;
}

@media (min-width: 992px) {
  .ppe-pwa-install-banner {
    display: none !important;
  }
}

.ppe-pwa-update-toast {
  position: fixed;
  left: 50%;
  transform: translateX(-50%);
  top: calc(0.5rem + var(--ppe-safe-top));
  z-index: 1046;
  margin: 0;
  max-width: 18rem;
  font-size: 0.875rem;
  text-align: center;
  pointer-events: none;
}

.ppe-pwa-update-toast--actionable {
  pointer-events: auto;
  max-width: 20rem;
}

@media (max-width: 575.98px) {
  .modal-dialog.ppe-modal-fit-viewport {
    margin: 0.5rem;
    max-width: calc(100% - 1rem);
    max-height: calc(100dvh - 1rem - var(--ppe-safe-top) - var(--ppe-safe-bottom));
  }

  .modal-dialog.ppe-modal-fit-viewport .modal-content {
    max-height: calc(100dvh - 1rem - var(--ppe-safe-top) - var(--ppe-safe-bottom));
    display: flex;
    flex-direction: column;
  }

  .modal-dialog.ppe-modal-fit-viewport .modal-body {
    overflow-y: auto;
    flex: 1 1 auto;
    -webkit-overflow-scrolling: touch;
  }

  .modal-dialog.ppe-modal-fit-viewport .modal-footer {
    flex-shrink: 0;
    flex-direction: column;
    gap: 0.5rem;
    padding-bottom: calc(0.75rem + var(--ppe-safe-bottom));
  }

  .modal-dialog.ppe-modal-fit-viewport .modal-footer .btn {
    width: 100%;
    min-height: 2.75rem;
    margin: 0;
  }
}

.ppe-profile-perms-accordion .accordion-button {
  font-size: 0.9375rem;
  padding: 0.65rem 0.85rem;
}

.ppe-profile-perms-accordion .accordion-body {
  font-weight: 600;
}

.ppe-home-sessions-table table.ppe-table-mobile-cards tbody td.ppe-exam-name {
  font-weight: 600;
}

#ppeDevicePreviewToggle.active,
#ppeDevicePreviewToggleBar.active {
  box-shadow: 0 0 0 2px rgba(33, 37, 41, 0.2);
}

/* === Home overview stats — phone/tablet: 5 compact squares in one row; desktop: row-cols-lg-5 === */
@media (max-width: 991.98px) {
  .ppe-home-overview.row.ppe-home-overview-lines {
    --bs-gutter-x: 0;
    --bs-gutter-y: 0;
    --ppe-overview-gap: 0.35rem;
    display: flex !important;
    flex-wrap: nowrap;
    align-items: stretch;
    gap: var(--ppe-overview-gap);
    margin-left: 0;
    margin-right: 0;
    overflow-x: auto;
    overflow-y: hidden;
    overscroll-behavior-x: contain;
    -webkit-overflow-scrolling: touch;
    scroll-snap-type: x proximity;
    scrollbar-width: thin;
    padding-bottom: 0.125rem;
  }

  .ppe-home-overview.row.ppe-home-overview-lines > .col {
    flex: 1 1 calc((100% - (4 * var(--ppe-overview-gap))) / 5);
    min-width: 3.75rem;
    max-width: none !important;
    width: auto !important;
    padding-left: 0;
    padding-right: 0;
    display: flex;
    scroll-snap-align: start;
  }

  .ppe-home-overview.row.ppe-home-overview-lines .ppe-overview-stat,
  .ppe-home-overview.row.ppe-home-overview-lines .col > .card {
    flex: 1 1 auto;
    width: 100%;
    min-height: 0;
    aspect-ratio: 1 / 1;
    display: flex;
    flex-direction: column;
  }

  .ppe-home-overview.row.ppe-home-overview-lines .ppe-overview-stat-body,
  .ppe-home-overview.row.ppe-home-overview-lines .ppe-overview-stat .card-body,
  .ppe-home-overview.row.ppe-home-overview-lines .col > .card .card-body {
    min-height: 0;
    padding: 0.3rem 0.2rem;
    justify-content: center;
    gap: 0.1rem;
  }

  .ppe-home-overview.row.ppe-home-overview-lines .ppe-overview-stat-label,
  .ppe-home-overview.row.ppe-home-overview-lines .col > .card .ppe-overview-stat-label {
    min-height: 0;
    font-size: 0.625rem;
    line-height: 1.15;
    -webkit-line-clamp: 3;
  }

  .ppe-home-overview.row.ppe-home-overview-lines .ppe-overview-stat-value,
  .ppe-home-overview.row.ppe-home-overview-lines .col > .card .ppe-overview-stat-value,
  .ppe-home-overview.row.ppe-home-overview-lines .ppe-overview-stat .fs-4,
  .ppe-home-overview.row.ppe-home-overview-lines .col > .card .fs-4 {
    margin-top: 0;
    padding-top: 0;
    font-size: 1.1rem !important;
    line-height: 1.15;
  }
}

/* lg–xl−1: row-cols-lg-5 alone can overflow with sidebar; use shrinkable grid */
@media (min-width: 992px) and (max-width: 1199.98px) {
  .ppe-home-overview.row.ppe-home-overview-lines {
    --bs-gutter-x: 0;
    --bs-gutter-y: 0;
    display: grid !important;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 0.5rem;
    margin-left: 0;
    margin-right: 0;
  }

  .ppe-home-overview.row.ppe-home-overview-lines > .col {
    flex: unset !important;
    width: auto !important;
    max-width: none !important;
    padding-left: 0;
    padding-right: 0;
    display: flex;
    min-width: 0;
  }

  .ppe-home-overview.row.ppe-home-overview-lines .ppe-overview-stat,
  .ppe-home-overview.row.ppe-home-overview-lines .col > .card {
    min-height: 3.75rem;
  }

  .ppe-home-overview.row.ppe-home-overview-lines .ppe-overview-stat-body,
  .ppe-home-overview.row.ppe-home-overview-lines .ppe-overview-stat .card-body,
  .ppe-home-overview.row.ppe-home-overview-lines .col > .card .card-body {
    min-height: 3.75rem;
    padding: 0.45rem 0.3rem;
  }

  .ppe-home-overview.row.ppe-home-overview-lines .ppe-overview-stat-label,
  .ppe-home-overview.row.ppe-home-overview-lines .col > .card .ppe-overview-stat-label {
    min-height: 2.15em;
    font-size: 0.72rem;
  }
}

/* === Mobile layout (max-width: 991.98px) === */
@media (max-width: 991.98px) {
  .nav-ppe.ppe-navbar-compact .navbar-brand {
    font-size: 1rem;
    max-width: 42vw;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  .nav-ppe.ppe-navbar-compact .ppe-navbar-user-links .nav-link {
    padding-left: 0.35rem;
    padding-right: 0.35rem;
    font-size: 0.9rem;
  }

  .nav-ppe.ppe-navbar-compact .ppe-navbar-user-info {
    display: none !important;
  }

  .ppe-home-sessions-table .ppe-col-exam-building {
    display: none;
  }

  #ppeSessionsFilters .ppe-sessions-filters,
  .ppe-mobile-filters .ppe-sessions-filters {
    overflow-x: hidden;
    max-width: 100%;
  }

  #ppeSessionsFilters .ppe-sessions-filters .row,
  .ppe-sessions-filters .row {
    align-items: stretch;
  }

  .ppe-sessions-filters .col-lg-1,
  .ppe-sessions-filters .col-lg-2,
  .ppe-sessions-filters .col-lg-3 {
    flex: 0 0 100%;
    max-width: 100%;
  }

  .ppe-sessions-filters .form-label {
    margin-bottom: 0.25rem;
  }

  .ppe-sessions-filters .ppe-sessions-filters-actions {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0.5rem;
    align-items: stretch;
  }

  .ppe-sessions-filters .ppe-sessions-filters-actions .btn,
  .ppe-sessions-filters .ppe-sessions-filters-actions a.btn {
    width: 100%;
    min-height: 2.5rem;
    margin: 0;
    text-align: center;
  }

  .ppe-sessions-table {
    min-width: 28rem;
  }

  .sidebar .nav-link,
  .ppe-sidebar-offcanvas .sidebar .nav-link {
    min-height: 2.75rem;
    padding-top: 0.55rem;
    padding-bottom: 0.55rem;
    font-size: 1rem;
  }

  .sidebar .nav-link i.bi,
  .sidebar .nav-link i.ph-duotone,
  .ppe-sidebar-offcanvas .sidebar .nav-link i.ph-duotone {
    font-size: 1.15rem;
    width: 1.35rem;
    text-align: center;
  }

  table.stages-table thead {
    display: none;
  }

  table.stages-table tbody tr {
    display: block;
    margin: 0.5rem;
    border: 1px solid var(--bs-border-color);
    border-radius: 0.5rem;
    overflow: hidden;
  }
  table.stages-table tbody tr.ppe-stage-row.table-success {
    border-color: var(--bs-success-border-subtle);
  }
  table.stages-table tbody tr.ppe-stage-row.table-warning {
    border-color: var(--bs-warning-border-subtle);
  }
  table.stages-table tbody tr.ppe-stage-row.table-danger {
    border-color: var(--bs-danger-border-subtle);
  }

  table.stages-table tbody td {
    display: flex;
    justify-content: space-between;
    gap: 0.75rem;
    padding: 0.5rem 0.75rem;
    border-top: 1px solid var(--bs-border-color);
  }

  table.stages-table tbody td > * {
    min-width: 0;
    flex: 1 1 60%;
    max-width: 100%;
  }
  table.stages-table tbody td.ppe-stage-status-cell > *,
  table.stages-table tbody td.ppe-stage-photo-cell > *,
  table.stages-table tbody td.ppe-stage-actions-cell > * {
    flex: 1 1 100%;
    max-width: 100%;
  }

  table.stages-table tbody td[data-label="Сроки"] > .ppe-stage-deadlines {
    flex: 1 1 100%;
    max-width: 100% !important;
    width: 100%;
  }

  table.stages-table tbody td[data-label="Сроки"] .ppe-stage-deadline-line,
  table.stages-table tbody td[data-label="Сроки"] .ppe-stage-deadline-text {
    white-space: normal;
    overflow: visible;
    text-overflow: unset;
    word-break: break-word;
    overflow-wrap: break-word;
  }

  table.stages-table tbody td:first-child {
    border-top: 0;
  }

  table.stages-table tbody td::before {
    content: attr(data-label);
    font-weight: 600;
    color: var(--bs-secondary-color);
    flex: 0 0 40%;
    max-width: 40%;
  }

  table.stages-table tbody td.text-end {
    justify-content: flex-start;
  }

  table.stages-table tbody td.text-end::before {
    flex: 0 0 40%;
    max-width: 40%;
  }

  table.stages-table tbody td .dropdown-menu {
    width: 100%;
  }

  table.stages-table td[data-label="Сроки"],
  table.stages-table td[data-label="Статус"],
  table.stages-table td[data-label="Фото"] {
    border-right-width: 0;
  }

  .ppe-sessions-table-container .table-responsive,
  .ppe-nearest-tasks-table.table-responsive,
  .card > .table-responsive {
    overflow-x: visible;
  }

  .ppe-sessions-table {
    min-width: 0 !important;
  }

  /* ppe-mobile-cards-stacked: label above value, full viewport width */
  .ppe-nearest-tasks-table,
  .ppe-home-sessions-table {
    width: 100%;
    max-width: 100%;
  }

  table.ppe-table-mobile-cards {
    display: block;
    width: 100% !important;
    max-width: 100%;
    min-width: 0 !important;
    table-layout: auto;
  }

  table.ppe-table-mobile-cards colgroup {
    display: none;
  }

  table.ppe-table-mobile-cards thead {
    display: none;
  }

  table.ppe-table-mobile-cards tbody {
    display: block;
    width: 100%;
  }

  table.ppe-table-mobile-cards tbody tr {
    display: block;
    width: 100%;
    max-width: 100%;
    box-sizing: border-box;
    margin: 0.375rem 0;
    border: 1px solid var(--bs-border-color);
    border-radius: 0.5rem;
    overflow: visible;
  }

  table.ppe-table-compact.ppe-table-mobile-cards tbody th,
  table.ppe-table-compact.ppe-table-mobile-cards tbody td {
    max-width: none !important;
    min-width: 0;
    min-height: 0;
    height: auto;
    overflow: visible;
    vertical-align: top;
  }

  table.ppe-table-mobile-cards.ppe-table-center tbody td {
    text-align: center;
    vertical-align: middle;
  }

  table.ppe-table-mobile-cards tbody td {
    display: block;
    width: 100%;
    max-width: 100% !important;
    box-sizing: border-box;
    padding: 0.5rem 0.75rem;
    min-height: 0;
    height: auto;
    border-top: 1px solid var(--bs-border-color);
    overflow: visible;
    white-space: normal;
    word-break: break-word;
    overflow-wrap: anywhere;
    vertical-align: top;
  }

  table.ppe-table-mobile-cards tbody td.d-none,
  table.ppe-table-mobile-cards tbody td.d-md-table-cell,
  table.ppe-table-mobile-cards tbody td.d-lg-table-cell,
  table.ppe-table-mobile-cards tbody td.ppe-col-email,
  table.ppe-table-mobile-cards tbody td.ppe-col-buildings,
  table.ppe-table-mobile-cards tbody td.ppe-col-magic {
    display: none !important;
  }

  table.ppe-table-mobile-cards tbody td:first-child {
    border-top: 0;
  }

  table.ppe-table-mobile-cards.ppe-table-center tbody td::before {
    text-align: center;
  }

  table.ppe-table-mobile-cards tbody td::before {
    display: block;
    content: attr(data-label);
    width: 100%;
    max-width: 100%;
    margin-bottom: 0.25rem;
    font-weight: 600;
    color: var(--bs-secondary-color);
    font-size: 0.8125rem;
    line-height: 1.25;
    writing-mode: horizontal-tb;
    text-align: center;
    white-space: normal;
    word-break: break-word;
    overflow-wrap: anywhere;
  }

  table.ppe-table-mobile-cards tbody td[data-label=""]::before,
  table.ppe-table-mobile-cards tbody td:not([data-label])::before {
    content: none;
    margin-bottom: 0;
  }

  table.ppe-table-mobile-cards.ppe-table-center tbody td > * {
    text-align: center;
    vertical-align: middle;
  }

  table.ppe-table-mobile-cards tbody td > * {
    display: inline-block;
    width: auto;
    max-width: 100% !important;
    min-width: 0;
    min-height: 0;
    text-align: center;
    vertical-align: middle;
    word-break: break-word;
    overflow-wrap: anywhere;
  }

  table.ppe-table-mobile-cards tbody td > form,
  table.ppe-table-mobile-cards tbody td > .dropdown,
  table.ppe-table-mobile-cards tbody td > .btn-toolbar,
  table.ppe-table-mobile-cards tbody td > .ppe-actions-mobile,
  table.ppe-table-mobile-cards tbody td > .ppe-actions-desktop,
  table.ppe-table-mobile-cards tbody td > div:not(.dropdown-menu) {
    display: block;
    width: auto;
    max-width: 100%;
  }

  table.ppe-table-mobile-cards tbody td .ppe-cell-truncate,
  table.ppe-table-mobile-cards tbody td .ppe-cell-ellipsis,
  table.ppe-table-mobile-cards tbody td .ppe-cell-wrap,
  table.ppe-table-mobile-cards tbody td .ppe-cell-clamp-2,
  table.ppe-table-mobile-cards tbody td .ppe-stage-deadline-line,
  table.ppe-table-mobile-cards tbody td .ppe-stage-deadline-text {
    white-space: normal;
    overflow: visible;
    text-overflow: unset;
    -webkit-line-clamp: unset;
    display: inline-block;
    max-width: 100%;
    min-height: 0;
  }

  table.ppe-table-mobile-cards tbody td .ppe-cell-ellipsis.ppe-cell-expanded,
  table.ppe-table-mobile-cards tbody td .ppe-cell-wrap.ppe-cell-expanded {
    font-weight: 500;
  }

  table.ppe-table-mobile-cards tbody td .badge:not(.ppe-badge-wrap) {
    white-space: normal;
    overflow: visible;
    text-overflow: unset;
    max-width: 100%;
  }

  table.ppe-table-mobile-cards tbody td.ppe-actions-cell .dropdown-menu {
    position: fixed !important;
    left: auto !important;
    right: 0.75rem !important;
    max-width: min(18rem, calc(100vw - 1.5rem));
    z-index: 1055;
  }

  table.ppe-table-mobile-cards.ppe-table-center tbody td.ppe-actions-cell {
    text-align: center;
  }

  table.ppe-table-mobile-cards tbody td.ppe-actions-cell {
    text-align: center;
  }

  table.ppe-table-mobile-cards tbody td.ppe-actions-cell > .ppe-actions-mobile,
  table.ppe-table-mobile-cards tbody td.ppe-actions-cell > .dropdown {
    width: auto;
    max-width: 100%;
  }

  table.ppe-table-mobile-cards tbody td.ppe-actions-cell > .ppe-actions-mobile-icons {
    display: flex !important;
    flex-wrap: wrap;
    gap: 0.25rem;
    align-items: center;
  }

  table.ppe-table-mobile-cards tbody td.ppe-actions-cell > .btn,
  table.ppe-table-mobile-cards tbody td.ppe-actions-cell > a.btn {
    width: auto;
    max-width: 100%;
  }

  /* Lists with dedicated mobile cards: keep desktop table layout if wrapper is shown. */
  .ppe-list-desktop table.ppe-table-mobile-cards,
  .ppe-list-desktop table.ppe-table-rows-compact,
  .ppe-list-desktop table.ppe-template-set-templates-table {
    display: table !important;
    width: 100% !important;
    max-width: 100%;
    min-width: 0 !important;
    table-layout: fixed;
  }

  .ppe-list-desktop table.ppe-table-mobile-cards colgroup,
  .ppe-list-desktop table.ppe-table-rows-compact colgroup,
  .ppe-list-desktop table.ppe-template-set-templates-table colgroup {
    display: table-column-group !important;
  }

  .ppe-list-desktop table.ppe-table-mobile-cards thead,
  .ppe-list-desktop table.ppe-table-rows-compact thead,
  .ppe-list-desktop table.ppe-template-set-templates-table thead {
    display: table-header-group !important;
  }

  .ppe-list-desktop table.ppe-table-mobile-cards tbody,
  .ppe-list-desktop table.ppe-table-rows-compact tbody,
  .ppe-list-desktop table.ppe-template-set-templates-table tbody {
    display: table-row-group !important;
    width: auto;
  }

  .ppe-list-desktop table.ppe-table-mobile-cards tbody tr,
  .ppe-list-desktop table.ppe-table-rows-compact tbody tr,
  .ppe-list-desktop table.ppe-template-set-templates-table tbody tr {
    display: table-row !important;
    width: auto;
    max-width: none;
    margin: 0;
    border: 0;
    border-radius: 0;
    overflow: visible;
  }

  .ppe-list-desktop table.ppe-table-compact.ppe-table-mobile-cards tbody th,
  .ppe-list-desktop table.ppe-table-compact.ppe-table-mobile-cards tbody td,
  .ppe-list-desktop table.ppe-table-compact.ppe-table-rows-compact tbody th,
  .ppe-list-desktop table.ppe-table-compact.ppe-table-rows-compact tbody td,
  .ppe-list-desktop table.ppe-table-compact.ppe-template-set-templates-table tbody th,
  .ppe-list-desktop table.ppe-table-compact.ppe-template-set-templates-table tbody td {
    display: table-cell !important;
    width: auto;
    max-width: 0;
    min-width: 0;
    min-height: 0;
    height: auto;
    padding: 0.2rem 0.45rem;
    border-top: var(--bs-border-width) solid var(--bs-border-color);
    overflow: hidden;
    white-space: nowrap;
    vertical-align: middle;
    text-align: center;
  }

  .ppe-list-desktop table.ppe-table-mobile-cards.ppe-table-center tbody td,
  .ppe-list-desktop table.ppe-table-rows-compact.ppe-table-center tbody td,
  .ppe-list-desktop table.ppe-template-set-templates-table.ppe-table-center tbody td {
    text-align: center;
    vertical-align: middle;
  }

  .ppe-list-desktop table.ppe-table-mobile-cards tbody td::before,
  .ppe-list-desktop table.ppe-table-rows-compact tbody td::before,
  .ppe-list-desktop table.ppe-template-set-templates-table tbody td::before {
    display: none !important;
    content: none !important;
    margin: 0;
  }

  .ppe-list-desktop table.ppe-table-mobile-cards tbody td > *,
  .ppe-list-desktop table.ppe-table-rows-compact tbody td > *,
  .ppe-list-desktop table.ppe-template-set-templates-table tbody td > * {
    display: inline-block;
    width: auto;
    max-width: 100%;
    min-width: 0;
    min-height: 0;
    vertical-align: middle;
  }

  .ppe-list-desktop table.ppe-table-mobile-cards tbody td > form,
  .ppe-list-desktop table.ppe-table-rows-compact tbody td > form,
  .ppe-list-desktop table.ppe-template-set-templates-table tbody td > form,
  .ppe-list-desktop table.ppe-table-mobile-cards tbody td > .dropdown,
  .ppe-list-desktop table.ppe-table-rows-compact tbody td > .dropdown,
  .ppe-list-desktop table.ppe-template-set-templates-table tbody td > .dropdown,
  .ppe-list-desktop table.ppe-table-mobile-cards tbody td > .btn-toolbar,
  .ppe-list-desktop table.ppe-table-rows-compact tbody td > .btn-toolbar,
  .ppe-list-desktop table.ppe-template-set-templates-table tbody td > .btn-toolbar,
  .ppe-list-desktop table.ppe-table-mobile-cards tbody td > .ppe-actions-mobile,
  .ppe-list-desktop table.ppe-table-rows-compact tbody td > .ppe-actions-mobile,
  .ppe-list-desktop table.ppe-template-set-templates-table tbody td > .ppe-actions-mobile,
  .ppe-list-desktop table.ppe-table-mobile-cards tbody td > .ppe-actions-desktop,
  .ppe-list-desktop table.ppe-table-rows-compact tbody td > .ppe-actions-desktop,
  .ppe-list-desktop table.ppe-template-set-templates-table tbody td > .ppe-actions-desktop,
  .ppe-list-desktop table.ppe-table-mobile-cards tbody td > div:not(.dropdown-menu),
  .ppe-list-desktop table.ppe-table-rows-compact tbody td > div:not(.dropdown-menu),
  .ppe-list-desktop table.ppe-template-set-templates-table tbody td > div:not(.dropdown-menu) {
    display: inline-flex;
    width: auto;
    max-width: 100%;
  }

  .ppe-list-desktop table.ppe-table-mobile-cards tbody td .ppe-cell-truncate,
  .ppe-list-desktop table.ppe-table-rows-compact tbody td .ppe-cell-truncate,
  .ppe-list-desktop table.ppe-template-set-templates-table tbody td .ppe-cell-truncate,
  .ppe-list-desktop table.ppe-table-mobile-cards tbody td .ppe-cell-ellipsis,
  .ppe-list-desktop table.ppe-table-rows-compact tbody td .ppe-cell-ellipsis,
  .ppe-list-desktop table.ppe-template-set-templates-table tbody td .ppe-cell-ellipsis,
  .ppe-list-desktop table.ppe-table-mobile-cards tbody td .ppe-cell-wrap,
  .ppe-list-desktop table.ppe-table-rows-compact tbody td .ppe-cell-wrap,
  .ppe-list-desktop table.ppe-template-set-templates-table tbody td .ppe-cell-wrap,
  .ppe-list-desktop table.ppe-table-mobile-cards tbody td .ppe-cell-clamp-2,
  .ppe-list-desktop table.ppe-table-rows-compact tbody td .ppe-cell-clamp-2,
  .ppe-list-desktop table.ppe-template-set-templates-table tbody td .ppe-cell-clamp-2 {
    display: block;
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    min-height: 0;
  }

  .ppe-list-desktop table.ppe-table-mobile-cards tbody td.d-none,
  .ppe-list-desktop table.ppe-table-rows-compact tbody td.d-none,
  .ppe-list-desktop table.ppe-template-set-templates-table tbody td.d-none,
  .ppe-list-desktop table.ppe-table-mobile-cards tbody td.d-md-table-cell,
  .ppe-list-desktop table.ppe-table-rows-compact tbody td.d-md-table-cell,
  .ppe-list-desktop table.ppe-template-set-templates-table tbody td.d-md-table-cell,
  .ppe-list-desktop table.ppe-table-mobile-cards tbody td.d-lg-table-cell,
  .ppe-list-desktop table.ppe-table-rows-compact tbody td.d-lg-table-cell,
  .ppe-list-desktop table.ppe-template-set-templates-table tbody td.d-lg-table-cell {
    display: none !important;
  }

  .ppe-list-desktop table.ppe-table-mobile-cards tbody td.d-md-table-cell.d-none,
  .ppe-list-desktop table.ppe-table-rows-compact tbody td.d-md-table-cell.d-none,
  .ppe-list-desktop table.ppe-template-set-templates-table tbody td.d-md-table-cell.d-none,
  .ppe-list-desktop table.ppe-table-mobile-cards tbody td.d-lg-table-cell.d-none,
  .ppe-list-desktop table.ppe-table-rows-compact tbody td.d-lg-table-cell.d-none,
  .ppe-list-desktop table.ppe-template-set-templates-table tbody td.d-lg-table-cell.d-none {
    display: none !important;
  }

  @media (min-width: 768px) {
    .ppe-list-desktop table.ppe-table-mobile-cards tbody td.d-md-table-cell:not(.d-none),
    .ppe-list-desktop table.ppe-table-rows-compact tbody td.d-md-table-cell:not(.d-none),
    .ppe-list-desktop table.ppe-template-set-templates-table tbody td.d-md-table-cell:not(.d-none) {
      display: table-cell !important;
    }
  }

  @media (min-width: 992px) {
    .ppe-list-desktop table.ppe-table-mobile-cards tbody td.d-lg-table-cell:not(.d-none),
    .ppe-list-desktop table.ppe-table-rows-compact tbody td.d-lg-table-cell:not(.d-none),
    .ppe-list-desktop table.ppe-template-set-templates-table tbody td.d-lg-table-cell:not(.d-none) {
      display: table-cell !important;
    }
  }

  .ppe-users-table .ppe-col-email,
  .ppe-users-table .ppe-col-buildings,
  .ppe-users-table .ppe-col-magic {
    display: none;
  }

  .instruction-table .instruction-col-narrow,
  .instruction-table .d-none-instruction-mobile {
    display: none;
  }
}

/* Nearest tasks: exam column + actions stack (global — not inside max-width:991px) */
.ppe-nearest-task-exam-cell {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 0.2rem;
  min-width: 0;
}

.ppe-main .table .ppe-nearest-task-exam-cell {
  align-items: center;
}

.ppe-nearest-task-exam-subjects-line {
  min-width: 0;
  max-width: 100%;
}

.ppe-nearest-task-exam-gia {
  display: inline;
  font-size: inherit;
  font-weight: 500;
  line-height: inherit;
  color: var(--ppe-text-muted, var(--bs-secondary-color));
}

.ppe-nearest-task-exam-date {
  display: inline-block;
  margin-top: 0.05rem;
  max-width: 100%;
  font-size: 0.8125rem;
  font-weight: 600;
  line-height: 1.25;
  color: var(--ppe-text, var(--bs-body-color));
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.ppe-task-card-exam .ppe-nearest-task-exam-date {
  margin-top: 0.25rem;
}

/* v114: task mobile cards — stage → deadline → PPE+actions → subjects */
.ppe-list-cards-grid .ppe-task-mobile-card .card-body {
  padding: 0.4rem 0.55rem !important;
  display: flex;
  flex-direction: column;
  gap: 0.18rem;
  min-width: 0;
}

.ppe-task-mobile-stage-row {
  min-width: 0;
  gap: 0.25rem;
}

.ppe-task-card-deadline {
  font-size: 0.75rem;
  line-height: 1.2;
  overflow-wrap: normal;
  word-break: normal;
  min-width: 0;
}

.ppe-task-mobile-toolbar-row {
  min-width: 0;
  gap: 0.25rem;
  margin-top: 0.05rem;
}

.ppe-task-mobile-toolbar-row > .ppe-nearest-task-actions-stack {
  flex-shrink: 0;
}

.ppe-task-mobile-subjects-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.15rem 0.35rem;
  min-width: 0;
  margin-top: 0.05rem;
  font-size: 0.75rem;
  line-height: 1.2;
}

.ppe-task-mobile-exam {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  flex: 1 1 auto;
  min-width: 3rem;
}

.ppe-task-mobile-subjects-row .ppe-nearest-task-exam-subjects-line {
  min-width: 0;
}

.ppe-task-mobile-subjects-row .ppe-nearest-task-exam-date {
  margin-top: 0;
  flex-shrink: 0;
}

.ppe-task-mobile-building {
  font-size: 0.6875rem;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  max-width: 100%;
  flex: 0 1 auto;
  min-width: 0;
}

/* Код ППЭ: таблицы, списки, детали (не смешивать с пастелью строки). */
.ppe-code,
.ppe-main .table tbody td[data-label="Код ППЭ"],
.ppe-main .table tbody td[data-label="Коды ППЭ"],
.ppe-main .table tbody td[data-label="№ ППЭ"],
.ppe-main .table tbody td.ppe-col-gia-ext-ppe-code,
.ppe-main .table tbody td.ppe-col-shortage-building,
.ppe-main .table tbody td.ppe-col-buildings {
  font-size: var(--ppe-code-font-size-table);
  font-weight: 700;
  letter-spacing: 0.03em;
  color: var(--ppe-code-color);
}

.ppe-main .table tbody tr.ppe-row-building:not(.table-danger) td[data-label="Код ППЭ"],
.ppe-main .table tbody tr.ppe-row-building:not(.table-danger) td[data-label="№ ППЭ"],
.ppe-main .table tbody tr.ppe-row-building:not(.table-danger) td.ppe-col-gia-ext-ppe-code,
.ppe-main .table tbody tr.ppe-row-building:not(.table-danger) td.ppe-col-shortage-building {
  color: var(--ppe-code-color) !important;
}

.ppe-task-mobile-ppe-code {
  font-size: var(--ppe-code-font-size-mobile);
  font-weight: 800;
  letter-spacing: 0.04em;
  color: var(--ppe-code-color);
}

.ppe-task-mobile-ppe-code.ppe-task-mobile-building {
  font-size: var(--ppe-code-font-size-mobile);
}

.ppe-task-mobile-card.ppe-row-building:not(.table-danger) .ppe-task-mobile-ppe-code,
[data-theme="dark"] .ppe-task-mobile-card.ppe-row-building:not(.table-danger) .ppe-task-mobile-ppe-code,
[data-theme="dark"] .ppe-main #today-tasks .ppe-task-mobile-card.ppe-row-building:not(.table-danger) .ppe-task-mobile-ppe-code,
[data-theme="dark"] .ppe-main #tasks .ppe-task-mobile-card.ppe-row-building:not(.table-danger) .ppe-task-mobile-ppe-code,
[data-theme="dark"] .ppe-main #sessions .ppe-session-mobile-card.ppe-row-building:not(.table-danger) .ppe-task-mobile-ppe-code,
[data-theme="dark"] .ppe-list-cards-grid .ppe-task-mobile-card.ppe-row-building:not(.table-danger) .ppe-task-mobile-ppe-code,
[data-theme="dark"] .ppe-list-cards-grid .ppe-session-mobile-card.ppe-row-building:not(.table-danger) .ppe-task-mobile-ppe-code {
  color: var(--ppe-code-color) !important;
}

/* Session mobile cards: код ППЭ + дата под заголовком (главная #sessions, список экзаменов). */
.ppe-session-mobile-meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.15rem 0.35rem;
  min-width: 0;
}

.ppe-session-mobile-meta .ppe-nearest-task-exam-date {
  margin-top: 0;
  flex-shrink: 0;
}

.ppe-session-mobile-card.ppe-row-building:not(.table-danger) .ppe-session-mobile-meta .ppe-task-mobile-ppe-code,
.ppe-home-sessions-mobile .ppe-session-mobile-card.ppe-row-building:not(.table-danger) .ppe-task-mobile-ppe-code,
.ppe-sessions-mobile .ppe-session-mobile-card.ppe-row-building:not(.table-danger) .ppe-task-mobile-ppe-code,
.ppe-main #sessions .ppe-session-mobile-card.ppe-row-building:not(.table-danger) .ppe-task-mobile-ppe-code,
.ppe-list-cards-grid .ppe-session-mobile-card.ppe-row-building:not(.table-danger) .ppe-task-mobile-ppe-code,
.ppe-list-cards-grid .ppe-session-mobile-card.ppe-row-building:not(.table-danger) dd .ppe-task-mobile-ppe-code {
  color: var(--ppe-code-color) !important;
  font-weight: 800;
}

.ppe-session-mobile-card.ppe-row-building:not(.table-danger) .ppe-session-mobile-meta .ppe-nearest-task-exam-date,
.ppe-home-sessions-mobile .ppe-session-mobile-card.ppe-row-building:not(.table-danger) .ppe-nearest-task-exam-date,
.ppe-sessions-mobile .ppe-session-mobile-card.ppe-row-building:not(.table-danger) .ppe-nearest-task-exam-date,
.ppe-main #sessions .ppe-session-mobile-card.ppe-row-building:not(.table-danger) .ppe-nearest-task-exam-date,
.ppe-list-cards-grid .ppe-session-mobile-card.ppe-row-building:not(.table-danger) .ppe-nearest-task-exam-date {
  background-color: #cfe2ff !important;
  color: #052c65 !important;
  border: 1px solid color-mix(in srgb, #052c65 14%, transparent);
}

.ppe-nearest-tasks-table tbody tr.ppe-row-building:not(.table-danger) td[data-label="Код ППЭ"] {
  font-weight: 700;
  letter-spacing: 0.03em;
  color: var(--ppe-code-color) !important;
}

.ppe-task-mobile-stage {
  flex: 1 1 auto;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.ppe-task-mobile-status {
  display: inline-flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.15rem;
}

@media (max-width: 399.98px) {
  .ppe-task-card-deadline {
    white-space: normal;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
  }

  .ppe-task-mobile-card .ppe-actions-mobile-icons {
    flex-wrap: wrap !important;
  }
}

/* Unified circular icon-only action (36×36) — tables, toolbars, mobile tiles */
.ppe-action-btn-square {
  --ppe-action-btn-size: 2.25rem;
  --ppe-action-btn-radius: 50%;
  box-sizing: border-box !important;
  flex: 0 0 auto !important;
  width: var(--ppe-action-btn-size) !important;
  min-width: var(--ppe-action-btn-size) !important;
  max-width: var(--ppe-action-btn-size) !important;
  height: var(--ppe-action-btn-size) !important;
  min-height: var(--ppe-action-btn-size) !important;
  max-height: var(--ppe-action-btn-size) !important;
  padding: 0 !important;
  margin: 0 !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  line-height: 1 !important;
  white-space: nowrap !important;
  overflow: hidden !important;
  border-radius: var(--ppe-action-btn-radius) !important;
  --bs-btn-padding-y: 0;
  --bs-btn-padding-x: 0;
}

.ppe-action-btn-square:focus,
.ppe-action-btn-square:focus-visible,
.ppe-action-btn-square:active:not(:disabled):not(.disabled) {
  padding: 0 !important;
  width: var(--ppe-action-btn-size) !important;
  min-width: var(--ppe-action-btn-size) !important;
  max-width: var(--ppe-action-btn-size) !important;
  height: var(--ppe-action-btn-size) !important;
  min-height: var(--ppe-action-btn-size) !important;
  max-height: var(--ppe-action-btn-size) !important;
}

.ppe-action-btn-square i {
  font-size: 1rem;
  line-height: 1;
  margin: 0;
}

/* Icon-only glass buttons without .ppe-action-btn-square.
   Standalone (not in btn-group): circle. Inside fused btn-group: square + chain radii above. */
.ppe-main .btn.ppe-btn-icon:not(.ppe-action-btn-square):is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ),
.btn-group > .btn:is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ),
.btn-group-sm > .btn:is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ) {
  --ppe-btn-icon-only-size: var(--ppe-action-btn-size, 2.25rem);
  box-sizing: border-box !important;
  flex: 0 0 auto !important;
  width: var(--ppe-btn-icon-only-size) !important;
  min-width: var(--ppe-btn-icon-only-size) !important;
  max-width: var(--ppe-btn-icon-only-size) !important;
  height: var(--ppe-btn-icon-only-size) !important;
  min-height: var(--ppe-btn-icon-only-size) !important;
  max-height: var(--ppe-btn-icon-only-size) !important;
  aspect-ratio: 1;
  padding: 0 !important;
  margin: 0;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  line-height: 1 !important;
  white-space: nowrap !important;
  overflow: hidden !important;
  --bs-btn-padding-y: 0;
  --bs-btn-padding-x: 0;
}

/* Toolbar count badges (comments, rooms): pill sits on top-right, outside the square. */
.ppe-main .btn.ppe-btn-icon.position-relative:has(> .badge),
.btn-group > .btn.position-relative:has(> .badge),
.btn-group-sm > .btn.position-relative:has(> .badge) {
  overflow: visible !important;
}

.ppe-main .btn.ppe-btn-icon.position-relative > .badge,
.btn-group > .btn.position-relative > .badge,
.btn-group-sm > .btn.position-relative > .badge {
  z-index: 2;
  line-height: 1.1;
  font-size: 0.65rem;
  min-width: 1.05rem;
  padding: 0.25em 0.42em;
}

[data-theme="dark"] .ppe-main .btn.ppe-btn-icon > .badge.bg-secondary,
[data-theme="dark"] .btn-group > .btn > .badge.bg-secondary,
[data-theme="dark"] .btn-group-sm > .btn > .badge.bg-secondary {
  background-color: var(--bs-secondary) !important;
  color: #fff !important;
}

/* Standalone icon-only (table toolbars, cells): circle. Fused btn-group uses chain rules. */
.ppe-main .btn.ppe-btn-icon:not(.ppe-action-btn-square):is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ):not(:where(.btn-group *)),
.ppe-table-actions .ppe-icon-btn-toolbar-inner > .btn:is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ),
.ppe-table-actions .ppe-icon-btn-toolbar-inner > form > .btn:is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ),
.ppe-table-actions .ppe-icon-btn-toolbar-inner > a.btn:is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ),
.ppe-action-btn-square:not(:where(.btn-group *)),
.btn-group > .btn:only-child:is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ),
.btn-group-sm > .btn:only-child:is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ) {
  border-radius: 50% !important;
  --bs-btn-border-radius: 50%;
}

.ppe-main .btn.ppe-btn-icon:not(.ppe-action-btn-square):is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ):focus,
.ppe-main .btn.ppe-btn-icon:not(.ppe-action-btn-square):is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ):focus-visible,
.ppe-main .btn.ppe-btn-icon:not(.ppe-action-btn-square):is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ):active:not(:disabled):not(.disabled),
.btn-group > .btn:is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ):focus,
.btn-group > .btn:is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ):focus-visible,
.btn-group > .btn:is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ):active:not(:disabled):not(.disabled),
.btn-group-sm > .btn:is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ):focus,
.btn-group-sm > .btn:is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ):focus-visible,
.btn-group-sm > .btn:is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ):active:not(:disabled):not(.disabled) {
  padding: 0 !important;
  width: var(--ppe-btn-icon-only-size, var(--ppe-action-btn-size, 2.25rem)) !important;
  min-width: var(--ppe-btn-icon-only-size, var(--ppe-action-btn-size, 2.25rem)) !important;
  max-width: var(--ppe-btn-icon-only-size, var(--ppe-action-btn-size, 2.25rem)) !important;
  height: var(--ppe-btn-icon-only-size, var(--ppe-action-btn-size, 2.25rem)) !important;
  min-height: var(--ppe-btn-icon-only-size, var(--ppe-action-btn-size, 2.25rem)) !important;
  max-height: var(--ppe-btn-icon-only-size, var(--ppe-action-btn-size, 2.25rem)) !important;
}

.ppe-main .btn.ppe-btn-icon:not(.ppe-action-btn-square):is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ):not(:where(.btn-group *)):focus,
.ppe-main .btn.ppe-btn-icon:not(.ppe-action-btn-square):is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ):not(:where(.btn-group *)):focus-visible,
.ppe-main .btn.ppe-btn-icon:not(.ppe-action-btn-square):is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ):not(:where(.btn-group *)):active:not(:disabled):not(.disabled),
.ppe-table-actions .ppe-icon-btn-toolbar-inner > .btn:is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ):focus,
.ppe-table-actions .ppe-icon-btn-toolbar-inner > .btn:is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ):focus-visible,
.ppe-table-actions .ppe-icon-btn-toolbar-inner > .btn:is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ):active:not(:disabled):not(.disabled),
.ppe-action-btn-square:not(:where(.btn-group *)):focus,
.ppe-action-btn-square:not(:where(.btn-group *)):focus-visible,
.ppe-action-btn-square:not(:where(.btn-group *)):active:not(:disabled):not(.disabled),
.btn-group > .btn:only-child:is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ):focus,
.btn-group > .btn:only-child:is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ):focus-visible,
.btn-group > .btn:only-child:is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ):active:not(:disabled):not(.disabled),
.btn-group-sm > .btn:only-child:is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ):focus,
.btn-group-sm > .btn:only-child:is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ):focus-visible,
.btn-group-sm > .btn:only-child:is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ):active:not(:disabled):not(.disabled) {
  border-radius: 50% !important;
}

/* .ppe-action-btn-square in fused btn-group: chain caps, flat joints (not circle). */
.btn-group > .ppe-action-btn-square:not(:only-child),
.btn-group-sm > .ppe-action-btn-square:not(:only-child) {
  --ppe-action-btn-radius: 0;
}
.btn-group > .ppe-action-btn-square:first-child:not(:last-child),
.btn-group-sm > .ppe-action-btn-square:first-child:not(:last-child) {
  border-top-left-radius: var(--ppe-radius-pill) !important;
  border-bottom-left-radius: var(--ppe-radius-pill) !important;
  border-top-right-radius: 0 !important;
  border-bottom-right-radius: 0 !important;
}
.btn-group > .ppe-action-btn-square:last-child:not(:first-child),
.btn-group-sm > .ppe-action-btn-square:last-child:not(:first-child) {
  border-top-right-radius: var(--ppe-radius-pill) !important;
  border-bottom-right-radius: var(--ppe-radius-pill) !important;
  border-top-left-radius: 0 !important;
  border-bottom-left-radius: 0 !important;
}
.btn-group > .ppe-action-btn-square:not(:first-child):not(:last-child),
.btn-group-sm > .ppe-action-btn-square:not(:first-child):not(:last-child) {
  border-radius: 0 !important;
}

.ppe-main .btn.ppe-btn-icon:not(.ppe-action-btn-square):is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ) i,
.ppe-main .btn.ppe-btn-icon:not(.ppe-action-btn-square):is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ) > .bi,
.btn-group > .btn:is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ) i,
.btn-group > .btn:is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ) > .bi,
.btn-group-sm > .btn:is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ) i,
.btn-group-sm > .btn:is(
    :has(> .bi:only-child),
    :has(> i:only-child),
    :has(> .bi):has(> .visually-hidden),
    :has(> i):has(> .visually-hidden)
  ) > .bi {
  font-size: 1rem;
  line-height: 1;
  margin: 0;
}

/* Narrow fallback stack (table cells use .ppe-table-actions row on lg+) */
.ppe-nearest-task-actions-stack {
  --ppe-nearest-task-action-h: var(--ppe-action-btn-size, 2.25rem);
  --ppe-nearest-task-action-gap: 0.25rem;
  display: flex !important;
  flex-direction: column !important;
  flex-wrap: nowrap !important;
  align-items: flex-start !important;
  gap: 0.25rem !important;
  width: 100%;
  min-width: 0;
  max-width: 100%;
}

/* Mobile task cards: horizontal icon row (sessions «Действия» pattern) */
.ppe-nearest-task-actions-stack.ppe-actions-mobile-icons,
.ppe-nearest-tasks-mobile .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons {
  display: flex !important;
  flex-direction: row !important;
  flex-wrap: wrap !important;
  align-items: center !important;
  gap: 0.25rem !important;
  min-width: 0;
  max-width: 100%;
  width: auto;
}

.ppe-nearest-tasks-mobile .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons > form,
.ppe-nearest-tasks-mobile .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons > .badge,
.ppe-nearest-tasks-mobile .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons > .btn,
.ppe-nearest-tasks-mobile .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons > a.btn {
  width: auto;
  max-width: none;
  flex: 0 0 auto;
}

.ppe-nearest-tasks-mobile .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons .ppe-nearest-task-attachment-source {
  width: auto;
  max-width: none;
}

.ppe-nearest-tasks-mobile .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons .btn-group-vertical {
  flex-direction: row !important;
  width: auto !important;
  max-width: none !important;
}

.ppe-nearest-tasks-mobile
  .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons
  .ppe-nearest-task-attachment-source
  .ppe-stage-photo-upload-inline,
.ppe-nearest-tasks-mobile
  .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons
  .ppe-nearest-task-attachment-source
  .ppe-stage-photo-upload-mobile,
.ppe-nearest-tasks-mobile
  .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons
  .ppe-nearest-task-attachment-source
  .ppe-stage-photo-upload-desktop {
  display: inline-flex !important;
  flex-direction: row !important;
  flex-wrap: nowrap !important;
  align-items: center !important;
  width: auto !important;
  max-width: none !important;
}

.ppe-nearest-tasks-mobile
  .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons
  .ppe-nearest-task-attachment-source
  .ppe-stage-photo-upload-inline.btn-group
  > .btn,
.ppe-nearest-tasks-mobile
  .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons
  .ppe-nearest-task-attachment-source
  .ppe-stage-photo-upload-mobile.btn-group
  > .btn,
.ppe-nearest-tasks-mobile
  .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons
  .ppe-nearest-task-attachment-source
  .ppe-stage-photo-upload-desktop.btn-group
  > .btn {
  width: auto !important;
  max-width: none !important;
}

/* Task mobile card toolbar: uniform 36×36 circular actions (overrides nearest-task stack) */
.ppe-task-mobile-card .ppe-actions-mobile-icons {
  --ppe-nearest-task-action-h: 2.25rem;
  --ppe-task-mobile-action-radius: var(--ppe-action-btn-radius, 50%);
  display: flex !important;
  flex-direction: row !important;
  flex-wrap: nowrap !important;
  align-items: center !important;
  gap: 0.2rem !important;
  width: auto !important;
  max-width: none !important;
  min-width: 0;
}

.ppe-task-mobile-card .ppe-actions-mobile-icons > form,
.ppe-task-mobile-card .ppe-actions-mobile-icons > .badge,
.ppe-task-mobile-card .ppe-actions-mobile-icons > .btn,
.ppe-task-mobile-card .ppe-actions-mobile-icons > a.btn {
  width: auto !important;
  max-width: none !important;
  flex: 0 0 auto !important;
}

.ppe-task-mobile-card .ppe-actions-mobile-icons .ppe-nearest-task-attachment-source {
  width: auto !important;
  max-width: none !important;
}

.ppe-task-mobile-card .ppe-actions-mobile-icons .btn-group-vertical {
  flex-direction: row !important;
  width: auto !important;
  max-width: none !important;
  gap: 0.2rem;
}

.ppe-task-mobile-card
  .ppe-actions-mobile-icons
  .ppe-nearest-task-attachment-source
  .ppe-stage-photo-upload-inline,
.ppe-task-mobile-card
  .ppe-actions-mobile-icons
  .ppe-nearest-task-attachment-source
  .ppe-stage-photo-upload-mobile,
.ppe-task-mobile-card
  .ppe-actions-mobile-icons
  .ppe-nearest-task-attachment-source
  .ppe-stage-photo-upload-desktop {
  display: inline-flex !important;
  flex-direction: row !important;
  flex-wrap: nowrap !important;
  align-items: center !important;
  gap: 0.2rem !important;
  width: auto !important;
  max-width: none !important;
}

.ppe-task-mobile-card
  .ppe-actions-mobile-icons
  .ppe-nearest-task-attachment-source
  .ppe-stage-photo-upload-inline.btn-group
  > .btn,
.ppe-task-mobile-card
  .ppe-actions-mobile-icons
  .ppe-nearest-task-attachment-source
  .ppe-stage-photo-upload-mobile.btn-group
  > .btn,
.ppe-task-mobile-card
  .ppe-actions-mobile-icons
  .ppe-nearest-task-attachment-source
  .ppe-stage-photo-upload-desktop.btn-group
  > .btn {
  margin-left: 0 !important;
  border-radius: var(--ppe-task-mobile-action-radius) !important;
}

.ppe-task-mobile-card .ppe-task-mobile-done-label.ppe-stage-done-checkbox-label {
  position: static !important;
  width: auto !important;
  min-height: var(--ppe-nearest-task-action-h, 2.25rem) !important;
  height: var(--ppe-nearest-task-action-h, 2.25rem) !important;
  box-sizing: border-box;
  padding: 0 0.15rem !important;
  margin: 0 !important;
  overflow: visible !important;
  clip: auto !important;
  white-space: nowrap;
  border: 0;
  font-size: 0.6875rem;
  line-height: 1.15;
  gap: 0.2rem;
  display: inline-flex !important;
  align-items: center !important;
}

.ppe-task-mobile-card .ppe-task-mobile-done-label .form-check-input {
  width: 1rem;
  height: 1rem;
  margin-top: 0;
  flex-shrink: 0;
}

.ppe-task-mobile-card .ppe-actions-mobile-icons .js-stage-done-mobile-btn,
.ppe-task-mobile-card .ppe-actions-mobile-icons .ppe-nearest-task-open-btn,
.ppe-task-mobile-card
  .ppe-actions-mobile-icons
  .ppe-nearest-task-attachment-source
  .ppe-stage-photo-upload-inline
  > .btn,
.ppe-task-mobile-card
  .ppe-actions-mobile-icons
  .ppe-nearest-task-attachment-source
  .ppe-stage-photo-upload-mobile
  > .btn,
.ppe-task-mobile-card
  .ppe-actions-mobile-icons
  .ppe-nearest-task-attachment-source
  .ppe-stage-photo-upload-desktop
  > .btn,
.ppe-task-mobile-card .ppe-actions-mobile-icons > .ppe-task-mobile-photo-needed-badge {
  box-sizing: border-box !important;
  flex: 0 0 auto !important;
  width: var(--ppe-nearest-task-action-h, 2.25rem) !important;
  min-width: var(--ppe-nearest-task-action-h, 2.25rem) !important;
  max-width: var(--ppe-nearest-task-action-h, 2.25rem) !important;
  height: var(--ppe-nearest-task-action-h, 2.25rem) !important;
  min-height: var(--ppe-nearest-task-action-h, 2.25rem) !important;
  max-height: var(--ppe-nearest-task-action-h, 2.25rem) !important;
  padding: 0 !important;
  margin: 0 !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  line-height: 1 !important;
  white-space: nowrap !important;
  overflow: hidden !important;
  border-radius: var(--ppe-task-mobile-action-radius) !important;
  --bs-btn-padding-y: 0;
  --bs-btn-padding-x: 0;
}

.ppe-task-mobile-card .ppe-actions-mobile-icons .js-stage-done-mobile-btn i,
.ppe-task-mobile-card .ppe-actions-mobile-icons .ppe-nearest-task-open-btn i,
.ppe-task-mobile-card
  .ppe-actions-mobile-icons
  .ppe-nearest-task-attachment-source
  .btn
  i,
.ppe-task-mobile-card .ppe-actions-mobile-icons > .ppe-task-mobile-photo-needed-badge i {
  font-size: 1rem;
  line-height: 1;
  margin: 0;
}

.ppe-task-mobile-card .ppe-actions-mobile-icons .js-stage-done-mobile-btn:focus,
.ppe-task-mobile-card .ppe-actions-mobile-icons .js-stage-done-mobile-btn:focus-visible,
.ppe-task-mobile-card .ppe-actions-mobile-icons .js-stage-done-mobile-btn:active:not(:disabled),
.ppe-task-mobile-card .ppe-actions-mobile-icons .ppe-nearest-task-open-btn:focus,
.ppe-task-mobile-card .ppe-actions-mobile-icons .ppe-nearest-task-open-btn:focus-visible,
.ppe-task-mobile-card .ppe-actions-mobile-icons .ppe-nearest-task-open-btn:active:not(:disabled),
.ppe-task-mobile-card
  .ppe-actions-mobile-icons
  .ppe-nearest-task-attachment-source
  .ppe-stage-photo-upload-inline
  > .btn:focus,
.ppe-task-mobile-card
  .ppe-actions-mobile-icons
  .ppe-nearest-task-attachment-source
  .ppe-stage-photo-upload-inline
  > .btn:focus-visible,
.ppe-task-mobile-card
  .ppe-actions-mobile-icons
  .ppe-nearest-task-attachment-source
  .ppe-stage-photo-upload-inline
  > .btn:active:not(:disabled):not(.disabled),
.ppe-task-mobile-card
  .ppe-actions-mobile-icons
  .ppe-nearest-task-attachment-source
  .ppe-stage-photo-upload-mobile
  > .btn:focus,
.ppe-task-mobile-card
  .ppe-actions-mobile-icons
  .ppe-nearest-task-attachment-source
  .ppe-stage-photo-upload-mobile
  > .btn:focus-visible,
.ppe-task-mobile-card
  .ppe-actions-mobile-icons
  .ppe-nearest-task-attachment-source
  .ppe-stage-photo-upload-mobile
  > .btn:active:not(:disabled):not(.disabled),
.ppe-task-mobile-card
  .ppe-actions-mobile-icons
  .ppe-nearest-task-attachment-source
  .ppe-stage-photo-upload-desktop
  > .btn:focus,
.ppe-task-mobile-card
  .ppe-actions-mobile-icons
  .ppe-nearest-task-attachment-source
  .ppe-stage-photo-upload-desktop
  > .btn:focus-visible,
.ppe-task-mobile-card
  .ppe-actions-mobile-icons
  .ppe-nearest-task-attachment-source
  .ppe-stage-photo-upload-desktop
  > .btn:active:not(:disabled):not(.disabled) {
  padding: 0 !important;
  width: var(--ppe-nearest-task-action-h, 2.25rem) !important;
  min-width: var(--ppe-nearest-task-action-h, 2.25rem) !important;
  max-width: var(--ppe-nearest-task-action-h, 2.25rem) !important;
  height: var(--ppe-nearest-task-action-h, 2.25rem) !important;
  min-height: var(--ppe-nearest-task-action-h, 2.25rem) !important;
  max-height: var(--ppe-nearest-task-action-h, 2.25rem) !important;
}

.ppe-main .ppe-task-mobile-card .ppe-actions-mobile-icons .btn.ppe-btn-icon:focus,
.ppe-task-mobile-card .ppe-actions-mobile-icons .btn.ppe-btn-icon:focus,
.ppe-task-mobile-card .ppe-actions-mobile-icons .btn.ppe-btn-icon:focus-visible,
.ppe-task-mobile-card .ppe-actions-mobile-icons .btn.ppe-btn-icon:active:not(:disabled):not(.disabled) {
  padding: 0 !important;
}

.ppe-nearest-tasks-table td.ppe-actions-cell .ppe-nearest-task-actions-stack,
.ppe-nearest-tasks-mobile .ppe-nearest-task-actions-stack {
  overflow: visible;
}

/* Table/list action toolbar: one horizontal row on lg+; compact column stack below lg */
.ppe-table-actions {
  --ppe-nearest-task-action-gap: 0.25rem;
  display: inline-flex;
  flex-wrap: nowrap;
  align-items: center;
  gap: var(--ppe-nearest-task-action-gap);
  max-width: 100%;
  min-width: 0;
}

/* Flex toolbar (compact_actions): отдельные icon-кнопки — круг; вложенный btn-group — pill-цепочка */
.ppe-table-actions .ppe-icon-btn-toolbar-inner > .btn,
.ppe-table-actions .ppe-icon-btn-toolbar-inner > form > .btn,
.ppe-table-actions .ppe-icon-btn-toolbar-inner > a.btn {
  margin-left: 0 !important;
}

.ppe-table-actions .ppe-icon-btn-toolbar-inner .btn-group > .btn,
.ppe-table-actions .ppe-icon-btn-toolbar-inner .btn-group-vertical > .btn {
  margin-left: 0 !important;
}

/* compact_actions: квадратные кнопки не растягивать на всю ячейку (< lg) */
@media (max-width: 991.98px) {
  .ppe-table-compact td.ppe-actions-cell .ppe-icon-btn-toolbar-inner > form,
  .ppe-table-compact td.ppe-actions-cell .ppe-icon-btn-toolbar-inner > .btn,
  .ppe-table-compact td.ppe-actions-cell .ppe-icon-btn-toolbar-inner > a.btn,
  .ppe-main .table td.ppe-actions-cell .ppe-icon-btn-toolbar-inner > form,
  .ppe-main .table td.ppe-actions-cell .ppe-icon-btn-toolbar-inner > .btn,
  .ppe-main .table td.ppe-actions-cell .ppe-icon-btn-toolbar-inner > a.btn {
    width: auto !important;
    max-width: none !important;
  }

  .ppe-table-compact td.ppe-actions-cell .ppe-icon-btn-toolbar-inner,
  .ppe-main .table td.ppe-actions-cell .ppe-icon-btn-toolbar-inner {
    flex-direction: column !important;
    flex-wrap: nowrap !important;
    align-items: center !important;
    width: auto !important;
    max-width: 100% !important;
  }
}

@media (max-width: 991.98px) {
  .ppe-main .table td.ppe-actions-cell > .ppe-nearest-task-actions-stack,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions {
    display: flex !important;
    flex-direction: column !important;
    flex-wrap: nowrap !important;
    align-items: center !important;
    white-space: normal !important;
    max-width: 100%;
  }

  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack .btn-group,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack .btn-group-vertical,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .btn-group,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .btn-group-vertical,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-icon-btn-toolbar-inner {
    flex-direction: column !important;
    flex-wrap: nowrap !important;
    align-items: stretch !important;
    width: 100% !important;
    max-width: 100% !important;
  }

  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack > form,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack > .badge,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack > .btn,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack > a.btn,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions > form,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions > .badge,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions > .btn,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions > a.btn {
    width: 100%;
    max-width: 100%;
  }

  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack .ppe-nearest-task-attachment-source,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-attachment-source {
    overflow: visible;
    width: 100%;
    max-width: 100%;
  }

  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-inline,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-mobile,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-desktop,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-inline,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-mobile,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-desktop {
    display: flex !important;
    flex-direction: column !important;
    flex-wrap: nowrap !important;
    align-items: stretch !important;
    gap: var(--ppe-nearest-task-action-gap) !important;
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
  }

  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-inline.btn-group > .btn,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-mobile.btn-group > .btn,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-desktop.btn-group > .btn,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-inline.btn-group > .btn,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-mobile.btn-group > .btn,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-desktop.btn-group > .btn {
    margin-left: 0 !important;
    border-radius: var(--bs-border-radius-sm) !important;
    float: none !important;
    width: 100% !important;
    min-width: 0 !important;
    max-width: none !important;
  }

  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack .ppe-nearest-task-attachment-source .ppe-att-btn-text,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-attachment-source .ppe-att-btn-text {
    display: none !important;
  }

  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-inline > .btn,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-mobile > .btn,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-desktop > .btn,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack .ppe-nearest-task-open-btn,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-inline > .btn,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-mobile > .btn,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-desktop > .btn,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-open-btn {
    box-sizing: border-box !important;
    flex: 0 0 auto !important;
    width: 100% !important;
    min-width: 0 !important;
    max-width: 100% !important;
    height: var(--ppe-nearest-task-action-h, 2.25rem) !important;
    min-height: var(--ppe-nearest-task-action-h, 2.25rem) !important;
    max-height: var(--ppe-nearest-task-action-h, 2.25rem) !important;
    padding: 0 !important;
    margin: 0 !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    line-height: 1 !important;
    white-space: nowrap !important;
    overflow: hidden !important;
    --bs-btn-padding-y: 0;
    --bs-btn-padding-x: 0;
  }

  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-inline > .btn:focus,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-inline > .btn:focus-visible,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-inline > .btn:active:not(:disabled):not(.disabled),
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack .ppe-nearest-task-open-btn:focus,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack .ppe-nearest-task-open-btn:focus-visible,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack .ppe-nearest-task-open-btn:active:not(:disabled),
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-inline > .btn:focus,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-inline > .btn:focus-visible,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-inline > .btn:active:not(:disabled):not(.disabled),
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-open-btn:focus,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-open-btn:focus-visible,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-open-btn:active:not(:disabled) {
    padding: 0 !important;
    height: var(--ppe-nearest-task-action-h, 2.25rem) !important;
    min-height: var(--ppe-nearest-task-action-h, 2.25rem) !important;
    max-height: var(--ppe-nearest-task-action-h, 2.25rem) !important;
  }

  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack .ppe-nearest-task-attachment-source .ms-1,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-attachment-source .ms-1 {
    margin-left: 0 !important;
  }

  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack .ppe-nearest-task-attachment-source .ppe-visually-hidden-file-input,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-attachment-source .ppe-visually-hidden-file-input {
    left: -9999px !important;
    opacity: 0 !important;
  }
}

@media (min-width: 1200px) {
  /* Home / tasks desktop tables: scroll inside card (sidebar + navbar search eat width) */
  .ppe-nearest-tasks-desktop .ppe-nearest-tasks-table.table-responsive,
  .ppe-home-sessions-desktop .ppe-home-sessions-table.table-responsive {
    overflow-x: auto !important;
    max-width: 100%;
    min-width: 0;
    -webkit-overflow-scrolling: touch;
  }

  .ppe-nearest-tasks-desktop .ppe-nearest-tasks-table.table-responsive > table.ppe-table-compact,
  .ppe-home-sessions-desktop .ppe-home-sessions-table.table-responsive > table.ppe-table-compact {
    /* colgroup min-width sum (incl. «Код ППЭ» + «Действия») */
    min-width: 51rem;
    width: max(100%, 51rem);
  }

  /* Wide viewport: desktop «Ближайшие задачи» table */
  .ppe-nearest-tasks-desktop .ppe-nearest-tasks-table table.ppe-table-compact {
    table-layout: auto;
  }

  .ppe-nearest-tasks-desktop .ppe-nearest-tasks-table table.ppe-table-compact th,
  .ppe-nearest-tasks-desktop .ppe-nearest-tasks-table table.ppe-table-compact td {
    max-width: none;
    overflow: visible;
  }

  .ppe-nearest-tasks-desktop .ppe-nearest-tasks-table table.ppe-table-compact td {
    white-space: normal;
    min-width: 0;
  }

  .ppe-nearest-tasks-desktop .ppe-nearest-tasks-table table.ppe-table-compact td.ppe-actions-cell {
    white-space: normal !important;
    overflow: visible;
    vertical-align: top;
  }

  .ppe-nearest-tasks-desktop .ppe-nearest-tasks-table table.ppe-table-uniform-pad .ppe-nearest-task-exam-date {
    white-space: normal;
    overflow: visible;
    text-overflow: unset;
  }

  .ppe-nearest-tasks-desktop .ppe-nearest-tasks-table table.ppe-table-compact td[data-label="Статус"] .badge:not(.ppe-badge-wrap) {
    white-space: normal;
    overflow: visible;
    text-overflow: unset;
  }

  .ppe-nearest-tasks-desktop .ppe-nearest-tasks-table table.ppe-table-compact th.ppe-th-actions,
  .ppe-nearest-tasks-desktop .ppe-nearest-tasks-table table.ppe-table-compact td.ppe-actions-cell {
    white-space: nowrap !important;
    overflow: visible;
    overflow-wrap: normal;
    word-break: normal;
    max-width: none;
    min-width: 9.5rem;
    width: auto;
    vertical-align: middle;
  }

  .ppe-nearest-tasks-desktop
    .ppe-nearest-tasks-table
    table.ppe-table-compact
    td.ppe-actions-cell
    .badge:not(.ppe-badge-wrap) {
    white-space: normal;
    overflow: visible;
    text-overflow: unset;
    max-width: 100%;
  }

  .ppe-nearest-tasks-desktop
    .ppe-nearest-tasks-table
    table.ppe-table-compact
    td.ppe-actions-cell
    .ppe-nearest-task-actions-stack
    .ppe-stage-done-checkbox-label {
    white-space: normal;
  }
}

@media (min-width: 992px) {
  .ppe-sessions-filters .row {
    align-items: flex-end;
  }

  .ppe-sessions-filters .ppe-sessions-filters-actions .btn,
  .ppe-sessions-filters .ppe-sessions-filters-actions a.btn {
    width: auto;
    min-height: 0;
  }
}

/* Пара переключателей в фильтрах списка экзаменов / ГИА */
.ppe-session-list-filter-switches .form-check.form-switch {
  margin-bottom: 0;
}

.ppe-subject-list-gia-toggles .btn {
  min-width: 3.25rem;
}

/* Компактная полоска «Скрыть сторонние ППЭ» (tasks, calendar) */
.ppe-hide-external-toolbar {
  display: flex;
  align-items: center;
  flex-wrap: nowrap;
  gap: 0.5rem;
  margin-bottom: 1rem;
  padding: 0.35rem 0.75rem;
  min-height: 0;
  border: 1px solid var(--bs-border-color-translucent, rgba(0, 0, 0, 0.1));
  border-radius: var(--bs-border-radius, 0.375rem);
  background-color: var(--bs-body-bg, #fff);
}

.ppe-exam-calendar-toolbar .ppe-hide-external-toolbar {
  margin-bottom: 0;
}

.ppe-hide-external-toolbar .form-check.form-switch {
  margin-bottom: 0;
}

@media (max-width: 575.98px) {
  .ppe-hide-external-toolbar {
    padding: 0.3rem 0.65rem;
  }

  .ppe-exam-calendar-toolbar form {
    width: 100%;
  }

  .ppe-nearest-tasks-table .ppe-col-building {
    display: none;
  }

  .ppe-mobile-filters .collapse:not(.show) {
    display: none;
  }

  .ppe-sessions-table-container .table-responsive,
  .ppe-nearest-tasks-table.table-responsive {
    overflow-x: visible;
  }

}

@media (min-width: 576px) {
  .ppe-actions-cell .ppe-actions-mobile {
    display: none !important;
  }
}

/* Sticky form actions on long mobile forms */
@media (max-width: 991.98px) {
  .ppe-form-actions-sticky {
    position: sticky;
    bottom: 0;
    z-index: 1015;
    margin: 1rem -0.75rem calc(-0.5rem - var(--ppe-safe-bottom));
    padding: 0.75rem 0.75rem calc(0.75rem + var(--ppe-safe-bottom));
    background: var(--bs-body-bg);
    border-top: 1px solid var(--bs-border-color);
    box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.06);
  }

  .ppe-form-actions-sticky .btn {
    min-height: 2.75rem;
  }

  .ppe-form-actions-sticky.d-grid {
    gap: 0.5rem;
  }
}

/* Session stages: wizard mode (narrow screens) */
.ppe-stages-view-toggle {
  display: none;
}

@media (max-width: 991.98px) {
  .ppe-stages-view-toggle {
    display: flex;
  }

  html.ppe-stages-view-wizard .ppe-stages-table-wrap {
    display: none !important;
  }

  /* session_update: нет wizard-fallback — таблица этапов всегда видна */
  html.ppe-stages-view-wizard #session-update-stages .ppe-stages-table-wrap {
    display: block !important;
  }

  /* session_update: компактная таблица этапов (название + действия) */
  .ppe-stages-manage-compact table.stages-table {
    table-layout: fixed;
    width: 100%;
    min-width: 0;
  }

  .ppe-stages-manage-compact table.stages-table th.st-col-stage,
  .ppe-stages-manage-compact table.stages-table td.ppe-stage-title-cell {
    width: auto;
    max-width: none;
    min-width: 0;
  }

  .ppe-stages-manage-compact table.stages-table .ppe-stage-title {
    display: block;
    -webkit-line-clamp: 2;
    line-clamp: 2;
    overflow: hidden;
  }

  .ppe-stages-manage-compact table.stages-table td.ppe-stage-actions-cell .btn {
    padding-left: 0.45rem;
    padding-right: 0.45rem;
  }

  @media (max-width: 991.98px) {
    .ppe-stages-manage-compact .stages-scroll {
      overflow-x: visible;
    }

    .ppe-stages-manage-compact table.stages-table tbody tr.ppe-stage-manage-row {
      display: grid;
      grid-template-columns: minmax(0, 1fr) auto;
      align-items: center;
      gap: 0.35rem 0.5rem;
    }

    .ppe-stages-manage-compact table.stages-table tbody tr.ppe-stage-manage-row > td {
      display: block;
      border: 0 !important;
      padding-top: 0.35rem;
      padding-bottom: 0.35rem;
    }

    .ppe-stages-manage-compact table.stages-table tbody tr.ppe-stage-manage-row > td::before {
      display: none;
    }

    .ppe-stages-manage-compact table.stages-table .ppe-stage-title {
      -webkit-line-clamp: unset;
      line-clamp: unset;
      overflow: visible;
    }
  }

  html:not(.ppe-stages-view-wizard) .ppe-stages-wizard-panel {
    display: none !important;
  }
}

.ppe-stages-wizard-panel .ppe-wizard-card {
  border: 1px solid var(--bs-border-color);
  border-radius: 0.5rem;
  padding: 1rem;
  margin-bottom: 0.75rem;
}

.ppe-stages-wizard-panel .ppe-wizard-progress {
  font-size: 0.875rem;
  color: var(--bs-secondary-color);
}

.ppe-stages-wizard-panel .ppe-wizard-nav {
  padding-bottom: var(--ppe-safe-bottom);
}

.ppe-stages-wizard-panel .ppe-wizard-nav .btn {
  min-height: 2.75rem;
}

.ppe-perm-matrix-mobile .perm-mobile-row.d-none {
  display: none !important;
}

.ppe-perm-matrix-mobile .form-switch .form-check-input {
  width: 2.5em;
  height: 1.35em;
}

.ppe-audit-table.ppe-table-mobile-cards tbody td details {
  text-align: center;
  width: 100%;
}

.ppe-audit-table.ppe-table-mobile-cards tbody td details summary {
  cursor: pointer;
  color: var(--bs-primary);
  font-size: 0.875rem;
}

.ppe-technician-today-item .btn {
  min-height: 2.75rem;
}

/* === Page: exam_session_calendar === */
.ppe-exam-calendar .ppe-day-cell--holiday,
.ppe-exam-calendar .ppe-calendar-day--holiday {
  background: #ffe7e7;
  border: 1px solid rgba(220, 53, 69, 0.25);
}

.ppe-exam-calendar .ppe-day-cell--today.ppe-day-cell--holiday,
.ppe-exam-calendar .ppe-day-cell--selected.ppe-day-cell--holiday {
  background: linear-gradient(
    135deg,
    #ffe7e7 0%,
    #ffe7e7 55%,
    rgba(13, 110, 253, 0.12) 55%,
    rgba(13, 110, 253, 0.12) 100%
  );
}

.ppe-exam-calendar .ppe-day-cell--selected.ppe-day-cell--holiday {
  background: linear-gradient(
    135deg,
    #ffe7e7 0%,
    #ffe7e7 55%,
    rgba(111, 66, 193, 0.12) 55%,
    rgba(111, 66, 193, 0.12) 100%
  );
}

.ppe-exam-calendar .ppe-day-cell--today {
  background: rgba(13, 110, 253, 0.12);
  border: 1px solid rgba(13, 110, 253, 0.35);
}

.ppe-exam-calendar .ppe-day-cell--selected {
  background: rgba(111, 66, 193, 0.12);
  border: 1px solid rgba(111, 66, 193, 0.35);
}

.ppe-exam-calendar .ppe-day-cell--has-events .ppe-day-number {
  font-weight: 600;
}

.ppe-exam-calendar-toolbar > form {
  margin-bottom: 0;
}

@media (max-width: 991.98px) {
  .ppe-exam-calendar-toolbar {
    flex-direction: column;
    align-items: stretch !important;
  }

  .ppe-exam-calendar-toolbar > .btn-group,
  .ppe-exam-calendar-toolbar > form,
  .ppe-exam-calendar-toolbar > .d-flex {
    width: 100%;
    max-width: 100%;
  }

  .ppe-exam-calendar-toolbar .form-check {
    min-height: var(--ppe-btn-height-touch, 2.75rem);
    display: flex;
    align-items: center;
    padding-top: 0.15rem;
    padding-bottom: 0.15rem;
  }
}

.ppe-exam-calendar-weekstrip-inner {
  display: flex;
  gap: 4px;
  overflow-x: auto;
  padding-bottom: 2px;
  -webkit-overflow-scrolling: touch;
}

.ppe-exam-calendar-weekstrip-day {
  flex: 1 0 2.75rem;
  min-width: 2.75rem;
  text-align: center;
  text-decoration: none;
  color: inherit;
  border: 1px solid var(--bs-border-color);
  border-radius: 0.5rem;
  padding: 0.35rem 0.15rem;
  background: var(--bs-body-bg);
}

.ppe-exam-calendar-weekstrip-day.is-today {
  border-color: rgba(13, 110, 253, 0.45);
}

.ppe-exam-calendar-weekstrip-day.is-selected {
  background: rgba(111, 66, 193, 0.1);
  border-color: rgba(111, 66, 193, 0.45);
}

.ppe-exam-calendar-weekstrip-wd {
  display: block;
  font-size: 0.65rem;
  color: var(--bs-secondary-color);
  line-height: 1.1;
}

.ppe-exam-calendar-weekstrip-num {
  display: block;
  font-size: 0.9rem;
  font-weight: 600;
  line-height: 1.2;
}

.ppe-exam-calendar-weekstrip-dot {
  display: block;
  width: 6px;
  height: 6px;
  margin: 2px auto 0;
  border-radius: 999px;
  background: #6f42c1;
}

@media (max-width: 390px) {
  .ppe-exam-calendar .ppe-month-table th {
    font-size: 0.65rem;
    padding: 1px 0;
  }

  .ppe-exam-calendar .ppe-day-cell {
    height: 2.35rem;
  }

  .ppe-exam-calendar .ppe-day-number {
    font-size: 0.7rem;
  }

  .ppe-exam-calendar .ppe-day-marker {
    width: 4px;
    height: 4px;
  }
}

.ppe-exam-calendar-day-list .list-group-item:last-child {
  border-bottom: 0 !important;
}

/* === Page: tech_building_detail === */
@media (max-width: 575.98px) {
  table.ppe-tech-building-table.ppe-table-mobile-cards tbody td[data-label="Кол-во"] .form-control,
  table.ppe-tech-building-table.ppe-table-mobile-cards tbody td[data-label="Примечание"] .form-control {
    width: 100%;
    max-width: none;
  }

  table.ppe-tech-building-table.ppe-table-mobile-cards tbody td[data-label="Кол-во"] {
    max-width: 8rem;
  }
}

/* === Session detail: exam assignees (#exam-assignees) === */
.ppe-main table.ppe-exam-assignees-table.ppe-table-center th,
.ppe-main table.ppe-exam-assignees-table.ppe-table-center td,
.ppe-main table.ppe-gia-external-assignees-table.ppe-table-center th,
.ppe-main table.ppe-gia-external-assignees-table.ppe-table-center td {
  text-align: center;
  vertical-align: middle;
}

.ppe-main table.ppe-exam-assignees-table.ppe-table-center .ppe-exam-assignee-position-cell,
.ppe-main table.ppe-gia-external-assignees-table.ppe-table-center .ppe-exam-assignee-position-cell {
  justify-content: center;
}

.ppe-exam-assignee-position-cell {
  display: inline-flex;
  flex-direction: row;
  flex-wrap: nowrap;
  align-items: center;
  gap: 0.35rem 0.5rem;
  min-width: 0;
  max-width: 100%;
}

.ppe-exam-assignee-position-label {
  flex-shrink: 0;
  white-space: nowrap;
}

.ppe-exam-assignee-responsible-inline {
  display: inline-flex;
  flex-wrap: nowrap;
  align-items: center;
  flex-shrink: 0;
  margin-bottom: 0;
  white-space: nowrap;
  gap: 0.25rem;
}

.ppe-exam-assignees-table .ppe-exam-assignee-responsible-inline .form-check-input,
.exam-assignee-row .ppe-exam-assignee-responsible-inline .form-check-input {
  margin-top: 0;
  flex-shrink: 0;
}

.ppe-exam-assignee-role-responsible-inline {
  display: inline-flex;
  flex-wrap: nowrap;
  align-items: center;
  gap: 0.5rem;
  flex-shrink: 0;
}

@media (max-width: 991.98px) {
  table.ppe-exam-assignees-table.ppe-table-mobile-cards tbody td[data-label="Должность"] > .ppe-exam-assignee-position-cell,
  table.ppe-gia-external-assignees-table.ppe-table-mobile-cards tbody td[data-label="Должность в ППЭ"] > .ppe-exam-assignee-position-cell {
    display: inline-flex !important;
    flex-direction: row;
    flex-wrap: nowrap;
    align-items: center;
    width: auto;
    max-width: 100%;
  }
}

@media (max-width: 359.98px) {
  .ppe-exam-assignee-position-cell,
  .ppe-exam-assignee-role-responsible-inline,
  .exam-assignee-row.ppe-exam-assignee-manual-row {
    flex-wrap: wrap;
  }
}

/* === Session detail: exam equipment (#exam-equipment) === */
@media (max-width: 991.98px) {
  table.ppe-exam-equipment-table.ppe-table-mobile-cards tbody td[data-label="Тип техники"] .form-select,
  table.ppe-exam-equipment-table.ppe-table-mobile-cards tbody td[data-label="Тип"] .form-select {
    display: block;
    width: 100%;
    max-width: none;
  }

  table.ppe-exam-equipment-table.ppe-table-mobile-cards tbody td[data-label="Кол-во"] .form-control {
    display: block;
    width: 100%;
    max-width: 8rem;
    margin-left: 0;
  }

  table.ppe-exam-equipment-table.ppe-table-mobile-cards tbody td[data-label="Удалить"] {
    text-align: center;
  }

  table.ppe-exam-equipment-table.ppe-table-mobile-cards tbody td[data-label="Удалить"]::before {
    content: attr(data-label);
  }

  /* Session detail: нехватка техники (#exam-equipment-shortage) */
  table.ppe-exam-shortage-table.ppe-table-mobile-cards tbody td[data-label="Код ППЭ"] .form-select,
  table.ppe-exam-shortage-table.ppe-table-mobile-cards tbody td[data-label="Тип техники"] .form-select,
  table.ppe-exam-shortage-table.ppe-table-mobile-cards tbody td[data-label="Тип"] .form-select {
    display: block;
    width: 100%;
    max-width: none;
  }

  table.ppe-exam-shortage-table.ppe-table-mobile-cards tbody td[data-label="Не хватает"] .form-control {
    display: block;
    width: 100%;
    max-width: 8rem;
    margin-left: 0;
  }

  table.ppe-exam-shortage-table.ppe-table-mobile-cards tbody td[data-label="Удалить"] {
    text-align: center;
  }

  table.ppe-exam-shortage-table.ppe-table-mobile-cards tbody td[data-label="Удалить"]::before {
    content: attr(data-label);
  }
}

/* === Simplified mobile (real phone ≤991px + device preview) === */
.ppe-mobile-desktop-only-hint {
  display: none;
}

html.ppe-mobile-simplified body {
  max-width: 100%;
}

html.ppe-mobile-simplified .ppe-layout,
html.ppe-mobile-simplified .ppe-main,
html.ppe-mobile-simplified .ppe-content {
  max-width: 100%;
  overflow-x: hidden;
}

html.ppe-device-preview.ppe-mobile-simplified .ppe-device-preview-chrome {
  width: var(--ppe-device-preview-width);
  max-width: var(--ppe-device-preview-width);
  overflow-x: hidden;
}

html.ppe-mobile-simplified .ppe-nav-desktop-only {
  display: none !important;
}

/* Мобильное меню: у админов — блок «Администрирование»; у техника — скрыт. */
html.ppe-mobile-simplified .ppe-nav-mobile-admin {
  display: block !important;
}

html.ppe-mobile-simplified .ppe-nav-admin-title-desktop {
  display: none !important;
}

html.ppe-mobile-simplified .ppe-nav-admin-title-mobile {
  display: block !important;
}

html:not(.ppe-mobile-simplified) .ppe-nav-admin-title-mobile {
  display: none !important;
}

/* Только десктоп: полная таблица матрицы, массовые опасные действия */
html.ppe-mobile-simplified .ppe-admin-desktop-only {
  display: none !important;
}

/* Мобильные блоки редактирования (formset, цвета) — скрыты на широком экране */
html:not(.ppe-mobile-simplified) .ppe-admin-heavy-edit-mobile {
  display: none !important;
}

html.ppe-mobile-simplified .ppe-mobile-desktop-only-hint {
  display: block;
}

html.ppe-mobile-simplified .table-responsive:not(.ppe-allow-h-scroll),
html.ppe-mobile-simplified .stages-scroll,
html.ppe-mobile-simplified .ppe-sessions-table-container .table-responsive,
html.ppe-mobile-simplified .ppe-perm-matrix-scroll-hint {
  overflow-x: visible !important;
}

html.ppe-mobile-simplified .ppe-sessions-table,
html.ppe-mobile-simplified table.stages-table {
  min-width: 0 !important;
}

html.ppe-mobile-simplified .ppe-stages-view-toggle {
  display: none !important;
}

html.ppe-mobile-simplified .ppe-stages-table-wrap {
  display: none !important;
}

/* session_update: нет wizard-fallback — таблица этапов всегда видна */
html.ppe-mobile-simplified #session-update-stages .ppe-stages-table-wrap {
  display: block !important;
}

html.ppe-mobile-simplified .ppe-stages-wizard-panel {
  display: block !important;
}

html.ppe-mobile-simplified .ppe-stages-wizard-panel[hidden] {
  display: block !important;
  visibility: visible;
}

html.ppe-mobile-simplified .ppe-exam-calendar-weekstrip-inner {
  overflow-x: visible;
  flex-wrap: wrap;
  justify-content: space-between;
}

html.ppe-mobile-simplified .ppe-exam-calendar .ppe-month-table {
  width: 100%;
  table-layout: fixed;
}

html.ppe-mobile-simplified .ppe-scroll-hint--mobile {
  display: none !important;
}

/* Массовое редактирование предметов в скрытой desktop-таблице */
html.ppe-mobile-simplified .ppe-list-desktop .subjects-table input,
html.ppe-mobile-simplified .ppe-list-desktop .subjects-table select,
html.ppe-mobile-simplified .ppe-list-desktop .subjects-table textarea {
  pointer-events: none;
  border-color: transparent;
  background: transparent;
  padding-left: 0;
  padding-right: 0;
}

html.ppe-mobile-simplified .ppe-list-desktop .subjects-table input[type="checkbox"] {
  opacity: 0.65;
}

/* Админ-формы на телефоне: колонки в столбик */
@media (max-width: 991.98px) {
  html.ppe-mobile-simplified .ppe-form-mobile-stack .row > [class*="col-"],
  html.ppe-mobile-simplified form.ppe-form-mobile-stack .row > [class*="col-"] {
    flex: 0 0 100%;
    max-width: 100%;
  }

  html.ppe-mobile-simplified .ppe-form-mobile-stack .input-group {
    flex-wrap: wrap;
  }

  html.ppe-mobile-simplified .ppe-form-mobile-stack .input-group > .form-control {
    flex: 1 1 100%;
    min-width: 0;
  }

  html.ppe-mobile-simplified .ppe-form-mobile-stack .input-group > .btn {
    flex: 1 1 auto;
    width: 100%;
    margin-top: 0.35rem;
  }

  html.ppe-mobile-simplified .ppe-admin-heavy-edit-mobile .form-control,
  html.ppe-mobile-simplified .ppe-admin-heavy-edit-mobile .form-select {
    max-width: 100%;
  }

  html.ppe-mobile-simplified .ppe-colors-mobile-edit .form-control-color {
    width: 3rem;
    height: 2.5rem;
    padding: 0.15rem;
  }

  html.ppe-mobile-simplified .ppe-colors-readonly-cards,
  html.ppe-mobile-simplified .ppe-equipment-types-readonly-cards {
    display: none !important;
  }
}

/* === Mobile list/detail: compact cards vs desktop tables === */
.ppe-mobile-list-compact .ppe-mobile-list-title {
  line-height: 1.35;
  word-break: break-word;
  overflow-wrap: break-word;
  min-width: 0;
}

/* PPE building picker (Кабинеты / Техника index) */
.ppe-building-picker-grid {
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 11.5rem), 1fr));
}

@media (min-width: 576px) {
  .ppe-building-picker-grid {
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 13rem), 1fr));
  }
}

.ppe-building-picker-tile {
  display: block;
  border: 1px solid var(--bs-border-color-translucent, rgba(0, 0, 0, 0.08));
  transition: box-shadow 0.15s ease, transform 0.15s ease;
}

.ppe-building-picker-tile:hover,
.ppe-building-picker-tile:focus-visible {
  box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.12);
}

.ppe-building-picker-tile .card-body {
  padding: 0.85rem 1rem !important;
  display: flex;
  flex-direction: column;
  gap: 0.35rem;
  min-height: 7.5rem;
}

.ppe-building-picker-tile__head {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 0.35rem;
}

.ppe-building-picker-tile__title {
  font-size: 1rem;
  font-weight: 600;
  line-height: 1.3;
  margin: 0;
  overflow-wrap: break-word;
  word-break: break-word;
}

.ppe-building-picker-tile__meta,
.ppe-building-picker-tile__hint {
  overflow-wrap: break-word;
  word-break: break-word;
}

.ppe-building-picker-tile__hint {
  margin-top: auto;
  padding-top: 0.15rem;
}

/* List card grids: ≤576 phone 1 col; 577–991 tablet 2 col; 992–1199 auto-fill (cards mode) */
.ppe-list-cards-grid {
  display: grid;
  gap: 0.5rem;
  grid-template-columns: 1fr;
  width: 100%;
  max-width: 100%;
  min-width: 0;
  box-sizing: border-box;
}

.ppe-list-mobile,
.ppe-nearest-tasks-mobile,
.ppe-home-sessions-mobile,
.ppe-sessions-mobile {
  container-type: inline-size;
  container-name: ppe-list-cards-wrap;
}

@container ppe-list-cards-wrap (max-width: 399.98px) {
  .ppe-list-cards-grid {
    grid-template-columns: 1fr !important;
  }
}

.ppe-list-cards-grid > .card,
.ppe-list-cards-grid > article,
.ppe-list-cards-grid > p {
  width: 100%;
  min-width: 0;
  max-width: 100%;
  box-sizing: border-box;
  overflow: visible;
}

.ppe-list-cards-grid .card-body {
  min-width: 0;
  box-sizing: border-box;
  overflow: visible;
}

.ppe-list-cards-grid .card-body > .d-flex.align-items-start,
.ppe-list-cards-grid .card-body > .ppe-mobile-list-card-header {
  min-width: 0;
}

.ppe-list-cards-grid .card-body > .d-flex.align-items-start > .flex-grow-1,
.ppe-list-cards-grid .card-body > .d-flex.align-items-start > .min-w-0,
.ppe-list-cards-grid .card-body > .ppe-mobile-list-card-header > .ppe-mobile-list-card-heading {
  flex: 1 1 auto;
  min-width: 0;
  overflow-wrap: break-word;
  word-break: break-word;
}

.ppe-list-cards-grid .ppe-mobile-list-title {
  overflow-wrap: break-word;
  word-break: break-word;
  min-width: 0;
  text-align: left;
}

/* Home/nearest task tiles: no fill — star/pattern shows through; border only. */
.ppe-main #today-tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card,
.ppe-main #today-tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card,
.ppe-main #tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card,
.ppe-main #tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card,
.ppe-main #sessions .ppe-list-cards-grid > .ppe-session-mobile-card.card,
.ppe-main #sessions .ppe-list-cards-grid > article.ppe-session-mobile-card.card,
.ppe-list-cards-grid > article.ppe-task-mobile-card.card,
.ppe-list-cards-grid > .ppe-task-mobile-card.card {
  --bs-card-bg: transparent;
  background-color: transparent !important;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  border: 1px solid var(--ppe-surface-border-translucent, rgba(0, 0, 0, 0.14));
  box-shadow: none !important;
}

.ppe-main #today-tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
.ppe-main #today-tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
.ppe-main #tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
.ppe-main #tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
.ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
.ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger) {
  background-color: transparent !important;
}

.ppe-main #today-tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building.table-danger,
.ppe-main #today-tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building.table-danger,
.ppe-main #tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building.table-danger,
.ppe-main #tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building.table-danger,
.ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building.table-danger,
.ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building.table-danger {
  background-color: color-mix(
    in srgb,
    var(--bs-danger) 15%,
    transparent
  ) !important;
  border-left: 3px solid var(--bs-danger);
}

/* Row tint from inline {% ppe_row_style %} on card/article wrapper (home: transparent) */
.ppe-main #today-tasks .ppe-list-cards-grid > .card.ppe-row-building:not(.table-danger):not(.ppe-task-mobile-card),
.ppe-main #today-tasks .ppe-list-cards-grid > article.ppe-row-building:not(.table-danger):not(.ppe-task-mobile-card),
.ppe-main #tasks .ppe-list-cards-grid > .card.ppe-row-building:not(.table-danger):not(.ppe-task-mobile-card),
.ppe-main #tasks .ppe-list-cards-grid > article.ppe-row-building:not(.table-danger):not(.ppe-task-mobile-card),
.ppe-main #sessions .ppe-list-cards-grid > .card.ppe-row-building:not(.table-danger):not(.ppe-task-mobile-card),
.ppe-main #sessions .ppe-list-cards-grid > article.ppe-row-building:not(.table-danger):not(.ppe-task-mobile-card) {
  --bs-card-bg: transparent;
  background-color: transparent !important;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}

.ppe-main #today-tasks .ppe-list-cards-grid > .card.ppe-row-building.table-danger:not(.ppe-task-mobile-card),
.ppe-main #today-tasks .ppe-list-cards-grid > article.ppe-row-building.table-danger:not(.ppe-task-mobile-card),
.ppe-main #tasks .ppe-list-cards-grid > .card.ppe-row-building.table-danger:not(.ppe-task-mobile-card),
.ppe-main #tasks .ppe-list-cards-grid > article.ppe-row-building.table-danger:not(.ppe-task-mobile-card),
.ppe-main #sessions .ppe-list-cards-grid > .card.ppe-row-building.table-danger:not(.ppe-task-mobile-card),
.ppe-main #sessions .ppe-list-cards-grid > article.ppe-row-building.table-danger:not(.ppe-task-mobile-card) {
  --bs-card-bg: transparent;
  background-color: color-mix(
    in srgb,
    var(--bs-danger) 15%,
    transparent
  ) !important;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  border-left: 3px solid var(--bs-danger);
}

.ppe-list-cards-grid > .ppe-task-mobile-card.card > .card-body,
.ppe-list-cards-grid > article.ppe-task-mobile-card.card > .card-body,
.ppe-list-cards-grid > .card.ppe-row-building:not(.table-danger) > .card-body,
.ppe-list-cards-grid > article.ppe-row-building:not(.table-danger) > .card-body,
.ppe-list-cards-grid > .card.ppe-row-building.table-danger > .card-body,
.ppe-list-cards-grid > article.ppe-row-building.table-danger > .card-body {
  background-color: transparent !important;
}

@media (prefers-reduced-transparency: reduce) {
  .ppe-main #today-tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
  .ppe-main #today-tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
  .ppe-main #tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
  .ppe-main #tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
  .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
  .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
  .ppe-list-cards-grid > .card.ppe-row-building:not(.table-danger):not(.ppe-task-mobile-card),
  .ppe-list-cards-grid > article.ppe-row-building:not(.table-danger):not(.ppe-task-mobile-card) {
    background-color: color-mix(
      in srgb,
      var(--ppe-row-building-bg, var(--ppe-surface-bg, #ffffff)) 72%,
      var(--ppe-surface-bg, #ffffff)
    ) !important;
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
  }

  .ppe-main #today-tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building.table-danger,
  .ppe-main #today-tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building.table-danger,
  .ppe-main #tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building.table-danger,
  .ppe-main #tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building.table-danger,
  .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building.table-danger,
  .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building.table-danger,
  .ppe-list-cards-grid > .card.ppe-row-building.table-danger:not(.ppe-task-mobile-card),
  .ppe-list-cards-grid > article.ppe-row-building.table-danger:not(.ppe-task-mobile-card) {
    background-color: var(
      --bs-danger-bg-subtle,
      rgba(var(--bs-danger-rgb), 0.12)
    ) !important;
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    border-left: 3px solid var(--bs-danger);
  }
}

/*
 * Home blocks — no background fill (v72).
 * Star/pattern on .ppe-main shows through section shells and nested tiles.
 */
.ppe-main #overview.card,
.ppe-main #today-tasks.card,
.ppe-main #tasks.card,
.ppe-main #sessions.card {
  --bs-card-bg: transparent !important;
  background: transparent !important;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  border: 1px solid var(--ppe-surface-border-translucent, rgba(0, 0, 0, 0.14));
  box-shadow: none !important;
}

.ppe-main #overview.card > .card-header,
.ppe-main #today-tasks.card > .card-header,
.ppe-main #tasks.card > .card-header,
.ppe-main #sessions.card > .card-header,
.ppe-main #overview.card [data-ppe-collapse-panel] > .card-body,
.ppe-main #today-tasks.card [data-ppe-collapse-panel] > .card-body,
.ppe-main #tasks.card [data-ppe-collapse-panel] > .card-body,
.ppe-main #sessions.card [data-ppe-collapse-panel] > .card-body {
  background: transparent !important;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}

.ppe-main #overview .ppe-home-overview .ppe-overview-stat,
.ppe-main #overview .ppe-home-overview .col > .card.bg-light {
  --bs-card-bg: transparent !important;
  background: transparent !important;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  border: 1px solid var(--ppe-surface-border-translucent, rgba(0, 0, 0, 0.14)) !important;
  box-shadow: none !important;
}

.ppe-main #overview .ppe-home-overview .ppe-overview-stat .card-body,
.ppe-main #overview .ppe-home-overview .col > .card .card-body {
  background: transparent !important;
}

.ppe-main #overview .ppe-home-overview a.ppe-overview-stat:hover,
.ppe-main #overview .ppe-home-overview a.ppe-overview-stat:focus-visible {
  background-color: transparent !important;
  border-color: var(--ppe-surface-border, #c2c9d3) !important;
  box-shadow: none;
}

#today-tasks .ppe-task-mobile-card.card,
#tasks .ppe-task-mobile-card.card,
.ppe-main #today-tasks .ppe-task-mobile-card.card,
.ppe-main #tasks .ppe-task-mobile-card.card {
  --bs-card-bg: transparent !important;
  background: transparent !important;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  border: 1px solid var(--ppe-surface-border-translucent, rgba(0, 0, 0, 0.14));
  box-shadow: none !important;
}

#today-tasks .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
#tasks .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
.ppe-main #today-tasks .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
.ppe-main #tasks .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger) {
  background: transparent !important;
}

#today-tasks .ppe-task-mobile-card.card.ppe-row-building.table-danger,
#tasks .ppe-task-mobile-card.card.ppe-row-building.table-danger,
.ppe-main #today-tasks .ppe-task-mobile-card.card.ppe-row-building.table-danger,
.ppe-main #tasks .ppe-task-mobile-card.card.ppe-row-building.table-danger {
  background: color-mix(
    in srgb,
    var(--bs-danger) 15%,
    transparent
  ) !important;
  border-left: 3px solid var(--bs-danger);
}

#today-tasks .ppe-task-mobile-card.card > .card-body,
#tasks .ppe-task-mobile-card.card > .card-body,
.ppe-main #today-tasks .ppe-task-mobile-card.card > .card-body,
.ppe-main #tasks .ppe-task-mobile-card.card > .card-body {
  background: transparent !important;
}

/* Home mobile tiles (v93): beat dark-theme glass on task/session cards. */
[data-theme="dark"] .ppe-main #today-tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
[data-theme="dark"] .ppe-main #today-tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
[data-theme="dark"] .ppe-main #tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
[data-theme="dark"] .ppe-main #tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
[data-theme="dark"] .ppe-main #sessions .ppe-list-cards-grid > .ppe-session-mobile-card.card.ppe-row-building:not(.table-danger),
[data-theme="dark"] .ppe-main #sessions .ppe-list-cards-grid > article.ppe-session-mobile-card.card.ppe-row-building:not(.table-danger),
[data-theme="dark"] #today-tasks .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
[data-theme="dark"] #tasks .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger) {
  --bs-card-bg: transparent !important;
  background-color: transparent !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  box-shadow: none !important;
}

[data-theme="dark"] .ppe-main #today-tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building.table-danger,
[data-theme="dark"] .ppe-main #today-tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building.table-danger,
[data-theme="dark"] .ppe-main #tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building.table-danger,
[data-theme="dark"] .ppe-main #tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building.table-danger,
[data-theme="dark"] #today-tasks .ppe-task-mobile-card.card.ppe-row-building.table-danger,
[data-theme="dark"] #tasks .ppe-task-mobile-card.card.ppe-row-building.table-danger {
  background-color: color-mix(
    in srgb,
    var(--bs-danger) 15%,
    transparent
  ) !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
}

[data-theme="dark"] .ppe-main #today-tasks .ppe-list-cards-grid .card-body.ppe-mobile-list-compact,
[data-theme="dark"] .ppe-main #tasks .ppe-list-cards-grid .card-body.ppe-mobile-list-compact,
[data-theme="dark"] .ppe-main #sessions .ppe-list-cards-grid .card-body.ppe-mobile-list-compact {
  background-color: transparent !important;
}

/* Home task/exam tables (desktop): no cell fill — star/bg shows through rows. */
.ppe-main #today-tasks.card .table,
.ppe-main #tasks.card .table,
.ppe-main #sessions.card .table,
.ppe-main #today-tasks.card > .table-responsive > .table,
.ppe-main #tasks.card > .table-responsive > .table,
.ppe-main #sessions.card > .table-responsive > .table,
.ppe-main #sessions.card .table-responsive > .table {
  --bs-table-bg: transparent;
  background-color: transparent !important;
}

.ppe-main #today-tasks.card .table thead th,
.ppe-main #today-tasks.card .table thead td,
.ppe-main #tasks.card .table thead th,
.ppe-main #tasks.card .table thead td,
.ppe-main #sessions.card .table thead th,
.ppe-main #sessions.card .table thead td,
.ppe-main #today-tasks.card .table > tbody > tr > *,
.ppe-main #tasks.card .table > tbody > tr > *,
.ppe-main #sessions.card .table > tbody > tr > *,
.ppe-main #today-tasks.card > .table-responsive > .table thead th,
.ppe-main #today-tasks.card > .table-responsive > .table thead td,
.ppe-main #tasks.card > .table-responsive > .table thead th,
.ppe-main #tasks.card > .table-responsive > .table thead td,
.ppe-main #sessions.card > .table-responsive > .table thead th,
.ppe-main #sessions.card > .table-responsive > .table thead td,
.ppe-main #sessions.card .table-responsive > .table thead th,
.ppe-main #sessions.card .table-responsive > .table thead td,
.ppe-main #today-tasks.card > .table-responsive > .table > tbody > tr > *,
.ppe-main #tasks.card > .table-responsive > .table > tbody > tr > *,
.ppe-main #sessions.card > .table-responsive > .table > tbody > tr > *,
.ppe-main #sessions.card .table-responsive > .table > tbody > tr > * {
  background-color: transparent !important;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}

.ppe-main #today-tasks.card .table tbody tr.ppe-row-building:not(.table-danger),
.ppe-main #tasks.card .table tbody tr.ppe-row-building:not(.table-danger),
.ppe-main #sessions.card .table tbody tr.ppe-row-building:not(.table-danger) {
  --ppe-row-glass-bg: color-mix(
    in srgb,
    var(--ppe-row-building-bg, transparent) var(--ppe-row-glass-mix, 28%),
    var(--ppe-row-glass-base, transparent)
  );
  --bs-table-bg: var(--ppe-row-glass-bg);
  --bs-table-accent-bg: var(--ppe-row-glass-bg);
  --bs-table-bg-state: var(--ppe-row-glass-bg);
  --bs-table-hover-bg: var(--ppe-row-glass-bg);
  --bs-table-striped-bg: var(--ppe-row-glass-bg);
}

.ppe-main #today-tasks.card .table tbody tr.ppe-row-building:not(.table-danger) > *,
.ppe-main #tasks.card .table tbody tr.ppe-row-building:not(.table-danger) > *,
.ppe-main #sessions.card .table tbody tr.ppe-row-building:not(.table-danger) > * {
  background-color: var(--ppe-row-glass-bg) !important;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}

.ppe-main #today-tasks.card .table.table-hover tbody tr.ppe-row-building:not(.table-danger):hover,
.ppe-main #tasks.card .table.table-hover tbody tr.ppe-row-building:not(.table-danger):hover,
.ppe-main #sessions.card .table.table-hover tbody tr.ppe-row-building:not(.table-danger):hover {
  --ppe-row-glass-bg: color-mix(
    in srgb,
    var(--ppe-row-building-bg, transparent) var(--ppe-row-glass-mix-hover, 36%),
    var(--ppe-row-glass-base, transparent)
  );
  --bs-table-bg: var(--ppe-row-glass-bg);
  --bs-table-accent-bg: var(--ppe-row-glass-bg);
  --bs-table-bg-state: var(--ppe-row-glass-bg);
}

.ppe-main #today-tasks.card .table.table-hover tbody tr.ppe-row-building:not(.table-danger):hover > *,
.ppe-main #tasks.card .table.table-hover tbody tr.ppe-row-building:not(.table-danger):hover > *,
.ppe-main #sessions.card .table.table-hover tbody tr.ppe-row-building:not(.table-danger):hover > * {
  --bs-table-bg-state: var(--ppe-row-glass-bg) !important;
  --bs-table-bg: var(--ppe-row-glass-bg) !important;
  --bs-table-accent-bg: var(--ppe-row-glass-bg) !important;
  background-color: var(--ppe-row-glass-bg) !important;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}

.ppe-main #today-tasks.card .table tbody tr.ppe-row-building.table-danger,
.ppe-main #tasks.card .table tbody tr.ppe-row-building.table-danger,
.ppe-main #sessions.card .table tbody tr.ppe-row-building.table-danger {
  --ppe-row-glass-bg: color-mix(
    in srgb,
    var(--bs-danger) var(--ppe-row-danger-glass-mix, 22%),
    var(--ppe-row-glass-base, transparent)
  );
  --bs-table-bg: var(--ppe-row-glass-bg);
  --bs-table-accent-bg: var(--ppe-row-glass-bg);
  --bs-table-bg-state: var(--ppe-row-glass-bg);
  --bs-table-hover-bg: var(--ppe-row-glass-bg);
  --bs-table-striped-bg: var(--ppe-row-glass-bg);
}

.ppe-main #today-tasks.card .table tbody tr.ppe-row-building.table-danger > *,
.ppe-main #tasks.card .table tbody tr.ppe-row-building.table-danger > *,
.ppe-main #sessions.card .table tbody tr.ppe-row-building.table-danger > *,
.ppe-main #today-tasks.card .table.table-hover tbody tr.ppe-row-building.table-danger:hover > *,
.ppe-main #tasks.card .table.table-hover tbody tr.ppe-row-building.table-danger:hover > *,
.ppe-main #sessions.card .table.table-hover tbody tr.ppe-row-building.table-danger:hover > * {
  background-color: var(--ppe-row-glass-bg) !important;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}

/* Dark mobile cards: pastel tint stays light — dark cell text (see :root --ppe-row-building-text). */
[data-theme="dark"] .ppe-nearest-tasks-mobile .ppe-row-building:not(.table-danger),
[data-theme="dark"] .ppe-home-sessions-mobile .ppe-row-building:not(.table-danger),
[data-theme="dark"] .ppe-sessions-mobile .ppe-row-building:not(.table-danger),
[data-theme="dark"] .ppe-main #today-tasks .ppe-task-mobile-card.ppe-row-building:not(.table-danger),
[data-theme="dark"] .ppe-main #tasks .ppe-task-mobile-card.ppe-row-building:not(.table-danger),
[data-theme="dark"] .ppe-main #sessions .ppe-session-mobile-card.ppe-row-building:not(.table-danger),
[data-theme="dark"] #today-tasks .ppe-task-mobile-card.ppe-row-building:not(.table-danger),
[data-theme="dark"] #tasks .ppe-task-mobile-card.ppe-row-building:not(.table-danger),
[data-theme="dark"] #sessions .ppe-session-mobile-card.ppe-row-building:not(.table-danger),
[data-theme="dark"] .ppe-list-cards-grid .ppe-task-mobile-card.ppe-row-building:not(.table-danger),
[data-theme="dark"] .ppe-list-cards-grid .ppe-session-mobile-card.ppe-row-building:not(.table-danger) {
  --ppe-row-building-text: #1a3a5c;
  --ppe-row-building-text-muted: rgba(26, 58, 92, 0.72);
  --ppe-row-building-link: #0b5ed7;
  --ppe-code-color: #0a2d6b;
  --bs-table-color: #1a3a5c;
  --bs-table-color-state: #1a3a5c;
  --bs-table-color-type: #1a3a5c;
}

/* Dark desktop list tables: glass row bg is dark — light body text and PPE code accent. */
[data-theme="dark"] .ppe-main #today-tasks.card .table tbody tr.ppe-row-building:not(.table-danger),
[data-theme="dark"] .ppe-main #tasks.card .table tbody tr.ppe-row-building:not(.table-danger),
[data-theme="dark"] .ppe-main #sessions.card .table tbody tr.ppe-row-building:not(.table-danger),
[data-theme="dark"] .ppe-main #sessions .ppe-sessions-desktop .table tbody tr.ppe-row-building:not(.table-danger),
[data-theme="dark"] .ppe-main .ppe-nearest-tasks-table tbody tr.ppe-row-building:not(.table-danger) {
  --ppe-row-building-text: var(--ppe-text, #e8edf5);
  --ppe-row-building-text-muted: var(--ppe-text-muted, rgba(200, 212, 228, 0.85));
  --ppe-row-building-link: #9ec7e8;
  --ppe-code-color: #7ec8f0;
  --bs-table-color: var(--ppe-text, #e8edf5);
  --bs-table-color-state: var(--ppe-text, #e8edf5);
  --bs-table-color-type: var(--ppe-text, #e8edf5);
}

[data-theme="dark"] .ppe-main #today-tasks.card .table tbody tr.ppe-row-building:not(.table-danger) > *,
[data-theme="dark"] .ppe-main #tasks.card .table tbody tr.ppe-row-building:not(.table-danger) > *,
[data-theme="dark"] .ppe-main #sessions.card .table tbody tr.ppe-row-building:not(.table-danger) > *,
[data-theme="dark"] .ppe-main #sessions .ppe-sessions-desktop .table tbody tr.ppe-row-building:not(.table-danger) > *,
[data-theme="dark"] .ppe-main .ppe-nearest-tasks-table tbody tr.ppe-row-building:not(.table-danger) > * {
  background-color: var(--ppe-row-glass-bg) !important;
  box-shadow: none !important;
  color: var(--ppe-row-building-text);
}

[data-theme="dark"] .ppe-main #today-tasks.card .table.table-hover tbody tr.ppe-row-building:not(.table-danger):hover > *,
[data-theme="dark"] .ppe-main #tasks.card .table.table-hover tbody tr.ppe-row-building:not(.table-danger):hover > *,
[data-theme="dark"] .ppe-main #sessions.card .table.table-hover tbody tr.ppe-row-building:not(.table-danger):hover > *,
[data-theme="dark"] .ppe-main #sessions .ppe-sessions-desktop .table.table-hover tbody tr.ppe-row-building:not(.table-danger):hover > *,
[data-theme="dark"] .ppe-main .ppe-nearest-tasks-table.table-hover tbody tr.ppe-row-building:not(.table-danger):hover > * {
  background-color: var(--ppe-row-glass-bg) !important;
}

[data-theme="dark"] .ppe-nearest-tasks-mobile .ppe-row-building:not(.table-danger) .text-muted,
[data-theme="dark"] .ppe-nearest-tasks-mobile .ppe-row-building:not(.table-danger) small,
[data-theme="dark"] .ppe-nearest-tasks-mobile .ppe-row-building:not(.table-danger) .small,
[data-theme="dark"] .ppe-nearest-tasks-mobile .ppe-row-building:not(.table-danger) .text-body-secondary,
[data-theme="dark"] .ppe-home-sessions-mobile .ppe-row-building:not(.table-danger) .text-muted,
[data-theme="dark"] .ppe-home-sessions-mobile .ppe-row-building:not(.table-danger) small,
[data-theme="dark"] .ppe-home-sessions-mobile .ppe-row-building:not(.table-danger) .small,
[data-theme="dark"] .ppe-home-sessions-mobile .ppe-row-building:not(.table-danger) .text-body-secondary,
[data-theme="dark"] .ppe-sessions-mobile .ppe-row-building:not(.table-danger) .text-muted,
[data-theme="dark"] .ppe-sessions-mobile .ppe-row-building:not(.table-danger) small,
[data-theme="dark"] .ppe-sessions-mobile .ppe-row-building:not(.table-danger) .small,
[data-theme="dark"] .ppe-sessions-mobile .ppe-row-building:not(.table-danger) .text-body-secondary,
[data-theme="dark"] .ppe-main #today-tasks .ppe-task-mobile-card.ppe-row-building:not(.table-danger) .text-muted,
[data-theme="dark"] .ppe-main #today-tasks .ppe-task-mobile-card.ppe-row-building:not(.table-danger) small,
[data-theme="dark"] .ppe-main #today-tasks .ppe-task-mobile-card.ppe-row-building:not(.table-danger) .small,
[data-theme="dark"] .ppe-main #today-tasks .ppe-task-mobile-card.ppe-row-building:not(.table-danger) .text-body-secondary,
[data-theme="dark"] .ppe-main #tasks .ppe-task-mobile-card.ppe-row-building:not(.table-danger) .text-muted,
[data-theme="dark"] .ppe-main #tasks .ppe-task-mobile-card.ppe-row-building:not(.table-danger) small,
[data-theme="dark"] .ppe-main #tasks .ppe-task-mobile-card.ppe-row-building:not(.table-danger) .small,
[data-theme="dark"] .ppe-main #tasks .ppe-task-mobile-card.ppe-row-building:not(.table-danger) .text-body-secondary,
[data-theme="dark"] .ppe-main #sessions .ppe-session-mobile-card.ppe-row-building:not(.table-danger) .text-muted,
[data-theme="dark"] .ppe-main #sessions .ppe-session-mobile-card.ppe-row-building:not(.table-danger) small,
[data-theme="dark"] .ppe-main #sessions .ppe-session-mobile-card.ppe-row-building:not(.table-danger) .small,
[data-theme="dark"] .ppe-main #sessions .ppe-session-mobile-card.ppe-row-building:not(.table-danger) .text-body-secondary,
[data-theme="dark"] .ppe-list-cards-grid .ppe-task-mobile-card.ppe-row-building:not(.table-danger) .text-muted,
[data-theme="dark"] .ppe-list-cards-grid .ppe-task-mobile-card.ppe-row-building:not(.table-danger) small,
[data-theme="dark"] .ppe-list-cards-grid .ppe-task-mobile-card.ppe-row-building:not(.table-danger) .small,
[data-theme="dark"] .ppe-list-cards-grid .ppe-task-mobile-card.ppe-row-building:not(.table-danger) .text-body-secondary,
[data-theme="dark"] .ppe-list-cards-grid .ppe-session-mobile-card.ppe-row-building:not(.table-danger) .text-muted,
[data-theme="dark"] .ppe-list-cards-grid .ppe-session-mobile-card.ppe-row-building:not(.table-danger) small,
[data-theme="dark"] .ppe-list-cards-grid .ppe-session-mobile-card.ppe-row-building:not(.table-danger) .small,
[data-theme="dark"] .ppe-list-cards-grid .ppe-session-mobile-card.ppe-row-building:not(.table-danger) .text-body-secondary {
  color: var(--ppe-row-building-text-muted) !important;
}

[data-theme="dark"] .ppe-main #today-tasks.card .table tbody tr.ppe-row-building:not(.table-danger) .text-muted,
[data-theme="dark"] .ppe-main #today-tasks.card .table tbody tr.ppe-row-building:not(.table-danger) small,
[data-theme="dark"] .ppe-main #today-tasks.card .table tbody tr.ppe-row-building:not(.table-danger) .small,
[data-theme="dark"] .ppe-main #today-tasks.card .table tbody tr.ppe-row-building:not(.table-danger) .text-body-secondary,
[data-theme="dark"] .ppe-main #tasks.card .table tbody tr.ppe-row-building:not(.table-danger) .text-muted,
[data-theme="dark"] .ppe-main #tasks.card .table tbody tr.ppe-row-building:not(.table-danger) small,
[data-theme="dark"] .ppe-main #tasks.card .table tbody tr.ppe-row-building:not(.table-danger) .small,
[data-theme="dark"] .ppe-main #tasks.card .table tbody tr.ppe-row-building:not(.table-danger) .text-body-secondary,
[data-theme="dark"] .ppe-main #sessions.card .table tbody tr.ppe-row-building:not(.table-danger) .text-muted,
[data-theme="dark"] .ppe-main #sessions.card .table tbody tr.ppe-row-building:not(.table-danger) small,
[data-theme="dark"] .ppe-main #sessions.card .table tbody tr.ppe-row-building:not(.table-danger) .small,
[data-theme="dark"] .ppe-main #sessions.card .table tbody tr.ppe-row-building:not(.table-danger) .text-body-secondary,
[data-theme="dark"] .ppe-main #sessions .ppe-sessions-desktop .table tbody tr.ppe-row-building:not(.table-danger) .text-muted,
[data-theme="dark"] .ppe-main #sessions .ppe-sessions-desktop .table tbody tr.ppe-row-building:not(.table-danger) small,
[data-theme="dark"] .ppe-main #sessions .ppe-sessions-desktop .table tbody tr.ppe-row-building:not(.table-danger) .small,
[data-theme="dark"] .ppe-main #sessions .ppe-sessions-desktop .table tbody tr.ppe-row-building:not(.table-danger) .text-body-secondary,
[data-theme="dark"] .ppe-main .ppe-nearest-tasks-table tbody tr.ppe-row-building:not(.table-danger) .text-muted,
[data-theme="dark"] .ppe-main .ppe-nearest-tasks-table tbody tr.ppe-row-building:not(.table-danger) small,
[data-theme="dark"] .ppe-main .ppe-nearest-tasks-table tbody tr.ppe-row-building:not(.table-danger) .small,
[data-theme="dark"] .ppe-main .ppe-nearest-tasks-table tbody tr.ppe-row-building:not(.table-danger) .text-body-secondary {
  color: var(--ppe-row-building-text-muted) !important;
}

/* Pastel building tint stays light in dark theme — exam pill uses light badge on mobile cards. */
[data-theme="dark"] .ppe-nearest-tasks-mobile .ppe-row-building:not(.table-danger) .ppe-nearest-task-exam-date,
[data-theme="dark"] .ppe-home-sessions-mobile .ppe-row-building:not(.table-danger) .ppe-nearest-task-exam-date,
[data-theme="dark"] .ppe-sessions-mobile .ppe-row-building:not(.table-danger) .ppe-nearest-task-exam-date,
[data-theme="dark"] .ppe-main #today-tasks .ppe-task-mobile-card.ppe-row-building:not(.table-danger) .ppe-nearest-task-exam-date,
[data-theme="dark"] .ppe-main #tasks .ppe-task-mobile-card.ppe-row-building:not(.table-danger) .ppe-nearest-task-exam-date,
[data-theme="dark"] .ppe-main #sessions .ppe-session-mobile-card.ppe-row-building:not(.table-danger) .ppe-nearest-task-exam-date,
[data-theme="dark"] .ppe-list-cards-grid .ppe-task-mobile-card.ppe-row-building:not(.table-danger) .ppe-nearest-task-exam-date,
[data-theme="dark"] .ppe-list-cards-grid .ppe-session-mobile-card.ppe-row-building:not(.table-danger) .ppe-nearest-task-exam-date {
  background-color: #cfe2ff !important;
  color: #052c65 !important;
  border: 1px solid color-mix(in srgb, #052c65 14%, transparent);
}

/* Dark desktop tables: exam date badge readable on dark glass rows. */
[data-theme="dark"] .ppe-main #today-tasks.card .table tbody tr.ppe-row-building:not(.table-danger) .ppe-nearest-task-exam-date,
[data-theme="dark"] .ppe-main #tasks.card .table tbody tr.ppe-row-building:not(.table-danger) .ppe-nearest-task-exam-date,
[data-theme="dark"] .ppe-main .ppe-nearest-tasks-table tbody tr.ppe-row-building:not(.table-danger) .ppe-nearest-task-exam-date {
  background-color: color-mix(in srgb, var(--ppe-code-color) 16%, transparent) !important;
  color: var(--ppe-text, #e8edf5) !important;
  border: 1px solid color-mix(in srgb, var(--ppe-code-color) 24%, transparent);
}

[data-theme="dark"] .ppe-main #today-tasks .ppe-task-mobile-card.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item),
[data-theme="dark"] .ppe-main #tasks .ppe-task-mobile-card.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item),
[data-theme="dark"] .ppe-main #sessions .ppe-session-mobile-card.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item),
[data-theme="dark"] .ppe-main #today-tasks.card .table tbody tr.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item),
[data-theme="dark"] .ppe-main #tasks.card .table tbody tr.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item),
[data-theme="dark"] .ppe-main #sessions.card .table tbody tr.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item),
[data-theme="dark"] .ppe-main #sessions .ppe-sessions-desktop .table tbody tr.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item),
[data-theme="dark"] .ppe-main .ppe-nearest-tasks-table tbody tr.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item) {
  color: var(--ppe-row-building-link);
}

[data-theme="dark"] .ppe-main #today-tasks .ppe-task-mobile-card.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item):hover,
[data-theme="dark"] .ppe-main #today-tasks .ppe-task-mobile-card.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item):focus-visible,
[data-theme="dark"] .ppe-main #tasks .ppe-task-mobile-card.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item):hover,
[data-theme="dark"] .ppe-main #tasks .ppe-task-mobile-card.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item):focus-visible,
[data-theme="dark"] .ppe-main #today-tasks.card .table tbody tr.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item):hover,
[data-theme="dark"] .ppe-main #today-tasks.card .table tbody tr.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item):focus-visible,
[data-theme="dark"] .ppe-main #tasks.card .table tbody tr.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item):hover,
[data-theme="dark"] .ppe-main #tasks.card .table tbody tr.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item):focus-visible,
[data-theme="dark"] .ppe-main #sessions.card .table tbody tr.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item):hover,
[data-theme="dark"] .ppe-main #sessions.card .table tbody tr.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item):focus-visible,
[data-theme="dark"] .ppe-main #sessions .ppe-sessions-desktop .table tbody tr.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item):hover,
[data-theme="dark"] .ppe-main #sessions .ppe-sessions-desktop .table tbody tr.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item):focus-visible,
[data-theme="dark"] .ppe-main .ppe-nearest-tasks-table tbody tr.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item):hover,
[data-theme="dark"] .ppe-main .ppe-nearest-tasks-table tbody tr.ppe-row-building:not(.table-danger) a:not(.btn):not(.badge):not(.dropdown-item):focus-visible {
  color: #c5dff0;
}

.ppe-list-cards-grid .ppe-mobile-list-card .card-body,
.ppe-list-cards-grid .ppe-session-mobile-card .card-body {
  display: block;
}

/* «Экзамен завершён»: компактная зелёная подпись в ячейке статуса (не наследует muted из ppe-row-building). */
.ppe-session-stages-complete {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  overflow: hidden;
  max-width: 100%;
  font-size: 0.9rem;
  line-height: 1.25;
  font-weight: 600;
  color: var(--bs-success) !important;
  text-align: center;
  white-space: normal;
  overflow-wrap: break-word;
  word-break: normal;
}

.ppe-main .table tbody tr.ppe-row-building .ppe-session-stages-complete,
.ppe-home-sessions-mobile .ppe-row-building .ppe-session-stages-complete,
.ppe-sessions-mobile .ppe-row-building .ppe-session-stages-complete,
.ppe-list-cards-grid .ppe-session-mobile-card.ppe-row-building .ppe-session-stages-complete,
[data-theme="dark"] .ppe-main .table tbody tr.ppe-row-building .ppe-session-stages-complete,
[data-theme="dark"] .ppe-home-sessions-mobile .ppe-row-building .ppe-session-stages-complete,
[data-theme="dark"] .ppe-sessions-mobile .ppe-row-building .ppe-session-stages-complete,
[data-theme="dark"] .ppe-list-cards-grid .ppe-session-mobile-card.ppe-row-building .ppe-session-stages-complete {
  color: var(--bs-success) !important;
}

.ppe-list-cards-grid .ppe-mobile-list-card .card-body.ppe-mobile-list-compact,
.ppe-list-cards-grid .ppe-session-mobile-card .card-body.ppe-mobile-list-compact {
  padding: 0.4rem 0.55rem !important;
}

.ppe-list-cards-grid .card-body dl dd,
.ppe-list-cards-grid .ppe-mobile-card-value {
  min-width: 0;
  overflow-wrap: break-word;
  word-break: break-word;
}

.ppe-list-cards-grid a[href^="http"],
.ppe-list-cards-grid .ppe-mobile-card-value--url {
  overflow-wrap: anywhere;
  word-break: break-word;
  min-width: 0;
}

.ppe-list-cards-grid .ppe-actions-mobile {
  position: relative;
  z-index: 2;
  flex: 0 0 auto;
  flex-shrink: 0;
  align-self: center;
}

.ppe-home-sessions-mobile .ppe-actions-mobile {
  display: none !important;
}

.ppe-actions-mobile-icons {
  --ppe-nearest-task-action-h: var(--ppe-action-btn-size, 2.25rem);
  --ppe-task-mobile-action-radius: var(--ppe-action-btn-radius, 50%);
  display: flex !important;
  flex-direction: row !important;
  flex-wrap: wrap !important;
  align-items: center !important;
  gap: 0.2rem !important;
  max-width: 100%;
  min-width: 0;
}

.ppe-actions-mobile-icons > form,
.ppe-actions-mobile-icons > .badge,
.ppe-actions-mobile-icons > .btn,
.ppe-actions-mobile-icons > a.btn {
  width: auto !important;
  max-width: none !important;
  flex: 0 0 auto !important;
}

.ppe-actions-mobile-icons .btn,
.ppe-actions-mobile-icons form {
  flex-shrink: 0;
}

.ppe-actions-mobile-icons .ppe-nearest-task-attachment-source {
  width: auto !important;
  max-width: none !important;
}

.ppe-actions-mobile-icons .btn-group-vertical {
  flex-direction: row !important;
  width: auto !important;
  max-width: none !important;
  gap: 0.2rem;
}

.ppe-actions-mobile-icons .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-inline,
.ppe-actions-mobile-icons .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-mobile,
.ppe-actions-mobile-icons .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-desktop {
  display: inline-flex !important;
  flex-direction: row !important;
  flex-wrap: nowrap !important;
  align-items: center !important;
  gap: 0.2rem !important;
  width: auto !important;
  max-width: none !important;
}

.ppe-actions-mobile-icons .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-inline.btn-group > .btn,
.ppe-actions-mobile-icons .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-mobile.btn-group > .btn,
.ppe-actions-mobile-icons .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-desktop.btn-group > .btn {
  margin-left: 0 !important;
  border-radius: var(--ppe-task-mobile-action-radius) !important;
}

.ppe-actions-mobile-icons .js-stage-done-mobile-btn,
.ppe-actions-mobile-icons .ppe-nearest-task-open-btn,
.ppe-actions-mobile-icons .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-inline > .btn,
.ppe-actions-mobile-icons .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-mobile > .btn,
.ppe-actions-mobile-icons .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-desktop > .btn,
.ppe-actions-mobile-icons > .ppe-task-mobile-photo-needed-badge,
.ppe-actions-mobile-icons .btn.ppe-btn-icon:not(.dropdown-toggle) {
  box-sizing: border-box !important;
  flex: 0 0 auto !important;
  width: var(--ppe-nearest-task-action-h) !important;
  min-width: var(--ppe-nearest-task-action-h) !important;
  max-width: var(--ppe-nearest-task-action-h) !important;
  height: var(--ppe-nearest-task-action-h) !important;
  min-height: var(--ppe-nearest-task-action-h) !important;
  max-height: var(--ppe-nearest-task-action-h) !important;
  padding: 0 !important;
  margin: 0 !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  line-height: 1 !important;
  white-space: nowrap !important;
  overflow: hidden !important;
  border-radius: var(--ppe-task-mobile-action-radius) !important;
  --bs-btn-padding-y: 0;
  --bs-btn-padding-x: 0;
}

.ppe-actions-mobile-icons > .ppe-task-mobile-photo-needed-badge {
  padding: 0 !important;
}

.ppe-actions-mobile-icons .js-stage-done-mobile-btn i,
.ppe-actions-mobile-icons .ppe-nearest-task-open-btn i,
.ppe-actions-mobile-icons .ppe-nearest-task-attachment-source .btn i,
.ppe-actions-mobile-icons > .ppe-task-mobile-photo-needed-badge i,
.ppe-actions-mobile-icons .btn.ppe-btn-icon:not(.dropdown-toggle) i {
  font-size: 1rem;
  line-height: 1;
  margin: 0;
}

.ppe-main .ppe-actions-mobile-icons .btn.ppe-btn-icon:focus,
.ppe-actions-mobile-icons .btn.ppe-btn-icon:focus,
.ppe-actions-mobile-icons .btn.ppe-btn-icon:focus-visible,
.ppe-actions-mobile-icons .btn.ppe-btn-icon:active:not(:disabled):not(.disabled),
.ppe-actions-mobile-icons .js-stage-done-mobile-btn:focus,
.ppe-actions-mobile-icons .js-stage-done-mobile-btn:focus-visible,
.ppe-actions-mobile-icons .js-stage-done-mobile-btn:active:not(:disabled),
.ppe-actions-mobile-icons .ppe-nearest-task-open-btn:focus,
.ppe-actions-mobile-icons .ppe-nearest-task-open-btn:focus-visible,
.ppe-actions-mobile-icons .ppe-nearest-task-open-btn:active:not(:disabled) {
  padding: 0 !important;
  width: var(--ppe-nearest-task-action-h) !important;
  min-width: var(--ppe-nearest-task-action-h) !important;
  max-width: var(--ppe-nearest-task-action-h) !important;
  height: var(--ppe-nearest-task-action-h) !important;
  min-height: var(--ppe-nearest-task-action-h) !important;
  max-height: var(--ppe-nearest-task-action-h) !important;
}

/* Narrow table actions cell: column of uniform squares (mobile / < lg) */
@media (max-width: 991.98px) {
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions {
    flex-direction: column !important;
    flex-wrap: nowrap !important;
    align-items: center !important;
    width: 100%;
    max-width: 100%;
  }
}

.ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons > form,
.ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons > .badge,
.ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons > .btn,
.ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons > a.btn {
  width: auto !important;
  max-width: none !important;
}

.ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons .ppe-nearest-task-attachment-source {
  width: auto !important;
  max-width: none !important;
}

.ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-inline,
.ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-mobile,
.ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-desktop {
  flex-direction: row !important;
  width: auto !important;
  max-width: none !important;
}

.ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-inline > .btn,
.ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-mobile > .btn,
.ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-desktop > .btn,
.ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons .ppe-nearest-task-open-btn,
.ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons .js-stage-done-mobile-btn {
  width: var(--ppe-nearest-task-action-h) !important;
  min-width: var(--ppe-nearest-task-action-h) !important;
  max-width: var(--ppe-nearest-task-action-h) !important;
}

.ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons > .ppe-task-mobile-photo-needed-badge {
  width: var(--ppe-nearest-task-action-h) !important;
  min-width: var(--ppe-nearest-task-action-h) !important;
  max-width: var(--ppe-nearest-task-action-h) !important;
  height: var(--ppe-nearest-task-action-h) !important;
  align-self: center;
}

/* Table icon actions: one horizontal row on lg+ (tasks, sessions, admin lists) */
@media (min-width: 992px) {
  .ppe-nearest-tasks-table col.ppe-col-nearest-task-actions {
    min-width: 9.5rem;
    width: 9.5rem;
  }

  .ppe-main .table td.ppe-actions-cell > .ppe-table-actions,
  .ppe-main .table td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-table-actions,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-table-actions,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-actions-mobile-icons.ppe-table-actions,
  .ppe-table-compact td.ppe-actions-cell > .ppe-actions-desktop,
  table.stages-table td.ppe-stage-actions-cell > .ppe-stage-actions.ppe-table-actions {
    display: inline-flex !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    align-items: center !important;
    justify-content: center !important;
    gap: var(--ppe-nearest-task-action-gap, 0.25rem) !important;
    width: auto !important;
    max-width: none !important;
    white-space: nowrap !important;
  }

  .ppe-table-compact td.ppe-actions-cell > .ppe-actions-desktop > .btn-toolbar {
    display: inline-flex !important;
    flex-wrap: nowrap !important;
    align-items: center !important;
    margin: 0;
  }

  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions > form,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions > .badge,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions > .btn,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions > a.btn,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-table-actions > form,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-table-actions > .badge,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-table-actions > .btn,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-table-actions > a.btn {
    width: auto !important;
    max-width: none !important;
    flex: 0 0 auto !important;
  }

  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-attachment-source,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-table-actions .ppe-nearest-task-attachment-source {
    width: auto !important;
    max-width: none !important;
  }

  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .btn-group,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .btn-group-vertical,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-icon-btn-toolbar-inner,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-table-actions .btn-group,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-table-actions .btn-group-vertical,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-table-actions .ppe-icon-btn-toolbar-inner {
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    align-items: center !important;
    width: auto !important;
    max-width: none !important;
  }

  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-inline,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-mobile,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-desktop,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-table-actions .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-inline,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-table-actions .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-mobile,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-table-actions .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-desktop {
    display: inline-flex !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    align-items: center !important;
    gap: var(--ppe-nearest-task-action-gap, 0.25rem) !important;
    width: auto !important;
    max-width: none !important;
    min-width: 0 !important;
  }

  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-inline > .btn,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-mobile > .btn,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-desktop > .btn,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .ppe-nearest-task-open-btn,
  .ppe-table-compact td.ppe-actions-cell > .ppe-table-actions .js-stage-done-mobile-btn,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-table-actions .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-inline > .btn,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-table-actions .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-mobile > .btn,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-table-actions .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-desktop > .btn,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-table-actions .ppe-nearest-task-open-btn,
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack.ppe-table-actions .js-stage-done-mobile-btn {
    width: var(--ppe-nearest-task-action-h, 2.25rem) !important;
    min-width: var(--ppe-nearest-task-action-h, 2.25rem) !important;
    max-width: var(--ppe-nearest-task-action-h, 2.25rem) !important;
  }

  .ppe-table-compact td.ppe-actions-cell,
  .ppe-sessions-table td.ppe-td-actions.ppe-actions-cell {
    white-space: nowrap !important;
    overflow: visible;
    vertical-align: middle;
  }
}

.ppe-list-mobile .ppe-actions-mobile-icons,
.ppe-list-cards-grid .ppe-actions-mobile-icons {
  flex-wrap: wrap !important;
}

.ppe-list-cards-grid .ppe-list-card-open-fallback {
  align-self: center;
}

.ppe-mobile-card-fields {
  min-width: 0;
  position: static;
}

.ppe-mobile-card-fields .ppe-mobile-card-label,
.ppe-mobile-card-fields .ppe-mobile-card-value {
  text-align: left;
}

.ppe-mobile-card-fields .ppe-mobile-card-field {
  margin-bottom: 0.1rem;
  min-width: 0;
}

.ppe-task-mobile-card .ppe-mobile-card-fields .ppe-mobile-card-field {
  margin-bottom: 0.1rem;
}

.ppe-mobile-card-fields .ppe-mobile-card-field:last-child {
  margin-bottom: 0;
}

.ppe-mobile-card-fields .ppe-mobile-card-label {
  margin-bottom: 0;
}

.ppe-mobile-card-fields .ppe-mobile-card-value {
  min-width: 0;
  overflow-wrap: break-word;
  word-break: break-word;
}

/* Compact fields in list cards: label | value rows (2-col dl or inline grid) */
.ppe-list-cards-grid .ppe-mobile-card-fields {
  --ppe-mobile-field-label-width: 38%;
  font-size: 0.8125rem;
  line-height: 1.25;
  margin-bottom: 0;
}

.ppe-list-cards-grid dl.ppe-mobile-card-fields.row {
  --bs-gutter-x: 0;
  margin-bottom: 0;
}

.ppe-list-cards-grid dl.ppe-mobile-card-fields.row > dt,
.ppe-list-cards-grid dl.ppe-mobile-card-fields.row > dd {
  padding-left: 0;
  padding-right: 0;
  margin-bottom: 0.1rem;
  text-align: left;
  position: static;
  min-width: 0;
}

.ppe-list-cards-grid dl.ppe-mobile-card-fields.row > dt {
  font-size: 0.75rem;
}

.ppe-list-cards-grid dl.ppe-mobile-card-fields.row > dd:last-child {
  margin-bottom: 0;
}

.ppe-list-cards-grid .ppe-mobile-card-field:not(.col-12) {
  display: grid;
  grid-template-columns: var(--ppe-mobile-field-label-width) minmax(0, 1fr);
  column-gap: 0.35rem;
  align-items: baseline;
}

.ppe-list-cards-grid .ppe-mobile-card-field:not(.col-12) .ppe-mobile-card-label {
  font-size: 0.75rem;
}

.ppe-list-cards-grid .ppe-mobile-card-field.col-12 {
  grid-column: 1 / -1;
  margin-bottom: 0.15rem;
}

.ppe-list-cards-grid .ppe-mobile-card-field.col-12 .ppe-mobile-card-label {
  font-size: 0.75rem;
  margin-bottom: 0.1rem;
}

.ppe-list-cards-grid .ppe-mobile-list-card-footer {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.2rem 0.35rem;
  line-height: 1.2;
  font-size: 0.75rem;
}

@container ppe-list-cards-wrap (max-width: 280px) {
  .ppe-list-cards-grid .ppe-mobile-card-fields {
    --ppe-mobile-field-label-width: 42%;
  }

  .ppe-list-cards-grid dl.ppe-mobile-card-fields.row > dt {
    flex: 0 0 42%;
    max-width: 42%;
  }

  .ppe-list-cards-grid dl.ppe-mobile-card-fields.row > dd {
    flex: 0 0 58%;
    max-width: 58%;
  }
}

html.ppe-mobile-simplified .ppe-list-cards-grid .ppe-cell-truncate,
.ppe-list-cards-grid .ppe-cell-truncate {
  white-space: normal;
  overflow: visible;
  text-overflow: unset;
  max-width: 100%;
}

/* Dedicated mobile card lists must not run table-mobile-cards transforms */
.ppe-list-mobile table.ppe-table-mobile-cards,
.ppe-nearest-tasks-mobile table.ppe-table-mobile-cards,
.ppe-home-sessions-mobile table.ppe-table-mobile-cards,
.ppe-sessions-mobile table.ppe-table-mobile-cards {
  display: none !important;
}

html.ppe-mobile-simplified .ppe-mobile-list-compact .card,
html.ppe-mobile-simplified .ppe-list-cards-grid .card {
  width: 100%;
  max-width: 100%;
}

/* Tablet: 2 tiles per row when the list container is wide enough */
@media (min-width: 577px) and (max-width: 991.98px) {
  .ppe-list-cards-grid {
    grid-template-columns: repeat(2, minmax(min(100%, 240px), 1fr));
  }
}

/* Narrow desktop (cards mode, sidebar): flexible columns with readable min */
@media (min-width: 992px) and (max-width: 1199.98px) {
  .ppe-list-cards-grid {
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 280px), 1fr));
  }
}

/* Home/nearest task cards: 3×2 for 6 default tiles (cards mode, ≤1199px) */
@media (min-width: 992px) and (max-width: 1199.98px) {
  .ppe-list-cards-grid.ppe-mobile-task-cards {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

/* Wide card container: 3×2 by default; single row of 6 when there is room */
@container ppe-list-cards-wrap (min-width: 720px) {
  .ppe-list-cards-grid.ppe-mobile-task-cards {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

@container ppe-list-cards-wrap (min-width: 1320px) {
  .ppe-list-cards-grid.ppe-mobile-task-cards {
    grid-template-columns: repeat(6, minmax(0, 1fr));
  }
}

/* @deprecated alias — use .ppe-list-cards-grid */
.ppe-template-set-cards-grid {
  display: grid;
  gap: 0.75rem;
  grid-template-columns: 1fr;
  min-width: 0;
  box-sizing: border-box;
}

@media (min-width: 577px) and (max-width: 991.98px) {
  .ppe-template-set-cards-grid {
    grid-template-columns: repeat(2, minmax(min(100%, 240px), 1fr));
  }
}

@media (min-width: 992px) and (max-width: 1199.98px) {
  .ppe-template-set-cards-grid {
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 280px), 1fr));
  }
}

html.ppe-mobile-simplified .ppe-mobile-list-card .card-body {
  padding: 0.85rem 1rem !important;
  font-size: 1rem;
}

.ppe-list-mobile,
.ppe-nearest-tasks-mobile,
.ppe-home-sessions-mobile,
.ppe-sessions-mobile {
  display: none;
}

/* Card lists: up to xl−1 (≤1199px). With fixed sidebar (~280px), 992–1199px still needs cards. */
@media (max-width: 1199.98px) {
  .ppe-nearest-tasks-mobile,
  .ppe-home-sessions-mobile,
  .ppe-list-cards-grid {
    max-width: 100%;
    min-width: 0;
  }

  .ppe-list-desktop,
  .ppe-nearest-tasks-desktop,
  .ppe-home-sessions-desktop,
  .ppe-sessions-desktop {
    display: none !important;
  }

  /* Belt-and-suspenders: no ghost table/card rows from desktop markup */
  .ppe-nearest-tasks-desktop table,
  .ppe-home-sessions-desktop table,
  .ppe-list-desktop table.ppe-table-mobile-cards,
  .ppe-list-desktop table.ppe-table-rows-compact {
    display: none !important;
  }

  .ppe-list-mobile,
  .ppe-nearest-tasks-mobile,
  .ppe-home-sessions-mobile,
  .ppe-sessions-mobile,
  .ppe-perm-matrix-mobile-shell,
  .ppe-perm-matrix-mobile {
    display: block !important;
  }

  .ppe-perm-matrix-desktop {
    display: none !important;
  }

  .ppe-perm-matrix-scroll-hint {
    display: none !important;
  }
}

/* Permissions matrix: default hidden until narrow / simplified layout */
.ppe-perm-matrix-mobile-shell,
.ppe-perm-matrix-mobile {
  display: none;
}

.ppe-perm-matrix-desktop {
  display: block;
}

.ppe-perm-matrix-scroll-hint {
  display: none;
}

html.ppe-mobile-simplified .ppe-perm-matrix-mobile-shell,
html.ppe-mobile-simplified .ppe-perm-matrix-mobile {
  display: block !important;
}

html.ppe-mobile-simplified .ppe-perm-matrix-desktop {
  display: none !important;
}

html.ppe-device-preview.ppe-mobile-simplified .ppe-perm-matrix-mobile-shell,
html.ppe-device-preview.ppe-mobile-simplified .ppe-perm-matrix-mobile {
  display: block !important;
}

/* Wide viewport: desktop tables only. Viewport wins over ppe-mobile-simplified (nav/chrome). */
@media (min-width: 1200px) {
  html:not(.ppe-mobile-simplified) .ppe-perm-matrix-scroll-hint {
    display: block;
  }

  .ppe-list-mobile,
  .ppe-nearest-tasks-mobile,
  .ppe-home-sessions-mobile,
  .ppe-sessions-mobile,
  .ppe-perm-matrix-mobile-shell,
  .ppe-perm-matrix-mobile {
    display: none !important;
  }

  .ppe-list-desktop,
  .ppe-nearest-tasks-desktop,
  .ppe-home-sessions-desktop,
  .ppe-sessions-desktop,
  .ppe-perm-matrix-desktop {
    display: block !important;
  }

  html:not(.ppe-mobile-simplified) .ppe-perm-matrix-desktop {
    display: block !important;
  }
}

/* Device preview (390px frame on wide monitor): card lists, not tables. */
html.ppe-device-preview.ppe-mobile-simplified .ppe-list-desktop,
html.ppe-device-preview.ppe-mobile-simplified .ppe-nearest-tasks-desktop,
html.ppe-device-preview.ppe-mobile-simplified .ppe-home-sessions-desktop,
html.ppe-device-preview.ppe-mobile-simplified .ppe-sessions-desktop {
  display: none !important;
}

html.ppe-device-preview.ppe-mobile-simplified .ppe-list-mobile,
html.ppe-device-preview.ppe-mobile-simplified .ppe-nearest-tasks-mobile,
html.ppe-device-preview.ppe-mobile-simplified .ppe-home-sessions-mobile,
html.ppe-device-preview.ppe-mobile-simplified .ppe-sessions-mobile {
  display: block !important;
}

html.ppe-mobile-simplified .ppe-list-mobile,
html.ppe-mobile-simplified .ppe-mobile-list-cards {
  overflow-x: visible;
}

html.ppe-mobile-simplified .ppe-scroll-hint--desktop {
  display: none !important;
}

html.ppe-device-preview .ppe-home-overview.row.ppe-home-overview-lines {
  --bs-gutter-x: 0;
  --bs-gutter-y: 0;
  --ppe-overview-gap: 0.35rem;
  display: flex !important;
  flex-wrap: nowrap;
  align-items: stretch;
  gap: var(--ppe-overview-gap);
  margin-left: 0;
  margin-right: 0;
  overflow-x: auto;
  overflow-y: hidden;
  overscroll-behavior-x: contain;
  -webkit-overflow-scrolling: touch;
  scroll-snap-type: x proximity;
  scrollbar-width: thin;
  padding-bottom: 0.125rem;
}

html.ppe-device-preview .ppe-home-overview.row.ppe-home-overview-lines > .col {
  flex: 1 1 calc((100% - (4 * var(--ppe-overview-gap))) / 5);
  min-width: 3.75rem;
  max-width: none !important;
  width: auto !important;
  padding-left: 0;
  padding-right: 0;
  display: flex;
  scroll-snap-align: start;
}

html.ppe-device-preview .ppe-home-overview.row.ppe-home-overview-lines .ppe-overview-stat,
html.ppe-device-preview .ppe-home-overview.row.ppe-home-overview-lines .col > .card {
  flex: 1 1 auto;
  width: 100%;
  min-height: 0;
  aspect-ratio: 1 / 1;
  display: flex;
  flex-direction: column;
}

html.ppe-device-preview .ppe-home-overview.row.ppe-home-overview-lines .ppe-overview-stat-body,
html.ppe-device-preview .ppe-home-overview.row.ppe-home-overview-lines .ppe-overview-stat .card-body,
html.ppe-device-preview .ppe-home-overview.row.ppe-home-overview-lines .col > .card .card-body {
  min-height: 0;
  padding: 0.3rem 0.2rem;
  justify-content: center;
  gap: 0.1rem;
}

html.ppe-device-preview .ppe-home-overview.row.ppe-home-overview-lines .ppe-overview-stat-label,
html.ppe-device-preview .ppe-home-overview.row.ppe-home-overview-lines .col > .card .ppe-overview-stat-label {
  min-height: 0;
  font-size: 0.625rem;
  line-height: 1.15;
  -webkit-line-clamp: 3;
}

html.ppe-device-preview .ppe-home-overview.row.ppe-home-overview-lines .ppe-overview-stat-value,
html.ppe-device-preview .ppe-home-overview.row.ppe-home-overview-lines .col > .card .ppe-overview-stat-value,
html.ppe-device-preview .ppe-home-overview.row.ppe-home-overview-lines .ppe-overview-stat .fs-4,
html.ppe-device-preview .ppe-home-overview.row.ppe-home-overview-lines .col > .card .fs-4 {
  margin-top: 0;
  padding-top: 0;
  font-size: 1.1rem !important;
  line-height: 1.15;
}

html.ppe-mobile-simplified .ppe-task-mobile-card .card-body.ppe-mobile-list-compact {
  font-size: 0.8125rem;
}

html.ppe-mobile-simplified .ppe-session-mobile-card .card-body {
  font-size: 0.8125rem;
}

html.ppe-mobile-simplified .ppe-task-card-exam,
html.ppe-mobile-simplified .ppe-session-card-title,
html.ppe-mobile-simplified .ppe-mobile-list-compact .ppe-mobile-list-title {
  line-height: 1.35;
  word-break: normal;
  overflow-wrap: normal;
}

html.ppe-mobile-simplified .ppe-nearest-tasks-mobile .table-responsive,
html.ppe-mobile-simplified .ppe-home-sessions-mobile,
html.ppe-mobile-simplified .ppe-sessions-mobile {
  overflow-x: visible;
}

html.ppe-mobile-simplified #sessions .ppe-mobile-legend-collapse .collapse.show,
html.ppe-mobile-simplified #sessions .ppe-mobile-legend-collapse .collapse:not(.show) {
  margin-bottom: 0.5rem;
}

html.ppe-mobile-simplified .ppe-building-color-legend__list {
  gap: 0.3rem 0.65rem;
}

html.ppe-mobile-simplified .ppe-sessions-mobile .ppe-mobile-session-cards .card-body {
  padding: 0.4rem 0.55rem !important;
}

html.ppe-mobile-simplified .nav-ppe.ppe-navbar-compact .navbar-brand {
  font-size: 1rem;
  max-width: 42vw;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

html.ppe-mobile-simplified .nav-ppe.ppe-navbar-compact .ppe-navbar-user-links .nav-link {
  padding-left: 0.35rem;
  padding-right: 0.35rem;
  font-size: 0.9rem;
}

@media (max-width: 991.98px) {
  html.ppe-mobile-simplified .ppe-navbar-offcanvas-btn {
    display: inline-flex !important;
  }

  html.ppe-mobile-simplified .ppe-sidebar-desktop {
    display: none !important;
  }
}

@media (min-width: 992px) {
  html.ppe-mobile-simplified:not(.ppe-device-preview) .ppe-navbar-offcanvas-btn {
    display: none !important;
  }
}

/* Кнопки на телефоне: контраст, зона нажатия ≥44px, primary заметнее */
html.ppe-mobile-simplified .btn:not(.ppe-theme-toggle) {
  min-height: var(--ppe-btn-height-touch);
  font-weight: 500;
}

html.ppe-mobile-simplified .btn-sm:not(.ppe-theme-toggle) {
  min-height: var(--ppe-btn-height-touch);
  padding-top: 0.45rem;
  padding-bottom: 0.45rem;
}

/* Navbar: переключатель темы — круг как колокольчик (touch 2.75rem), не овал от min-height .btn-sm */
html.ppe-mobile-simplified .nav-ppe .ppe-theme-toggle {
  --ppe-theme-toggle-size: var(--ppe-btn-height-touch, 2.75rem);
}

html.ppe-mobile-simplified .btn-primary {
  font-weight: 600;
  box-shadow: var(--ppe-btn-primary-glow), var(--ppe-glass-inset-highlight);
}

html.ppe-mobile-simplified .btn-outline-primary {
  border-width: 2px;
}

html.ppe-mobile-simplified .ppe-wizard-nav .btn,
html.ppe-mobile-simplified .ppe-form-actions-sticky .btn,
html.ppe-mobile-simplified .ppe-technician-today-item .btn {
  min-height: 2.75rem;
}

.ppe-attachment-source {
  position: relative;
}

/* Скрытый file input: не display:none и не pointer-events:none — иначе picker не открывается */
.ppe-visually-hidden-file-input {
  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;
  opacity: 0.01 !important;
}

.ppe-media-capture-video {
  max-height: min(70vh, 520px);
  object-fit: contain;
  background: #000;
}

/* Stage row: photo upload — one inline control group (gallery + camera) */
.ppe-stage-photo-upload-inline,
.ppe-stage-photo-upload-mobile,
.ppe-stage-photo-upload-desktop {
  display: inline-flex;
  flex-wrap: nowrap;
  max-width: 100%;
}

.ppe-stage-photo-upload-inline > .btn,
.ppe-stage-photo-upload-mobile > .btn,
.ppe-stage-photo-upload-desktop > .btn,
.ppe-stage-photo-upload-modal-actions .btn {
  min-height: 2.75rem;
}

/* Nearest tasks desktop table: legacy stacks without mobile-icons stay column below lg */
@media (max-width: 991.98px) {
  .ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack:not(.ppe-actions-mobile-icons) .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-inline,
.ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack:not(.ppe-actions-mobile-icons) .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-mobile,
.ppe-table-compact td.ppe-actions-cell > .ppe-nearest-task-actions-stack:not(.ppe-actions-mobile-icons) .ppe-nearest-task-attachment-source .ppe-stage-photo-upload-desktop {
  display: flex !important;
  flex-direction: column !important;
  flex-wrap: nowrap !important;
  align-items: stretch !important;
  }
}

/* Фото: сначала «Галерея»/«Камера», справа — статус вложения */
.ppe-stage-photo-actions {
  display: flex;
  flex-wrap: nowrap;
  align-items: center;
  gap: 0.35rem;
}

.ppe-stage-photo-actions > .ppe-stage-photo-upload-form,
.ppe-stage-photo-actions > form:has(.ppe-attachment-source),
.ppe-stage-photo-actions .ppe-attachment-source {
  order: 1;
  flex: 0 0 auto;
}

.ppe-stage-photo-status {
  order: 2;
  flex: 0 0 auto;
}

.ppe-stage-photo-manage-actions {
  display: none;
  order: 3;
}

@media (max-width: 991.98px) {
  html.ppe-mobile-simplified .ppe-stage-photo-actions,
  .ppe-stage-photo-actions {
    width: 100%;
    gap: 0.35rem;
  }

  html.ppe-mobile-simplified .ppe-stage-photo-manage-actions,
  .ppe-stage-photo-manage-actions {
    display: inline-flex;
    flex-wrap: wrap;
    gap: 0.35rem;
  }

  html.ppe-mobile-simplified .ppe-stage-photo-actions .btn-sm,
  .ppe-stage-photo-actions .btn-sm {
    min-height: 2.75rem;
  }

  table.stages-table td.ppe-stage-photo-cell::before {
    flex: 0 0 100%;
    max-width: 100%;
  }

  table.stages-table td.ppe-stage-photo-cell {
    flex-wrap: wrap;
  }

  .ppe-stage-photo-details-desktop-only {
    display: none !important;
  }
}

@media (min-width: 992px) {
  .ppe-stage-photo-manage-actions {
    display: none !important;
  }
}

html.ppe-device-preview.ppe-mobile-simplified .ppe-stage-photo-manage-actions {
  display: inline-flex;
}

/* Stage row: inline action buttons (edit / reorder / delete) */
.ppe-stage-actions {
  max-width: 100%;
  flex-wrap: wrap;
  gap: 0.25rem;
}

@media (min-width: 992px) {
  table.stages-table td.ppe-stage-actions-cell .ppe-stage-actions {
    flex-wrap: nowrap;
    white-space: nowrap;
  }
}

@media (max-width: 991.98px) {
  html.ppe-mobile-simplified table.stages-table td.ppe-stage-actions-cell > .ppe-stage-actions,
  table.stages-table td.ppe-stage-actions-cell > .ppe-stage-actions {
    flex: 1 1 100%;
    max-width: 100% !important;
    width: 100%;
    justify-content: flex-start;
  }

  table.stages-table td.ppe-stage-actions-cell::before {
    flex: 0 0 100%;
    max-width: 100%;
  }

  html.ppe-mobile-simplified .ppe-stage-actions .btn-sm,
  .ppe-stage-actions .btn-sm {
    min-height: 2.75rem;
  }
}

html.ppe-device-preview.ppe-mobile-simplified .ppe-stage-actions .btn-sm {
  min-height: 2.75rem;
}

html.ppe-mobile-simplified .ppe-exam-calendar .btn-group-sm .btn {
  min-height: 2.75rem;
}

/* Mobile list cards: tap-to-open + inline actions (≤991px / ppe-mobile-simplified) */
.ppe-card-actions-row {
  display: none;
  flex-wrap: wrap;
  gap: 0.35rem;
  align-items: center;
  position: relative;
  z-index: 3;
}

.ppe-mobile-list-card-clickable {
  cursor: pointer;
}

.ppe-mobile-list-card-clickable:focus-visible {
  outline: 2px solid var(--bs-primary);
  outline-offset: 2px;
}

@media (max-width: 991.98px) {
  html.ppe-mobile-simplified .ppe-card-actions-row,
  .ppe-card-actions-row {
    display: flex;
  }

  html.ppe-mobile-simplified .ppe-list-cards-grid .ppe-actions-mobile:has([data-bs-toggle="dropdown"]),
  html.ppe-mobile-simplified .ppe-nearest-tasks-mobile .ppe-actions-mobile:has([data-bs-toggle="dropdown"]),
  html.ppe-mobile-simplified .ppe-home-sessions-mobile .ppe-actions-mobile:has([data-bs-toggle="dropdown"]),
  html.ppe-mobile-simplified .ppe-sessions-mobile .ppe-actions-mobile:has([data-bs-toggle="dropdown"]),
  html.ppe-mobile-simplified .ppe-list-mobile .ppe-actions-mobile:has([data-bs-toggle="dropdown"]),
  .ppe-list-cards-grid .ppe-actions-mobile:has([data-bs-toggle="dropdown"]),
  .ppe-nearest-tasks-mobile .ppe-actions-mobile:has([data-bs-toggle="dropdown"]),
  .ppe-home-sessions-mobile .ppe-actions-mobile:has([data-bs-toggle="dropdown"]),
  .ppe-sessions-mobile .ppe-actions-mobile:has([data-bs-toggle="dropdown"]),
  .ppe-list-mobile .ppe-actions-mobile:has([data-bs-toggle="dropdown"]),
  table.ppe-table-mobile-cards .ppe-actions-mobile:has([data-bs-toggle="dropdown"]) {
    display: none !important;
  }
}

@media (min-width: 992px) {
  html:not(.ppe-mobile-simplified) .ppe-card-actions-row {
    display: none !important;
  }
}

html.ppe-device-preview.ppe-mobile-simplified .ppe-card-actions-row {
  display: flex;
}

html.ppe-device-preview.ppe-mobile-simplified .ppe-actions-mobile:has([data-bs-toggle="dropdown"]) {
  display: none !important;
}

/* Stage completion: button on mobile, checkbox on desktop */
.ppe-stage-done-control {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem;
}

@media (max-width: 991.98px) {
  html.ppe-mobile-simplified .ppe-stage-done-checkbox-label,
  .ppe-stage-done-checkbox-label {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
  }

  html.ppe-mobile-simplified .js-stage-done-mobile-btn,
  .js-stage-done-mobile-btn {
    display: inline-block;
  }
}

@media (min-width: 992px) {
  html:not(.ppe-mobile-simplified) .js-stage-done-mobile-btn {
    display: none !important;
  }

  /* Nearest tasks desktop table: keep square done/open actions visible on home and /tasks/ */
  html:not(.ppe-mobile-simplified)
    .ppe-nearest-tasks-desktop
    .ppe-table-compact
    td.ppe-actions-cell
    .js-stage-done-mobile-btn {
    display: inline-flex !important;
  }
}

/* Колокольчик уведомлений (navbar) */
.ppe-notification-bell {
  position: relative;
}

/* display:flex только при .show — иначе перебивает Bootstrap display:none */
.ppe-notification-bell .ppe-notif-dropdown-menu.show {
  width: min(20rem, 92vw);
  max-height: min(70vh, 28rem);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  padding: 0;
  z-index: 1031;
}

.ppe-notif-dropdown-header {
  flex-shrink: 0;
  position: sticky;
  top: 0;
  z-index: 2;
  background: var(--bs-dropdown-bg);
  border-bottom: 1px solid var(--bs-dropdown-divider-bg, var(--bs-border-color));
  margin-bottom: 0;
}

.ppe-notif-mark-all-link,
.ppe-notif-all-link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 2.75rem;
  min-width: 2.75rem;
  padding: 0 0.65rem;
  font-size: 0.875rem;
  font-weight: 600;
  text-decoration: none;
  border-radius: 0.375rem;
  white-space: nowrap;
}

.ppe-notif-mark-all-link {
  line-height: 1.2;
}

.ppe-notif-mark-all-link:disabled {
  opacity: 0.45;
  pointer-events: none;
}

.ppe-notif-all-link:hover,
.ppe-notif-all-link:focus {
  text-decoration: underline;
}

.ppe-notif-dropdown-list {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
}

.ppe-notif-dropdown-menu > .dropdown-divider,
.ppe-notif-dropdown-menu > .dropdown-item {
  flex-shrink: 0;
}

.ppe-notif-empty {
  padding: 0.75rem 1rem;
}

.ppe-notif-item {
  padding: 0.75rem 1rem;
  min-height: 2.75rem;
  border-bottom: 1px solid var(--bs-border-color-translucent, rgba(0, 0, 0, 0.08));
  border-left: 3px solid transparent;
}

.ppe-notif-item--unread {
  background: rgba(var(--bs-primary-rgb), 0.06);
}

.ppe-inbox-item--exam.ppe-row-building,
.ppe-inbox-item--building.ppe-row-building {
  background-color: color-mix(
    in srgb,
    var(--ppe-row-building-bg, transparent) var(--ppe-row-glass-mix, 28%),
    var(--ppe-row-glass-base, transparent)
  );
}

.ppe-inbox-item--exam.ppe-row-building.ppe-notif-item--unread,
.ppe-inbox-item--building.ppe-row-building.ppe-notif-item--unread {
  background-color: color-mix(
    in srgb,
    var(--ppe-row-building-bg, transparent) var(--ppe-row-glass-mix-hover, 36%),
    var(--ppe-row-glass-base, transparent)
  );
}

.ppe-inbox-item--exam:not(.ppe-row-building) {
  border-left-color: #198754;
  background: rgba(25, 135, 84, 0.07);
}

.ppe-inbox-item--exam:not(.ppe-row-building).ppe-notif-item--unread {
  background: rgba(25, 135, 84, 0.12);
}

.ppe-inbox-item--building:not(.ppe-row-building) {
  border-left-color: #6f42c1;
  background: rgba(111, 66, 193, 0.07);
}

.ppe-inbox-item--building:not(.ppe-row-building).ppe-notif-item--unread {
  background: rgba(111, 66, 193, 0.12);
}

.ppe-inbox-item--message {
  background: rgba(13, 110, 253, 0.07);
}

.ppe-inbox-item--message.ppe-notif-item--unread {
  background: rgba(13, 110, 253, 0.12);
}

.ppe-notif-item-meta {
  line-height: 1.35;
}

.ppe-notif-item-meta-label {
  font-weight: 600;
}

.ppe-notif-item-meta-relative {
  opacity: 0.85;
}

.ppe-inbox-item--message .ppe-notif-item-title {
  color: #0a58ca;
}

.ppe-inbox-item--message .ppe-notif-item-body {
  color: #495057;
}
[data-theme="dark"] .ppe-inbox-item--message .ppe-notif-item-title {
  color: #9ec7e8;
}
[data-theme="dark"] .ppe-inbox-item--message .ppe-notif-item-body,
[data-theme="dark"] .ppe-notif-item-badge--reminder,
[data-theme="dark"] .ppe-notif-item-badge--ok {
  color: #c8d4e4;
}
[data-theme="dark"] .ppe-notif-item-badge--admin {
  color: #9ec7e8;
}
[data-theme="dark"] .ppe-notif-item-badge--warning,
[data-theme="dark"] .ppe-notif-item-badge--due-soon {
  color: #ffd666;
}
[data-theme="dark"] .ppe-notif-item-badge--urgent,
[data-theme="dark"] .ppe-notif-item-badge--overdue {
  color: #ff8a94;
}

.ppe-notif-item-title {
  flex: 1 1 auto;
  min-width: 0;
  line-height: 1.35;
  word-break: break-word;
}

.ppe-notif-item-body {
  margin-top: 0.25rem;
  line-height: 1.4;
  word-break: break-word;
}

.ppe-notif-item-badge {
  flex: 0 0 auto;
  font-size: 0.625rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  line-height: 1.2;
  padding: 0.2rem 0.45rem;
  border-radius: 0.25rem;
  max-width: 6.5rem;
  text-align: center;
}

.ppe-notif-item-badge--admin {
  color: #0d3b66;
  background: rgba(13, 110, 253, 0.12);
}

.ppe-notif-item-badge--reminder {
  color: #495057;
  background: rgba(108, 117, 125, 0.14);
}

.ppe-notif-item-badge--warning {
  color: #664d03;
  background: rgba(255, 193, 7, 0.22);
}

.ppe-notif-item-badge--urgent {
  color: #842029;
  background: rgba(220, 53, 69, 0.14);
}

.ppe-notif-item-badge--overdue {
  color: #842029;
  background: rgba(220, 53, 69, 0.18);
}

.ppe-notif-item-badge--due-soon,
.ppe-notif-item-badge--warning {
  color: #664d03;
  background: rgba(255, 193, 7, 0.22);
}

.ppe-notif-item-badge--ok,
.ppe-notif-item-badge--reminder {
  color: #495057;
  background: rgba(108, 117, 125, 0.14);
}

/* Бейджи и полоса карточки по категории (display_kind); цвета — CSS-переменные из ColorSettings */
.ppe-notif-item-badge--kind-appeal {
  color: var(--ppe-notif-kind-appeal-badge-text, #084298);
  background: color-mix(
    in srgb,
    var(--ppe-notif-kind-appeal-badge-bg, #0d6efd) 18%,
    transparent
  );
}

.ppe-notif-item-badge--kind-comment {
  color: var(--ppe-notif-kind-comment-badge-text, #432874);
  background: color-mix(
    in srgb,
    var(--ppe-notif-kind-comment-badge-bg, #6f42c1) 18%,
    transparent
  );
}

.ppe-notif-item-badge--kind-stage_change {
  color: var(--ppe-notif-kind-stage_change-badge-text, #664d03);
  background: color-mix(
    in srgb,
    var(--ppe-notif-kind-stage_change-badge-bg, #ffc107) 28%,
    transparent
  );
}

.ppe-notif-item-badge--kind-stage_reminder {
  color: var(--ppe-notif-kind-stage_reminder-badge-text, #b45309);
  background: color-mix(
    in srgb,
    var(--ppe-notif-kind-stage_reminder-badge-bg, #fd7e14) 20%,
    transparent
  );
}

.ppe-notif-item-badge--kind-exam_reminder {
  color: var(--ppe-notif-kind-exam_reminder-badge-text, #0f5132);
  background: color-mix(
    in srgb,
    var(--ppe-notif-kind-exam_reminder-badge-bg, #198754) 20%,
    transparent
  );
}

.ppe-notif-item-badge--kind-system {
  color: var(--ppe-notif-kind-system-badge-text, #41464b);
  background: color-mix(
    in srgb,
    var(--ppe-notif-kind-system-badge-bg, #6c757d) 20%,
    transparent
  );
}

.ppe-notif-item-badge--kind-reminder_other {
  color: var(--ppe-notif-kind-reminder_other-badge-text, #055160);
  background: color-mix(
    in srgb,
    var(--ppe-notif-kind-reminder_other-badge-bg, #0dcaf0) 18%,
    transparent
  );
}

.ppe-inbox-item--kind-appeal:not(.ppe-row-building) {
  border-left-color: var(--ppe-notif-kind-appeal-stripe, #0d6efd);
  background: color-mix(
    in srgb,
    var(--ppe-notif-kind-appeal-stripe, #0d6efd) 8%,
    transparent
  );
}

.ppe-inbox-item--kind-appeal:not(.ppe-row-building).ppe-notif-item--unread {
  background: color-mix(
    in srgb,
    var(--ppe-notif-kind-appeal-stripe, #0d6efd) 14%,
    transparent
  );
}

.ppe-inbox-item--kind-comment:not(.ppe-row-building) {
  border-left-color: var(--ppe-notif-kind-comment-stripe, #6f42c1);
  background: color-mix(
    in srgb,
    var(--ppe-notif-kind-comment-stripe, #6f42c1) 8%,
    transparent
  );
}

.ppe-inbox-item--kind-comment:not(.ppe-row-building).ppe-notif-item--unread {
  background: color-mix(
    in srgb,
    var(--ppe-notif-kind-comment-stripe, #6f42c1) 14%,
    transparent
  );
}

.ppe-inbox-item--kind-stage_change:not(.ppe-row-building) {
  border-left-color: var(--ppe-notif-kind-stage_change-stripe, #fd7e14);
  background: color-mix(
    in srgb,
    var(--ppe-notif-kind-stage_change-stripe, #fd7e14) 8%,
    transparent
  );
}

.ppe-inbox-item--kind-stage_change:not(.ppe-row-building).ppe-notif-item--unread {
  background: color-mix(
    in srgb,
    var(--ppe-notif-kind-stage_change-stripe, #fd7e14) 14%,
    transparent
  );
}

.ppe-inbox-item--kind-stage_reminder:not(.ppe-row-building) {
  border-left-color: var(--ppe-notif-kind-stage_reminder-stripe, #fd7e14);
  background: color-mix(
    in srgb,
    var(--ppe-notif-kind-stage_reminder-stripe, #fd7e14) 8%,
    transparent
  );
}

.ppe-inbox-item--kind-stage_reminder:not(.ppe-row-building).ppe-notif-item--unread {
  background: color-mix(
    in srgb,
    var(--ppe-notif-kind-stage_reminder-stripe, #fd7e14) 14%,
    transparent
  );
}

.ppe-inbox-item--kind-exam_reminder:not(.ppe-row-building) {
  border-left-color: var(--ppe-notif-kind-exam_reminder-stripe, #198754);
  background: color-mix(
    in srgb,
    var(--ppe-notif-kind-exam_reminder-stripe, #198754) 8%,
    transparent
  );
}

.ppe-inbox-item--kind-exam_reminder:not(.ppe-row-building).ppe-notif-item--unread {
  background: color-mix(
    in srgb,
    var(--ppe-notif-kind-exam_reminder-stripe, #198754) 14%,
    transparent
  );
}

.ppe-inbox-item--kind-system:not(.ppe-row-building) {
  border-left-color: var(--ppe-notif-kind-system-stripe, #6c757d);
  background: color-mix(
    in srgb,
    var(--ppe-notif-kind-system-stripe, #6c757d) 10%,
    transparent
  );
}

.ppe-inbox-item--kind-reminder_other:not(.ppe-row-building) {
  border-left-color: var(--ppe-notif-kind-reminder_other-stripe, #0dcaf0);
  background: color-mix(
    in srgb,
    var(--ppe-notif-kind-reminder_other-stripe, #0dcaf0) 8%,
    transparent
  );
}

.ppe-inbox-item--kind-reminder_other:not(.ppe-row-building).ppe-notif-item--unread {
  background: color-mix(
    in srgb,
    var(--ppe-notif-kind-reminder_other-stripe, #0dcaf0) 14%,
    transparent
  );
}

.ppe-notif-tab-badge {
  font-size: 0.625rem;
  font-weight: 600;
  min-width: 1.1rem;
  padding: 0.15em 0.4em;
}

.ppe-inbox-item__buildings-badge {
  display: inline-flex;
  align-items: center;
  max-width: 100%;
  font-size: 0.625rem;
  font-weight: 600;
  line-height: 1.2;
  padding: 0.2rem 0.45rem;
  border-radius: 0.25rem;
  color: #495057;
  background: color-mix(
    in srgb,
    var(--ppe-row-building-bg, rgba(108, 117, 125, 0.18)) 18%,
    transparent
  );
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.ppe-notif-item--admin {
  border-left-color: #0d6efd;
}

.ppe-notif-item--ok,
.ppe-notif-item--reminder {
  border-left-color: #6c757d;
}

.ppe-notif-item--warning,
.ppe-notif-item--due-soon {
  border-left-color: #ffc107;
}

.ppe-notif-item--overdue {
  border-left-color: #dc3545;
  background: rgba(220, 53, 69, 0.04);
}

.ppe-notif-item--warning.ppe-notif-item--unread,
.ppe-notif-item--due-soon.ppe-notif-item--unread {
  background: rgba(255, 193, 7, 0.08);
}

.ppe-notif-mark-read {
  z-index: 2;
  min-height: 2.75rem;
  display: inline-flex;
  align-items: center;
}

.ppe-notif-dropdown-list .ppe-notif-item:last-child {
  border-bottom: none;
}

/* Desktop: обычный dropdown под колокольчиком (не fixed sheet) */
@media (min-width: 992px) {
  html:not(.ppe-device-preview)
    .ppe-notification-bell
    .ppe-notif-dropdown-menu:not(.ppe-notif-dropdown-menu--sheet) {
    position: absolute !important;
    top: 100% !important;
    right: 0 !important;
    left: auto !important;
    margin: 0.125rem 0 0 !important;
    width: min(20rem, 92vw);
  }

  html:not(.ppe-device-preview) .ppe-notif-item-title,
  html:not(.ppe-device-preview) .ppe-notif-item-body {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
    overflow: hidden;
  }
}

/* Мобильный лист под navbar (только с --sheet) */
@media (max-width: 991.98px) {
  .ppe-notification-bell .ppe-notif-dropdown-menu.show.ppe-notif-dropdown-menu--sheet {
    position: fixed !important;
    inset: auto 0 auto 0 !important;
    top: calc(var(--ppe-navbar-height) + var(--ppe-safe-top)) !important;
    transform: none !important;
    width: 100% !important;
    max-width: 100% !important;
    margin: 0 !important;
    border-radius: 0 0 0.5rem 0.5rem;
    max-height: min(75vh, calc(100dvh - var(--ppe-navbar-height) - var(--ppe-safe-top)));
    box-shadow: 0 0.75rem 1.5rem rgba(0, 0, 0, 0.18);
    z-index: 1031;
  }

  .ppe-notif-item {
    padding: 0.85rem 1rem;
    min-height: 2.75rem;
  }

  .ppe-notif-item-head {
    flex-wrap: wrap;
  }

  .ppe-notif-item-badge {
    font-size: 0.6rem;
    max-width: none;
  }
}

html.ppe-device-preview
  .ppe-notification-bell
  .ppe-notif-dropdown-menu.show.ppe-notif-dropdown-menu--sheet {
  position: fixed !important;
  inset: auto 0 auto 0 !important;
  transform: none !important;
  margin: 0 !important;
  border-radius: 0 0 0.5rem 0.5rem;
  box-shadow: 0 0.75rem 1.5rem rgba(0, 0, 0, 0.18);
  left: var(--ppe-device-preview-frame-left) !important;
  right: auto !important;
  width: var(--ppe-device-preview-width) !important;
  max-width: var(--ppe-device-preview-width) !important;
  top: calc(
    var(--ppe-device-preview-frame-top) + var(--ppe-navbar-height) +
      var(--ppe-safe-top)
  ) !important;
  max-height: min(
    75vh,
    calc(
      var(--ppe-device-preview-frame-height) - var(--ppe-navbar-height) -
        var(--ppe-safe-top)
    )
  );
}

@media (max-width: 575.98px) {
  .ppe-notification-bell .btn {
    padding-left: 0.4rem;
    padding-right: 0.4rem;
  }

  .nav-ppe .ppe-theme-toggle {
    --ppe-theme-toggle-size: var(--ppe-btn-height-touch, 2.75rem);
  }
}

/* Страница /ppe/notifications/ — вкладки фильтра (перенос, без гориз. скролла) */
.ppe-notif-page-tabs {
  flex-wrap: wrap;
  gap: 0.2rem 0.3rem;
  row-gap: 0.15rem;
  overflow: visible;
  -webkit-overflow-scrolling: auto;
}

.ppe-notif-page-tabs .nav-item {
  margin-bottom: 0;
  flex: 0 0 auto;
}

.ppe-notif-page-tabs .nav-link {
  white-space: nowrap;
  font-size: 0.75rem;
  line-height: 1.2;
  padding: 0.3rem 0.45rem;
  min-height: 2rem;
  display: inline-flex;
  align-items: center;
  gap: 0.2rem;
}

.ppe-notif-page-tabs .ppe-notif-tab-badge {
  font-size: 0.6rem;
  min-width: 1rem;
  padding: 0.12em 0.35em;
  line-height: 1.15;
}

@media (min-width: 576px) {
  .ppe-notif-page-tabs .nav-link {
    font-size: 0.8125rem;
    padding: 0.32rem 0.55rem;
  }
}

@media (max-width: 575.98px) {
  .ppe-notif-page-tabs .nav-link {
    font-size: 0.7rem;
    padding: 0.35rem 0.4rem;
    min-height: 2rem;
  }
}

.ppe-notif-page-list {
  display: flex;
  flex-direction: column;
  gap: 0;
}

.ppe-notif-item--page {
  background: var(--bs-body-bg);
  border: 1px solid var(--bs-border-color-translucent, rgba(0, 0, 0, 0.1));
  border-left-width: 3px;
  border-radius: 0.5rem;
  padding: 1rem 1.1rem;
  margin-bottom: 0.75rem;
}

.ppe-notif-item--page.ppe-notif-item--unread {
  background: rgba(var(--bs-primary-rgb), 0.05);
}

.ppe-notif-item--page .ppe-notif-item-title {
  font-size: 1rem;
  line-height: 1.35;
}

.ppe-notif-item--page .ppe-notif-item-body {
  margin-top: 0.5rem;
  color: var(--bs-body-color);
}

.ppe-notif-page-empty {
  border: 1px dashed var(--bs-border-color);
  border-radius: 0.5rem;
}

@media (max-width: 991.98px) {
  .ppe-notif-page-list {
    gap: 0.65rem;
  }

  .ppe-notif-item--page {
    box-shadow: 0 0.125rem 0.5rem rgba(0, 0, 0, 0.06);
    margin-bottom: 0;
  }
}

/* Session detail / update: exam rooms — columns by first digit, no inner scroll */
#exam-rooms .ppe-exam-rooms-picker,
#exam-rooms-banner #exam-rooms .ppe-exam-rooms-picker,
#session-rooms-block .ppe-exam-rooms-picker {
  max-height: none;
  overflow: visible;
}

#exam-rooms .ppe-exam-rooms-building:last-child,
#exam-rooms-banner #exam-rooms .ppe-exam-rooms-building:last-child,
#session-rooms-block .ppe-exam-rooms-building:last-child {
  margin-bottom: 0;
}

.ppe-exam-rooms-digit-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 0.75rem;
}

@media (min-width: 768px) {
  .ppe-exam-rooms-digit-grid {
    grid-template-columns: repeat(var(--ppe-room-cols, 1), minmax(0, 1fr));
  }
}

.ppe-exam-rooms-digit-col {
  min-width: 0;
}

.ppe-exam-rooms-digit-heading {
  line-height: 1.2;
}

#exam-rooms .ppe-exam-rooms-rooms .form-check-label,
#exam-rooms-banner #exam-rooms .ppe-exam-rooms-rooms .form-check-label,
#session-rooms-block .ppe-exam-rooms-rooms .form-check-label {
  line-height: 1.3;
  word-break: break-word;
}

/* Session detail: collapsible blocks (comments, rooms, equipment, …) */
.ppe-session-detail-collapse-toggle {
  border-radius: var(--bs-border-radius, 0.375rem);
}

.ppe-session-detail-collapse-toggle:hover,
.ppe-session-detail-collapse-toggle:focus-visible {
  background: var(--bs-tertiary-bg, rgba(0, 0, 0, 0.04));
}

.ppe-session-collapse-chevron {
  transition: transform 0.2s ease;
}

.ppe-session-collapse-chevron--open {
  transform: rotate(180deg);
}

[data-ppe-session-collapse-section] .card-body.border-top {
  border-top-color: var(--bs-border-color-translucent, rgba(0, 0, 0, 0.1)) !important;
}

/* Collapsible card sections (home, profile, …) */
.ppe-collapse-toggle {
  border-radius: var(--bs-border-radius, 0.375rem);
  min-height: 2.5rem;
}

.ppe-collapse-toggle:hover,
.ppe-collapse-toggle:focus-visible {
  background: var(--bs-tertiary-bg, rgba(0, 0, 0, 0.04));
}

.ppe-collapse-chevron {
  transition: transform 0.2s ease;
}

.ppe-collapse-chevron--open {
  transform: rotate(180deg);
}

[data-ppe-collapse-section] [data-ppe-collapse-panel] > .card-body {
  border-top: 1px solid var(--bs-border-color-translucent, rgba(0, 0, 0, 0.1));
}

/* Profile → Уведомления: группы каналов и статусы push */
.ppe-notif-channel-group {
  padding: 0.75rem 1rem;
  border: 1px solid var(--bs-border-color-translucent, rgba(0, 0, 0, 0.1));
  border-radius: var(--bs-border-radius, 0.375rem);
  background: var(--bs-body-bg, #fff);
}

.ppe-notif-channel-group__head {
  display: flex;
  align-items: flex-start;
  gap: 0.75rem;
}

.ppe-notif-channel-group__icon {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 2rem;
  height: 2rem;
  border-radius: 50%;
  background: color-mix(in srgb, var(--bs-primary) 12%, transparent);
  color: var(--bs-primary);
  flex-shrink: 0;
  font-size: 1.1rem;
}

.ppe-notif-status-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(7rem, 1fr));
  gap: 0.5rem 1rem;
}

.ppe-notif-status-item .badge {
  font-weight: 500;
}

.ppe-notif-ios-guide summary {
  cursor: pointer;
  color: var(--bs-primary);
}

.ppe-notif-ios-guide[open] summary {
  margin-bottom: 0.25rem;
}

/* Automatic notification settings: themed accordion sections */
.ppe-auto-notif-accordion .accordion-button,
.ppe-msg-tpl-accordion .accordion-button {
  font-weight: 600;
}

.ppe-auto-notif-accordion .accordion-button .badge,
.ppe-msg-tpl-accordion .accordion-button .badge {
  font-size: 0.75rem;
  font-weight: 500;
}

.ppe-msg-tpl-channels .badge {
  font-weight: 500;
  font-size: 0.7rem;
}

/* Message template list cards (Уведомления / Письма): readable grid + header */
.ppe-list-cards-grid.ppe-msg-tpl-list-cards {
  grid-template-columns: 1fr;
}

@media (min-width: 577px) {
  .ppe-list-cards-grid.ppe-msg-tpl-list-cards {
    grid-template-columns: repeat(2, minmax(min(100%, 320px), 1fr));
  }
}

@media (min-width: 992px) and (max-width: 1199.98px) {
  .ppe-list-cards-grid.ppe-msg-tpl-list-cards {
    grid-template-columns: repeat(2, minmax(min(100%, 360px), 1fr));
  }
}

.ppe-list-cards-grid .ppe-mobile-list-card-header {
  row-gap: 0.35rem;
}

.ppe-list-cards-grid .ppe-mobile-list-card-header > .ppe-actions-mobile {
  margin-left: auto;
  align-self: flex-start;
}

.ppe-list-cards-grid .ppe-mobile-list-subtitle {
  min-width: 0;
}

.ppe-list-cards-grid .ppe-mobile-list-code {
  display: inline-block;
  max-width: 100%;
  font-family: var(--bs-font-monospace, ui-monospace, monospace);
  font-size: 0.75rem;
  line-height: 1.3;
  overflow-wrap: anywhere;
  word-break: normal;
  white-space: normal;
}

@container ppe-list-cards-wrap (max-width: 360px) {
  .ppe-list-cards-grid .ppe-mobile-list-card-header > .ppe-actions-mobile {
    width: 100%;
    margin-left: 0;
    justify-content: flex-start;
  }
}

.ppe-auto-notif-accordion .accordion-body > .d-lg-none > .card:last-child {
  margin-bottom: 0 !important;
}

.ppe-auto-notif-accordion .accordion-item.ppe-form-card {
  overflow: hidden;
}

.ppe-auto-notif-table thead th {
  font-size: 0.8125rem;
  font-weight: 600;
  white-space: nowrap;
}

.ppe-auto-notif-col-name {
  min-width: 12rem;
  width: 34%;
}

.ppe-auto-notif-col-when {
  min-width: 10rem;
  width: 26%;
}

.ppe-auto-notif-col-whom {
  min-width: 10rem;
  width: 26%;
}

.ppe-auto-notif-col-enabled {
  width: 4rem;
}

.ppe-auto-notif-badge {
  font-size: 0.6875rem;
  font-weight: 500;
}

.ppe-auto-rule-unused {
  opacity: 0.72;
}

.ppe-auto-rule-unused .ppe-auto-rule-summary > td,
.ppe-auto-rule-unused.ppe-auto-notif-mobile-card {
  background-color: var(--bs-tertiary-bg, #f8f9fa);
}

.ppe-auto-rule-details > summary {
  cursor: pointer;
  list-style: none;
  color: var(--bs-link-color, #0d6efd);
}

.ppe-auto-rule-details > summary::-webkit-details-marker {
  display: none;
}

.ppe-auto-rule-details > summary::before {
  content: "▸ ";
  display: inline-block;
  transition: transform 0.15s ease;
}

.ppe-auto-rule-details[open] > summary::before {
  transform: rotate(90deg);
}

.ppe-auto-rule-details-row + .ppe-auto-rule-details-row td,
.ppe-auto-rule-summary + .ppe-auto-rule-details-row td {
  border-top: none;
}

.ppe-auto-notif-scroll {
  max-height: min(12rem, 40vh);
  overflow-y: auto;
}

@media (max-width: 991.98px) {
  .ppe-auto-notif-target-panel {
    margin-top: 0.5rem;
  }
}

/* Бейджи статуса этапа (StageInstance); цвета — CSS-переменные из ColorSettings.stage_status_ui */
.badge.ppe-stage-status-badge.ppe-stage-status--pending {
  color: var(--ppe-stage-status-pending-text, #ffffff);
  background-color: var(--ppe-stage-status-pending-bg, #6c757d);
}

.badge.ppe-stage-status-badge.ppe-stage-status--in_progress {
  color: var(--ppe-stage-status-in_progress-text, #212529);
  background-color: var(--ppe-stage-status-in_progress-bg, #ffc107);
}

.badge.ppe-stage-status-badge.ppe-stage-status--overdue {
  color: var(--ppe-stage-status-overdue-text, #ffffff);
  background-color: var(--ppe-stage-status-overdue-bg, #dc3545);
}

.badge.ppe-stage-status-badge.ppe-stage-status--done {
  color: var(--ppe-stage-status-done-text, #ffffff);
  background-color: var(--ppe-stage-status-done-bg, #198754);
}

/* Закрываемые подсказки (localStorage: ppe_hint_dismissed:{hint_key}) */
.ppe-dismissible-hint > .d-flex {
  align-items: center;
  gap: 0.5rem;
}

.ppe-dismissible-hint .btn-close {
  position: absolute;
  top: 50%;
  right: 0.75rem;
  transform: translateY(-50%);
  flex-shrink: 0;
  margin: 0;
  padding: 0.5rem;
}

/* Многострочные: крестик у верхнего края блока текста */
.ppe-dismissible-hint > .d-flex:has(.mt-2),
.ppe-dismissible-hint > .d-flex:has(.d-block) {
  align-items: flex-start;
}

.ppe-dismissible-hint > .d-flex:has(.mt-2) .btn-close,
.ppe-dismissible-hint > .d-flex:has(.d-block) .btn-close {
  top: 0.65rem;
  transform: none;
}

@media (max-width: 991.98px) {
  .ppe-dismissible-hint .btn-close {
    right: 0.5rem;
    min-width: 2.75rem;
    min-height: 2.75rem;
  }
}

.ppe-dismissible-hint.ppe-home-intro .flex-grow-1 {
  line-height: 1.45;
}

/* Profile / compose: одна колонка, выровненные форма, карточки и таблица */
.ppe-main .ppe-page-content {
  width: 100%;
  max-width: 42rem;
  margin-inline: 0 auto 0;
  min-width: 0;
}

.ppe-main .ppe-page-content > .ppe-breadcrumbs {
  margin-bottom: 0.75rem;
}

.ppe-main .ppe-page-content .ppe-breadcrumbs .breadcrumb {
  padding: 0.5rem 0.75rem;
  margin-bottom: 0;
  background-color: var(--bs-tertiary-bg, #f8f9fa);
  border-radius: var(--bs-border-radius, 0.375rem);
}

.ppe-main .ppe-page-content .ppe-form-card,
.ppe-main .ppe-page-content .ppe-page-content-section {
  width: 100%;
  max-width: 100%;
  min-width: 0;
}

.ppe-main .ppe-page-content .ppe-form-card > .table-responsive {
  border-radius: inherit;
}

.ppe-main .ppe-page-content .ppe-form-card .table {
  width: 100%;
  margin-bottom: 0;
}

.ppe-main .ppe-page-content .ppe-dismissible-hint {
  margin-bottom: 1rem;
}

@media (min-width: 768px) {
  .ppe-main .ppe-page-content .ppe-form-card > .card-body {
    padding: 1.25rem 1.5rem;
  }
}

/* Password field: eye toggle in input-group (glass btn, touch target). */
.ppe-password-input-group > .ppe-password-toggle-btn {
  --ppe-action-btn-size: var(--ppe-btn-height-touch, 2.75rem);
  flex: 0 0 auto;
  background-color: var(--ppe-glass-bg);
  border-color: var(--ppe-glass-border);
  backdrop-filter: blur(var(--ppe-glass-blur));
  -webkit-backdrop-filter: blur(var(--ppe-glass-blur));
  touch-action: manipulation;
}

.ppe-password-input-group > .ppe-password-toggle-btn:hover,
.ppe-password-input-group > .ppe-password-toggle-btn:focus-visible {
  background-color: var(--ppe-glass-bg-hover);
  border-color: var(--ppe-glass-border);
}

.ppe-password-input-group > .form-control:focus {
  z-index: 3;
}

.ppe-password-input-group > .ppe-password-toggle-btn {
  z-index: 4;
}

[data-theme="dark"] .ppe-password-input-group > .form-control {
  border-right-color: rgba(255, 255, 255, 0.12);
}

[data-theme="dark"] .ppe-password-input-group > .ppe-password-toggle-btn {
  color: var(--ppe-text-muted);
}

html.ppe-mobile-simplified .ppe-form-mobile-stack .ppe-password-input-group {
  flex-wrap: nowrap;
}

html.ppe-mobile-simplified .ppe-form-mobile-stack .ppe-password-input-group > .ppe-password-toggle-btn {
  width: var(--ppe-action-btn-size, 2.75rem);
  margin-top: 0;
}

html.ppe-mobile-simplified .ppe-form-mobile-stack .ppe-password-input-group > .btn:not(.ppe-password-toggle-btn) {
  flex: 1 1 auto;
  min-width: 0;
}

/* === Light theme mobile: readable surfaces over hero banner (v84) === */
@media (max-width: 991.98px) {
  [data-theme="light"] {
    --ppe-banner-opacity: 0.38;
    --ppe-banner-overlay: rgba(244, 247, 251, 0.55);
    --ppe-row-glass-mix: 72%;
    --ppe-row-glass-mix-hover: 82%;
    --ppe-row-glass-base: #ffffff;
    --ppe-glass-bg: rgba(255, 255, 255, 0.78);
    --ppe-glass-surface-bg: rgba(255, 255, 255, 0.72);
    --ppe-glass-surface-table-body: rgba(255, 255, 255, 0.82);
  }

  /* Overview shell only — tasks/sessions stay transparent (v72/v93). */
  [data-theme="light"] .ppe-main #overview.card {
    background-color: var(--ppe-glass-surface-bg) !important;
    backdrop-filter: blur(var(--ppe-glass-blur));
    -webkit-backdrop-filter: blur(var(--ppe-glass-blur));
  }

  [data-theme="light"] .ppe-main #overview .ppe-home-overview .ppe-overview-stat,
  [data-theme="light"] .ppe-main #overview .ppe-home-overview .col > .card.bg-light {
    background-color: var(--ppe-glass-bg) !important;
    backdrop-filter: blur(var(--ppe-glass-blur));
    -webkit-backdrop-filter: blur(var(--ppe-glass-blur));
  }

  /* Building-tinted mobile tiles (sessions, tasks, lists) */
  [data-theme="light"] .ppe-main .card.ppe-row-building:not(.table-danger),
  [data-theme="light"] .ppe-main article.ppe-row-building:not(.table-danger),
  [data-theme="light"] .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
  [data-theme="light"] .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
  [data-theme="light"] #today-tasks .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
  [data-theme="light"] #tasks .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
  [data-theme="light"] .ppe-main #today-tasks .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
  [data-theme="light"] .ppe-main #tasks .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger) {
    background-color: color-mix(
      in srgb,
      var(--ppe-row-building-bg, #ffffff) var(--ppe-row-glass-mix, 72%),
      var(--ppe-row-glass-base, #ffffff)
    ) !important;
    backdrop-filter: blur(var(--ppe-glass-blur));
    -webkit-backdrop-filter: blur(var(--ppe-glass-blur));
  }

  [data-theme="light"] table.ppe-table-mobile-cards tbody tr {
    background-color: color-mix(
      in srgb,
      var(--ppe-row-building-bg, #ffffff) var(--ppe-row-glass-mix, 72%),
      var(--ppe-row-glass-base, #ffffff)
    );
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
  }

  [data-theme="light"] table.ppe-table-mobile-cards tbody tr:not(.ppe-row-building) {
    background-color: var(--ppe-glass-bg);
  }

  [data-theme="light"] .ppe-main > .ppe-content {
    padding-bottom: calc(1rem + var(--ppe-safe-bottom));
  }

  /* Home mobile tiles (v93): transparent over hero — override light phone glass. */
  [data-theme="light"] .ppe-main #today-tasks .ppe-list-cards-grid.ppe-mobile-task-cards > .ppe-task-mobile-card.card,
  [data-theme="light"] .ppe-main #today-tasks .ppe-list-cards-grid.ppe-mobile-task-cards > article.ppe-task-mobile-card.card,
  [data-theme="light"] .ppe-main #today-tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
  [data-theme="light"] .ppe-main #today-tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
  [data-theme="light"] .ppe-main #tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
  [data-theme="light"] .ppe-main #tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
  [data-theme="light"] .ppe-main #sessions .ppe-list-cards-grid > .ppe-session-mobile-card.card.ppe-row-building:not(.table-danger),
  [data-theme="light"] .ppe-main #sessions .ppe-list-cards-grid > article.ppe-session-mobile-card.card.ppe-row-building:not(.table-danger) {
    --bs-card-bg: transparent !important;
    background-color: transparent !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    box-shadow: none !important;
  }

  [data-theme="light"] .ppe-main #today-tasks.card,
  [data-theme="light"] .ppe-main #tasks.card,
  [data-theme="light"] .ppe-main #sessions.card {
    background: transparent !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
  }

  [data-theme="light"] .ppe-main #today-tasks .ppe-list-cards-grid .card-body.ppe-mobile-list-compact,
  [data-theme="light"] .ppe-main #tasks .ppe-list-cards-grid .card-body.ppe-mobile-list-compact,
  [data-theme="light"] .ppe-main #sessions .ppe-list-cards-grid .card-body.ppe-mobile-list-compact {
    background-color: transparent !important;
  }
}

/* v104: mobile task/exam tiles — visible pastel tint (pattern still shows through). */
:root {
  --ppe-task-mobile-card-glass-mix: 34%;
  --ppe-task-mobile-card-glass-mix-hover: 40%;
  --ppe-task-mobile-card-border-mix: 44%;
  --ppe-task-mobile-card-shadow: 0 1px 4px rgba(0, 0, 0, 0.07);
}

[data-theme="dark"] {
  --ppe-task-mobile-card-glass-mix: 36%;
  --ppe-task-mobile-card-glass-mix-hover: 42%;
  --ppe-task-mobile-card-border-mix: 48%;
  --ppe-task-mobile-card-shadow: 0 1px 5px rgba(0, 0, 0, 0.28);
}

.ppe-main #today-tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
.ppe-main #today-tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
.ppe-main #tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
.ppe-main #tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
.ppe-main #sessions .ppe-list-cards-grid > .ppe-session-mobile-card.card.ppe-row-building:not(.table-danger),
.ppe-main #sessions .ppe-list-cards-grid > article.ppe-session-mobile-card.card.ppe-row-building:not(.table-danger),
.ppe-nearest-tasks-mobile .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
.ppe-nearest-tasks-mobile .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
.ppe-home-sessions-mobile .ppe-list-cards-grid > .ppe-session-mobile-card.card.ppe-row-building:not(.table-danger),
.ppe-home-sessions-mobile .ppe-list-cards-grid > article.ppe-session-mobile-card.card.ppe-row-building:not(.table-danger),
.ppe-sessions-mobile .ppe-list-cards-grid > .ppe-session-mobile-card.card.ppe-row-building:not(.table-danger),
.ppe-sessions-mobile .ppe-list-cards-grid > article.ppe-session-mobile-card.card.ppe-row-building:not(.table-danger),
.ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
.ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
.ppe-list-cards-grid > .ppe-session-mobile-card.card.ppe-row-building:not(.table-danger),
.ppe-list-cards-grid > article.ppe-session-mobile-card.card.ppe-row-building:not(.table-danger),
#today-tasks .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
#tasks .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
[data-theme="dark"] .ppe-main #today-tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
[data-theme="dark"] .ppe-main #today-tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
[data-theme="dark"] .ppe-main #tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
[data-theme="dark"] .ppe-main #tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
[data-theme="dark"] .ppe-main #sessions .ppe-list-cards-grid > .ppe-session-mobile-card.card.ppe-row-building:not(.table-danger),
[data-theme="dark"] .ppe-main #sessions .ppe-list-cards-grid > article.ppe-session-mobile-card.card.ppe-row-building:not(.table-danger),
[data-theme="dark"] #today-tasks .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
[data-theme="dark"] #tasks .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
[data-theme="light"] .ppe-main #today-tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
[data-theme="light"] .ppe-main #today-tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
[data-theme="light"] .ppe-main #tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
[data-theme="light"] .ppe-main #tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger),
[data-theme="light"] .ppe-main #sessions .ppe-list-cards-grid > .ppe-session-mobile-card.card.ppe-row-building:not(.table-danger),
[data-theme="light"] .ppe-main #sessions .ppe-list-cards-grid > article.ppe-session-mobile-card.card.ppe-row-building:not(.table-danger) {
  --ppe-task-mobile-card-tint: color-mix(
    in srgb,
    var(--ppe-row-building-bg, transparent) var(--ppe-task-mobile-card-glass-mix, 34%),
    transparent
  );
  background-color: var(--ppe-task-mobile-card-tint) !important;
  border: 1px solid color-mix(
    in srgb,
    var(--ppe-row-building-bg, transparent) var(--ppe-task-mobile-card-border-mix, 44%),
    transparent
  ) !important;
  box-shadow: var(--ppe-task-mobile-card-shadow) !important;
  backdrop-filter: blur(4px) !important;
  -webkit-backdrop-filter: blur(4px) !important;
}

.ppe-main #today-tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger):hover,
.ppe-main #today-tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger):hover,
.ppe-main #today-tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger):focus-visible,
.ppe-main #today-tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger):focus-visible,
.ppe-main #tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger):hover,
.ppe-main #tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger):hover,
.ppe-main #tasks .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger):focus-visible,
.ppe-main #tasks .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger):focus-visible,
.ppe-main #sessions .ppe-list-cards-grid > .ppe-session-mobile-card.card.ppe-row-building:not(.table-danger):hover,
.ppe-main #sessions .ppe-list-cards-grid > article.ppe-session-mobile-card.card.ppe-row-building:not(.table-danger):hover,
.ppe-main #sessions .ppe-list-cards-grid > .ppe-session-mobile-card.card.ppe-row-building:not(.table-danger):focus-visible,
.ppe-main #sessions .ppe-list-cards-grid > article.ppe-session-mobile-card.card.ppe-row-building:not(.table-danger):focus-visible,
.ppe-nearest-tasks-mobile .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger):hover,
.ppe-nearest-tasks-mobile .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger):hover,
.ppe-nearest-tasks-mobile .ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger):focus-visible,
.ppe-nearest-tasks-mobile .ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger):focus-visible,
.ppe-home-sessions-mobile .ppe-list-cards-grid > .ppe-session-mobile-card.card.ppe-row-building:not(.table-danger):hover,
.ppe-home-sessions-mobile .ppe-list-cards-grid > article.ppe-session-mobile-card.card.ppe-row-building:not(.table-danger):hover,
.ppe-home-sessions-mobile .ppe-list-cards-grid > .ppe-session-mobile-card.card.ppe-row-building:not(.table-danger):focus-visible,
.ppe-home-sessions-mobile .ppe-list-cards-grid > article.ppe-session-mobile-card.card.ppe-row-building:not(.table-danger):focus-visible,
.ppe-sessions-mobile .ppe-list-cards-grid > .ppe-session-mobile-card.card.ppe-row-building:not(.table-danger):hover,
.ppe-sessions-mobile .ppe-list-cards-grid > article.ppe-session-mobile-card.card.ppe-row-building:not(.table-danger):hover,
.ppe-sessions-mobile .ppe-list-cards-grid > .ppe-session-mobile-card.card.ppe-row-building:not(.table-danger):focus-visible,
.ppe-sessions-mobile .ppe-list-cards-grid > article.ppe-session-mobile-card.card.ppe-row-building:not(.table-danger):focus-visible,
.ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger):hover,
.ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger):hover,
.ppe-list-cards-grid > .ppe-task-mobile-card.card.ppe-row-building:not(.table-danger):focus-visible,
.ppe-list-cards-grid > article.ppe-task-mobile-card.card.ppe-row-building:not(.table-danger):focus-visible,
.ppe-list-cards-grid > .ppe-session-mobile-card.card.ppe-row-building:not(.table-danger):hover,
.ppe-list-cards-grid > article.ppe-session-mobile-card.card.ppe-row-building:not(.table-danger):hover,
.ppe-list-cards-grid > .ppe-session-mobile-card.card.ppe-row-building:not(.table-danger):focus-visible,
.ppe-list-cards-grid > article.ppe-session-mobile-card.card.ppe-row-building:not(.table-danger):focus-visible {
  --ppe-task-mobile-card-tint: color-mix(
    in srgb,
    var(--ppe-row-building-bg, transparent) var(--ppe-task-mobile-card-glass-mix-hover, 40%),
    transparent
  );
  background-color: var(--ppe-task-mobile-card-tint) !important;
  border-color: color-mix(
    in srgb,
    var(--ppe-row-building-bg, transparent) calc(var(--ppe-task-mobile-card-border-mix, 44%) + 6%),
    transparent
  ) !important;
  box-shadow: var(--ppe-task-mobile-card-shadow) !important;
}

.ppe-main #today-tasks .ppe-task-mobile-card.ppe-row-building:not(.table-danger) > .card-body.ppe-mobile-list-compact,
.ppe-main #tasks .ppe-task-mobile-card.ppe-row-building:not(.table-danger) > .card-body.ppe-mobile-list-compact,
.ppe-main #sessions .ppe-session-mobile-card.ppe-row-building:not(.table-danger) > .card-body.ppe-mobile-list-compact,
.ppe-nearest-tasks-mobile .ppe-task-mobile-card.ppe-row-building:not(.table-danger) > .card-body.ppe-mobile-list-compact,
.ppe-home-sessions-mobile .ppe-session-mobile-card.ppe-row-building:not(.table-danger) > .card-body.ppe-mobile-list-compact,
.ppe-sessions-mobile .ppe-session-mobile-card.ppe-row-building:not(.table-danger) > .card-body.ppe-mobile-list-compact,
.ppe-list-cards-grid > .ppe-task-mobile-card.ppe-row-building:not(.table-danger) > .card-body.ppe-mobile-list-compact,
.ppe-list-cards-grid > article.ppe-task-mobile-card.ppe-row-building:not(.table-danger) > .card-body.ppe-mobile-list-compact,
.ppe-list-cards-grid > .ppe-session-mobile-card.ppe-row-building:not(.table-danger) > .card-body.ppe-mobile-list-compact,
.ppe-list-cards-grid > article.ppe-session-mobile-card.ppe-row-building:not(.table-danger) > .card-body.ppe-mobile-list-compact {
  background-color: var(--ppe-task-mobile-card-tint, color-mix(
    in srgb,
    var(--ppe-row-building-bg, transparent) var(--ppe-task-mobile-card-glass-mix, 34%),
    transparent
  )) !important;
}

/* === Vertical density (v87): moderate tightening; mobile touch targets preserved === */
.ppe-main .card.mb-3,
.ppe-main section.card.mb-3 {
  margin-bottom: 0.65rem !important;
}

.ppe-main .card > .card-body:not([class*="p-"]),
.ppe-main .card.card-body:not([class*="p-"]) {
  padding: 0.5rem 0.65rem;
}

@media (min-width: 768px) {
  .ppe-main .card > .card-body:not([class*="p-"]),
  .ppe-main .card.card-body:not([class*="p-"]) {
    padding: 0.65rem 0.85rem;
  }
}

[data-ppe-collapse-section] .card-header > .d-flex,
[data-ppe-session-collapse-section] > .card-header > .d-flex,
[data-ppe-session-collapse-section] .card > .card-header > .d-flex {
  padding: 0.4rem 0.6rem 0 !important;
}

@media (min-width: 768px) {
  [data-ppe-collapse-section] .card-header > .d-flex,
  [data-ppe-session-collapse-section] > .card-header > .d-flex,
  [data-ppe-session-collapse-section] .card > .card-header > .d-flex {
    padding: 0.55rem 0.75rem 0 !important;
  }
}

[data-ppe-collapse-section] [data-ppe-collapse-panel] > .card-body,
[data-ppe-session-collapse-section] [data-ppe-collapse-panel] > .card-body {
  padding-top: 0 !important;
  padding-bottom: 0.45rem !important;
  padding-left: 0.6rem !important;
  padding-right: 0.6rem !important;
}

@media (min-width: 768px) {
  [data-ppe-collapse-section] [data-ppe-collapse-panel] > .card-body,
  [data-ppe-session-collapse-section] [data-ppe-collapse-panel] > .card-body {
    padding-bottom: 0.55rem !important;
    padding-left: 0.75rem !important;
    padding-right: 0.75rem !important;
  }
}

/* Home: compact collapsible section headers (#overview, #today-tasks, #tasks, #sessions) */
.ppe-main #overview.card > .card-header > .ppe-home-section-header,
.ppe-main #today-tasks.card > .card-header > .ppe-home-section-header,
.ppe-main #tasks.card > .card-header > .ppe-home-section-header,
.ppe-main #sessions.card > .card-header > .ppe-home-section-header {
  padding: 0.15rem 0.4rem 0 !important;
  gap: 0.25rem !important;
}

@media (min-width: 768px) {
  .ppe-main #overview.card > .card-header > .ppe-home-section-header,
  .ppe-main #today-tasks.card > .card-header > .ppe-home-section-header,
  .ppe-main #tasks.card > .card-header > .ppe-home-section-header,
  .ppe-main #sessions.card > .card-header > .ppe-home-section-header {
    padding: 0.25rem 0.5rem 0 !important;
    gap: 0.3rem !important;
  }
}

.ppe-main #overview.card > .card-header > .ppe-home-section-header .ppe-collapse-toggle,
.ppe-main #today-tasks.card > .card-header > .ppe-home-section-header .ppe-collapse-toggle,
.ppe-main #tasks.card > .card-header > .ppe-home-section-header .ppe-collapse-toggle,
.ppe-main #sessions.card > .card-header > .ppe-home-section-header .ppe-collapse-toggle {
  min-height: 0 !important;
  gap: 0.2rem;
  line-height: 1.2;
}

.ppe-main #overview.card > .card-header > .ppe-home-section-header .ppe-collapse-chevron,
.ppe-main #today-tasks.card > .card-header > .ppe-home-section-header .ppe-collapse-chevron,
.ppe-main #tasks.card > .card-header > .ppe-home-section-header .ppe-collapse-chevron,
.ppe-main #sessions.card > .card-header > .ppe-home-section-header .ppe-collapse-chevron {
  font-size: 0.75rem;
}

.ppe-main #overview.card > .card-header > .ppe-home-section-header .btn-sm,
.ppe-main #today-tasks.card > .card-header > .ppe-home-section-header .btn-sm,
.ppe-main #tasks.card > .card-header > .ppe-home-section-header .btn-sm,
.ppe-main #sessions.card > .card-header > .ppe-home-section-header .btn-sm,
.ppe-main #overview.card > .card-header > .ppe-home-section-header > a.btn {
  --ppe-btn-pill-min-height: 1.375rem;
  min-height: 1.375rem !important;
}

@media (max-width: 991.98px) {
  .ppe-main #overview.card > .card-header > .ppe-home-section-header .ppe-collapse-toggle,
  .ppe-main #today-tasks.card > .card-header > .ppe-home-section-header .ppe-collapse-toggle,
  .ppe-main #tasks.card > .card-header > .ppe-home-section-header .ppe-collapse-toggle,
  .ppe-main #sessions.card > .card-header > .ppe-home-section-header .ppe-collapse-toggle {
    min-height: 1.75rem !important;
  }
}

@media (max-width: 991.98px) {
  .ppe-collapse-toggle,
  .ppe-session-detail-collapse-toggle {
    min-height: var(--ppe-btn-height-touch, 2.75rem);
  }

  .ppe-main .table:not(.permission-matrix):not(.ppe-gia-import-preview-table) > :not(caption) > * > th,
  .ppe-main .table:not(.permission-matrix):not(.ppe-gia-import-preview-table) > :not(caption) > * > td {
    --ppe-cell-pad-y: 0.35rem;
  }
}

@media (min-width: 992px) {
  .ppe-list-desktop .ppe-table-compact.table-sm > :not(caption) > * > * {
    padding-top: 0.15rem;
    padding-bottom: 0.15rem;
  }
}

.ppe-page-login .card-body {
  padding: 0.85rem 1rem;
}

@media (min-width: 768px) {
  .ppe-page-login .card-body {
    padding: 1rem 1.25rem;
  }
}

.ppe-main .h3.mb-1,
.ppe-main h1.h3 {
  margin-bottom: 0.15rem !important;
}

.ppe-main .d-flex.mb-3:has(> div > .h3),
.ppe-main .d-flex.mb-3:has(> .h3) {
  margin-bottom: 0.5rem !important;
}

[data-theme="dark"] .ppe-main .card.mb-3,
[data-theme="dark"] .ppe-main section.card.mb-3 {
  margin-bottom: 0.65rem !important;
}

/* RCOI sync: сводка ошибок, статистика прогона, таблица файлов */
.ppe-rcoi-error-summary {
  max-height: 12rem;
  overflow-y: auto;
  padding: 0.5rem 0.65rem;
  margin-bottom: 0.75rem;
  border: 1px solid var(--bs-danger-border-subtle, rgba(220, 53, 69, 0.35));
  border-radius: var(--bs-border-radius, 0.375rem);
  background: var(--bs-danger-bg-subtle, rgba(220, 53, 69, 0.08));
}

.ppe-rcoi-error-summary__item + .ppe-rcoi-error-summary__item {
  margin-top: 0.35rem;
}

.ppe-rcoi-error-summary__details > summary {
  cursor: pointer;
  list-style-position: outside;
}

.ppe-rcoi-error-summary__text {
  word-break: break-word;
}

.ppe-rcoi-run-stats dt {
  font-weight: 500;
}

.ppe-rcoi-run-stats dd {
  font-weight: 600;
}

/* Админ-таблицы: центрирование, равные отступы, перенос по границам слов, без фикс. ширин колонок */
.ppe-admin-data-table-wrap {
  -webkit-overflow-scrolling: touch;
}

.ppe-main table.ppe-table-admin-data {
  table-layout: auto;
  width: 100%;
}

.ppe-main table.ppe-table-admin-data.ppe-table-uniform-pad > :not(caption) > * > th,
.ppe-main table.ppe-table-admin-data.ppe-table-uniform-pad > :not(caption) > * > td {
  text-align: center;
  vertical-align: middle;
  word-break: normal;
  overflow-wrap: break-word;
  hyphens: auto;
}

/* Дата экзамена / время прогона — без переноса посередине (03.06.2026). */
.ppe-main table.ppe-table-admin-data .ppe-rcoi-col-date {
  white-space: nowrap;
  min-width: 5.75rem;
  word-break: keep-all;
  overflow-wrap: normal;
}

/* Длинные имена файлов — перенос только по границам слов / anywhere. */
.ppe-main table.ppe-table-admin-data .ppe-td-anywhere,
.ppe-main table.ppe-table-admin-data .ppe-th-anywhere {
  overflow-wrap: anywhere;
  word-break: normal;
}

.ppe-main table.ppe-table-admin-data .ppe-rcoi-file-status-badge {
  font-size: 0.75rem;
  font-weight: 600;
}

.ppe-main table.ppe-table-admin-data td.text-muted {
  color: var(--bs-secondary-color) !important;
}

/* === Mobile: profile assignments, staff list, RCOI files === */
@media (max-width: 991.98px) {
  .ppe-profile-assignments-wrap.table-responsive {
    overflow-x: visible;
  }

  table.ppe-profile-assignments-table tbody td[data-label="Дата"],
  table.ppe-profile-assignments-table tbody td[data-label="ЕГЭ/ОГЭ"] {
    white-space: nowrap;
    word-break: keep-all;
    overflow-wrap: normal;
  }

  table.ppe-profile-assignments-table tbody td[data-label="Экзамен"] .ppe-profile-assignment-open-btn {
    min-height: 2.75rem;
    min-width: 7.5rem;
    display: inline-flex;
    align-items: center;
    justify-content: center;
  }

  table.ppe-profile-assignments-table tbody td[data-label="Роль/должность"] .ppe-exam-assignee-position-cell {
    text-align: center;
  }

  .ppe-staff-assignment-mobile-card .text-nowrap,
  table.ppe-staff-assignments-table .text-nowrap {
    white-space: nowrap;
    word-break: keep-all;
    overflow-wrap: normal;
  }

  .ppe-rcoi-source-file-mobile-card .ppe-mobile-list-title,
  .ppe-rcoi-run-file-mobile-card .ppe-mobile-list-title {
    word-break: normal;
    overflow-wrap: break-word;
    hyphens: none;
  }

  .ppe-rcoi-source-file-mobile-card .ppe-rcoi-mobile-date,
  .ppe-rcoi-run-file-mobile-card .ppe-rcoi-mobile-date {
    white-space: nowrap;
    word-break: keep-all;
    overflow-wrap: normal;
  }
}
