/* Theme v2 — Nimble additions on top of the design files (nimble-tokens … nim-header, unchanged copies).
   Loaded last. Part 1: the v3 demo's inline <style> blocks. Part 2: framework layout additions. */

/* ---- 1. From "Nimble Onboarding Demo v3" (inline styles) ---- */
body{margin:0;}
a{color:#0B5CBD;}
a:hover{color:#08468F;}
.nim-app{min-height:0!important;}
.nim-rail{overflow:hidden;min-height:0;}
.nim-rail>*{flex-shrink:0;}
.nim-rail>.nim-rail-mods{flex:1 1 0;min-height:0;overflow:hidden;display:flex;flex-direction:column;align-items:center;gap:4px;width:100%;}
.nim-filter-more{container-type:inline-size;}
.nim-pick-menu.is-flip{left:auto;right:0;}
.nim-fgrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px 20px;align-items:start;grid-auto-flow:row dense;}
@container (max-width:1100px){.nim-fgrid>.nim-fj{grid-column:span 2;}}
@container (max-width:620px){.nim-fgrid{grid-template-columns:repeat(2,minmax(0,1fr));}}
.nim-rail-more{position:absolute;top:2px;right:6px;min-width:18px;height:16px;padding:0 4px;border-radius:8px;background:var(--nim-primary);color:#fff;font-size:9.5px;font-weight:700;line-height:16px;text-align:center;}

/* ---- 2. Framework layout ---- */
/* [hidden] wins over display utilities (d-flex etc. are !important in Bootstrap). */
[hidden]{display:none!important;}
/* Labels on top (design rule 5), also above inline controls such as <nim-date-picker>. */
label.form-label{display:block;}
/* Soft uses Geist (design readme); the tokens still name IBM Plex Sans, used by popups outside .nim-app. */
:root{--nim-font:'Geist','IBM Plex Sans Devanagari',system-ui,-apple-system,'Segoe UI',sans-serif;}
/* Rail / sidebar / launcher entries are links in the framework (buttons in the demo). */
a.nim-rail-item,a.nim-nav-link,a.nim-module{text-decoration:none;}
a.nim-rail-item:hover,a.nim-nav-link:hover,a.nim-module:hover{text-decoration:none;}
/* Shell parts hidden by the shell script until it has measured (rail overflow), and by [hidden]. */
.nim-launcher[hidden],.nim-launcher-backdrop[hidden],.nim-drawer-backdrop[hidden]{display:none!important;}
/* Sample-data notice (shell not yet built from the user's menus). */
.nim-sample-note{font-size:12px;color:var(--nim-text-muted);}
/* Popup pages (IsWindowPopup): content only. */
.nim-popup-body{padding:16px;background:var(--nim-canvas);min-height:100vh;}

/* ---- 3. Public pages (Views/V2/Shared/_PublicLayout: login, forgot / reset password, OTP) ---- */
/* No banner image: one centered column on the canvas, client logo above the card. */
.nim-public{margin:0;min-height:100vh;display:flex;flex-direction:column;background:var(--nim-gray-50,#F4F5F7);color:var(--nim-text);font-family:var(--nim-font);-webkit-font-smoothing:antialiased;}
.nim-public-main{flex:1 0 auto;display:flex;align-items:center;justify-content:center;padding:48px 16px;}
.nim-public-col{width:100%;max-width:480px;display:flex;flex-direction:column;gap:16px;}
.nim-public-col.is-wide{max-width:640px;}   /* registration form (owner 2026-10-29: a little wider) */
.nim-public-brand{display:flex;justify-content:flex-start;margin-bottom:28px;}
.nim-public-logo{max-height:48px;max-width:220px;object-fit:contain;}
.nim-public-card{border:0;border-radius:16px;box-shadow:0 1px 3px rgba(17,23,35,.06),0 8px 24px rgba(17,23,35,.04);}
.nim-public-card>.card-body{padding:40px;}
.nim-public-card>.card-body.text-center .nim-public-brand{justify-content:center;}
.nim-public-eyebrow{font-size:12.5px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--nim-text-secondary,#4B5563);margin-bottom:6px;}
.nim-public-title{font-size:24px;line-height:1.25;font-weight:600;letter-spacing:-.02em;margin:0 0 24px;}
.nim-public-title:has(+ .nim-public-meta){margin-bottom:4px;}
.nim-public-meta{font-size:13px;color:var(--nim-text-muted);margin:0 0 20px;}
.nim-public-card .form-label{font-size:13.5px;font-weight:500;color:var(--nim-text);margin-bottom:6px;}
.nim-public-card .nim-req{color:var(--nim-danger,#B4362B);margin-left:2px;}
.nim-public-card .form-control{height:48px;background:var(--nim-gray-50,#F4F5F7);border-color:var(--nim-border,#E7E9EE);border-radius:10px;font-size:15px;}
.nim-public-card .form-control:focus{background:var(--nim-surface,#fff);border-color:var(--nim-primary);box-shadow:0 0 0 3px var(--nim-focus-ring,rgba(11,92,189,.2));}
.nim-public-card .btn-lg{height:48px;border-radius:10px;font-size:15.5px;font-weight:600;}
.nim-input-icon{position:relative;}
.nim-input-icon>.form-control{padding-right:44px;}
.nim-input-icon>i,.nim-input-icon>.nim-input-btn{position:absolute;right:6px;top:50%;transform:translateY(-50%);width:34px;height:34px;display:inline-flex;align-items:center;justify-content:center;color:var(--nim-text-muted);font-size:18px;}
.nim-input-icon>i{pointer-events:none;}
.nim-input-btn{border:0;background:none;border-radius:8px;padding:0;cursor:pointer;}
.nim-input-btn:hover{color:var(--nim-text);background:var(--nim-gray-100,#EDEEF1);}
.nim-input-btn:focus-visible{outline:2px solid var(--nim-primary);outline-offset:1px;}
.nim-public-forgot{font-size:13px;font-weight:500;color:var(--nim-primary);text-decoration:none;}
.nim-public-forgot:hover{color:var(--nim-primary-hover,var(--nim-primary));text-decoration:underline;}
.nim-public-link{color:var(--nim-text);font-size:14px;text-decoration:none;}
.nim-public-link:hover{color:var(--nim-primary);text-decoration:underline;}
.nim-public-or{display:flex;align-items:center;gap:12px;margin:20px 0 16px;font-size:12px;color:var(--nim-text-muted);text-transform:uppercase;letter-spacing:.06em;}
.nim-public-or::before,.nim-public-or::after{content:"";flex:1;height:1px;background:var(--nim-border,#E7E9EE);}
.nim-public-card .btn i{margin-right:6px;}
.nim-public-alt{display:flex;flex-direction:column;gap:8px;}
.nim-public-card .card-body>.nim-public-alt:not(.nim-public-or + .nim-public-alt){margin-top:16px;padding-top:16px;border-top:1px solid var(--nim-border,#E7E9EE);}
.nim-public-alt .btn{display:inline-flex;align-items:center;justify-content:center;}
.nim-public-attendance>.card-body{padding:12px 14px 12px 16px;}
.nim-public-attendance-text{font-size:13px;line-height:1.35;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;}
.nim-public-attendance-ico{width:28px;height:28px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;background:var(--nim-blue-50,#EEF3FC);color:var(--nim-primary,#0B5CBD);font-size:15px;flex:none;}
.nim-public-state{width:48px;height:48px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:24px;margin-bottom:12px;}
.nim-public-state.is-success{background:var(--nim-success-bg,#E7F6EE);color:var(--nim-success,#1A7F4B);}
.nim-public-state.is-danger{background:var(--nim-danger-bg,#FBECEB);color:var(--nim-danger,#B4362B);}
.nim-public-foot{flex:none;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:12px 32px;padding:18px 16px;border-top:1px solid var(--nim-border,#E7E9EE);font-size:14px;color:var(--nim-text-secondary,#4B5563);}
.nim-public-foot a{color:inherit;text-decoration:none;}
/* Computer screens: footer bar fixed at the bottom (the page keeps room for it: --nim-public-foot-h, measured by
   _PublicLayout); phones: the footer follows the content. */
@media (max-width:767.98px){.nim-public-main{flex:0 0 auto;}}
@media (min-width:768px){.nim-public{padding-bottom:var(--nim-public-foot-h,64px);}.nim-public-foot{position:fixed;left:0;right:0;bottom:0;z-index:10;background:var(--nim-gray-50,#F4F5F7);}}
.nim-public-foot a:hover{color:var(--nim-primary);}
.nim-public-product{display:inline-flex;align-items:center;gap:8px;}
.nim-public-product img{height:28px;}
.nim-public-maker{display:inline-flex;align-items:center;gap:5px;}
.nim-public-maker img{height:22px;width:auto;margin-right:3px;}   /* the Nimble mark (nimble-mark.svg) before the brand (owner 2026-10-30) */
.nim-public-maker a{font-weight:600;}   /* login footer brand: "© year Nimble Infosys" */
.nim-public-store img{height:34px;}
@media (max-width:575.98px){.nim-public-main{align-items:flex-start;padding:24px 12px;}.nim-public-card:not(.nim-public-attendance)>.card-body{padding:28px 22px;}.nim-public-foot{gap:10px 20px;font-size:13px;}}
/* Short screens (laptops, browser zoom): tighten the public pages so card + footer fit without scrolling */
@media (max-height:820px){
  .nim-public-main{padding-top:20px;padding-bottom:20px;}
  .nim-public-col{gap:12px;}
  .nim-public-card:not(.nim-public-attendance)>.card-body{padding-top:28px;padding-bottom:28px;}
  .nim-public-brand{margin-bottom:18px;}
  .nim-public-logo{max-height:40px;}
  .nim-public-title{font-size:22px;margin-bottom:16px;}
  .nim-public-card .mb-3{margin-bottom:12px!important;}
  .nim-public-card .form-control,.nim-public-card .btn-lg{height:44px;}
  .nim-public-card .form-label{margin-bottom:4px;}
  .nim-public-or{margin:14px 0 12px;}
  .nim-public-card .text-center.mt-3{margin-top:10px!important;}
  .nim-public-foot{padding:12px 16px;}
}
@media (max-height:680px){
  .nim-public-main{padding-top:12px;padding-bottom:12px;}
  .nim-public-card:not(.nim-public-attendance)>.card-body{padding-top:20px;padding-bottom:20px;}
  .nim-public-brand{margin-bottom:12px;}
  .nim-public-logo{max-height:32px;}
  .nim-public-eyebrow{margin-bottom:2px;}
  .nim-public-title{font-size:20px;margin-bottom:12px;}
  .nim-public-card .mb-3{margin-bottom:10px!important;}
  .nim-public-card .form-control,.nim-public-card .btn-lg{height:40px;}
  .nim-public-attendance>.card-body{padding:8px 12px;}
  .nim-public-foot{padding:8px 16px;font-size:13px;}
  .nim-public-product img{height:22px;}
  .nim-public-store img{height:28px;}
}
.nim-public-foot .nim-theme-switch{color:var(--nim-text-muted);}
.nim-public-foot .nim-theme-switch:hover{color:var(--nim-primary);}
.nim-messages .alert{font-size:13px;padding:10px 12px;}
.nim-messages .alert .btn-close{padding:12px;}
/* Captcha (Views/V2/Shared/_CaptchaV2) */
.nim-captcha-row{display:flex;align-items:center;gap:8px;}
.nim-captcha-img{height:48px;border:1px solid var(--nim-border,#E7E9EE);border-radius:8px;background:#fff;}
/* Controller notifications above the page (v2 _TopMessageDisplay) — aligned with the page padding. */
.nim-main-messages .nim-messages:has(.alert){padding:16px 24px 0;}

/* ---- 4. Page kit (phase 3: V2Html helpers, nimble-grid.js, nimble-filterbar.js, NimbleV2 dialogs / tokens) ---- */
.nim-page-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
/* Empty / no-match / error state (design rule 7, Grid Spec "States"). */
.nim-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:6px;padding:40px 16px;color:var(--nim-text-muted);}
.nim-empty-ico{width:44px;height:44px;border-radius:12px;display:inline-flex;align-items:center;justify-content:center;background:var(--nim-surface-sunken,#F7F8FA);color:var(--nim-gray-500,#6B7689);font-size:20px;margin-bottom:6px;}
.nim-empty-title{font-size:15px;font-weight:600;color:var(--nim-text);}
.nim-empty-text{font-size:13px;max-width:420px;}
.nim-empty-actions{margin-top:10px;display:flex;gap:8px;}
.nim-empty.is-error .nim-empty-ico{background:var(--nim-danger-bg,#FDECEA);color:var(--nim-danger,#C0362C);}
/* Grid: card-flush wrap, column filters off by default (toggle in the toolbar), loading overlay. */
.nim-grid-wrap{position:relative;}
.nim-grid-wrap.nim-hf-off .tabulator .tabulator-header .tabulator-col .tabulator-header-filter{display:none;}
.nim-grid-wrap .nim-grid-loading:not([hidden]){position:absolute;inset:0;z-index:5;display:flex;align-items:center;justify-content:center;gap:8px;background:rgba(255,255,255,.55);color:var(--nim-text-muted);font-size:13px;}
.nim-grid-toolbar{display:flex;align-items:center;gap:8px;min-height:52px;padding:8px 16px;border-bottom:1px solid var(--nim-border,#E7E9EE);}
.nim-grid-toolbar .nim-hf-btn[aria-pressed="true"]{color:var(--nim-primary);background:var(--nim-blue-50,#EEF3FC);}
.nim-selbar[hidden]{display:none!important;}
/* Filter bar date range popover. */
.nim-fpop-grid{display:grid;grid-template-columns:auto minmax(0,1fr);gap:8px 10px;align-items:center;min-width:280px;}
/* Confirm dialog / toast variants. */
.nim-dlg-ico.is-danger{background:var(--nim-danger-bg,#FDECEA);color:var(--nim-danger,#C0362C);}
.nim-toast.is-error i{color:#F59B93;}
.nim-toast.is-warning i{color:#F5C46B;}
/* Token picker (input[data-v2-tokens]). */
.nim-tokens{position:relative;display:flex;flex-wrap:wrap;align-items:center;gap:6px;min-height:var(--nim-control-h,36px);height:auto;padding:4px 8px;cursor:text;}
.nim-tokens-list{display:contents;}
.nim-tokens .nim-token{display:inline-flex;align-items:center;gap:6px;max-width:100%;padding:2px 4px 2px 8px;border-radius:6px;background:var(--nim-surface-sunken,#F1F2F5);font-size:13px;}
.nim-tokens .nim-token .btn-close{width:.6em;height:.6em;padding:4px;}
.nim-tokens-input{flex:1 1 120px;min-width:120px;border:0;outline:0;background:transparent;padding:2px 0;font:inherit;}
.nim-suggest{position:relative;}   /* data-v2-suggest: the list under the box */
.nim-time-menu{min-width:0;}   /* data-v2-time-step: as wide as the box */
.nim-time-menu .nim-pick-opt{padding:6px 12px;}
.nim-tokens-menu{position:absolute;left:0;right:0;top:100%;margin-top:4px;z-index:1080;max-height:260px;overflow:auto;}
.nim-tokens.has-browse{padding-right:38px;}
.nim-tokens-browse{position:absolute;right:5px;top:4px;display:inline-flex;align-items:center;justify-content:center;width:28px;height:26px;border:0;border-radius:6px;background:transparent;color:var(--nim-text-muted,#6B7280);font-size:16px;cursor:pointer;}
.nim-tokens-browse:hover,.nim-tokens-browse:focus-visible{background:var(--nim-surface-sunken,#F1F2F5);color:var(--nim-primary);}
fieldset[disabled] .nim-tokens{background:var(--bs-secondary-bg,#E9ECEF);}
/* Form dialog (NimbleV2.openRemoteForm). */
/* Header fixed (modal-dialog-scrollable); split body (nimble-v2.js): only .nim-form-scroll scrolls — its scroll bar
   ends above the action bar, which stays at the dialog bottom (full width). */
.nim-form-modal .modal-body{scroll-padding:12px 0;}
.nim-form-modal .modal-body.nim-form-split{display:flex;flex-direction:column;min-height:0;padding:0;overflow:hidden;}
.nim-form-split > form{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;}
.nim-form-split .nim-form-scroll{flex:1 1 auto;min-height:0;overflow-y:auto;padding:var(--bs-modal-padding,20px);scroll-padding:12px 0;}
.nim-form-split .nim-form-scroll > :last-child{margin-bottom:0;}
.nim-form-modal .modal-body .modal-footer,
.nim-form-split .nim-form-actions{flex:none;margin:0;padding:12px var(--bs-modal-padding,20px);background:var(--bs-modal-bg,#fff);border-top:1px solid var(--nim-border,#E7E9EE);}
.nim-form-split.is-overflowing .modal-footer,
.nim-form-split.is-overflowing .nim-form-actions{position:relative;box-shadow:0 -4px 12px rgba(16,24,40,.06);}
.nim-form-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:20px;padding-top:16px;border-top:1px solid var(--nim-border,#E7E9EE);}
/* Read-only form (fieldset disabled, e.g. a View dialog): no "Optional" / example placeholders in empty fields. */
fieldset:disabled .form-control::placeholder{color:transparent;}
/* Filter bar inside the grid toolbar: the toolbar owns padding and the bottom rule. */
.nim-grid-toolbar{padding:0 12px 0 0;}
.nim-grid-toolbar > .nim-filterbar{border-bottom:0;}
/* Rows selected: the selection bar replaces the toolbar content (actions follow selection, rule 3). */
.nim-grid-toolbar.has-selection > :not(.nim-selbar){visibility:hidden;}
.nim-grid-toolbar .nim-selbar{background:var(--nim-row-selected,#F1F5FD);}
/* One-line toolbar (opt-in .nim-oneline on .nim-grid-toolbar, owner 2026-10-16): filter box, filter actions and the
   page buttons (.nim-toolbar-acts) stay on one line — the filter box shrinks; the page buttons show icons only on narrow
   screens (also inside the record panel). Lists with several quick filters keep the wrapping filter bar. */
/* paged list: the item a link pointed to (data-v2-paged-focus) */
.nim-paged-focus{border-radius:var(--nim-radius,8px);background:var(--nim-blue-50,#EEF3FC);box-shadow:0 0 0 6px var(--nim-blue-50,#EEF3FC);}
/* Remote form dialogs (openRemoteForm): anchored at the top (grows downwards, no re-centring) and a skeleton while a slow
   form loads (height of the form's last opening when known). */
.modal-dialog.nim-dlg-top{margin-top:min(8vh,72px);}
/* Bootstrap sizes a scrollable dialog for its own top margin (--bs-modal-margin); with the larger top margin above, a long
   dialog ended below the window and the modal layer scrolled (owner 2026-10-17): the height follows this margin. */
.modal-dialog-scrollable.nim-dlg-top{height:calc(100% - min(8vh,72px) - var(--bs-modal-margin));}
.modal.nim-dlg-wait .modal-dialog{visibility:hidden;}
.nim-dlg-skel{display:flex;flex-direction:column;gap:14px;min-height:220px;padding:4px 0;overflow:hidden;}
.nim-dlg-skel>i{display:block;height:34px;border-radius:var(--nim-radius,8px);background:linear-gradient(90deg,var(--nim-gray-100,#F1F3F6) 25%,var(--nim-gray-50,#F7F8FA) 50%,var(--nim-gray-100,#F1F3F6) 75%);background-size:200% 100%;animation:nim-skel 1.2s linear infinite;}
.nim-dlg-skel>i.is-short{width:55%;}
@keyframes nim-skel{from{background-position:100% 0;}to{background-position:-100% 0;}}
@media (prefers-reduced-motion:reduce){.nim-dlg-skel>i{animation:none;}}
.nim-grid-toolbar.nim-oneline{flex-wrap:nowrap;}
.nim-grid-toolbar.nim-oneline>.nim-filterbar{flex:1 1 auto;flex-wrap:nowrap;min-width:0;}
/* Quick search on one line: a compact box (180 px, shrinks first) — the chips and actions keep the room, also on small
   screens (owner 2026-10-24: the CRM Contacts tab overflowed with the Working status chip; was up to 360 px). */
.nim-grid-toolbar.nim-oneline .nim-quick{flex:0 1 180px;flex-wrap:nowrap;min-width:0;max-width:180px;}
.nim-grid-toolbar.nim-oneline .nim-quick>*{flex:1 1 0;width:auto;min-width:72px;}
@media (max-width:575.98px){.nim-grid-toolbar.nim-oneline .nim-quick{flex-basis:120px;}}
.nim-grid-toolbar .nim-toolbar-acts{display:flex;align-items:center;gap:8px;flex:none;white-space:nowrap;}
@media (max-width:991.98px){.nim-grid-toolbar.nim-oneline .nim-toolbar-acts .btn>span{display:none;}}

/* View mode (owner 2026-10-31; nimble-v2.js viewMode): fieldset[data-v2-view] - label above, the value as plain text */
.nim-view .nim-view-src{display:none!important;}
.nim-view .required,.nim-view .form-text,.nim-view .form-label .fw-normal{display:none;}   /* + hints in a label ("— cannot be changed later") */
.nim-view .form-label{margin-bottom:2px;font-size:12px;font-weight:500;color:var(--nim-text-muted);}
.nim-view-value{min-height:20px;font-size:14px;line-height:1.45;color:var(--nim-text);white-space:pre-line;overflow-wrap:anywhere;}
.nim-view-value.is-empty{color:var(--nim-text-muted);}
.nim-view-value.nim-rich-text{white-space:normal;}
.nim-view .nim-check-list{max-height:none;padding:0;border:0;background:none!important;}
.nim-view-value a{text-decoration:none;}
.nim-view-value a:hover{text-decoration:underline;}

/* ---- 5. Dashboard widgets (Views/V2/Shared/Widgets/_DashboardWidgets, nimble-widgets.js) ---- */
.nim-widgets{--nim-widget-gap:24px;display:grid;grid-template-columns:repeat(12,minmax(0,1fr));grid-auto-rows:4px;grid-auto-flow:row dense;column-gap:var(--nim-widget-gap);align-items:start;}
.nim-widget{grid-column:span var(--w,6);align-self:start;min-width:0;margin:0;}
@media (max-width:1199.98px){.nim-widget{grid-column:span var(--wm,6);}}
@media (max-width:767.98px){.nim-widget{grid-column:1/-1;}}
.nim-widget .card-header{display:flex;align-items:center;gap:8px;min-height:48px;}
.nim-widget .card-title{margin:0;min-width:0;}
.nim-widget-body{overflow:hidden;position:relative;}
.nim-widget.is-scroll .nim-widget-body{overflow:auto;}
.nim-widget.is-fit .nim-widget-body{overflow:visible;}
.nim-widget-content{min-height:48px;}
.nim-widget-frame{display:block;width:100%;height:120px;border:0;background:#fff;}
/* Skeleton while a widget loads (Grid Spec: skeleton, no full-page block). */
.nim-widget-loading{display:flex;flex-direction:column;gap:10px;padding:16px;}
.nim-widget-loading span{display:block;height:12px;border-radius:6px;background:linear-gradient(90deg,#EEF0F3 25%,#F6F7F9 37%,#EEF0F3 63%);background-size:400% 100%;animation:nimSkel 1.2s ease infinite;}
.nim-widget-loading span:nth-child(2){width:80%;}.nim-widget-loading span:nth-child(3){width:60%;}
@keyframes nimSkel{0%{background-position:100% 50%;}100%{background-position:0 50%;}}
@media (prefers-reduced-motion:reduce){.nim-widget-loading span{animation:none;}}

/* ---- 6. Sidebar groups and settings panel (_Sidebar, _SettingsPanel, nimble-shell.js) ---- */
/* Page count on a group; Expand / Collapse all in the sidebar header. */
.nim-nav-count{flex:none;min-width:20px;padding:0 6px;border-radius:var(--nim-radius-pill);background:var(--nim-gray-100);color:var(--nim-text-muted);font-size:11px;font-weight:600;line-height:18px;text-align:center;}
.nim-nav-link[aria-expanded="true"] .nim-nav-count{background:transparent;}
.nim-nav-all{flex:none;color:var(--nim-text-muted);}
.nim-nav-all:hover{color:var(--nim-text);}
/* Sidebar pin (owner 2026-10-31): unpinned, wide screens open the menu over the page as on small screens (nimble-shell.js) */
.nim-nav-pin[aria-pressed="false"]{color:var(--nim-primary);}
@media (max-width:991.98px){ .nim-nav-pin{display:none;} }
@media (min-width:992px){
  .nim-app.sidebar-overlay.sidebar-drawer .nim-sidebar{visibility:visible;position:fixed;top:0;bottom:0;left:var(--nim-rail-w);width:var(--nim-sidebar-w);z-index:1060;box-shadow:var(--nim-shadow-lg,0 12px 32px rgba(16,24,40,.18));}
  .nim-app.sidebar-overlay .nim-drawer-backdrop{display:block;position:fixed;inset:0 0 0 var(--nim-rail-w);z-index:1055;background:rgba(16,24,40,.32);}
}
/* Settings panel: opens beside the rail like the module launcher. */
.nim-settings{width:min(400px,calc(100vw - var(--nim-rail-w)));--bs-offcanvas-width:min(400px,calc(100vw - var(--nim-rail-w)));display:flex;flex-direction:column;}
.nim-settings.offcanvas-start{left:var(--nim-rail-w);top:0;bottom:0;border-right:1px solid var(--nim-border);box-shadow:var(--nim-shadow-lg);animation:nimLaunchIn .18s cubic-bezier(.2,.7,.2,1);}
.nim-settings[hidden],.nim-settings-backdrop[hidden]{display:none!important;}
.nim-settings-backdrop{position:fixed;inset:0;left:var(--nim-rail-w);background:transparent;z-index:1040;}
/* Owner 2026-10-12: no dark layer behind the All modules launcher and the settings panel (distracting for a menu-like
   panel, as in app launchers / navigation drawers); the panel keeps its border and shadow, the transparent backdrop
   still closes it on a click outside. Dialogs keep their dim backdrop. */
.nim-launcher-backdrop{background:transparent!important;animation:none!important;}
/* Owner 2026-10-30: the All modules launcher and the settings panel open and close at once - no slide or fade (Bootstrap
   offcanvas transition, nimLaunchIn). */
.nim-launcher.offcanvas,.nim-settings.offcanvas{transition:none!important;animation:none!important;}
/* ... and so do the other pop-ups (owner 2026-10-30: popups appeared animated / flickering): dialogs (no slide down or
   fade), the confirm box, the header menus, the date picker. The form dialog still waits for its content (nim-dlg-wait). */
.modal.fade,.modal.fade .modal-dialog,.modal-backdrop.fade{transition:none!important;}
.modal.fade .modal-dialog{transform:none!important;}
.nim-dlg-backdrop,.nimh-pop,.nim-dpk-pop{animation:none!important;}
.nim-settings .offcanvas-body{padding:4px 16px 20px;overflow:auto;}
.nim-settings-section{padding:14px 0 6px;border-bottom:1px solid var(--nim-border);}
.nim-settings-section:last-child{border-bottom:0;}
.nim-settings-section>.eyebrow{margin:0 4px 6px;}
.nim-settings-row{display:flex;align-items:center;gap:10px;min-height:40px;padding:4px;border-radius:var(--nim-radius);color:var(--nim-text);font-size:var(--nim-fs-md);text-decoration:none;}
.nim-settings-row>label{margin:0;font-weight:400;}
.nim-settings-row .form-select{width:auto;max-width:180px;}
.nim-settings-link:hover{background:var(--nim-gray-100);color:var(--nim-text);}
.nim-settings-ico{width:28px;height:28px;flex:none;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;background:var(--nim-gray-100);color:var(--nim-text-secondary);font-size:15px;}
.nim-settings-value{font-family:var(--nim-font-mono);font-size:var(--nim-fs-sm);color:var(--nim-text-secondary);}
.nim-settings-version{font-weight:600;color:var(--nim-success)!important;background:var(--nim-success-bg)!important;}
.nim-settings-tool{display:flex;align-items:flex-start;gap:12px;padding:8px 4px;border-radius:var(--nim-radius);color:var(--nim-text);text-decoration:none;}
.nim-settings-tool:hover{background:var(--nim-gray-100);color:var(--nim-text);}
.nim-settings-tool-ico{width:34px;height:34px;flex:none;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:16px;color:#fff;}
.nim-settings-tool-ico.is-teal{background:#1A9E8F;}
.nim-settings-tool-ico.is-red{background:var(--nim-danger);}
.nim-settings-tool-ico.is-green{background:var(--nim-success);}
.nim-settings-tool-ico.is-amber{background:var(--nim-warning);}
.nim-settings-tool-ico.is-blue{background:var(--nim-primary);}
.nim-settings-tool-ico.is-violet{background:var(--nim-violet);}
.nim-settings-tool-ico.is-gray{background:var(--nim-gray-500);}
.nim-settings-tool-title{display:block;font-weight:500;font-size:var(--nim-fs-md);line-height:1.3;}
.nim-settings-tool-text{display:block;font-size:var(--nim-fs-sm);color:var(--nim-text-muted);line-height:1.35;}
.nim-settings-foot{flex:none;display:flex;justify-content:center;padding:12px 16px;border-top:1px solid var(--nim-border);font-size:var(--nim-fs-sm);}
.nim-settings-foot .nim-public-product{color:var(--nim-text-muted);text-decoration:none;}
.nim-settings-foot .nim-public-product img{height:24px;}
/* Room at the bottom of the rail and the sidebar: the browser link preview (status bubble, ~24 px, bottom left) must
   not cover the last rail icon or the menu entry at the bottom of the window when a link is hovered. */
.nim-rail{padding-bottom:24px;}
.nim-sidebar{padding-bottom:24px;}   /* outside the scrolling menu: the menu ends above the preview at any scroll position */

/* ---- 7. Settings pages (Areas/Security/Views/V2/Update/*, Views/V2/Shared/LicenseInformation) ---- */
.nim-settings-effects{margin:0 0 16px;padding-left:20px;color:var(--nim-text-secondary);}
.nim-settings-effects li{margin-bottom:4px;}
.nim-settings-table{max-width:480px;}
.nim-settings-table th{font-weight:600;color:var(--nim-text-secondary);}
.tabular-nums{font-variant-numeric:tabular-nums;}
.nim-settings-result{display:flex;gap:16px;align-items:flex-start;}
.nim-settings-result-ico{width:44px;height:44px;flex:none;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:22px;}
.nim-settings-result-ico.is-success{background:var(--nim-success-bg);color:var(--nim-success);}
.nim-settings-result-ico.is-danger{background:var(--nim-danger-bg);color:var(--nim-danger);}
/* Key / value list (license information). */
.nim-kv{margin:0;padding:4px 16px;}
.nim-kv-row{display:grid;grid-template-columns:minmax(140px,220px) 1fr;gap:4px 16px;padding:9px 0;border-bottom:1px solid var(--nim-border);}
.nim-kv-row:last-child{border-bottom:0;}
.nim-kv dt{font-weight:500;color:var(--nim-text-secondary);font-size:var(--nim-fs-sm);}
.nim-kv dd{margin:0;min-width:0;overflow-wrap:anywhere;}
@media (max-width:575.98px){.nim-kv-row{grid-template-columns:1fr;}}
.nim-tags{display:flex;flex-wrap:wrap;gap:6px;}
.nim-tag{padding:1px 8px;border-radius:var(--nim-radius-pill);background:var(--nim-gray-100);color:var(--nim-text-secondary);font-size:var(--nim-fs-sm);}
.nim-license-extra>summary{cursor:pointer;list-style:none;}
.nim-license-extra>summary::-webkit-details-marker{display:none;}
.nim-license-extra>summary .icon-chevron-down{transition:transform .15s ease;}
.nim-license-extra[open]>summary .icon-chevron-down{transform:rotate(180deg);}
.nim-license-extra:not([open])>summary{border-bottom:0;}
/* Collapsible form section (owner 2026-10-24): optional fields of a v2 form closed by default —
   <details class="nim-form-more col-12"><summary><span class="nim-form-more-title">Personal</span>
   <span class="nim-form-more-hint">what is inside</span><i class="icon-chevron-down"></i></summary><div class="row g-3">…</div></details>.
   The whole heading row opens it; a field found invalid on submit opens its section first (nimble-v2.js openRemoteForm). */
.nim-form-more>summary{display:flex;align-items:baseline;gap:8px;cursor:pointer;list-style:none;padding:8px 0 4px;border-top:1px solid var(--nim-border);}
.nim-form-more>summary::-webkit-details-marker{display:none;}
.nim-form-more-title{font-weight:600;color:var(--nim-primary);}   /* always blue: it opens / closes (owner 2026-10-24) */
.nim-form-more-hint{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--nim-fs-sm);color:var(--nim-text-secondary);}
.nim-form-more[open] .nim-form-more-hint{visibility:hidden;}
.nim-form-more>summary .icon-chevron-down{margin-left:auto;align-self:center;color:var(--nim-primary);transition:transform .15s ease;}
.nim-form-more[open]>summary .icon-chevron-down{transform:rotate(180deg);}
.nim-form-more>.row{margin-top:4px;}
/* App logs: four filterable lists. */
.nim-log-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,420px),1fr));gap:var(--nim-gap);}
.nim-log-card{display:flex;flex-direction:column;min-width:0;}
.nim-log-filter{padding:10px 12px 6px;}
.nim-log-list{list-style:none;margin:0;padding:0 6px 8px;max-height:320px;overflow:auto;}
.nim-log-list li>a,.nim-log-list li>.nim-log-text{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:var(--nim-radius);font-size:var(--nim-fs-sm);color:var(--nim-text);text-decoration:none;min-width:0;}
.nim-log-list li>a span:first-child,.nim-log-list li>.nim-log-text{overflow-wrap:anywhere;}
.nim-log-list li>a:hover{background:var(--nim-gray-100);color:var(--nim-primary);}
.nim-log-list li>a>i{margin-left:auto;color:var(--nim-text-muted);font-size:13px;flex:none;}
.nim-log-list li>a>.badge+i{margin-left:0;}
.nim-log-nohits{padding:4px 18px 12px;}
.nim-settings-result-ico.is-warning{background:var(--nim-warning-bg);color:var(--nim-warning);}
.nim-settings-result-ico.is-pending{background:var(--nim-primary-subtle);color:var(--nim-primary);}
.nim-icon-spin{display:inline-block;animation:nimIconSpin 1s linear infinite;}
@keyframes nimIconSpin{to{transform:rotate(360deg);}}
@media (prefers-reduced-motion:reduce){.nim-icon-spin{animation:none;}}
/* Checkbox list in a form (Database update dialog): several choices from a known list. */
.nim-check-list{max-height:240px;overflow:auto;padding:8px 12px;border:1px solid var(--nim-border);border-radius:var(--nim-radius);background:var(--nim-surface);}
.nim-check-list .form-check{margin:2px 0;}
fieldset:disabled .nim-check-list{background:var(--nim-gray-50);}
/* Link cell in a grid (NimbleGrid option links): opens the record; the row itself has no click action. */
.nim-cell-link{color:var(--nim-primary);font-weight:500;text-decoration:none;}
.nim-cell-link:hover{text-decoration:underline;}
.nim-cell-link:focus-visible{outline:2px solid var(--nim-primary);outline-offset:2px;border-radius:2px;}
/* Design fix: .nim-row-menu button (nimble-premium) resets every button in a menu to a transparent menu item, which
   made v3's "Save" (btn btn-primary in the saved-views menu) white on white. Bootstrap buttons keep their look. */
.nim-row-menu button.btn{display:inline-flex;width:auto;flex:none;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);background:var(--bs-btn-bg);color:var(--bs-btn-color);}
.nim-row-menu button.btn:hover{background:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);color:var(--bs-btn-hover-color);}
.nim-row-menu button.btn:disabled{background:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);color:var(--bs-btn-disabled-color);opacity:var(--bs-btn-disabled-opacity);}
/* Owner (2026-10-11): chip values at half of v3 — pinned 96 → 48 px, added 220 → 110 px (full value in the chip title). */
.nim-filterbar .nim-fchip-v{max-width:48px;}
.nim-fchips-2 .nim-fchip-v{max-width:110px;}

/* Page header (owner, 2026-10-11): breadcrumb above the title, left (v3); no sub heading; breadcrumb 12 px; smaller title (22 px instead
   of the look's 32 px); 12 px between the header and the first panel instead of the page gap. */
.nim-page-header{align-items:flex-end;}
.nim-page-header .breadcrumb{margin:0 0 4px;font-size:12px;line-height:16px;}
.nim-page-header .nim-page-title{font-size:1.375rem;line-height:1.875rem;}
.nim-page-header .nim-page-actions:empty{display:none;}
.nim-page > .nim-page-header{margin-bottom:calc(12px - var(--nim-gap,24px));}

/* Frozen columns (owner, 2026-10-11): the first data column is always frozen (nimble-grid.js freezeFirst). v3 styles the
   frozen edge only for its person column and removes the border of other frozen-left cells; the edge column (Tabulator
   marks it .tabulator-frozen-left) gets v3's person-column border and shadow whatever its type. The checkbox cells get the
   body-cell border like their header (v3: transparent). */
.nim-grid-wrap .tabulator-row .tabulator-cell.tabulator-frozen-left:not(.nim-col-sel),
.nim-grid-wrap .tabulator .tabulator-header .tabulator-col.tabulator-frozen-left:not(.nim-col-sel){border-right:1px solid var(--nim-border)!important;box-shadow:6px 0 8px -6px rgba(17,23,35,.12);}
.nim-grid-wrap .tabulator-row .tabulator-cell.nim-col-sel{border-right-color:#EEF0F4;}

/* Active cell (keyboard position, owner 2026-10-12): one quiet style — a 1 px light blue frame, no fill — whether or not
   the grid has focus (v3: 2 px primary frame + selected fill, lighter when the grid loses focus: opening the row menu
   switched the style and looked like a jump). */
.nim-grid-wrap .tabulator-row .tabulator-cell.nim-cell-active,
.nim-grid-wrap .tabulator:not(:focus-within) .tabulator-row .tabulator-cell.nim-cell-active{box-shadow:inset 0 0 0 1px var(--nim-blue-300,#9DB8EA)!important;background:inherit;}

/* Small screens (owner): left-frozen columns wider than 60% of the grid scroll with the others (nimble-grid.js toggles
   nim-unfreeze-left; Tabulator freezes with position: sticky). The actions column (frozen right) is not affected. */
.nim-grid-wrap.nim-unfreeze-left .tabulator .tabulator-frozen:not(.tabulator-frozen-right){position:relative!important;left:auto!important;box-shadow:none!important;z-index:auto!important;}

/* Login: customer self-registration link (UI_SelfRegistrationUrl). */
.nim-public-signup{margin:20px 0 0;text-align:center;font-size:13.5px;color:var(--nim-text-muted);}
/* No permission page (Views/V2/Shared/NoPermission.cshtml). */
.nim-noperm{max-width:560px;width:100%;margin:48px auto;align-self:center;}
.nim-noperm .nim-empty-ico,.nim-noperm-inline .nim-empty-ico{color:var(--nim-danger,#C0362C);}

/* NimbleAssign (nimble-assign.js): assigned list + Add dialog with the same grid. */
.nim-assign-count{font-size:13px;color:var(--nim-text-secondary);}
.nim-assign-modal .modal-footer{gap:8px;}
/* Attachments in v2 forms (Views/V2/Shared/_Attachments.cshtml) */
.nim-attach-list{list-style:none;margin:0 0 8px;padding:0;border:1px solid var(--nim-border);border-radius:8px;}
.nim-attach-item{display:flex;align-items:center;gap:8px;padding:6px 10px;font-size:13px;min-width:0;}
.nim-attach-item+.nim-attach-item{border-top:1px solid var(--nim-border);}
.nim-attach-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.nim-attach-meta{color:var(--nim-text-secondary);white-space:nowrap;}
@media (max-width:575.98px){.nim-attach-item{flex-wrap:wrap;}.nim-attach-meta{order:9;flex-basis:100%;padding-left:24px;white-space:normal;}}   /* "Added by … · date time" below the name */
.nim-attach-open{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border:0;border-radius:6px;background:none;padding:0;color:var(--nim-text-secondary);}
.nim-attach-open:hover{background:var(--nim-gray-100,#F1F3F6);color:var(--nim-text);}
.nim-attach-del{display:inline-flex;align-items:center;gap:4px;white-space:nowrap;color:var(--nim-text-secondary);}
.nim-attach-item.is-removed .nim-attach-name{text-decoration:line-through;color:var(--nim-text-secondary);}
/* Record page (layout A, /Main/RecordPreview approved 2026-10-13): header card with avatar, title, badges, facts line,
   actions and the tabs in its footer; each tab's content in its own card (.nim-record-pane). */
.nim-page.nim-record{gap:12px;}
/* The looks set .card{overflow:hidden}; the header's menus (tabs "More", ⋯) open below the card and must not be clipped. */
.card.nim-record-head,[data-look] .card.nim-record-head{overflow:visible;}
.nim-record-head .card-body{padding:16px 20px;}
.nim-record-head .nim-page-title{font-size:1.375rem;line-height:1.875rem;margin:0;overflow-wrap:anywhere;}
.nim-record-head .nim-page-actions{margin-left:auto;flex-wrap:nowrap;}
/* Title side (title, badges, facts) takes at most 60% and wraps inside it, so the actions stay on the title line
   (owner 2026-10-17); the back button is the first action (.nim-page-actions .nim-back), as on the other pages. */
.nim-record-head .card-body>.flex-grow-1{max-width:60%;}
@media (min-width:768px){ .nim-record-head .card-body{flex-wrap:nowrap!important;} }   /* title gives way to the actions */
.nim-page-actions .nim-back{font-size:inherit;color:inherit;}
.nim-record-head .card-footer{border-top:1px solid var(--nim-border);}
.nim-factline{display:flex;flex-wrap:wrap;gap:2px 0;}
.nim-factline>span+span::before{content:"·";margin:0 6px;color:var(--nim-gray-400,#98A2B3);}
.nim-record-dd{position:relative;}
.nim-record-dd .nim-row-menu-inline{left:auto;right:0;}
.nim-record-glance .list-group-item{display:flex;align-items:center;gap:10px;}
.nim-record-glance .list-group-item>i{color:var(--nim-gray-500);font-size:15px;}
.nim-record-fields dd{white-space:pre-line;overflow-wrap:anywhere;}
.nim-record-sum{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 24px;padding:10px 16px;border-bottom:1px solid var(--nim-border);font-size:13px;}
.nim-record-sum-k{color:var(--nim-text-muted);margin-right:6px;}
.nim-record-sum-v{font-weight:600;font-variant-numeric:tabular-nums;}
.nim-record-sum-note{flex-basis:100%;font-size:12px;color:var(--nim-text-muted);}
@media (max-width:575.98px){
  .nim-record-head .card-body{padding:12px;}
  .nim-record-head .nim-page-actions{margin-left:0;width:100%;flex-wrap:wrap;}
  .nim-record-head .card-body>.flex-grow-1{max-width:100%;}
  .nim-record-sum{gap:4px 16px;padding:8px 12px;}
}
.nim-assign-sel:empty{display:none;}

/* Document editors (billing flow, e.g. CRM proforma invoice): inline line items, totals panel, save bar.
   .nim-lines   table of editable lines: compact inputs without their own box until hovered / focused, numeric right-aligned
   .nim-totals  totals under the lines, right column: label left, value right, the grand total emphasised
   .nim-sticky-actions  the form's buttons stay at the bottom of the window while the page scrolls */
.nim-lines{width:100%;margin:0;border-collapse:separate;border-spacing:0;font-size:13.5px;}
.nim-lines th{padding:8px 6px;font-size:12px;font-weight:600;color:var(--nim-text-muted);background:var(--nim-gray-50);border-bottom:1px solid var(--nim-border);white-space:nowrap;}
.nim-lines td{padding:4px 6px;border-bottom:1px solid var(--nim-border);vertical-align:middle;}
.nim-lines th:first-child,.nim-lines td:first-child{padding-left:16px;}
.nim-lines th:last-child,.nim-lines td:last-child{padding-right:12px;}
.nim-lines .num{text-align:right;font-variant-numeric:tabular-nums;}
.nim-lines .nim-line-no{width:36px;color:var(--nim-text-muted);font-variant-numeric:tabular-nums;}
.nim-lines .form-control,.nim-lines .form-select{height:32px;min-height:32px;padding-top:4px;padding-bottom:4px;font-size:13.5px;border-color:transparent;background-color:transparent;box-shadow:none;}
.nim-lines tr:hover .form-control,.nim-lines tr:hover .form-select,.nim-lines .form-control:focus,.nim-lines .form-select:focus{border-color:var(--nim-border-strong);background-color:var(--nim-surface);}
.nim-lines .form-control:focus,.nim-lines .form-select:focus{border-color:var(--nim-primary);box-shadow:0 0 0 3px var(--nim-row-selected);}
.nim-lines .form-control.num{text-align:right;padding-left:6px;padding-right:6px;-moz-appearance:textfield;appearance:textfield;}
.nim-lines .form-control.num::-webkit-inner-spin-button,.nim-lines .form-control.num::-webkit-outer-spin-button{-webkit-appearance:none;margin:0;}
.nim-lines .is-invalid,.nim-lines .is-invalid:hover{border-color:var(--bs-danger)!important;}
.nim-lines .nim-line-amount{font-weight:600;white-space:nowrap;}
.nim-lines .nim-line-del{visibility:hidden;}
.nim-lines tr:hover .nim-line-del,.nim-lines .nim-line-del:focus{visibility:visible;}
.nim-lines tfoot td{border-bottom:0;padding-top:8px;padding-bottom:8px;}
/* a line on two rows (owner 2026-10-28, CRM invoice): <tbody class="nim-line"> with the line's row and a full-width
   <tr class="nim-line-sub"> (remarks) under it - one border and one hover per line */
.nim-lines tr:has(+ .nim-line-sub:not([hidden]))>td{border-bottom:0;}
.nim-lines .nim-line-sub>td{padding-top:0;}
.nim-lines tbody.nim-line:hover .form-control,.nim-lines tbody.nim-line:hover .form-select{border-color:var(--nim-border-strong);background-color:var(--nim-surface);}
.nim-lines tbody.nim-line:hover .nim-line-del{visibility:visible;}
fieldset:disabled .nim-lines .form-control,fieldset:disabled .nim-lines .form-select{border-color:transparent!important;background:transparent!important;opacity:1;}
.nim-totals{display:flex;flex-direction:column;gap:2px;max-width:440px;margin-left:auto;font-size:13.5px;}
/* columns: label | input | unit (%) | amount - every input the same width and every amount in one column (owner 2026-10-28) */
.nim-totals-row{display:grid;grid-template-columns:minmax(0,1fr) 104px 14px minmax(110px,auto);align-items:center;column-gap:8px;min-height:34px;}
.nim-totals-row>.nim-totals-k{grid-column:1;color:var(--nim-text-secondary);line-height:1.25;text-align:right;}   /* next to its input / amount (owner 2026-10-28) */
.nim-totals-row>.nim-totals-v{grid-column:4;text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap;}
.nim-totals-row .form-control{grid-column:2;width:100%;height:30px;min-height:30px;padding:2px 8px;text-align:right;font-size:13px;}
.nim-totals-grand{margin-top:6px;padding-top:10px;border-top:1px solid var(--nim-border);font-size:1.125rem;font-weight:700;}
.nim-totals-grand>.nim-totals-k{color:var(--nim-text);}
.nim-totals-words{font-size:12px;color:var(--nim-text-muted);text-align:right;}
.nim-sticky-actions{position:sticky;bottom:0;z-index:5;display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 -4px;padding:10px 4px;background:var(--nim-bg,var(--bs-body-bg));border-top:1px solid var(--nim-border);}
.nim-sticky-actions .nim-sticky-info{margin-right:auto;font-size:13px;color:var(--nim-text-muted);}
/* always at the bottom edge (owner 2026-10-28): no page / panel padding under the bar, else at the end of the scroll it
   rises above that padding */
.nim-page:has(.nim-sticky-actions),html.nim-in-panel .nim-popup-body:has(.nim-sticky-actions){padding-bottom:0!important;}
@media (max-width:767.98px){
  .nim-lines thead{display:none;}
  .nim-lines tr,.nim-lines tbody.nim-line{display:grid;grid-template-columns:1fr 1fr 1fr auto;gap:4px 6px;padding:8px 12px;border-bottom:1px solid var(--nim-border);}
  .nim-lines tbody.nim-line>tr{display:contents;}   /* one card per line: product, description, remarks, then qty / rate / amount */
  .nim-lines tbody.nim-line td:not([data-col]){order:1;}
  .nim-lines .nim-line-sub>td:not([data-col]){display:none;}
  .nim-lines tbody.nim-line [hidden]{display:none;}
  .nim-lines td{display:block;padding:0;border:0;}
  .nim-lines .nim-line-no{display:none;}
  .nim-lines td[data-col="product"],.nim-lines td[data-col="details"],.nim-lines td[data-col="remarks"]{grid-column:1 / -1;}
  .nim-lines .nim-line-del{visibility:visible;}
  .nim-lines .form-control,.nim-lines .form-select{border-color:var(--nim-border-strong);background-color:var(--nim-surface);}
  /* phones (owner 2026-10-28): qty / rate / amount named above their values; the amount on the inputs' line */
  .nim-lines td[data-label]::before{content:attr(data-label);display:block;margin-bottom:2px;font-size:11.5px;font-weight:400;color:var(--nim-text-muted);}
  .nim-lines td.nim-line-amount{align-self:end;line-height:40px;}
  .nim-lines td.nim-line-amount::before{line-height:1.3;}
  .nim-lines tr>td:last-child{align-self:end;}
  .nim-lines .nim-line-del{min-width:40px;min-height:40px;}
  .nim-lines tfoot tr{display:block;}
  .nim-lines tfoot td>span{display:none;}
  .nim-totals-row{grid-template-columns:minmax(0,1fr) 88px 14px minmax(96px,auto);column-gap:6px;}
  .nim-totals-row>.nim-totals-k{text-align:left;}   /* phones: the block is the full width, no gap to bridge */
  .nim-sticky-actions{margin:0 -12px;padding:8px 12px calc(8px + env(safe-area-inset-bottom));}
  .nim-sticky-actions .nim-sticky-info{flex:1 1 100%;}
  .nim-sticky-actions>.btn{flex:1 1 0;min-width:0;padding-left:8px;padding-right:8px;white-space:nowrap;}
}

/* Number inputs without the spin arrows (owner 2026-10-15: not useful in forms) - every v2 page; the value is typed.
   The arrow keys still step the value; the line editor rule above stays for its alignment. */
input[type=number]{-moz-appearance:textfield;appearance:textfield;}
input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0;}
/* View tabs with counts loaded later (NimbleGrid.tabs counts:true): fixed count slot, so tab widths stay put (step 74) */
.nim-tabs-counts .badge-count{min-width:3.2em;text-align:center;justify-content:center;font-variant-numeric:tabular-nums;}
.badge-count.is-pending{opacity:.45;}
/* Record panel (NimbleV2.panel, step 76): a page on the right over a list; full screen on phones */
.nim-panel.offcanvas-end{--bs-offcanvas-width:min(1180px,78vw);width:var(--bs-offcanvas-width);border-left:1px solid var(--nim-border);}
.nim-panel-head{display:flex;align-items:center;gap:2px;min-height:56px;padding:6px 8px 6px 20px;border-bottom:1px solid var(--nim-border);background:var(--nim-surface);}
.nim-panel-title{margin:0;font-size:15px;font-weight:600;line-height:1.3;color:var(--nim-text);}
.nim-panel-head .btn-icon{width:34px;height:34px;font-size:18px;color:var(--nim-gray-700);}
.nim-panel-head .btn-icon:disabled{color:var(--nim-gray-300);}
.nim-panel-body{position:relative;flex:1 1 auto;min-height:0;background:var(--nim-canvas);}
.nim-panel-body iframe{display:block;width:100%;height:100%;border:0;}
.nim-panel-body.is-loading iframe{visibility:hidden;}
/* While loading: a still outline of a record page (no spinner, no shimmer, no fade; owner 2026-10-27) */
.nim-panel-loading{position:absolute;inset:0;display:none;padding:24px 28px;pointer-events:none;}
.nim-panel-body.is-loading .nim-panel-loading{display:block;}
.nim-sk{background:var(--nim-gray-100,#eef0f3);border-radius:6px;}
.nim-sk-title{width:38%;height:22px;}
.nim-sk-sub{width:24%;height:12px;margin-top:10px;}
.nim-sk-tabs{display:flex;gap:18px;margin:26px 0 18px;padding-bottom:12px;border-bottom:1px solid var(--nim-border);}
.nim-sk-tabs .nim-sk{width:72px;height:12px;}
.nim-sk-card{display:flex;flex-direction:column;gap:14px;padding:20px;border:1px solid var(--nim-border);border-radius:10px;background:var(--nim-surface);}
.nim-sk-card .nim-sk{height:12px;}
.nim-sk-card .nim-sk:nth-child(2){width:86%;}
.nim-sk-card .nim-sk:nth-child(3){width:92%;}
.nim-sk-short{width:46%;}
/* lighter dimming behind the record panel (owner 2026-10-27: the screen went dark on every open) */
body:has(.nim-panel.show, .nim-panel.showing) > .offcanvas-backdrop.show{opacity:.25;}   /* Bootstrap 5.3: .offcanvas-backdrop.show{opacity:.5} (no variable) */
@media (max-width:767.98px){.nim-panel.offcanvas-end{--bs-offcanvas-width:100vw;border-left:0;}}
/* inside the panel: no breadcrumb / back to the list (the list is under the panel) */
html.nim-in-panel .nim-popup-body{padding:16px 20px;min-height:0;}
html.nim-in-panel .nim-record>nav[aria-label="breadcrumb"],html.nim-in-panel .nim-back{display:none!important;}
/* the row shown in the panel */
.tabulator-row.nim-row-open{background:var(--nim-row-selected,#EEF4FF)!important;box-shadow:inset 3px 0 0 var(--nim-primary);}
/* Rich text (textarea[data-v2-rich], Jodit 4.17.1 in the v2 look; step 78) */
.jodit-container.nim-rich:not(.jodit_inline){border:1px solid var(--nim-border-strong,#C9CED6);border-radius:var(--bs-border-radius);background:var(--nim-surface,#fff);}
.jodit-container.nim-rich.jodit_fullsize{max-height:none!important;border-radius:0;}   /* full screen: the window, not the field's fixed height */
.nim-rich.jodit_fullsize .jodit-workplace{max-height:none!important;}
.nim-rich.jodit_fullsize .jodit-wysiwyg{max-height:none!important;height:100%!important;overflow-y:auto;}
.jodit-container.nim-rich:focus-within{border-color:var(--nim-primary);box-shadow:0 0 0 .2rem rgba(var(--bs-primary-rgb),.15);}
.nim-rich .jodit-toolbar__box:not(:empty){border-bottom:1px solid var(--nim-border);background:var(--nim-surface-sunken,#F6F7F9);border-radius:var(--bs-border-radius) var(--bs-border-radius) 0 0;}
.nim-rich .jodit-workplace{font-family:inherit;}
.nim-rich .jodit-wysiwyg{padding:8px 12px!important;font-size:var(--bs-body-font-size);line-height:1.5;color:var(--nim-text);}
.nim-rich .jodit-placeholder{padding:8px 12px!important;color:var(--nim-text-muted);}
.nim-rich .jodit-wysiwyg table{border-collapse:collapse;}
.nim-rich .jodit-wysiwyg td,.nim-rich .jodit-wysiwyg th{border:1px solid var(--nim-border-strong,#C9CED6);min-width:24px;padding:2px 6px;}
.nim-rich .jodit-wysiwyg p{margin:0 0 .35em;}
fieldset[disabled] .nim-rich{background:var(--bs-secondary-bg);}
.nim-rich-text{overflow-x:auto;max-width:100%;}
.nim-rich-text p{margin:0 0 .35em;}
.nim-rich-text ul,.nim-rich-text ol{margin:0 0 .35em;padding-left:1.4em;}
.nim-rich-text>:last-child{margin-bottom:0;}

/* Tabs in a form (nimble-v2.js initBehaviors, owner 2026-10-26): as the page tabs - a line under the row, the active tab
   underlined on it; a dot on a tab holding content (blue) or errors (red). */
.nav-underline.nim-form-tabs{border-bottom:1px solid var(--nim-border);margin-bottom:16px !important;}
.nim-form-tabs .nav-link{margin-bottom:-1px;}
.nim-form-tabs .nav-link:not(.active):hover{border-bottom-color:var(--nim-border-strong);}
.nim-form-tabs .nav-link.has-content::after,.nim-form-tabs .nav-link.has-error::after{content:"";width:6px;height:6px;border-radius:50%;background:var(--nim-primary);flex:none;}
.nim-form-tabs .nav-link.has-error::after{background:var(--nim-danger);}

/* Dialog context line under the title (data-v2-dialog-sub, nimble-v2.js openRemoteForm; owner 2026-10-26). */
.nim-dlg-head{flex:1 1 auto;min-width:0;}
.nim-dlg-sub{margin-top:2px;font-size:var(--nim-fs-sm,.8125rem);color:var(--nim-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
/* Tabs at the top of a dialog form: closer to the header (the form's 20 px top padding plus the tab's 14 px made a 34 px
   gap; owner 2026-10-26). */
.modal .nim-form-tabs{margin-top:-12px;--bs-nav-link-padding-y:10px;}
/* ... and fixed at the top of the dialog body while it scrolls (owner 2026-10-30: in a long form the tabs scrolled away);
   the same 8 px gap above as padding, so the bar covers what scrolls under it. Focus scrolling keeps fields below it. */
.nim-form-split .nim-form-scroll > .nim-form-tabs{position:sticky;top:calc(-1 * var(--bs-modal-padding,20px));z-index:5;margin-top:calc(-1 * var(--bs-modal-padding,20px)) !important;padding-top:8px;background:var(--bs-modal-bg,#fff);}
.nim-form-split .nim-form-scroll:has(> .nim-form-tabs){scroll-padding-top:64px;}

/* Headings in rich text (pasted from Word, owner 2026-10-26): modest sizes in the editor and where it is shown. */
.nim-rich .jodit-wysiwyg h1,.nim-rich-text h1{font-size:1.25rem;font-weight:600;margin:.4em 0 .3em;}
.nim-rich .jodit-wysiwyg h2,.nim-rich-text h2{font-size:1.125rem;font-weight:600;margin:.4em 0 .3em;}
.nim-rich .jodit-wysiwyg :is(h3,h4,h5,h6),.nim-rich-text :is(h3,h4,h5,h6){font-size:1rem;font-weight:600;margin:.4em 0 .25em;}
.nim-rich-text table{border-collapse:collapse;margin:0 0 .35em;}
.nim-rich-text td,.nim-rich-text th{border:1px solid var(--nim-border-strong,#C9CED6);padding:2px 6px;vertical-align:top;}
/* table without borders (owner 2026-10-28: e.g. two signature boxes side by side) - the editor's table menu "Borders on / off"
   (nimble-v2.js) sets class nim-table-plain; in the editor its cells keep a faint dashed outline to work in */
.nim-rich-text table.nim-table-plain td,.nim-rich-text table.nim-table-plain th{border:0;}
.nim-rich .jodit-wysiwyg table.nim-table-plain td,.nim-rich .jodit-wysiwyg table.nim-table-plain th{border:1px dashed var(--nim-border,#E3E6EA);}

/* View more (data-v2-more, nimble-v2.js initBehaviors; owner 2026-10-26): the first N lines, fading out, and a link. */
.nim-more.is-clamped{max-height:calc(var(--nim-more-lines, 5) * 1.5em);overflow:hidden;}
.nim-more.is-clamped.is-cut{-webkit-mask-image:linear-gradient(to bottom,#000 65%,transparent);mask-image:linear-gradient(to bottom,#000 65%,transparent);}
.nim-more-toggle{padding:0;font-size:var(--nim-fs-sm,.8125rem);font-weight:500;color:var(--nim-primary);text-decoration:none;}
.nim-more-toggle:hover{text-decoration:underline;}

/* =========================================================
   Phones (owner 2026-10-28: mobile first — every page, form and dialog usable at 360-430 px)
   ========================================================= */
/* Shell: no rail on the screen; the menu button (.nim-mnav, _Layout) opens the rail and the sidebar as one drawer
   (nimble-shell.js). The page takes the full width; the app is as tall as the visible window (dvh: the browser bars). */
.nim-mnav{display:none;}
@media (max-width:767.98px){
  .nim-app,.nim-app.sidebar-collapsed{grid-template-columns:48px minmax(0,1fr);height:100dvh;}
  .nim-mnav{display:inline-flex;align-items:center;justify-content:center;grid-column:1;grid-row:1;width:48px;height:100%;padding:0 0 0 4px;border:0;border-bottom:1px solid var(--nim-border);background:var(--nim-surface);color:var(--nim-text);font-size:22px;}
  .nim-mnav:focus-visible{outline:2px solid var(--nim-primary);outline-offset:-4px;}
  .nim-app .nim-topbar{grid-column:2;padding:0 8px 0 0;}
  .nim-app .nim-main{grid-column:1 / -1;}
  .nim-app .nim-rail{position:fixed;top:0;bottom:0;left:0;width:var(--nim-rail-w);z-index:1062;overflow-y:auto;transform:translateX(-100%);visibility:hidden;transition:transform .2s ease,visibility 0s .2s;}
  .nim-app .nim-sidebar,.nim-app.sidebar-drawer .nim-sidebar{display:flex;position:fixed;top:0;bottom:0;left:var(--nim-rail-w);width:min(var(--nim-sidebar-w),calc(100vw - var(--nim-rail-w) - 32px));z-index:1061;transform:translateX(calc(-100% - var(--nim-rail-w)));visibility:hidden;transition:transform .2s ease,visibility 0s .2s;}
  .nim-app.sidebar-drawer .nim-rail,.nim-app.sidebar-drawer .nim-sidebar{transform:none;visibility:visible;transition:transform .2s ease;box-shadow:var(--nim-shadow-lg,0 12px 32px rgba(16,24,40,.18));}
  .nim-drawer-backdrop{inset:0;z-index:1058;}
  /* All modules / Settings: the full screen over the drawer */
  .nim-launcher.offcanvas-start,.nim-settings.offcanvas-start{left:0;width:100vw;--bs-offcanvas-width:100vw;z-index:1070;}
  .nim-launcher-backdrop,.nim-settings-backdrop{left:0;}
}
@media (max-width:767.98px) and (prefers-reduced-motion:reduce){.nim-app .nim-rail,.nim-app .nim-sidebar{transition:none!important;}}

/* Lists as cards (NimbleGrid built below 768 px, .nim-cards): no column headers; per row the first column as the title,
   the others as "label  value" lines (empty ones hidden), selection box at the left, row menu at the top right. The grid
   is as tall as its cards; the page scrolls. */
.nim-grid-wrap.nim-cards{min-height:0;}   /* as tall as its cards (the 357 px minimum left a gap under the pager) */
.nim-cards .tabulator{border:0;}
.nim-cards .tabulator .tabulator-header{display:none!important;}
.nim-cards .tabulator .tabulator-tableholder{height:auto!important;max-height:none!important;overflow:visible!important;}
.nim-cards .tabulator .tabulator-tableholder .tabulator-table{display:block!important;width:100%!important;min-width:0!important;padding:0!important;white-space:normal;}
.nim-cards .tabulator-row{display:flex!important;flex-direction:column;position:relative;width:100%!important;min-height:0;padding:10px 48px 10px 14px;border-bottom:1px solid var(--nim-border)!important;}
.nim-cards .tabulator-row .tabulator-cell{display:flex!important;align-items:baseline!important;gap:10px;position:static!important;left:auto!important;right:auto!important;width:auto!important;min-width:0!important;max-width:none!important;height:auto!important;padding:2px 0!important;border:0!important;box-shadow:none!important;line-height:1.4!important;white-space:normal;overflow:visible;text-align:left!important;justify-content:flex-start!important;font-size:13.5px;}
.nim-cards .tabulator-row .tabulator-cell[style*="display: none"]{display:none!important;}
/* frozen cells (first column, freezeTo) lose their sticky edge in a card */
.nim-grid-wrap.nim-cards .tabulator-row .tabulator-cell.tabulator-frozen:not(.nim-col-sel):not(.nim-col-act){position:static!important;border:0!important;box-shadow:none!important;}
.nim-cards .tabulator-row .tabulator-cell:empty,.nim-cards .tabulator-row .tabulator-cell.nim-card-empty{display:none!important;}
.nim-cards .tabulator-row .tabulator-cell::before{content:attr(data-label);flex:0 0 38%;max-width:38%;font-size:12px;font-weight:500;line-height:1.5;color:var(--nim-text-muted);overflow-wrap:anywhere;}
.nim-cards .tabulator-row .tabulator-cell>*{min-width:0;flex:1 1 auto;}
.nim-cards .tabulator-row .tabulator-cell.nim-card-title{order:-1;padding:0 0 4px!important;font-size:15px;font-weight:600;}
.nim-cards .tabulator-row .tabulator-cell.nim-card-title::before{display:none;}
.nim-cards .tabulator-row .tabulator-cell.nim-card-title .nim-cell-sub{font-weight:400;}
.nim-cards .nim-cell-main,.nim-cards .nim-cell-sub,.nim-cards .nim-stack-line,.nim-cards .nim-person-name,.nim-cards .nim-person-meta{white-space:normal!important;overflow:visible!important;overflow-wrap:anywhere;}
.nim-cards .nim-clamp2{-webkit-line-clamp:4;}
.nim-grid-wrap.nim-cards .tabulator .tabulator-row .tabulator-cell.nim-col-act{position:absolute!important;top:4px;right:4px!important;left:auto!important;padding:0!important;}
.nim-cards .tabulator-row .tabulator-cell.nim-col-act::before,.nim-cards .tabulator-row .tabulator-cell.nim-col-sel::before{display:none;}
.nim-cards .nim-act-btn{width:40px;height:40px;font-size:18px;}
.nim-cards .tabulator-row:has(.nim-col-sel){padding-left:48px;}
.nim-grid-wrap.nim-cards .tabulator .tabulator-row .tabulator-cell.nim-col-sel{position:absolute!important;top:6px;left:6px!important;width:36px!important;height:36px!important;align-items:center!important;justify-content:center!important;}
.nim-cards .tabulator-row .tabulator-cell.nim-col-sel input{width:20px;height:20px;}
.nim-cards .tabulator-row.tabulator-selected{background:var(--nim-row-selected)!important;}
.nim-cards .tabulator-row .tabulator-cell.nim-cell-active{box-shadow:none!important;background:transparent;}
.nim-cards .tabulator-row .tabulator-cell .badge{flex:0 0 auto;}
.nim-cards .nim-cell-link,.nim-cards .nim-person-link{display:inline;}
.nim-cards .tabulator-placeholder{width:100%!important;}
.nim-card-sort{width:auto;max-width:100%;min-width:0;}

/* Phones: quick filters two to a row (a third one on its own row); the Sort list (cards) takes the free width. Fields at
   16 px: phone browsers zoom the page into a smaller field on focus. */
@media (max-width:767.98px){
  .nim-filterbar .nim-quick{flex:1 1 100%;flex-wrap:wrap;}
  .nim-filterbar .nim-quick>*{flex:1 1 140px!important;width:auto!important;min-width:0;max-width:none!important;}
  .nim-filterbar .nim-factions{flex:1 1 100%;min-width:0;}
  .nim-filterbar .nim-card-sort{flex:1 1 0;min-width:0;}
  .form-control,.form-select,.nim-s2-search input,.nim-pick-search input,textarea,select{font-size:16px!important;}
}

/* Phones: form and record dialogs take the whole screen (modal-fullscreen-md-down, openRemoteForm), header and action
   bar fixed, the form scrolls between them; confirm dialogs stay small. */
@media (max-width:767.98px){
  .modal-dialog.nim-dlg-top.modal-fullscreen-md-down,.modal-dialog-scrollable.nim-dlg-top.modal-fullscreen-md-down{margin:0;height:100%;}
  .modal-fullscreen-md-down .modal-header{min-height:56px;padding:10px 12px 10px 16px;}
  .modal-fullscreen-md-down .modal-header .btn-close{width:40px;height:40px;padding:0;margin:-8px -4px -8px auto;}
  .nim-form-split .nim-form-scroll{padding:16px;}
  .nim-form-modal .modal-body .modal-footer,.nim-form-split .nim-form-actions{padding:10px 16px;}
}

/* Phones: 12 px page gutter (Bootstrap g-3 rows reach 12 px out: an 8 px gutter scrolled the page sideways), 16 px card
   padding, touch-size menu items. */
@media (max-width:767.98px){
  :root{--nim-card-p:16px;}
  [data-look] .nim-page,.nim-page{padding:12px 12px 24px;}
  .nim-row-menu button,.nim-row-menu a{min-height:44px;}
  .nim-s2-opt{min-height:40px;}
}
/* record panel on phones: the page's own 12 px gutter only (the panel's 20 px came on top of it) */
@media (max-width:767.98px){html.nim-in-panel .nim-popup-body{padding:0;}}
/* assignment pages: the selection slot takes no room (and no gap) while nothing is selected — the first action button
   sat 8 px in on phones */
.nim-assign-sel:not(:has(> :not([hidden]))){display:none;}
/* Phones: grid toolbars wrap (a description or tools beside the filter bar went under each other, squeezed) */
@media (max-width:767.98px){
  .nim-grid-toolbar,.nim-grid-toolbar.nim-oneline,.nim-grid-toolbar.nim-oneline>.nim-filterbar{flex-wrap:wrap;}
  .nim-grid-toolbar>.nim-card-sort{flex:1 1 140px;margin:0 0 8px 12px;}
}
/* row menu heading (owner 2026-10-28): one short line - a longer page heading ends in "…", the menu keeps its width */
.nim-row-menu[data-grid] .nim-row-menu-h{max-width:260px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
/* NimbleGrid marks (options.marks, owner 2026-10-28: CRM follow-up history - financial details / meeting minutes of an
   entry): small icons at the right end of a cell, popover with the text beside the icon */
.nim-cell-marked{display:flex;align-items:flex-start;gap:6px;width:100%;min-width:0;}
.nim-cell-marked-v{flex:1 1 auto;min-width:0;}
.nim-marks{flex:none;display:inline-flex;gap:2px;margin-right:-4px;}
.nim-mark{display:inline-flex;align-items:center;justify-content:center;gap:4px;width:22px;height:22px;padding:0;border:0;border-radius:6px;background:transparent;color:var(--nim-text-muted);font-size:14px;line-height:1;cursor:pointer;}
.nim-mark:hover,.nim-mark.is-open,.nim-mark:focus-visible{background:var(--nim-surface-sunken,#F1F2F5);color:var(--nim-primary);}
.nim-mark-t{display:none;}
.nim-mark.is-success{color:var(--bs-success);}
.nim-mark.is-success:hover,.nim-mark.is-success.is-open,.nim-mark.is-success:focus-visible{background:var(--bs-success-bg-subtle);color:var(--bs-success-text-emphasis);}
.nim-mark.is-info{color:var(--nim-primary);}
.nim-mark.is-info:hover,.nim-mark.is-info.is-open,.nim-mark.is-info:focus-visible{background:var(--bs-primary-bg-subtle);color:var(--nim-primary);}
.nim-mark-pop.is-success .nim-mark-pop-h>i{color:var(--bs-success);}
.nim-mark-pop.is-info .nim-mark-pop-h>i{color:var(--nim-primary);}
.nim-mark.is-warning{color:var(--bs-warning-text-emphasis,#997404);}
.nim-mark.is-warning:hover,.nim-mark.is-warning:focus-visible{background:var(--bs-warning-bg-subtle,#FFF3CD);color:var(--bs-warning-text-emphasis,#997404);}
.nim-mark.is-danger{color:var(--bs-danger);}
.nim-mark.is-danger:hover,.nim-mark.is-danger:focus-visible{background:var(--bs-danger-bg-subtle);color:var(--bs-danger);}
/* the viewer is a dialog in the middle of the window (owner 2026-10-28: beside the icon it closed on page scroll) */
/* owner 2026-10-30 (flickered): near the top as the form dialogs (grows downwards), no fade, hidden until its text is in */
.nim-mark-back{position:fixed;inset:0;z-index:1085;display:flex;align-items:flex-start;justify-content:center;padding:min(8vh,72px) 16px 16px;background:rgba(16,24,40,.4);}
.nim-mark-back.is-wait{visibility:hidden;}
.nim-mark-pop{position:relative;display:flex;flex-direction:column;width:min(760px,100%);max-height:min(80vh,720px);outline:0;background:var(--nim-surface,#fff);border:1px solid var(--nim-border);border-radius:10px;box-shadow:var(--nim-shadow-md);font-size:13.5px;}
.nim-mark-pop-h{display:flex;align-items:flex-start;gap:8px;padding:9px 12px 8px 14px;border-bottom:1px solid var(--nim-border);font-weight:600;}
.nim-mark-pop-h>i{color:var(--nim-text-muted);}
/* owner 2026-10-28: the white viewer was lost on the white grid - tinted header by tone, stronger edge and shadow */
.nim-mark-pop{border-color:var(--nim-border-strong,#C9CED6);box-shadow:0 12px 32px rgba(16,24,40,.18),0 2px 6px rgba(16,24,40,.08);overflow:hidden;}
.nim-mark-pop-h{background:var(--nim-surface-sunken,#F1F2F5);}
.nim-mark-pop.is-success .nim-mark-pop-h{background:var(--bs-success-bg-subtle);color:var(--bs-success-text-emphasis);border-bottom-color:var(--bs-success-border-subtle);}
.nim-mark-pop.is-info .nim-mark-pop-h{background:var(--bs-primary-bg-subtle);color:var(--bs-primary-text-emphasis);border-bottom-color:var(--bs-primary-border-subtle);}
.nim-mark-pop.is-warning .nim-mark-pop-h{background:var(--bs-warning-bg-subtle);color:var(--bs-warning-text-emphasis);border-bottom-color:var(--bs-warning-border-subtle);}
.nim-mark-pop-t{flex:1 1 auto;min-width:0;line-height:1.35;overflow-wrap:anywhere;}   /* type · customer · date: a long customer name wraps (owner 2026-10-29) */
.nim-mark-pop-h .btn-close{flex:none;font-size:11px;}
.nim-mark-pop-b{flex:1 1 auto;min-height:0;overflow:auto;padding:12px 16px;line-height:1.45;color:var(--nim-text);overflow-wrap:anywhere;}
.nim-mark-pop-wait{color:var(--nim-text-muted);}
.nim-mark-pop-f{display:flex;align-items:center;gap:12px;padding:8px 14px;border-top:1px solid var(--nim-border);font-size:13px;}
.nim-mark-pop-f a{text-decoration:none;}
/* phones (cards): the icons under the text, with their titles */
.nim-cards .nim-cell-marked{flex-direction:column;gap:6px;}
.nim-cards .nim-marks{flex-wrap:wrap;gap:6px;margin:0;}
.nim-cards .nim-mark{width:auto;height:30px;padding:0 10px;border:1px solid var(--nim-border);font-size:13px;color:var(--nim-text-secondary);}
.nim-cards .nim-mark-t{display:inline;}

/* Stable scrollbars (owner 2026-10-30): the scrolling areas keep room for their scrollbar, so content does not move left /
   right when it appears or disappears. CSS only (no cost); overlay scrollbars (Mac, phones) reserve nothing; browsers
   without support (Safari < 18.2) keep the old behaviour. Grids are left out: Tabulator sizes its columns itself. */
.nim-main,.modal-body,.nim-form-scroll,.offcanvas-body,html.nim-in-panel{scrollbar-gutter:stable;}
/* The record panel's page scrolls itself and keeps its gutter (above): Bootstrap's scrollbar compensation on opening a dialog
   (body padding-right = scrollbar width, also on fixed / sticky bars) would narrow the page by that width once more - the
   content jumped left by 15px (owner 2026-11-03). The gutter already holds the room, so no padding is added. */
html.nim-in-panel body.modal-open,html.nim-in-panel body.modal-open .fixed-top,html.nim-in-panel body.modal-open .fixed-bottom,
html.nim-in-panel body.modal-open .is-fixed,html.nim-in-panel body.modal-open .sticky-top{padding-right:0!important;}

/* Multi-select drop-down (nim-select2.js enhanceMulti, owner 2026-11-02): a closed field like a single select */
.nim-s2-multi { text-align: left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; background-color: var(--bs-body-bg, #fff); }
.nim-s2-multi.is-ph { color: var(--nim-text-muted, #5B6474); }
