.tt-language-switcher{position:relative;z-index:1200;font:500 13px/1.2 system-ui,-apple-system,"Segoe UI",sans-serif;direction:ltr;flex:0 0 auto}.tt-language-switcher.is-nav{margin-inline:10px}.tt-language-trigger{display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:7px 10px;border:1px solid rgba(109,124,160,.28);border-radius:10px;background:rgba(255,255,255,.94);color:#1e2a78;cursor:pointer;font-weight:700;box-shadow:0 2px 8px rgba(18,32,79,.07)}.tt-language-trigger:hover,.tt-language-trigger:focus-visible{border-color:#4bcffa;outline:none;box-shadow:0 0 0 3px rgba(75,207,250,.16)}.tt-language-menu{position:absolute;inset-block-start:calc(100% + 7px);inset-inline-end:0;min-width:180px;padding:6px;background:#fff;border:1px solid rgba(109,124,160,.24);border-radius:12px;box-shadow:0 14px 36px rgba(16,30,72,.18)}.tt-language-option{width:100%;display:flex;align-items:center;justify-content:space-between;gap:14px;padding:9px 10px;border:0;border-radius:8px;background:transparent;color:#1d2948;cursor:pointer;text-align:start;font:600 13px/1.25 inherit}.tt-language-option:hover,.tt-language-option.active{background:#eef3ff;color:#172778}.tt-language-option small{font-size:10px;color:#7783a1}.tt-language-switcher.is-floating{position:fixed;top:12px;right:12px}html[dir="rtl"] .tt-language-switcher.is-floating{right:auto;left:12px}
html[dir="rtl"] body{direction:rtl;text-align:start}html[dir="rtl"] input,html[dir="rtl"] textarea,html[dir="rtl"] select{direction:rtl;text-align:start}html[dir="rtl"] input[type="email"],html[dir="rtl"] input[type="url"],html[dir="rtl"] input[type="number"],html[dir="rtl"] .tt-force-ltr,html[dir="rtl"] code,html[dir="rtl"] pre{direction:ltr;text-align:left;unicode-bidi:embed}html[dir="rtl"] .navbar,html[dir="rtl"] .navbar ul,html[dir="rtl"] .sidebar{direction:rtl}
html[dir="rtl"] canvas,html[dir="rtl"] svg:not(.tt-language-globe svg),html[dir="rtl"] #map,html[dir="rtl"] #canvasWrap,html[dir="rtl"] #threeWrap,html[dir="rtl"] #threeContainer,html[dir="rtl"] .map-compass,html[dir="rtl"] .antenna-plot-canvas,html[dir="rtl"] .floor-plan-canvas,html[dir="rtl"] .heatmap-canvas{direction:ltr!important;text-align:left!important}html[dir="rtl"] [data-technical],html[dir="rtl"] .technical-value{direction:ltr;unicode-bidi:isolate}html[lang^="zh"] body{font-family:system-ui,-apple-system,"Segoe UI","Microsoft YaHei","PingFang SC","Noto Sans CJK SC",sans-serif}html[lang="ar"] body{font-family:system-ui,-apple-system,"Segoe UI","Noto Sans Arabic",Tahoma,sans-serif}
@media(max-width:820px){.tt-language-switcher.is-nav{margin-inline:4px}.tt-language-trigger{padding:7px 8px}.tt-language-menu{position:fixed;top:58px;right:10px;left:auto;min-width:190px}html[dir="rtl"] .tt-language-menu{right:auto;left:10px}}

/* RTL applies to product chrome only. Engineering stages retain physical
   north/east orientation and the same project coordinate system. */
html[dir="rtl"] #canvasStage,
html[dir="rtl"] #canvasContainer,
html[dir="rtl"] #view3d,
html[dir="rtl"] #threeWrap,
html[dir="rtl"] #threeContainer,
html[dir="rtl"] .floor-compare-workspace,
html[dir="rtl"] .antenna-plot-wrap,
html[dir="rtl"] .site-survey-map,
html[dir="rtl"] .scenario-preview {
  direction:ltr!important;
  text-align:left!important;
}

html[dir="rtl"] bdi,
html[dir="rtl"] .tt-technical-value,
html[dir="rtl"] [data-technical],
html[dir="rtl"] .technical-value,
html[dir="rtl"] input[type="tel"],
html[dir="rtl"] input[inputmode="numeric"],
html[dir="rtl"] input[inputmode="decimal"] {
  direction:ltr;
  text-align:left;
  unicode-bidi:isolate;
}

/* RF/orientation sliders express increasing physical values, so their axis
   must not reverse with Arabic UI chrome. */
html[dir="rtl"] input[type="range"] {
  direction:ltr;
}

html[dir="rtl"] .sidebar-dock-right .sidebar-resize-handle {cursor:ew-resize}

.tt-language-option,
.navbar a,
button,
label,
legend,
.wifi-profile-action,
.wifi-plan-card-btn {
  overflow-wrap:anywhere;
}

html[lang="zh-CN"] body {
  line-break:auto;
  word-break:normal;
}

@media(max-width:375px) {
  .navbar,
  .navbar ul,
  .wifi-access-actions,
  .wifi-profile-button-row {
    flex-wrap:wrap;
  }
}

/* Stable locale switching: keep the control responsive while a locale change
   is being applied, but prevent overlapping switches from racing each other. */
html[data-i18n-switching="true"] .tt-language-switcher{pointer-events:none;opacity:.72}
.tt-language-switcher.is-switching .tt-language-caret{animation:tt-i18n-spin .7s linear infinite}
@keyframes tt-i18n-spin{to{transform:rotate(360deg)}}

/* Locale identity classes are intentionally presentation-only. They make the
   page behave like a native locale without touching RF/world coordinates. */
html.tt-locale-ar body{direction:rtl;text-align:start}
html.tt-locale-pl body,
html.tt-locale-zh-cn body,
html.tt-locale-en body{direction:ltr;text-align:start}

/* Common administrative/customer panels should follow writing direction. */
html[dir="rtl"] .panel-heading,
html[dir="rtl"] .stat-card,
html[dir="rtl"] .admin-panel,
html[dir="rtl"] .wifi-profile-card,
html[dir="rtl"] .wifi-access-card,
html[dir="rtl"] .wifi-plan-card,
html[dir="rtl"] .wifi-notification-card,
html[dir="rtl"] .notification-history-list,
html[dir="rtl"] .audit-list,
html[dir="rtl"] .card-list{direction:rtl;text-align:start}

/* Identifiers and technical values remain physically/readably LTR even when
   embedded inside Arabic sentences. */
html[dir="rtl"] input[type="email"],
html[dir="rtl"] input[type="url"],
html[dir="rtl"] .tt-force-ltr,
html[dir="rtl"] .tt-technical-value,
html[dir="rtl"] [data-technical],
html[dir="rtl"] .technical-value,
html[dir="rtl"] bdi{direction:ltr!important;text-align:left!important;unicode-bidi:isolate}

/* Keep the language menu anchored to the logical end of the trigger. */
.tt-language-menu{inset-inline-end:0;inset-inline-start:auto}


/* Viewport-safe language menu.
   The JavaScript measures the trigger/menu and clamps the dropdown to the
   visible browser viewport. This is especially important in Arabic, where
   the navigation places the language control near the left browser edge. */
.tt-language-menu{
  box-sizing:border-box;
  width:min(190px,calc(100vw - 16px));
  min-width:min(180px,calc(100vw - 16px));
  max-width:calc(100vw - 16px);
  max-height:calc(100dvh - 16px);
  overflow:auto;
  overscroll-behavior:contain;
}
.tt-language-menu.tt-language-menu-viewport{
  position:fixed!important;
  margin:0!important;
  z-index:2147483000;
}

@media (max-width: 820px) {
  .tt-language-menu {
    width: min(380px, calc(100vw - 24px));
    min-width: 0;
    max-width: calc(100vw - 24px);
    max-height: calc(100dvh - 24px);
    overflow-y: auto;
    box-sizing: border-box;
  }

  .tt-language-menu.tt-language-menu-viewport {
    position: fixed !important;
    transform: none !important;
  }
}