/* Nimble Theme v2.1 for Bootstrap 5.3.x
   Load order: bootstrap.min.css → nimble-tokens.css → nimble-theme.css
   Principle: theme Bootstrap through its own CSS variables; add nim-* classes only where Bootstrap has no component (app shell, avatar, stepper, timeline). */

/* =========================================================
   1. Bootstrap root variables
   ========================================================= */
:root,[data-bs-theme="light"]{
  --bs-body-font-family:var(--nim-font);
  --bs-body-font-size:var(--nim-fs-md);
  --bs-body-line-height:1.4286;
  --bs-body-color:var(--nim-text);
  --bs-body-bg:var(--nim-canvas);
  --bs-emphasis-color:var(--nim-text);
  --bs-secondary-color:var(--nim-text-muted);
  --bs-secondary-bg:var(--nim-gray-100);
  --bs-tertiary-color:var(--nim-text-disabled);
  --bs-tertiary-bg:var(--nim-gray-50);
  --bs-heading-color:var(--nim-text);
  --bs-border-color:var(--nim-border);
  --bs-border-color-translucent:rgba(22,26,33,.10);
  --bs-border-radius:var(--nim-radius);
  --bs-border-radius-sm:var(--nim-radius-sm);
  --bs-border-radius-lg:var(--nim-radius-lg);
  --bs-border-radius-xl:12px;
  --bs-box-shadow-sm:var(--nim-shadow-xs);
  --bs-box-shadow:var(--nim-shadow-md);
  --bs-box-shadow-lg:var(--nim-shadow-lg);
  --bs-link-color:var(--nim-primary);
  --bs-link-color-rgb:11,92,189;
  --bs-link-hover-color:var(--nim-primary-hover);
  --bs-link-hover-color-rgb:8,70,143;
  --bs-link-decoration:none;
  --bs-focus-ring-color:rgba(11,92,189,.28);
  --bs-focus-ring-width:3px;

  --bs-primary:#0B5CBD;   --bs-primary-rgb:11,92,189;
  --bs-primary-text-emphasis:#08468F; --bs-primary-bg-subtle:#E3EEFC; --bs-primary-border-subtle:#C6DBF6;
  --bs-secondary:#5B6472; --bs-secondary-rgb:91,100,114;
  --bs-secondary-text-emphasis:#3F4652; --bs-secondary-bg-subtle:#EEF0F3; --bs-secondary-border-subtle:#E3E6EB;
  --bs-success:#1A7F4B;   --bs-success-rgb:26,127,75;
  --bs-success-text-emphasis:#13613A; --bs-success-bg-subtle:#E7F5EE; --bs-success-border-subtle:#B5DEC8;
  --bs-warning:#E89A1A;   --bs-warning-rgb:232,154,26;
  --bs-warning-text-emphasis:#8A4F00; --bs-warning-bg-subtle:#FFF4E0; --bs-warning-border-subtle:#F5D49A;
  --bs-danger:#C0362C;    --bs-danger-rgb:192,54,44;
  --bs-danger-text-emphasis:#9A2A22; --bs-danger-bg-subtle:#FDECEA; --bs-danger-border-subtle:#F4C1BC;
  --bs-info:#5B3FB5;      --bs-info-rgb:91,63,181;
  --bs-info-text-emphasis:#4A3296; --bs-info-bg-subtle:#F1EEFB; --bs-info-border-subtle:#D6CCF3;
  --bs-light:#F6F7F9; --bs-dark:#161A21;
}
a{text-decoration:none;}
a:hover{text-decoration:underline;text-underline-offset:2px;}
.nim-person:hover,.nav-link:hover,.btn:hover,.list-group-item-action:hover,.page-link:hover,.dropdown-item:hover{text-decoration:none;}
body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;}
::selection{background:var(--nim-blue-200);}
h1,.h1,h2,.h2,h3,.h3,h4,.h4,h5,.h5,h6,.h6{font-weight:600;letter-spacing:-.011em;margin-bottom:0;}
.h1,h1{font-size:var(--nim-fs-3xl);line-height:var(--nim-lh-3xl);}
.h2,h2{font-size:var(--nim-fs-2xl);line-height:var(--nim-lh-2xl);}
.h3,h3{font-size:1.375rem;line-height:1.875rem;}
.h4,h4{font-size:var(--nim-fs-xl);line-height:var(--nim-lh-xl);}
code{color:var(--nim-blue-700);font-size:.8125em;}
.h5,h5{font-size:var(--nim-fs-lg);line-height:var(--nim-lh-lg);}
.h6,h6{font-size:var(--nim-fs-md);line-height:var(--nim-lh-md);}
small,.small{font-size:var(--nim-fs-sm);}
.text-xs{font-size:var(--nim-fs-xs);line-height:var(--nim-lh-xs);}
.tnum{font-variant-numeric:tabular-nums;}
.fw-medium{font-weight:500!important;}
.eyebrow{font-size:var(--nim-fs-xs);font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--nim-text-muted);}
.min-w-0{min-width:0;}
:focus-visible{outline:0;box-shadow:var(--nim-focus-ring);border-radius:var(--nim-radius-sm);}

/* =========================================================
   2. Bootstrap components — themed via component variables
   ========================================================= */
.btn{
  --bs-btn-padding-x:12px; --bs-btn-padding-y:0; --bs-btn-font-size:var(--nim-fs-md); --bs-btn-font-weight:500;
  --bs-btn-border-radius:var(--nim-radius); --bs-btn-focus-box-shadow:var(--nim-focus-ring);
  height:var(--nim-control-h); display:inline-flex; align-items:center; justify-content:center; gap:6px; white-space:nowrap;
}
.btn-sm{--bs-btn-padding-x:10px;--bs-btn-font-size:var(--nim-fs-sm);--bs-btn-border-radius:var(--nim-radius);height:calc(var(--nim-control-h) - 6px);}
.btn-lg{height:calc(var(--nim-control-h) + 6px);}
.btn-primary{
  --bs-btn-bg:var(--nim-primary); --bs-btn-border-color:var(--nim-primary);
  --bs-btn-hover-bg:var(--nim-primary-hover); --bs-btn-hover-border-color:var(--nim-primary-hover);
  --bs-btn-active-bg:var(--nim-primary-active); --bs-btn-active-border-color:var(--nim-primary-active);
  --bs-btn-disabled-bg:var(--nim-primary); --bs-btn-disabled-border-color:var(--nim-primary);
  box-shadow:var(--nim-shadow-xs);
}
.btn-outline-secondary{
  --bs-btn-color:var(--nim-text); --bs-btn-bg:var(--nim-surface); --bs-btn-border-color:var(--nim-border-strong);
  --bs-btn-hover-color:var(--nim-text); --bs-btn-hover-bg:var(--nim-gray-50); --bs-btn-hover-border-color:var(--nim-gray-400);
  --bs-btn-active-color:var(--nim-text); --bs-btn-active-bg:var(--nim-gray-100); --bs-btn-active-border-color:var(--nim-gray-400);
  --bs-btn-disabled-color:var(--nim-text-disabled); --bs-btn-disabled-bg:var(--nim-surface); --bs-btn-disabled-border-color:var(--nim-border);
  box-shadow:var(--nim-shadow-xs);
}
.btn-check:checked+.btn-outline-secondary{--bs-btn-active-bg:var(--nim-gray-100);--bs-btn-active-color:var(--nim-text);--bs-btn-active-border-color:var(--nim-border-strong);}
.btn-link{--bs-btn-color:var(--nim-text-secondary);--bs-btn-hover-color:var(--nim-text);--bs-btn-active-color:var(--nim-text);text-decoration:none;}
.btn-link:hover{background:var(--nim-gray-100);}
.btn-success{--bs-btn-bg:var(--nim-success);--bs-btn-border-color:var(--nim-success);--bs-btn-hover-bg:#156A3E;--bs-btn-hover-border-color:#156A3E;--bs-btn-disabled-bg:var(--nim-success);--bs-btn-disabled-border-color:var(--nim-success);}
.btn-danger{--bs-btn-bg:var(--nim-danger);--bs-btn-border-color:var(--nim-danger);--bs-btn-hover-bg:#A12C23;--bs-btn-hover-border-color:#A12C23;}
.btn-outline-danger{--bs-btn-color:var(--nim-danger);--bs-btn-border-color:var(--nim-danger-border);--bs-btn-hover-bg:var(--nim-danger-bg);--bs-btn-hover-color:var(--nim-danger);--bs-btn-hover-border-color:var(--nim-danger);}
.btn-icon{width:var(--nim-control-h);padding:0;}
.btn-sm.btn-icon{width:calc(var(--nim-control-h) - 6px);}
.btn .icon,.btn [class^="icon-"]{font-size:16px;line-height:1;}
.btn-sm [class^="icon-"]{font-size:14px;}

.form-label{font-size:var(--nim-fs-sm);font-weight:500;color:var(--nim-text-secondary);margin-bottom:6px;}
.form-label .required{color:var(--nim-danger);margin-left:2px;}
.form-control,.form-select{
  min-height:var(--nim-control-h); font-size:var(--nim-fs-md); color:var(--nim-text); background-color:var(--nim-surface);
  border-color:var(--nim-border-strong); border-radius:var(--nim-radius); box-shadow:var(--nim-shadow-xs);
  padding-top:calc((var(--nim-control-h) - 22px) / 2); padding-bottom:calc((var(--nim-control-h) - 22px) / 2);
}
.form-control-sm,.form-select-sm{min-height:calc(var(--nim-control-h) - 6px);font-size:var(--nim-fs-sm);padding-top:2px;padding-bottom:2px;}
.form-control::placeholder{color:var(--nim-text-disabled);}
.form-control:focus,.form-select:focus{border-color:var(--nim-primary);box-shadow:var(--nim-focus-ring);}
/* Validation (owner 2026-10-26): the green / red border only - no tick / alert icons inside the fields (they looked
   like a glitch next to the value, list arrow or date button); the padding stays as on a plain field. */
.was-validated .form-control:valid,.form-control.is-valid,.was-validated .form-control:invalid,.form-control.is-invalid,
.was-validated textarea.form-control:valid,textarea.form-control.is-valid,.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{background-image:none;padding-right:.75rem;}
.was-validated .form-select:valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple]):not([size]),
.was-validated .form-select:invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple]):not([size]){--bs-form-select-bg-icon:none;padding-right:2.25rem;}
.form-control:disabled,.form-control[readonly]{background-color:var(--nim-gray-50);color:var(--nim-text-muted);box-shadow:none;}
.form-text{font-size:var(--nim-fs-xs);color:var(--nim-text-muted);margin-top:4px;}
.invalid-feedback{font-size:var(--nim-fs-xs);}
.form-check-input{border-color:var(--nim-border-strong);}
.form-check-input:checked{background-color:var(--nim-primary);border-color:var(--nim-primary);}
.form-check-input:focus{border-color:var(--nim-primary);box-shadow:var(--nim-focus-ring);}
.form-check-label{font-size:var(--nim-fs-md);}
.input-group-text{background:var(--nim-gray-50);border-color:var(--nim-border-strong);font-size:var(--nim-fs-sm);color:var(--nim-text-muted);}

.card{
  --bs-card-border-color:var(--nim-border); --bs-card-border-radius:var(--nim-radius-lg); --bs-card-inner-border-radius:calc(var(--nim-radius-lg) - 1px);
  --bs-card-bg:var(--nim-surface); --bs-card-cap-bg:var(--nim-surface); --bs-card-cap-padding-y:12px; --bs-card-cap-padding-x:var(--nim-card-p);
  --bs-card-spacer-x:var(--nim-card-p); --bs-card-spacer-y:var(--nim-card-p); --bs-card-title-color:var(--nim-text);
}
.card-header{display:flex;align-items:center;gap:8px;min-height:52px;}
.card-header .card-title{font-size:var(--nim-fs-md);font-weight:600;margin:0;}
.card-footer{display:flex;align-items:center;gap:8px;}

.table{
  --bs-table-bg:var(--nim-surface); --bs-table-color:var(--nim-text); --bs-table-border-color:var(--nim-gray-100);
  --bs-table-hover-bg:var(--nim-row-hover); --bs-table-hover-color:var(--nim-text);
  --bs-table-active-bg:var(--nim-row-selected); --bs-table-active-color:var(--nim-text);
  font-size:var(--nim-fs-sm); margin-bottom:0;
}
.table>:not(caption)>*>*{padding:0 var(--nim-cell-px);height:var(--nim-row-h);vertical-align:middle;}
.table>thead>tr>th{height:36px;background:var(--nim-gray-50);color:var(--nim-text-secondary);font-size:var(--nim-fs-xs);font-weight:600;white-space:nowrap;border-bottom-color:var(--nim-border-strong);}
.table td{white-space:nowrap;}
.table .text-end,.table .num{text-align:right;font-variant-numeric:tabular-nums;}
.table-sticky thead th{position:sticky;top:0;z-index:2;}
.table-sticky .col-frozen{position:sticky;left:0;z-index:1;background:inherit;}
.table-sticky thead .col-frozen{z-index:3;background:var(--nim-gray-50);}
.table-sticky tbody tr>.col-frozen{background:var(--bs-table-bg);box-shadow:inset -1px 0 0 var(--nim-border);}
.table-sticky tbody tr.table-active>.col-frozen{background:var(--nim-row-selected);}
.table-sticky tbody tr:hover>.col-frozen{background:var(--nim-row-hover);}
.table-sticky .col-frozen-2{left:44px;}
.col-check{width:44px;}
.table-scroll{overflow:auto;max-height:var(--nim-table-max-h,none);}
.nim-list-scroll{--nim-table-max-h:calc(100vh - 390px);min-height:320px;}

.nav-underline{--bs-nav-gap:4px;--bs-nav-link-padding-x:12px;--bs-nav-link-padding-y:10px;--bs-nav-link-color:var(--nim-text-muted);--bs-nav-link-hover-color:var(--nim-text);--bs-nav-underline-link-active-color:var(--nim-text);--bs-nav-underline-border-width:2px;font-size:var(--nim-fs-md);}
.nav-underline .nav-link{display:flex;align-items:center;gap:6px;color:var(--nim-text-muted);white-space:nowrap;}
.nav-underline .nav-link:hover{color:var(--nim-text);}
.nav-underline .nav-link.active{color:var(--nim-text);}
.nav-underline .nav-link.active{border-bottom-color:var(--nim-primary);font-weight:500;}
.nav-underline .badge{font-weight:600;}

.badge{--bs-badge-padding-x:8px;--bs-badge-padding-y:4px;--bs-badge-font-size:12px;--bs-badge-font-weight:500;--bs-badge-border-radius:var(--nim-radius-pill);line-height:1;display:inline-flex;align-items:center;gap:5px;}
.badge.badge-dot::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;}
.badge-count{--bs-badge-padding-x:7px;--bs-badge-padding-y:3px;--bs-badge-font-size:11px;--bs-badge-font-weight:600;}

.alert{--bs-alert-padding-x:12px;--bs-alert-padding-y:10px;--bs-alert-border-radius:var(--nim-radius);font-size:var(--nim-fs-sm);display:flex;gap:10px;align-items:flex-start;}
.alert [class^="icon-"]{font-size:16px;line-height:20px;}
.alert-heading{font-size:var(--nim-fs-sm);font-weight:600;}

.list-group{--bs-list-group-border-color:var(--nim-border);--bs-list-group-border-radius:var(--nim-radius-lg);--bs-list-group-item-padding-x:var(--nim-cell-px);--bs-list-group-item-padding-y:10px;--bs-list-group-action-hover-bg:var(--nim-gray-50);--bs-list-group-active-bg:var(--nim-primary-subtle);--bs-list-group-active-color:var(--nim-text);--bs-list-group-active-border-color:var(--nim-blue-200);font-size:var(--nim-fs-sm);}
.list-group-item.active{z-index:1;box-shadow:inset 3px 0 0 var(--nim-primary);}

.progress,.progress-stacked{--bs-progress-height:6px;--bs-progress-bg:var(--nim-gray-100);--bs-progress-border-radius:var(--nim-radius-pill);--bs-progress-bar-bg:var(--nim-primary);}
.progress-lg{--bs-progress-height:10px;}

.pagination{--bs-pagination-padding-x:10px;--bs-pagination-padding-y:4px;--bs-pagination-font-size:var(--nim-fs-sm);--bs-pagination-color:var(--nim-text-secondary);--bs-pagination-border-color:var(--nim-border);--bs-pagination-border-radius:var(--nim-radius);--bs-pagination-hover-bg:var(--nim-gray-50);--bs-pagination-hover-color:var(--nim-text);--bs-pagination-active-bg:var(--nim-primary);--bs-pagination-active-border-color:var(--nim-primary);--bs-pagination-focus-box-shadow:var(--nim-focus-ring);gap:4px;}
.pagination .page-link{border-radius:var(--nim-radius)!important;min-width:30px;text-align:center;}

.breadcrumb{--bs-breadcrumb-margin-bottom:4px;--bs-breadcrumb-font-size:var(--nim-fs-sm);--bs-breadcrumb-divider-color:var(--nim-text-disabled);--bs-breadcrumb-item-active-color:var(--nim-text-muted);--bs-breadcrumb-item-padding-x:6px;--bs-breadcrumb-divider:"›";}
.breadcrumb a{color:var(--nim-text-muted);}
.breadcrumb a:hover{color:var(--nim-text);}

.dropdown-menu{--bs-dropdown-border-color:var(--nim-border);--bs-dropdown-border-radius:var(--nim-radius-lg);--bs-dropdown-box-shadow:var(--nim-shadow-md);--bs-dropdown-font-size:var(--nim-fs-md);--bs-dropdown-item-padding-y:6px;--bs-dropdown-link-hover-bg:var(--nim-gray-100);--bs-dropdown-link-active-bg:var(--nim-primary-subtle);--bs-dropdown-link-active-color:var(--nim-text);box-shadow:var(--bs-dropdown-box-shadow);}
.offcanvas{--bs-offcanvas-border-color:var(--nim-border);--bs-offcanvas-box-shadow:var(--nim-shadow-lg);}
.modal{--bs-modal-border-radius:12px;--bs-modal-border-color:transparent;--bs-modal-box-shadow:var(--nim-shadow-lg);--bs-modal-header-padding:16px 20px;--bs-modal-padding:20px;}
.tooltip{--bs-tooltip-font-size:var(--nim-fs-xs);--bs-tooltip-bg:var(--nim-gray-900);}
kbd{background:var(--nim-surface);color:var(--nim-text-muted);font-size:11px;padding:1px 5px;font-family:var(--nim-font);border:1px solid var(--nim-border);border-radius:var(--nim-radius-sm);box-shadow:none;}
.btn-close{--bs-btn-close-opacity:.45;}
.btn-close-sm{width:.5em;height:.5em;background-size:.5em;}

/* =========================================================
   3. App shell (no Bootstrap equivalent)
   ========================================================= */
.nim-app{display:grid;grid-template-columns:var(--nim-rail-w) var(--nim-sidebar-w) minmax(0,1fr);grid-template-rows:var(--nim-topbar-h) minmax(0,1fr);height:100vh;min-height:640px;background:var(--nim-canvas);}
.nim-app.sidebar-collapsed{grid-template-columns:var(--nim-rail-w) 0 minmax(0,1fr);}
.nim-app.sidebar-collapsed .nim-sidebar{visibility:hidden;}

.nim-rail{grid-row:1/3;display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 0;background:var(--nim-surface);border-right:1px solid var(--nim-border);z-index:3;}
.nim-brand{width:36px;height:36px;border-radius:var(--nim-radius-lg);background:var(--nim-primary);color:#fff;font-weight:700;font-size:15px;display:flex;align-items:center;justify-content:center;margin:2px 0 10px;}
.nim-rail-item{position:relative;width:48px;padding:6px 0 5px;border:0;border-radius:var(--nim-radius-lg);background:transparent;color:var(--nim-text-muted);display:flex;flex-direction:column;align-items:center;gap:3px;font-size:10px;font-weight:500;line-height:1.1;cursor:pointer;}
.nim-rail-item [class^="icon-"],.nim-rail-item .fa{font-size:19px;line-height:1;}
.nim-rail-item:hover{background:var(--nim-gray-100);color:var(--nim-text);}
.nim-rail-item.active{background:var(--nim-primary-subtle);color:var(--nim-primary-text);}
.nim-rail-item.active::before{content:"";position:absolute;left:-6px;top:10px;bottom:10px;width:3px;border-radius:0 3px 3px 0;background:var(--nim-primary);}
.nim-rail-divider{width:28px;height:1px;background:var(--nim-border);margin:6px 0;}
.nim-rail-spacer{flex:1;}

.nim-sidebar{grid-row:1/3;display:flex;flex-direction:column;min-width:0;overflow:hidden;background:var(--nim-surface);border-right:1px solid var(--nim-border);}
.nim-sidebar-header{height:var(--nim-topbar-h);flex:none;display:flex;align-items:center;gap:8px;padding:0 8px 0 16px;border-bottom:1px solid var(--nim-border);}
.nim-sidebar-title{font-weight:600;font-size:var(--nim-fs-md);line-height:1.2;}
.nim-sidebar-search{padding:10px 12px 4px;flex:none;}
.nim-sidebar-body{flex:1;overflow:auto;padding:4px 8px 16px;}
.nim-sidebar-footer{flex:none;border-top:1px solid var(--nim-border);padding:10px 16px;font-size:var(--nim-fs-xs);color:var(--nim-text-muted);}

.nim-nav{list-style:none;margin:0;padding:0;}
.nim-nav-section{padding:14px 8px 4px;font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--nim-text-muted);}
.nim-nav-link{display:flex;align-items:center;gap:10px;width:100%;min-height:32px;padding:4px 8px;border:0;border-radius:var(--nim-radius);background:transparent;color:var(--nim-text-secondary);font-size:var(--nim-fs-md);text-align:left;cursor:pointer;}
.nim-nav-link [class^="icon-"],.nim-nav-link .fa{font-size:16px;color:var(--nim-text-muted);flex:none;}
/* Font Awesome menu icon (Menu.Icon, DESIGN_RULES "Menu icons"): square box as Lucide, glyphs of any width line up */
.nim-nav-link .fa,.nim-rail-item .fa,.nim-module .ico .fa,.nimh-opt .fa{width:1.25em;text-align:center;line-height:1;}
.nim-nav-link .label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.nim-nav-link .chev{font-size:14px;transition:transform .15s ease;}
.nim-nav-link[aria-expanded="true"] .chev{transform:rotate(90deg);}
.nim-nav-link:hover{background:var(--nim-gray-100);color:var(--nim-text);}
.nim-nav-link.active{background:var(--nim-primary-subtle);color:var(--nim-primary-text);font-weight:500;}
.nim-nav-link.active [class^="icon-"],.nim-nav-link.active .fa{color:var(--nim-primary);}
.nim-nav-sub{list-style:none;margin:2px 0 4px;padding:0 0 0 18px;border-left:1px solid var(--nim-border);margin-left:16px;}
.nim-nav-sub .nim-nav-link{min-height:30px;font-size:var(--nim-fs-sm);padding-left:10px;}
.nim-nav-link .pin{opacity:0;font-size:13px;color:var(--nim-text-disabled);}
.nim-nav-link:hover .pin{opacity:1;}
.nim-nav-link .pin.on{opacity:1;color:var(--nim-sun-500);}
.nim-nav-link mark{padding:0;background:var(--nim-sun-300);color:inherit;border-radius:2px;}

.nim-topbar{grid-column:3;display:flex;align-items:center;gap:8px;padding:0 16px 0 12px;background:var(--nim-surface);border-bottom:1px solid var(--nim-border);min-width:0;}
.nim-cmdk{flex:0 1 440px;display:flex;align-items:center;gap:8px;height:34px;padding:0 10px;border:1px solid var(--nim-border);border-radius:var(--nim-radius);background:var(--nim-gray-50);color:var(--nim-text-muted);font-size:var(--nim-fs-sm);cursor:text;min-width:0;white-space:nowrap;}
.nim-cmdk span{overflow:hidden;text-overflow:ellipsis;}
.nim-cmdk kbd{margin-left:auto;flex:none;}
.nim-main{grid-column:3;overflow:auto;min-width:0;}
.nim-page{display:flex;flex-direction:column;gap:var(--nim-gap);padding:20px 24px 48px;max-width:1600px;}
.nim-page-narrow{max-width:1200px;}
.nim-page-header{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:12px;}
.nim-page-title{font-size:var(--nim-fs-xl);line-height:var(--nim-lh-xl);font-weight:600;letter-spacing:-.011em;}
.nim-page-meta{font-size:var(--nim-fs-sm);color:var(--nim-text-muted);margin-top:2px;}

/* Module launcher */
.nim-launcher{width:min(720px,calc(100vw - 80px));--bs-offcanvas-width:min(720px,calc(100vw - 80px));}
.nim-launcher .offcanvas-body{padding:8px 20px 24px;}
.nim-module-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:4px;}
.nim-module{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:var(--nim-radius);border:0;background:transparent;text-align:left;color:var(--nim-text);font-size:var(--nim-fs-md);cursor:pointer;}
.nim-module:hover{background:var(--nim-gray-100);}
.nim-module .ico{width:30px;height:30px;border-radius:var(--nim-radius);background:var(--nim-gray-100);color:var(--nim-text-secondary);display:flex;align-items:center;justify-content:center;font-size:16px;flex:none;}
.nim-module.pinned .ico{background:var(--nim-primary-subtle);color:var(--nim-primary);}
.nim-launcher-backdrop{position:fixed;inset:0;background:rgba(22,26,33,.32);z-index:1040;}

/* Filter bar + global filter panel */
.nim-filterbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:10px var(--nim-card-p);border-bottom:1px solid var(--nim-border);}
.nim-filterbar .form-control,.nim-filterbar .form-select{width:auto;}
.nim-filterbar .nim-search-input{flex:0 1 260px;}
.nim-filter-more{padding:14px var(--nim-card-p) 16px;border-bottom:1px solid var(--nim-border);background:var(--nim-surface-sunken);}
.nim-filter-chip{display:inline-flex;align-items:center;gap:0;white-space:pre;height:28px;padding:0 6px 0 10px;border-radius:var(--nim-radius-pill);font-size:var(--nim-fs-sm);background:var(--bs-primary-bg-subtle);color:var(--bs-primary-text-emphasis);border:1px solid var(--bs-primary-border-subtle);}
.nim-filter-chip .btn-close{width:8px;height:8px;background-size:8px;padding:4px;margin-left:6px;}

/* =========================================================
   4. Small patterns Bootstrap does not ship
   ========================================================= */
.nim-avatar{width:28px;height:28px;border-radius:50%;flex:none;display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:600;background:var(--nim-blue-100);color:var(--nim-blue-700);}
.nim-avatar-org{border-radius:var(--nim-radius);background:var(--bs-info-bg-subtle);color:var(--bs-info-text-emphasis);}
.nim-avatar-lg{width:48px;height:48px;font-size:16px;}
.nim-person{display:flex;align-items:center;gap:10px;min-width:0;color:inherit;}
/* a linked name (grid person column) is always in the link colour, as .nim-cell-link; underline on hover */
.nim-person-link{color:var(--nim-primary);text-decoration:none;}
.nim-person-link:hover{color:var(--nim-primary);text-decoration:underline;}
.nim-person-link:focus-visible{outline:2px solid var(--nim-primary);outline-offset:2px;border-radius:2px;}
.nim-person-name{font-weight:500;color:var(--nim-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.nim-person-meta{font-size:var(--nim-fs-xs);color:var(--nim-text-muted);}

.nim-stat-value{font-size:var(--nim-fs-3xl);line-height:var(--nim-lh-3xl);font-weight:600;letter-spacing:-.02em;font-variant-numeric:tabular-nums;}

.nim-stepper{display:flex;list-style:none;margin:0;padding:0;border-bottom:1px solid var(--nim-border);overflow-x:auto;overflow-y:hidden;}
.nim-step{flex:1 0 160px;display:flex;align-items:center;gap:10px;padding:14px 16px;font-size:var(--nim-fs-sm);color:var(--nim-text-muted);border-bottom:2px solid transparent;margin-bottom:-1px;}
.nim-step-marker{width:24px;height:24px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;background:var(--nim-gray-100);color:var(--nim-text-muted);}
.nim-step-label{display:flex;flex-direction:column;min-width:0;line-height:1.3;}
.nim-step-label strong{font-weight:500;color:inherit;white-space:nowrap;}
.nim-step.is-done{color:var(--nim-text-secondary);}
.nim-step.is-done .nim-step-marker{background:var(--nim-success);color:#fff;}
.nim-step.is-current{color:var(--nim-text);border-bottom-color:var(--nim-primary);}
.nim-step.is-current .nim-step-marker{background:var(--nim-primary);color:#fff;}

.nim-timeline{list-style:none;margin:0;padding:0;}
.nim-timeline-item{position:relative;display:grid;grid-template-columns:24px minmax(0,1fr);gap:10px;padding-bottom:16px;}
.nim-timeline-item:not(:last-child)::before{content:"";position:absolute;left:11px;top:26px;bottom:2px;width:1px;background:var(--nim-border);}
.nim-timeline-marker{width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;background:var(--nim-gray-100);color:var(--nim-text-muted);}
.nim-timeline-marker.is-success{background:var(--bs-success-bg-subtle);color:var(--bs-success-text-emphasis);}
.nim-timeline-marker.is-primary{background:var(--bs-primary-bg-subtle);color:var(--bs-primary-text-emphasis);}
/* Entry with actions (edit / delete …): .nim-timeline-row > .nim-timeline-text + .nim-timeline-acts. The text wraps (long
   words too); the actions stay fixed at the right of the first line, never below a long message (owner 2026-10-24). */
.nim-timeline-row{display:flex;flex-wrap:nowrap;align-items:flex-start;gap:8px;min-width:0;}
.nim-timeline-text{flex:1 1 auto;min-width:0;overflow-wrap:anywhere;}
.nim-timeline-acts{flex:none;display:flex;gap:4px;margin-left:auto;}

.nim-field-date{position:relative;}
.nim-field-date .form-control{padding-right:118px;}
.nim-field-date-alt{position:absolute;right:34px;top:50%;transform:translateY(-50%);font-size:var(--nim-fs-xs);color:var(--nim-text-muted);pointer-events:none;}
.nim-field-date-icon{position:absolute;right:10px;top:50%;transform:translateY(-50%);color:var(--nim-text-muted);font-size:16px;pointer-events:none;}

.nim-doc-viewer{display:flex;align-items:center;justify-content:center;min-height:440px;padding:24px;background:var(--nim-gray-600);border-radius:var(--nim-radius);}
.nim-doc-page{width:min(100%,380px);aspect-ratio:1.42/1;display:flex;flex-direction:column;gap:8px;padding:18px;background:#fff;border-radius:var(--nim-radius-sm);box-shadow:var(--nim-shadow-lg);}
.nim-doc-line{height:8px;border-radius:3px;background:var(--nim-gray-200);}
.nim-doc-photo{width:46px;height:56px;border-radius:var(--nim-radius-sm);background:var(--nim-blue-100);}
.nim-dropzone{display:flex;flex-direction:column;align-items:center;gap:4px;padding:20px;text-align:center;border:1.5px dashed var(--nim-border-strong);border-radius:var(--nim-radius-lg);background:var(--nim-surface-sunken);color:var(--nim-text-muted);font-size:var(--nim-fs-sm);}
.nim-dropzone [class^="icon-"]{font-size:22px;color:var(--nim-primary);}

.nim-diff .old{color:var(--bs-danger-text-emphasis);text-decoration:line-through;text-decoration-color:rgba(192,54,44,.45);}
.nim-diff .new{color:var(--bs-success-text-emphasis);font-weight:500;}

.nim-dot{width:8px;height:8px;border-radius:50%;display:inline-block;background:var(--nim-danger);}
.nim-swatch{height:52px;}
.nim-swatch-row{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));}
@media (min-width:768px){.nim-swatch-row{grid-template-columns:repeat(10,minmax(0,1fr));}}
.nim-type-token{width:140px;}
.nim-type-spec{width:96px;}

/* Design-doc helpers (gallery only) */
.bg-blue-50{background:var(--nim-blue-50)}.bg-blue-100{background:var(--nim-blue-100)}.bg-blue-200{background:var(--nim-blue-200)}.bg-blue-300{background:var(--nim-blue-300)}.bg-blue-400{background:var(--nim-blue-400)}.bg-blue-500{background:var(--nim-blue-500)}.bg-blue-600{background:var(--nim-blue-600)}.bg-blue-700{background:var(--nim-blue-700)}.bg-blue-800{background:var(--nim-blue-800)}.bg-blue-900{background:var(--nim-blue-900)}
.bg-gray-25{background:var(--nim-gray-25)}.bg-gray-50{background:var(--nim-gray-50)}.bg-gray-100{background:var(--nim-gray-100)}.bg-gray-200{background:var(--nim-gray-200)}.bg-gray-300{background:var(--nim-gray-300)}.bg-gray-400{background:var(--nim-gray-400)}.bg-gray-500{background:var(--nim-gray-500)}.bg-gray-600{background:var(--nim-gray-600)}.bg-gray-700{background:var(--nim-gray-700)}.bg-gray-900{background:var(--nim-gray-900)}
.shadow-xs{box-shadow:var(--nim-shadow-xs)}.shadow-md{box-shadow:var(--nim-shadow-md)}

/* =========================================================
   5. Responsive
   ========================================================= */
@media (max-width:991.98px){
  .nim-app{grid-template-columns:var(--nim-rail-w) minmax(0,1fr);}
  .nim-sidebar{display:none;}
  .nim-topbar,.nim-main{grid-column:2;}
  .nim-page{padding:16px;}
}
