/* ============================================================
   TL UI FOUNDATION v1.0
   Single shared visual foundation for Public / Admin / Member / Auth.
   Font contract: every normal UI text is 9–16px. Only 400/500/600 weights.
   Loaded LAST. New pages should use these tokens/components, not local overrides.
   ============================================================ */
:root{
  /* Typography: 9–16px only */
  --tl-font-2xs:9px; --tl-font-xs:10px; --tl-font-sm:11px; --tl-font-md:12px;
  --tl-font-body:13px; --tl-font-card:13px; --tl-font-section:14px;
  --tl-font-metric:15px; --tl-font-page:16px;
  --tl-weight-regular:400; --tl-weight-medium:500; --tl-weight-semibold:600;
  --tl-line-tight:1.2; --tl-line-ui:1.35; --tl-line-body:1.5;

  /* Colour */
  --tl-primary:#2563EB; --tl-primary-hover:#1D4ED8; --tl-primary-soft:#EFF6FF;
  --tl-text:#0F172A; --tl-text-2:#475569; --tl-muted:#64748B; --tl-subtle:#94A3B8;
  --tl-surface:#FFFFFF; --tl-surface-2:#F8FAFC; --tl-surface-3:#F1F5F9;
  --tl-border:#E2E8F0; --tl-border-strong:#CBD5E1;
  --tl-success:#16A34A; --tl-warning:#D97706; --tl-danger:#DC2626; --tl-info:#0284C7;

  /* Spacing */
  --tl-space-1:4px; --tl-space-2:6px; --tl-space-3:8px; --tl-space-4:10px;
  --tl-space-5:12px; --tl-space-6:16px; --tl-space-7:20px; --tl-space-8:24px;

  /* Geometry */
  --tl-radius-xs:4px; --tl-radius-sm:6px; --tl-radius-md:8px; --tl-radius-lg:10px; --tl-radius-xl:12px;
  --tl-control-h-sm:30px; --tl-control-h:34px; --tl-control-h-lg:38px;
  --tl-sidebar-w:254px; --tl-sidebar-item-h:38px; --tl-topbar-h:64px;
  --tl-content-max:1440px; --tl-card-pad:14px; --tl-section-gap:12px;

  /* Motion / layer */
  --tl-motion-fast:120ms; --tl-motion:180ms;
  --tl-z-dropdown:1000; --tl-z-sticky:1020; --tl-z-overlay:1040; --tl-z-modal:1060; --tl-z-toast:1080;
}

/* ---------- Global type contract ---------- */
html{font-size:var(--tl-font-body)!important;}
body,button,input,select,textarea,table,.form-control,.form-select,.dropdown-menu,.popover,.tooltip{
  font-size:var(--tl-font-body)!important;font-weight:var(--tl-weight-regular)!important;line-height:var(--tl-line-body);
}
body{color:var(--tl-text);background:var(--tl-surface);}
p,li,dd,dt,td,label,.form-label,.form-text,.nav-link,.dropdown-item{font-size:var(--tl-font-body)!important;}
small,.small,.caption,.metadata,.text-secondary,.form-text,.help-text{font-size:var(--tl-font-xs)!important;font-weight:400!important;}
h1,.h1,.page-title,.admin-page-title,.member-page-title,.page-hero h1,.page-hero .page-title{
  font-size:var(--tl-font-page)!important;line-height:var(--tl-line-tight)!important;font-weight:600!important;letter-spacing:0!important;margin-bottom:4px!important;
}
h2,.h2,.section-title{font-size:var(--tl-font-section)!important;line-height:1.3!important;font-weight:600!important;}
h3,.h3,h4,.h4,h5,.h5,h6,.h6,.card-title{font-size:var(--tl-font-card)!important;line-height:1.35!important;font-weight:500!important;}
strong,b,.fw-bold{font-weight:600!important}.fw-semibold{font-weight:600!important}.fw-medium{font-weight:500!important}
/* No accidental 700/800/900 typography from Bootstrap or legacy pages. */
:is(h1,h2,h3,h4,h5,h6,.page-title,.section-title,.card-title,.nav-link,.dropdown-item,.btn,.badge,.form-label,th)[style*="font-weight"]{font-weight:inherit;}

/* ---------- Layout ---------- */
.container,.container-fluid{--bs-gutter-x:24px;}
.admin-main-content,.app-main{font-size:var(--tl-font-body)!important;}
.admin-main-content>.container-fluid,.app-main>.container-fluid,.public-main>.container,.public-main .container{max-width:var(--tl-content-max);}
.row.g-4,.g-4{--bs-gutter-x:12px!important;--bs-gutter-y:12px!important}.row.g-3,.g-3{--bs-gutter-x:10px!important;--bs-gutter-y:10px!important}
.mb-5{margin-bottom:20px!important}.mb-4{margin-bottom:16px!important}.mb-3{margin-bottom:12px!important}.mb-2{margin-bottom:8px!important}
.mt-5{margin-top:20px!important}.mt-4{margin-top:16px!important}.mt-3{margin-top:12px!important}
.py-5{padding-top:20px!important;padding-bottom:20px!important}.py-4{padding-top:16px!important;padding-bottom:16px!important}

/* ---------- Cards / panels ---------- */
.card,.dashboard-card,.admin-panel,.admin-form-card,.modal-content,.dropdown-menu,.list-group{
  border:1px solid var(--tl-border)!important;border-radius:var(--tl-radius-lg)!important;box-shadow:none!important;background:var(--tl-surface)!important;
}
.card-body,.dashboard-card.p-4,.admin-panel-body,.admin-panel-header{padding:var(--tl-card-pad)!important;}
.dashboard-card:hover,.card:hover{box-shadow:none!important;transform:none!important;}
.card-header,.card-footer{background:var(--tl-surface)!important;border-color:var(--tl-border)!important;padding:10px 14px!important;}

/* ---------- Controls / buttons ---------- */
.btn,.form-control,.form-select,.input-group-text{min-height:var(--tl-control-h)!important;border-radius:var(--tl-radius-md)!important;font-size:var(--tl-font-body)!important;}
.btn{display:inline-flex!important;align-items:center!important;justify-content:center!important;gap:6px!important;padding:6px 12px!important;font-weight:400!important;line-height:1.2!important;}
.btn-primary,.btn-danger{font-weight:500!important}.btn-sm{min-height:var(--tl-control-h-sm)!important;padding:4px 9px!important;font-size:var(--tl-font-sm)!important}.btn-lg{min-height:var(--tl-control-h-lg)!important;font-size:var(--tl-font-body)!important}
.form-control,.form-select{padding:6px 10px!important;border-color:var(--tl-border)!important;color:var(--tl-text)!important;background-color:var(--tl-surface)!important;}
.form-label,label{font-size:var(--tl-font-sm)!important;font-weight:500!important;margin-bottom:4px!important;color:var(--tl-text-2)!important;}
.form-control:focus,.form-select:focus,.btn:focus-visible,a:focus-visible,[tabindex]:focus-visible{outline:2px solid rgba(37,99,235,.28)!important;outline-offset:2px!important;box-shadow:none!important;border-color:var(--tl-primary)!important;}
:disabled,.disabled{opacity:.58!important;cursor:not-allowed!important;}

/* ---------- Tables / lists ---------- */
.table{font-size:var(--tl-font-body)!important;margin-bottom:0;}
.table>:not(caption)>*>*{border-color:var(--tl-border)!important;}
.table>thead>tr>th{padding:8px 10px!important;background:var(--tl-surface-2)!important;color:var(--tl-text-2)!important;font-size:var(--tl-font-sm)!important;font-weight:600!important;vertical-align:middle!important;}
.table>tbody>tr>td{padding:8px 10px!important;font-size:var(--tl-font-body)!important;font-weight:400!important;vertical-align:middle!important;}
.list-group-item{padding:9px 12px!important;border-color:var(--tl-border)!important;font-size:var(--tl-font-body)!important;}

/* ---------- Navigation ---------- */
.admin-sidebar,.app-sidebar{width:var(--tl-sidebar-w)!important;}
.admin-sidebar .nav-link,.app-sidebar .nav-link,.offcanvas .nav-link{min-height:var(--tl-sidebar-item-h)!important;display:flex!important;align-items:center!important;gap:9px!important;font-size:var(--tl-font-body)!important;font-weight:400!important;border-radius:var(--tl-radius-sm)!important;}
.admin-sidebar .nav-link.active,.app-sidebar .nav-link.active,.offcanvas .nav-link.active{font-weight:500!important;}
.dropdown-item{display:flex;align-items:center;gap:8px;min-height:34px;padding:7px 10px!important;font-size:var(--tl-font-body)!important;font-weight:400!important;}
.dropdown-header{font-size:var(--tl-font-xs)!important;font-weight:600!important;text-transform:uppercase;letter-spacing:.04em;color:var(--tl-muted)!important;}
.site-header .nav-link{font-size:var(--tl-font-body)!important;font-weight:400!important;}

/* ---------- Status / feedback ---------- */
.badge{font-size:var(--tl-font-xs)!important;font-weight:500!important;padding:4px 7px!important;border-radius:999px!important;}
.alert{font-size:var(--tl-font-body)!important;border-radius:var(--tl-radius-md)!important;padding:10px 12px!important;border-width:1px!important;}
.pagination .page-link{font-size:var(--tl-font-sm)!important;min-width:32px;min-height:32px;display:flex;align-items:center;justify-content:center;border-color:var(--tl-border)!important;}
.modal-title{font-size:var(--tl-font-section)!important;font-weight:600!important}.modal-body{font-size:var(--tl-font-body)!important}.modal-header,.modal-footer{padding:12px 14px!important;border-color:var(--tl-border)!important;}

/* ---------- Dashboard/module hierarchy ---------- */
.card-icon{width:64px!important;height:64px!important;display:flex!important;align-items:center!important;justify-content:center!important;margin:0 auto 8px!important;}
.tl-center-card,.tl-member-module-card,.tl-member-module-card-v10911{text-align:center!important;align-items:center!important;}
.tl-center-card .card-icon,.tl-member-module-card .card-icon,.tl-member-module-card-v10911 .card-icon{margin-left:auto!important;margin-right:auto!important;}
.tl-overview-item-head{display:flex!important;align-items:center!important;gap:10px!important;}
.metric,.stat-number,.dashboard-stat,.display-6,.fs-3{font-size:var(--tl-font-metric)!important;font-weight:600!important;}

/* ---------- Public ---------- */
.site-header{border-bottom:1px solid var(--tl-border)!important;box-shadow:none!important}.site-header .navbar{min-height:60px!important;}
.page-hero{padding:20px 0 18px!important;border-bottom:1px solid var(--tl-border)!important;}
.page-hero p{font-size:var(--tl-font-body)!important;margin-bottom:0!important;color:var(--tl-muted)!important;}
.public-main .card,.public-main [class*="-card"]{border-radius:var(--tl-radius-lg)!important;box-shadow:none!important;}
.detail-body{font-size:var(--tl-font-body)!important;line-height:var(--tl-line-body)!important;}

/* ---------- Utility component classes for all future pages ---------- */
.ui-page-title{font-size:var(--tl-font-page)!important;font-weight:600!important;line-height:1.2!important;margin:0 0 4px!important;}
.ui-page-subtitle{font-size:var(--tl-font-body)!important;font-weight:400!important;color:var(--tl-muted)!important;margin:0;}
.ui-section-title{font-size:var(--tl-font-section)!important;font-weight:600!important;line-height:1.3!important;margin:0;}
.ui-card-title{font-size:var(--tl-font-card)!important;font-weight:500!important;line-height:1.35!important;margin:0;}
.ui-caption{font-size:var(--tl-font-xs)!important;font-weight:400!important;color:var(--tl-muted)!important;}
.ui-card{background:var(--tl-surface);border:1px solid var(--tl-border);border-radius:var(--tl-radius-lg);padding:var(--tl-card-pad);}
.ui-stack{display:flex;flex-direction:column;gap:var(--tl-space-5)}.ui-row{display:flex;align-items:center;gap:var(--tl-space-4)}.ui-grid{display:grid;gap:var(--tl-section-gap)}
.ui-empty{padding:28px 16px;text-align:center;color:var(--tl-muted)}.ui-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.ui-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap}

/* ---------- Responsive contract ---------- */
@media(max-width:991.98px){.admin-main-content,.app-main{margin-left:0!important}.container,.container-fluid{--bs-gutter-x:20px}.site-header .navbar{min-height:56px!important}}
@media(max-width:767.98px){:root{--tl-card-pad:12px}.container,.container-fluid{--bs-gutter-x:16px}.btn{padding-left:10px!important;padding-right:10px!important}.table-responsive{border-radius:var(--tl-radius-md)}.ui-toolbar{align-items:stretch}.ui-toolbar>.form-control,.ui-toolbar>.form-select{width:100%}}
@media(max-width:575.98px){.page-hero{padding:16px 0 14px!important}.card-icon{width:60px!important;height:60px!important}.dropdown-menu{max-width:calc(100vw - 20px)}}

/* Reduced motion */
@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}

/* ---------- Legacy v10.9.11 compatibility reset ----------
   These selectors deliberately match old high-specificity rules so the
   Foundation remains the final authority without touching backend/templates. */
.tl-member-dashboard-page-v10911{font-size:var(--tl-font-body)!important;line-height:var(--tl-line-body)!important;}
.tl-member-dashboard-page-v10911 h1.h3,
.tl-admin-dashboard-header-v10911 h1.h3{font-size:var(--tl-font-page)!important;line-height:var(--tl-line-tight)!important;font-weight:600!important;}
.tl-member-dashboard-page-v10911 h2,
.tl-member-dashboard-page-v10911 .h4,
.tl-member-dashboard-page-v10911 .h5,
.tl-member-dashboard-page-v10911 .h6,
.tl-admin-dashboard-page-v10911 h2,
.tl-admin-dashboard-page-v10911 .h5{font-size:var(--tl-font-section)!important;font-weight:600!important;}
.tl-member-dashboard-page-v10911 p,
.tl-member-dashboard-page-v10911 small,
.tl-member-dashboard-page-v10911 .small,
.tl-member-dashboard-page-v10911 .text-secondary,
.tl-member-dashboard-page-v10911 .btn,
.tl-member-dashboard-page-v10911 td,
.tl-member-dashboard-page-v10911 th,
.tl-admin-dashboard-header-v10911 p,
.tl-admin-dashboard-header-v10911 .btn,
.tl-admin-dashboard-page-v10911,
.tl-admin-dashboard-page-v10911 p,
.tl-admin-dashboard-page-v10911 small,
.tl-admin-dashboard-page-v10911 .small,
.tl-admin-dashboard-page-v10911 .text-secondary,
.tl-admin-dashboard-page-v10911 .btn{font-size:var(--tl-font-body)!important;}
.tl-member-dashboard-page-v10911 small,
.tl-member-dashboard-page-v10911 .small,
.tl-member-dashboard-page-v10911 .text-secondary,
.tl-admin-dashboard-page-v10911 small,
.tl-admin-dashboard-page-v10911 .small,
.tl-admin-dashboard-page-v10911 .text-secondary{font-size:var(--tl-font-xs)!important;}
.tl-admin-dashboard-page-v10911 .tl-center-card .card-icon{width:64px!important;height:64px!important;}
.tl-admin-dashboard-page-v10911 .tl-center-card .tl-card-icon,
.tl-admin-dashboard-page-v10911 .tl-center-card .tl-primary-card-icon,
.tl-member-module-card-v10911 .card-icon .tl-i,
.tl-member-module-card-v10911 .card-icon img{width:var(--tl-icon-card)!important;height:var(--tl-icon-card)!important;min-width:var(--tl-icon-card)!important;}
.tl-admin-dashboard-page-v10911 .tl-overview-item-icon,
.tl-admin-dashboard-page-v10911 .tl-overview-title-icon{width:var(--tl-icon-section)!important;height:var(--tl-icon-section)!important;min-width:var(--tl-icon-section)!important;}
.tl-admin-dashboard-page-v10911 .btn .tl-i,
.tl-admin-dashboard-page-v10911 .tl-button-icon,
.tl-admin-dashboard-page-v10911 .tl-quick-action-icon{width:var(--tl-icon-button)!important;height:var(--tl-icon-button)!important;min-width:var(--tl-icon-button)!important;}
/* Bootstrap typography utilities are constrained to the 9–16px Foundation scale. */
.fs-1,.fs-2,.fs-3,.fs-4,.fs-5{font-size:var(--tl-font-page)!important;}
.fs-6{font-size:var(--tl-font-body)!important;}
.display-1,.display-2,.display-3,.display-4,.display-5,.display-6{font-size:var(--tl-font-page)!important;font-weight:600!important;line-height:1.2!important;}
.lead{font-size:var(--tl-font-section)!important;font-weight:400!important;line-height:var(--tl-line-body)!important;}
