/* =============================================================================
   TU - project stylesheet
   Loaded on every page by renderer.php (frmProjectPage::initBeforeRender), after the
   wfEngine theme (ui-modern2/main.css), so everything here overrides the engine.

   1. Theme tokens   - engine CSS variables aligned with the TU components
   2. Engine chrome  - page, top menu, grids, forms, buttons
   3. Page components (moved here from the inline <style> blocks of content/*.php)
   ============================================================================= */

/* ---------------------------------------------------------------- 1. Theme tokens */
:root {
    --tu-ink: #1B1F24;
    --tu-muted: #5B6573;
    --tu-soft: #4A5462;
    --tu-line: #DDE2E9;
    --tu-line-soft: #EEF0F3;
    --tu-page: #F4F6F9;
    --tu-blue: #2457C5;
    --tu-blue-bg: #E6EDFA;
    --tu-blue-ink: #1D4AA8;
    --tu-radius: 12px;

    --color-secondary: var(--tu-blue);
    --color-text: var(--tu-ink);
    --color-text-muted: var(--tu-muted);
    --color-text-link: var(--tu-blue-ink);
    --color-heading: var(--tu-ink);
    --color-border: var(--tu-line);
    --color-divider: var(--tu-line);
    --color-bg-subtle: var(--tu-page);
    --page-bg-color: var(--tu-page);
    --page-bg-color-solid: var(--tu-page);
    --color-bg-page: var(--tu-page);
    --color-bg-page-solid: var(--tu-page);
    --font-primary: Inter, system-ui, 'Helvetica Neue', Arial, sans-serif;

    --btn-primary-base: var(--tu-blue);
    --btn-primary-hover: var(--tu-blue-ink);
    --btn-primary-pressed: var(--tu-blue-ink);
    --btn-primary-on: #fff;
    --btn-primary-hover-on: #fff;
    --btn-primary-pressed-on: #fff;

    --table-row-hover-bg: var(--tu-page);
    --table-header-background: #F7F8FA;
}

/* ---------------------------------------------------------------- 2. Engine chrome */
body {
    background: var(--tu-page);
    color: var(--tu-ink);
    font-family: var(--font-primary);
}

a { color: var(--tu-blue-ink); }

/* Top menu: the whole tile is the link (the padding used to sit on the wrapper div,
   so only the caption itself was clickable) */
body:not(.menu-vertical) #menu .item {
    padding: 0;
    align-self: stretch;
}
body:not(.menu-vertical) #menu .item > a {
    box-sizing: border-box;
    width: 100%;
    height: 100%;
    justify-content: center;
    padding: 6px 20px 10px;
}
/* Top menu dropdowns (Div 1 - Div 6): panel below the tile, opened by hover (Menu.openSubmenu adds
   .submenu-open) or keyboard focus */
/* the header is its own stacking layer (z 301) under the page sub menu bar (frmSubMenu, sticky z 650):
   lift it so the dropdown opens over the sub menu */
header.navbar{z-index:700!important}
body:not(.menu-vertical) #menu .item.has-submenu{position:relative}
body:not(.menu-vertical) #menu .item .submenu{
    position:absolute;top:100%;left:50%;min-width:200px;z-index:1000;
    display:flex;flex-direction:column;padding:6px;
    background:#fff;border:1px solid var(--tu-line);border-radius:10px;box-shadow:0 12px 28px rgba(20,24,30,.18);
    opacity:0;visibility:hidden;pointer-events:none;transform:translate(-50%,-4px);
    transition:opacity 150ms ease,transform 150ms ease,visibility 0ms linear 150ms}
body:not(.menu-vertical) #menu .item.submenu-open .submenu,
body:not(.menu-vertical) #menu .item:hover .submenu,
body:not(.menu-vertical) #menu .item:focus-within .submenu{
    opacity:1;visibility:visible;pointer-events:auto;transform:translate(-50%,0);transition-delay:0ms}
body:not(.menu-vertical) #menu .item .submenu-item{
    display:flex;justify-content:space-between;align-items:center;gap:10px;padding:9px 12px;border-radius:6px;
    font:500 13px Inter,system-ui,sans-serif;letter-spacing:0;text-transform:none;white-space:nowrap;
    color:var(--tu-ink)!important;text-decoration:none!important}
body:not(.menu-vertical) #menu .item .submenu-item:hover,
body:not(.menu-vertical) #menu .item .submenu-item:focus-visible{background:var(--tu-page)}
body:not(.menu-vertical) #menu .item .submenu-item.active{color:var(--tu-blue-ink)!important;font-weight:600;background:var(--tu-blue-bg)}
body:not(.menu-vertical) #menu .item .submenu-item .active-indicator{font-size:11px}

body.menu-vertical #menu .item > a {
    display: flex;
    width: 100%;
    box-sizing: border-box;
}

/* Grids (frmAdvancedGrid / frmGrid): layout left to the engine on purpose - the header row
   holds the column filters and is sticky, so no overflow/border wrapper here */

/* Column header: light background (--table-header-background above), so captions and
   sort arrows are dark instead of the engine's white */
.engine-grid thead,
.engine-grid tfoot {
    background-color: var(--table-header-background);
}
.engine-grid thead th .th-label,
.engine-grid tfoot th .th-label,
.engine-grid thead th .header-title,
.engine-grid tfoot th .header-title {
    color: #000;
}
.engine-grid thead th .header-sort-button,
.engine-grid tfoot th .header-sort-button {
    --table-sort-button-color: var(--tu-muted);
    --link-color: #000;
}

/* Forms */
input[type=text], input[type=email], input[type=url], input[type=number], input[type=password],
input[type=date], input[type=datetime-local], input[type=search], select, textarea {
    font-family: var(--font-primary);
    border-color: #B9C2CE;
    border-radius: 6px;
}
input:focus-visible, select:focus-visible, textarea:focus-visible, button:focus-visible, a:focus-visible {
    outline: 2px solid var(--tu-blue);
    outline-offset: 1px;
}

/* ---------------------------------------------------------------- 3. Page components */

/* ---- Dashboard (content/index.php) - .tud-* ---- */
.tud{--ink:#1B1F24;--muted:#5B6573;--soft:#4A5462;--line:#DDE2E9;--blue:#2457C5;--blue-bg:#E6EDFA;--blue-ink:#1D4AA8;--orange-ink:#8A4B0F;
     font-family:Inter,system-ui,sans-serif;color:var(--ink);display:flex;flex-wrap:wrap;gap:20px;align-items:flex-start;padding:16px 0}
.tud *{box-sizing:border-box}
.tud-main{flex:999 1 620px;min-width:0;display:flex;flex-direction:column;gap:20px}
.tud-side{flex:1 1 280px;min-width:0}
.tud-card{background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden}
.tud-card h2{margin:0;padding:14px 18px;font-size:15px;border-bottom:1px solid #E6EAF0;display:flex;justify-content:space-between;align-items:center}
.tud-card h2 span{font-size:12px;font-weight:600;color:var(--muted)}
.tud-empty{padding:16px 18px;font-size:13px;color:var(--muted)}
.tud-row{display:flex;flex-wrap:wrap;align-items:center;gap:12px 16px;padding:12px 18px;border-bottom:1px solid #EEF0F3}
.tud-row:last-child{border-bottom:none}
.tud-what{flex:1 1 260px;min-width:0;display:flex;flex-direction:column;gap:2px}
.tud-what b{font-size:14px}
.tud-small{font-size:12px;color:var(--muted)}
.tud-when{flex:0 0 150px;display:flex;flex-direction:column;gap:1px}
.tud-when .lbl{font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.tud-when b{font-size:20px;line-height:1.2;color:var(--ink)}
.tud-when .rel{font-size:12px;color:var(--soft)}
.tud-when.late b,.tud-when.late .rel:first-of-type{color:#A12A1C}
.tud-open{display:inline-block;font-size:11px;font-weight:600;color:var(--orange-ink);background:#FCEFE1;border-radius:4px;padding:1px 6px;margin-left:6px;vertical-align:middle}
.tud-actions{display:flex;gap:8px;flex-wrap:wrap}
.tud form{margin:0}
.tud-btn{display:inline-flex;align-items:center;min-height:36px;padding:0 14px;border-radius:8px;border:none;background:var(--blue);color:#fff;font:inherit;font-size:13px;font-weight:600;cursor:pointer;text-decoration:none}
.tud-btn.ghost{background:#fff;color:var(--ink);border:1px solid #B9C2CE}
.tud-btn:disabled{background:#DCE1E8;color:var(--muted);cursor:not-allowed}
.tud-err{padding:10px 12px;border-radius:6px;background:#FDECEA;color:#8F1D14;font-size:13px}
.tud-kb h3{margin:0;padding:12px 18px 4px;font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}
.tud-kb ul{list-style:none;margin:0;padding:0 8px 10px}
.tud-kb a{display:flex;gap:8px;align-items:center;padding:8px 10px;border-radius:6px;font-size:14px;color:var(--ink);text-decoration:none}
.tud-kb a:hover{background:#F4F6F9}
.tud-kb a i{font-style:normal;font-size:10px;font-weight:700;color:var(--blue-ink);background:var(--blue-bg);border-radius:4px;padding:2px 5px}
.tud-dialog{width:min(1100px,94vw);height:90vh;padding:0;border:none;border-radius:12px;overflow:hidden}
.tud-dialog::backdrop{background:rgba(20,24,30,.55)}
.tud-dialog .bar{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 14px;border-bottom:1px solid var(--line);font:600 14px Inter,system-ui,sans-serif}
.tud-dialog iframe{width:100%;height:calc(90vh - 57px);border:0;display:block}

/* ---- Knowledge base (content/knowledge.php) - .tuk-* ---- */
.tuk{--ink:#1B1F24;--muted:#5B6573;--line:#DDE2E9;--blue:#2457C5;--blue-bg:#E6EDFA;--blue-ink:#1D4AA8;
     font-family:Inter,system-ui,sans-serif;color:var(--ink);width:100%;max-width:760px;margin:0 auto;padding:24px 16px;display:flex;flex-direction:column;gap:20px}
.tuk *{box-sizing:border-box}
.tuk-head{display:flex;flex-direction:column;gap:12px}
.tuk-head h1{margin:0;font-size:24px}
.tuk-head p{margin:4px 0 0;font-size:13px;color:var(--muted)}
.tuk-search{width:100%;min-height:44px;padding:0 14px;border:1px solid #B9C2CE;border-radius:8px;font:inherit;font-size:16px;background:#fff}
.tuk-search:focus{outline:2px solid var(--blue);outline-offset:1px;border-color:var(--blue)}
.tuk-list{background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden}
.tuk-sec h2{margin:0;padding:10px 16px;font-size:11px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;background:#F7F8FA;border-bottom:1px solid #E6EAF0;display:flex;justify-content:space-between}
.tuk-sec + .tuk-sec h2{border-top:1px solid #E6EAF0}
.tuk-sec ul{list-style:none;margin:0;padding:0}
.tuk-sec li + li{border-top:1px solid #EEF0F3}
.tuk-item{display:flex;gap:12px;align-items:center;padding:12px 16px;min-height:56px;color:var(--ink);text-decoration:none}
a.tuk-item:hover{background:#F4F6F9}
a.tuk-item:focus-visible{outline:2px solid var(--blue);outline-offset:-2px}
.tuk-ext{flex:0 0 44px;text-align:center;font-size:10px;font-weight:700;color:var(--blue-ink);background:var(--blue-bg);border-radius:4px;padding:4px 0}
.tuk-txt{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.tuk-txt b{font-size:15px;font-weight:600;overflow-wrap:anywhere}
.tuk-small{font-size:12px;color:var(--muted);overflow-wrap:anywhere}
.tuk-act{flex:0 0 auto;font-size:13px;font-weight:600;color:var(--blue-ink)}
.tuk-missing .tuk-ext{color:#8F1D14;background:#FDECEA}
.tuk-empty{background:#fff;border:1px solid var(--line);border-radius:12px;padding:18px;font-size:13px;color:var(--muted)}
.tuk-btn{display:inline-flex;align-items:center;min-height:36px;padding:0 14px;border-radius:8px;background:#fff;color:var(--ink);border:1px solid #B9C2CE;font:inherit;font-size:13px;font-weight:600;cursor:pointer;text-decoration:none}
.tuk-dialog{width:min(1100px,94vw);height:90vh;max-width:100vw;padding:0;border:none;border-radius:12px;overflow:hidden}
.tuk-dialog::backdrop{background:rgba(20,24,30,.55)}
.tuk-dialog .bar{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 14px;border-bottom:1px solid var(--line);font:600 14px Inter,system-ui,sans-serif}
.tuk-dialog .bar #tukTitle{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tuk-dialog iframe{width:100%;height:calc(90vh - 57px);border:0;display:block}
@media (max-width:600px){
  .tuk{padding:16px 12px}
  .tuk-head h1{font-size:20px}
  .tuk-item{padding:12px}
  .tuk-act{font-size:0}
  .tuk-act::after{content:"›";font-size:22px;color:var(--muted)}
  .tuk-act.dl::after{content:"↓";font-size:16px}
  .tuk-dialog{width:100vw;height:100dvh;border-radius:0}
  .tuk-dialog iframe{height:calc(100dvh - 57px)}
  .tuk-dialog .bar .tuk-btn:first-child{display:none}
}

/* ---- Projects / checksheet (content/projects.php) - .tup-* ---- */
.tup{--ink:#1B1F24;--muted:#5B6573;--soft:#4A5462;--line:#DDE2E9;--blue:#2457C5;--blue-bg:#E6EDFA;--blue-ink:#1D4AA8;--orange:#D9822B;--orange-bg:#FFF8F0;--orange-ink:#8A4B0F;--skip:#A9BCE6;--empty:#DCE1E8;
     font-family:Inter,system-ui,sans-serif;color:var(--ink);display:flex;flex-wrap:wrap;gap:20px;align-items:flex-start;padding:16px 0}
.tup *{box-sizing:border-box}
.tup-card{background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden;min-width:0}
.tup-left{flex:1 1 480px}
.tup-right{flex:1 1 640px}
.tup-card{display:flex;flex-direction:column}
.tup-pane{flex:1 1 auto;min-height:0;overflow:auto;position:relative}
@media (max-width:899px){.tup-card{height:auto!important}.tup-pane{overflow:visible}}
.tup-head{padding:14px 18px;border-bottom:1px solid #E6EAF0;display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}
.tup-head h2{margin:0;font-size:15px}
.tup-legend{display:flex;gap:12px;font-size:12px;color:var(--soft);flex-wrap:wrap}
.tup-legend i{display:inline-block;width:12px;height:8px;border-radius:2px;margin-right:5px;vertical-align:middle}
.tup-grid{display:grid;grid-template-columns:170px minmax(0,1fr);gap:12px;align-items:center;padding:12px 18px;border-bottom:1px solid #E6EAF0;color:inherit;text-decoration:none}
.tup-grid.hdr{background:#FAFBFC;padding:9px 18px;font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
a.tup-grid:hover{background:#F7F9FC}
a.tup-grid.on{background:#EEF3FC;box-shadow:inset 3px 0 0 var(--blue)}
.tup-segs{display:grid;gap:3px}
.tup-segs span{font-size:10px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-transform:none;letter-spacing:0}
.tup-days{margin-top:3px}
.tup-days span{font-size:11px;color:var(--soft);font-variant-numeric:tabular-nums}
.tup-days span.cur{color:var(--orange-ink);font-weight:600}
.tup-seg{height:12px;border-radius:3px;background:var(--empty);overflow:hidden}
.tup-seg b{display:block;height:100%}
.tup-pname{font-size:14px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tup-small{font-size:12px;color:var(--muted)}
.tup-stage{display:flex;justify-content:space-between;font-size:12px;margin-top:6px}
.tup-stage em{font-style:normal;color:var(--orange-ink);font-weight:500}
.tup-idle{color:var(--muted);font-weight:500;margin-left:2px}
.tup-idle.old{color:#fff;background:#C0392B;font-weight:700;border-radius:4px;padding:0 5px}
.tup-sheet{padding:20px 24px}
.tup-sheet h1{margin:2px 0 4px;font-size:22px}
.tup-err{margin:12px 24px 0;padding:10px 12px;border-radius:6px;background:#FDECEA;color:#8F1D14;font-size:13px}
.tup-phase{display:flex;justify-content:space-between;align-items:center;padding:22px 0 8px;border-bottom:2px solid var(--ink);margin-bottom:2px}
.tup-phase b{font-size:13px;text-transform:uppercase;letter-spacing:.06em}
.tup-step{display:flex;gap:18px;padding:14px 0;border-bottom:1px solid #EEF0F3}
.tup-step.active{background:var(--orange-bg);margin:0 -24px;padding:14px 24px}
.tup-step.locked,.tup-step.skip{opacity:.6}
.tup-step.skip .tup-title{text-decoration:line-through;color:var(--muted)}
.tup-body{flex:1 1 auto;min-width:0;display:flex;gap:10px}
.tup-body.sub{padding-left:38px}
.tup-num{min-width:28px;font-size:15px;font-weight:700}
.tup-step.active .tup-num{color:var(--orange-ink)}
.tup-main{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:6px}
.tup-title{font-size:15px;font-weight:700}
.tup-hint{font-size:13px;color:var(--soft)}
.tup-sign{flex:0 0 170px;width:170px;display:flex;flex-direction:column;gap:4px}
.tup-sign .who{min-height:36px;display:flex;align-items:flex-end;font-size:14px;font-weight:600;font-style:italic}
.tup-sign .ln{border-top:1.5px dashed #B9C2CE}
.tup-step.done .tup-sign .ln{border-top-style:solid;border-color:var(--ink)}
.tup-step.active .tup-sign .ln{border-top-style:solid;border-color:var(--orange)}
.tup-sign .when{min-height:20px;font-size:12px;color:var(--soft)}
.tup-dl{display:flex;flex-wrap:wrap;gap:6px;margin-top:2px}
.tup-dl .tup-btn.small{display:inline-flex;align-items:center;gap:6px;text-decoration:none;min-height:30px}
.tup-files{margin-top:4px;padding:8px 10px;border:1px dashed #B9C2CE;border-radius:6px;background:#fff;display:flex;flex-direction:column;gap:6px}
.tup-files.need{border-color:var(--orange)}
.tup-files-h{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:var(--soft)}
.tup-files ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}
.tup-files li{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:13px}
.tup-files li form{display:inline}
.tup-x{border:none;background:none;color:var(--muted);font-size:16px;line-height:1;cursor:pointer;padding:2px 6px;border-radius:4px}
.tup-x:hover{background:#FDECEA;color:#8F1D14}
.tup-sigbar{display:flex;flex-wrap:nowrap;align-items:center;gap:4px;margin-top:2px}
.tup-sigbar .tup-btn.small{min-height:24px;padding:0 7px;font-size:11px}
.tup-sigbar form{display:inline}
.tup-sigedit{display:flex;flex-direction:column;gap:6px;margin-top:6px;padding:8px;border:1px solid var(--line);border-radius:6px;background:#fff}
.tup-sigedit[hidden]{display:none}
.tup-sigedit select,.tup-sigedit input{width:100%;font-size:12px!important;padding:4px 6px!important}
.tup-tag.bypass{background:#FCEFE1;color:var(--orange-ink)}
.tup-tag{display:inline-block;font-size:11px;font-weight:600;color:var(--blue-ink);background:var(--blue-bg);padding:1px 6px;border-radius:4px}
.tup form{margin:0}
.tup-btn{min-height:36px;padding:0 14px;border-radius:8px;border:none;background:var(--blue);color:#fff;font-size:13px;font-weight:600;cursor:pointer}
.tup-btn:disabled{background:var(--empty);color:var(--muted);cursor:not-allowed}
.tup-btn.ghost{background:#fff;color:var(--ink);border:2px solid #B9C2CE}
.tup-btn.ghost.on{background:var(--blue);border-color:var(--blue);color:#fff}
.tup-btn.small{min-height:28px;padding:0 8px;font-size:12px;border:1px solid #B9C2CE;background:#fff;color:var(--soft);font-weight:500}
.tup input[type=text],.tup input[type=email],.tup input[type=number],.tup input[type=url],.tup input[type=date],.tup input[type=datetime-local],.tup select{font:inherit;font-size:13px;padding:7px 9px;border:1px solid #B9C2CE;border-radius:6px;color:var(--ink);background:#fff;max-width:100%}
.tup label{display:flex;flex-direction:column;gap:4px;font-size:12px;font-weight:600;color:var(--soft)}
.tup-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.tup-people{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.tup-badge{display:inline-block;font-size:11px;font-weight:600;padding:2px 7px;border-radius:999px;vertical-align:middle}
.tup-badge.p{background:#EEF0F3;color:#4A5462}.tup-badge.c{background:var(--blue-bg);color:var(--blue-ink)}.tup-badge.a{background:#FCEFE1;color:var(--orange-ink)}
.tup-toggle{display:inline-flex;align-items:center;min-height:32px;padding:0 10px;border-radius:8px;border:1px solid #B9C2CE;background:#fff;color:var(--soft);font-size:12px;font-weight:600;text-decoration:none}
.tup-toggle.on{background:var(--blue-bg);border-color:var(--blue);color:var(--blue-ink)}
.tup-banner{margin:12px 24px 0;padding:10px 12px;border-radius:6px;background:#EEF0F3;color:#2E3540;font-size:13px}
a.tup-grid.dim{opacity:.7}
.tup-search{padding:10px 18px;border-bottom:1px solid #E6EAF0;display:flex;gap:8px;flex-wrap:wrap}
.tup .tup-search select{flex:0 0 auto;min-height:38px}
.tup .tup-search input{flex:1 1 220px;width:auto;min-height:38px;font:inherit;font-size:14px;padding:0 12px;border:1px solid #B9C2CE;border-radius:6px;background:#fff}
.tup-grid[hidden]{display:none}
/* recruitment (In Approval page) */
.tup-grid.tup-cand{background:#FFFDF8}
.tup-contact label{flex:1 1 200px}
.tup-contact input{width:100%}
.tup-maillog{color:var(--blue-ink)}
.tup-log{margin-top:6px;padding:10px 12px;border:1px solid #E6EAF0;border-radius:8px;background:#FAFBFC;display:flex;flex-direction:column;gap:8px}
.tup-log ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}
.tup-log li{display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-size:13px}
.tup-log li form{margin-left:auto}
.tup-log-when{font-size:12px;font-weight:600;color:#4A5462;min-width:96px}
.tup-log-note{flex:1 1 160px;min-width:0;overflow-wrap:anywhere}
.tup-logadd input[type=text]{flex:1 1 200px;min-width:0}
.tup-cancel summary{list-style:none;display:inline-flex;align-items:center}
.tup-cancel summary::-webkit-details-marker{display:none}
.tup-cancel[open] summary{margin-bottom:6px}
.tup-btn.warn{color:#8F1D14;border-color:#E5B5AE}
.tup-btn.small.warn{background:#fff}
.tup-btn.ghost.warn.on{background:#A12A1C;border-color:#A12A1C;color:#fff}
.tup-btn.small.on{background:var(--blue);border-color:var(--blue);color:#fff}
.tup-approvals{display:flex;flex-direction:column;gap:6px}
.tup-appr-lbl{min-width:80px;font-size:13px;font-weight:600}
.tup-mail{position:fixed;inset:0;margin:auto;width:min(760px,96vw);height:fit-content;max-height:92vh;padding:0;border:none;border-radius:12px;overflow:hidden;box-shadow:0 20px 50px rgba(20,24,30,.3)}
.tup-mail .tt-editor [contenteditable] p{margin:0 0 10px!important}
.tup-mail-logo{display:flex;align-items:center;gap:10px;padding:8px 0 0}
.tup-mail-logo img{width:56px;height:56px}
.tup-mail::backdrop{background:rgba(20,24,30,.55)}
.tup-mail-form{display:flex;flex-direction:column;max-height:92vh;margin:0;font-family:Inter,system-ui,sans-serif;color:#1B1F24}
.tup-mail-head{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid #DDE2E9;font-size:15px}
.tup-mail-body{padding:14px 16px;display:flex;flex-direction:column;gap:10px;overflow:auto}
.tup-mail-body label{display:grid;grid-template-columns:70px 1fr;align-items:center;gap:8px;font-size:12px;font-weight:600;color:#4A5462}
.tup-mail-body label input{width:100%;font:inherit;font-size:13px;font-weight:400;padding:7px 9px;border:1px solid #B9C2CE;border-radius:6px;color:#1B1F24}
.tup-mail-lbl{display:block;font-size:12px;font-weight:600;color:#4A5462;margin-bottom:4px}
.tup-mail-text .tt-editor{border:1px solid #B9C2CE;border-radius:6px;min-height:220px;background:#fff}
.tup-mail-att{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.tup-mail-att .tup-mail-lbl{width:100%;margin:0}
.tup-mail-foot{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end;padding:12px 16px;border-top:1px solid #DDE2E9;background:#FAFBFC}
@media (max-width:600px){.tup-mail-body label{grid-template-columns:1fr}}
.tup-tl{border:1px solid #E6EAF0;border-radius:8px;padding:10px 12px 4px;background:#FAFBFC}
.tup-tl-bar{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap}
.tup-tl-bar .tup-btn.small{min-width:30px;justify-content:center}
.tup-tl-area{position:relative;margin:8px 8px 0;user-select:none;-webkit-user-select:none;touch-action:none}
.tup-tl-axis{position:absolute;left:0;right:0;height:2px;background:var(--ink)}
.tup-tl-tick{position:absolute;width:1px;background:#C9D0DA}
.tup-tl-tick.m{background:#8C96A3}
.tup-tl-mon{position:absolute;font-size:11px;color:var(--muted);white-space:nowrap;padding-left:4px}
.tup-tl-today{position:absolute;width:0;border-left:1.5px dashed var(--orange)}
.tup-tl-m{position:absolute;top:0;width:0;padding:0;border:none;background:none;font:inherit;cursor:grab}
.tup-tl-m:focus-visible .lb{outline:2px solid var(--blue);outline-offset:1px}
.tup-tl-area.drag .tup-tl-m{cursor:grabbing}
.tup-tl-m .lb{position:absolute;transform:translateX(-50%);white-space:nowrap;font-size:11px;font-weight:600;line-height:16px;padding:0 6px;border-radius:4px;background:#fff;border:1px solid var(--c);color:var(--ink)}
.tup-tl-m .st{position:absolute;left:0;width:0;border-left:1px dashed var(--c)}
.tup-tl-m .v{position:absolute;left:-7px;width:14px;height:10px}
.tup-tl-m.sug .lb{font-style:italic;color:var(--muted);border-style:dashed}
.tup-tl[data-locked] .tup-tl-m{cursor:default}
.tup .bad,.tup input.bad{border-color:#C62828!important;background:#FDECEA!important;color:#8F1D14}
.tup-check{flex-direction:row!important;align-items:center;gap:8px!important;font-weight:500!important;color:var(--ink)!important;padding:4px 6px;border-radius:6px;width:fit-content}
.tup-check input{width:16px;height:16px}
.tup-tl-msg{font-size:12px;color:#8F1D14;font-weight:600;min-height:0}
.tup-tl-msg:empty{display:none}
.tup-tl-m.bad .lb{background:#FDECEA;border-color:#C62828;color:#8F1D14}
.tup-plan{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px}
.tup-plan input{width:100%}
.tup-plan input.sug{color:var(--muted);font-style:italic}
.tup-late{color:#A12A1C!important;font-weight:600}
.tup-badge.late{background:#FDECEA;color:#8F1D14}
@media (max-width:640px){.tup-plan{grid-template-columns:1fr}}
.tup-done{margin:0 24px 28px;padding:16px 18px;border:2px solid var(--ink);border-radius:8px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px;font-size:15px;font-weight:700}
@media (max-width:640px){.tup-people{grid-template-columns:1fr}.tup-step{flex-direction:column}.tup-sign{width:auto;flex-basis:auto}}

/* ---- Approved page (content/approved.php) - column User ---- */
.tua-user{display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.tua-link{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:6px;color:var(--tu-blue-ink)}
.tua-link:hover{background:var(--tu-blue-bg)}
.tua-create{margin:0}
.tua-btn{min-height:28px;padding:0 10px;border-radius:6px;border:1px solid var(--tu-blue);background:#fff;color:var(--tu-blue-ink);font:inherit;font-size:12px;font-weight:600;cursor:pointer;white-space:nowrap}
.tua-btn:hover{background:var(--tu-blue);color:#fff}
th[data-col-id="!tuUserCol"] .table-search{visibility:hidden} /* no filter on the computed User column */

/* ---- Finances dashboard (content/finances.php) - .tuf-* ---- */
.tuf{font-family:Inter,system-ui,sans-serif;color:var(--tu-ink);display:flex;flex-wrap:wrap;gap:20px;align-items:flex-start;padding:16px 0}
.tuf *{box-sizing:border-box}
.tuf-card{flex:1 1 320px;min-width:0;background:#fff;border:1px solid var(--tu-line);border-radius:12px;overflow:hidden}
.tuf-card:last-child{flex:999 1 620px}
.tuf-card h2{margin:0;padding:14px 18px;font-size:15px;border-bottom:1px solid #E6EAF0;display:flex;justify-content:space-between;align-items:center;gap:12px}
.tuf-card h2 a{font-size:12px;font-weight:600;color:var(--tu-blue-ink);text-decoration:none}
.tuf-empty{padding:16px 18px;font-size:13px;color:var(--tu-muted)}
.tuf-totals{display:flex;flex-wrap:wrap;gap:12px 28px;padding:16px 18px;border-bottom:1px solid #EEF0F3}
.tuf-total{display:flex;flex-direction:column;gap:2px}
.tuf-total .lbl{font-size:11px;font-weight:600;color:var(--tu-muted);text-transform:uppercase;letter-spacing:.04em}
.tuf-total b{font-size:24px;line-height:1.2;font-variant-numeric:tabular-nums}
.tuf-banks{list-style:none;margin:0;padding:6px 18px 10px}
.tuf-banks li{display:flex;justify-content:space-between;gap:12px;padding:8px 0;font-size:14px;border-bottom:1px solid #EEF0F3}
.tuf-banks li:last-child{border-bottom:none}
.tuf-banks b{font-variant-numeric:tabular-nums;white-space:nowrap}
.tuf-scroll{overflow-x:auto}
.tuf-table{width:100%;border-collapse:collapse;font-size:13px}
.tuf-table th{text-align:left;font-size:11px;font-weight:600;color:var(--tu-muted);text-transform:uppercase;letter-spacing:.04em;padding:9px 12px;background:#FAFBFC;border-bottom:1px solid #E6EAF0}
.tuf-table td{padding:9px 12px;border-bottom:1px solid #EEF0F3;vertical-align:top}
.tuf-table tr:last-child td{border-bottom:none}
.tuf-table .num{text-align:right;font-variant-numeric:tabular-nums}
.tuf-table .nowrap{white-space:nowrap}
.tuf .pos{color:#1E7B3A}
.tuf .neg{color:#A12A1C}
.tuf-import{display:flex;align-items:center;gap:12px;flex-wrap:wrap;box-sizing:border-box;width:calc(100% - 32px);max-width:1280px;margin:16px auto;padding:12px 16px;background:#fff;border:1px solid var(--tu-line);border-radius:12px;font-family:Inter,system-ui,sans-serif}
.tuf-import .tup-btn{display:inline-flex;align-items:center;text-decoration:none;min-height:36px;padding:0 14px;border-radius:8px;border:none;background:var(--tu-blue);color:#fff;font:inherit;font-size:13px;font-weight:600;cursor:pointer}
.tuf-import .tup-btn:disabled{background:#DCE1E8;color:var(--tu-muted);cursor:not-allowed}
.tuf-import .tup-small{font-size:12px;color:var(--tu-muted)}
/* import (impl/frmBankImport.php) */
.tuf-imp .tuf-card{flex:1 1 100%}
.tuf-body{padding:16px 18px;display:flex;flex-direction:column;gap:14px}
.tuf-form{display:flex;flex-direction:column;gap:12px;max-width:520px}
.tuf-form label{display:flex;flex-direction:column;gap:4px;font-size:12px;font-weight:600;color:var(--tu-soft)}
.tuf-form select,.tuf-form input[type=file]{font:inherit;font-size:13px;padding:7px 9px;border:1px solid #B9C2CE;border-radius:6px;background:#fff;color:var(--tu-ink)}
.tuf-note{margin:0;font-size:12px;color:var(--tu-muted)}
.tuf-btn{display:inline-flex;align-items:center;min-height:36px;padding:0 14px;border-radius:8px;border:none;background:var(--tu-blue);color:#fff;font:inherit;font-size:13px;font-weight:600;cursor:pointer}
.tuf-btn:disabled{background:#DCE1E8;color:var(--tu-muted);cursor:not-allowed}
.tuf-btn.ghost{background:#fff;color:var(--tu-ink);border:1px solid #B9C2CE}
.tuf-sum{display:flex;flex-wrap:wrap;gap:12px 28px}
.tuf-sum div{display:flex;flex-direction:column;gap:2px}
.tuf-sum .lbl{font-size:11px;font-weight:600;color:var(--tu-muted);text-transform:uppercase;letter-spacing:.04em}
.tuf-sum b{font-size:18px;font-variant-numeric:tabular-nums}
.tuf-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.tuf-actions form{margin:0}
.tuf-check{display:inline-flex;align-items:center;gap:6px;font-size:13px;margin-left:auto}
.tuf-badge{display:inline-block;font-size:11px;font-weight:600;border-radius:999px;padding:1px 8px;white-space:nowrap}
.tuf-badge.new{background:#E3F3E8;color:#1E7B3A}
.tuf-badge.dup{background:#EEF0F3;color:#4A5462}
.tuf-table tr.is-dup td{color:var(--tu-muted)}
.tuf-ok{padding:10px 12px;border-radius:6px;background:#E3F3E8;color:#1E5B30;font-size:13px}
.tuf-ok a{margin-left:8px;font-weight:600;color:inherit}
.tuf-acc{font-size:11px;color:var(--tu-muted);margin-left:6px}
/* unpaired (impl/frmUnpairedAccounts.php) */
.tuf-wide{flex:1 1 100%!important}
.tuf-card h2 form{margin:0 0 0 auto}
.tuf-muted{font-size:12px;font-weight:500;color:var(--tu-muted)}
.tuf-btn.small{min-height:28px;padding:0 10px;font-size:12px}
.tuf-inline{display:flex;gap:6px;margin:0;flex-wrap:nowrap}
.tuf-inline input[type=text]{min-width:160px;font:inherit;font-size:13px;padding:4px 8px;border:1px solid #B9C2CE;border-radius:6px}

/* ---- Donors dashboard (impl/frmDonorsDashboard.php) - .tud2-* ---- */
.tud2 .tud2-half{flex:1 1 440px!important;min-width:0}
.tud2-chart{position:relative;padding:12px 14px 0}
.tud2-chart svg{display:block;width:100%;height:auto;overflow:visible}
.tud2-chart .grid{stroke:#EEF0F3;stroke-width:1}
.tud2-chart .base{stroke:#B9C2CE;stroke-width:1}
.tud2-chart .ax{font:11px Inter,system-ui,sans-serif;fill:var(--tu-muted)}
.tud2-chart .line{fill:none;stroke:var(--tu-blue);stroke-width:2;stroke-linejoin:round;stroke-linecap:round}
.tud2-chart .dot{fill:var(--tu-blue);stroke:#fff;stroke-width:2;opacity:0}
.tud2-chart .over{fill:var(--tu-blue);stroke:#fff;stroke-width:1.5}
.tud2-chart .hit{fill:transparent}
.tud2-chart .cross{stroke:#B9C2CE;stroke-width:1;stroke-dasharray:3 3;opacity:0}
.tud2-chart .pt{outline:none}
.tud2-chart .pt.on .dot,.tud2-chart .pt:focus .dot,.tud2-chart .pt.on .cross,.tud2-chart .pt:focus .cross{opacity:1}
.tud2-note{margin:6px 18px 0;font-size:12px;color:var(--tu-muted)}
.tuf-card .tud2-note:last-child{margin-bottom:12px}
.tud2-tip{position:absolute;top:4px;padding:6px 10px;border-radius:6px;background:#1B1F24;color:#fff;font-size:12px;white-space:nowrap;pointer-events:none;z-index:2}
.tud2-table{padding:0 18px 14px}
.tud2-table summary{cursor:pointer;font-size:12px;font-weight:600;color:var(--tu-blue-ink);padding:6px 0}
.tud2-st{display:inline-flex;align-items:center;gap:4px;font-size:12px;font-weight:600;border-radius:999px;padding:1px 8px;margin-right:4px}
.tud2-st.ok{background:#E3F3E8;color:#1E5B30}
.tud2-st.part{background:#FCEFE1;color:#8A4B0F}
.tud2-st.none{background:#FDECEA;color:#8F1D14}
.tuf-badge.cost{background:#FCEFE1;color:#8A4B0F}
.tud2-amt{font-size:12px;font-weight:700;font-variant-numeric:tabular-nums}
.tud2-amt.less{color:#A12A1C}
.tud2-amt.more{color:var(--tu-blue-ink)}
.tud2-st.wait{background:#FFF4CC;color:#7A5A00}
/* finances dashboard layout (impl/frmFinancesDashboard.php) */
.tuf-dash .tuf-col-left{flex:1 1 440px;min-width:0;display:flex;flex-direction:column;gap:20px}
.tuf-dash .tuf-col-left .tuf-card{flex:none}
.tuf-dash .tuf-col-right{flex:1.4 1 560px!important}
.tuf-links{display:flex;gap:14px;align-items:center}
.tuf-warn{color:#A12A1C!important}
.tuf-warn span{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#A12A1C;color:#fff;font-size:11px;font-weight:700}
.tuf-q{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:#A12A1C;color:#fff!important;font-weight:700;font-size:13px;text-decoration:none}
.tuf-q:hover,.tuf-q:focus-visible{background:#7E1F14}
.tuf-table tr.unpaired td{background:#FFF7F6}
.tuf-mini{position:relative;padding:4px 18px 14px}
.tuf-mini svg{display:block;width:100%;height:auto;overflow:visible}
.tuf-mini .line{fill:none;stroke:var(--tu-blue);stroke-width:2;stroke-linejoin:round}
.tuf-mini .area{fill:rgba(36,87,197,.08)}
.tuf-mini .dot{fill:var(--tu-blue);stroke:#fff;stroke-width:2}
.tuf-mini .hit{fill:transparent}
.tuf-mini .pt{outline:none}
.tuf-mini .pt.on .dot,.tuf-mini .pt:focus .dot{r:6}
.tuf-mini .ax{font:10px Inter,system-ui,sans-serif;fill:var(--tu-muted)}
.tuf-mini .val{font:600 11px Inter,system-ui,sans-serif;fill:var(--tu-ink)}
.tuf-mini .bar.pos{fill:#2E8B57}
.tuf-mini .bar.neg{fill:#C0392B}
.tuf-mini .zero{stroke:#8A94A3;stroke-width:1}
.tuf-mini .pt.on .bar,.tuf-mini .pt:focus .bar{opacity:.8}
.tuf-mini .pt.on .hit,.tuf-mini .pt:focus .hit{fill:rgba(36,87,197,.06)}
/* Projects / In Approval inside a div page: the page itself does not scroll (js/projects.js), so the sticky
   sub menu bar would be shifted over the cards - keep it in the flow */
body:has(.tup) .componentSubMenu{position:relative!important;top:0!important}

/* Sub menu bar of the Div pages (frmSubMenu): light, compact bar under the dark top menu.
   (The engine draws it dark with --color-text-muted / --color-secondary, which our lighter theme tokens
   made almost invisible.) */
body:not(.menu-vertical) .componentSubMenu{
    height:auto!important;background:#fff!important;
    border-bottom:1px solid var(--tu-line)!important;box-shadow:0 1px 3px rgba(20,24,30,.05)!important}
body:not(.menu-vertical) .componentSubMenu .pageHeaderTable{height:44px;padding:0 16px}
body:not(.menu-vertical) .componentSubMenu .pageHeaderTable center{width:100%;text-align:left}
body:not(.menu-vertical) .componentSubMenu .pageHeaderTable table{border-spacing:2px 0;margin:0}
body:not(.menu-vertical) .componentSubMenu .pageHeaderTable table tbody tr td{padding:5px 12px;border-radius:6px;cursor:pointer}
body:not(.menu-vertical) .componentSubMenu .pageHeaderTable table tbody tr td::after{bottom:-6px;left:12px;width:calc(100% - 24px)}
body:not(.menu-vertical) .componentSubMenu .pageHeaderTable table tbody tr td > a{font-size:13px;font-weight:500;color:var(--tu-soft)}
body:not(.menu-vertical) .componentSubMenu .pageHeaderTable table tbody tr td:hover{background:var(--tu-page)}
body:not(.menu-vertical) .componentSubMenu .pageHeaderTable table tbody tr td:hover > a{color:var(--tu-ink)}
body:not(.menu-vertical) .componentSubMenu .pageHeaderTable table tbody tr td:hover::after{background:transparent}
body:not(.menu-vertical) .componentSubMenu .pageHeaderTable table tbody tr td.pageHeaderMenuSelected{background:var(--tu-blue-bg)}
body:not(.menu-vertical) .componentSubMenu .pageHeaderTable table tbody tr td.pageHeaderMenuSelected > a{color:var(--tu-blue-ink);font-weight:600}
body:not(.menu-vertical) .componentSubMenu .pageHeaderTable table tbody tr td.pageHeaderMenuSelected::after{background:var(--tu-blue)}
