/* ============================================================
   VendorFlow Pro — UI Design System
   Ported from TKE-TMS by Farhan Shareef
   Fonts: DM Sans (UI), Space Mono (codes/numbers)
   Add this to <head>:
   <link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@300;400;500;600&family=Space+Mono:wght@400;700&display=swap" rel="stylesheet">
   ============================================================ */

/* --- Design Tokens --- */
:root {
  --bg:        #f4f5f7;
  --bg2:       #ffffff;
  --bg3:       #f0f1f4;
  --bg4:       #e8eaee;
  --border:    rgba(0,0,0,.08);
  --border2:   rgba(0,0,0,.13);
  --text:      #1a1d23;
  --text2:     #5a6075;
  --text3:     #9299ad;
  --accent:    #e8600a;   /* ← swap for client brand colour */
  --blue:      #2563eb;
  --green:     #16a34a;
  --red:       #dc2626;
  --amber:     #d97706;
  --purple:    #7c3aed;
  --sidebar-w: 224px;
  --header-h:  56px;
}

/* --- Reset --- */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

/* --- Base --- */
body {
  font-family: 'DM Sans', sans-serif;
  background: var(--bg);
  color: var(--text);
  min-height: 100vh;
  display: flex;
  overflow: hidden;
}

/* ============================================================
   SIDEBAR
   ============================================================ */
.sidebar {
  width: var(--sidebar-w);
  height: 100vh;
  background: var(--bg2);
  border-right: 1px solid var(--border);
  display: flex;
  flex-direction: column;
  flex-shrink: 0;
  position: fixed;
  left: 0; top: 0;
  z-index: 200;
  transition: transform .25s;
}
.sidebar-logo {
  padding: 16px 18px;
  border-bottom: 1px solid var(--border);
  display: flex;
  align-items: center;
  gap: 10px;
}
.logo-mark {
  width: 32px; height: 32px;
  background: var(--accent);
  border-radius: 8px;
  display: flex; align-items: center; justify-content: center;
  font-family: 'Space Mono', monospace;
  font-size: 11px; font-weight: 700;
  color: #fff; flex-shrink: 0;
}
.logo-text  { font-size: 13px; font-weight: 600; }
.logo-sub   { font-size: 10px; color: var(--text3); font-family: 'Space Mono', monospace; }
.sidebar-close {
  display: none;
  margin-left: auto;
  background: none; border: none; cursor: pointer;
  color: var(--text3); font-size: 20px; padding: 2px;
}
.sidebar-nav {
  flex: 1;
  padding: 10px 8px;
  overflow-y: auto;
}
.nav-section {
  font-size: 10px; font-weight: 600;
  color: var(--text3);
  letter-spacing: .08em;
  text-transform: uppercase;
  padding: 10px 10px 6px;
  font-family: 'Space Mono', monospace;
}
.nav-item {
  display: flex; align-items: center; gap: 10px;
  padding: 9px 10px;
  border-radius: 8px;
  cursor: pointer;
  color: var(--text2);
  font-size: 13px;
  transition: all .15s;
  text-decoration: none;
  margin-bottom: 1px;
}
.nav-item:hover             { background: var(--bg3); color: var(--text); }
.nav-item.active            { background: #fff4ed; color: var(--accent); font-weight: 500; }
.nav-icon                   { width: 18px; height: 18px; flex-shrink: 0; opacity: .7; }
.nav-item.active .nav-icon  { opacity: 1; color: var(--accent); }
.nav-badge {
  margin-left: auto;
  background: var(--red); color: #fff;
  font-size: 10px; font-weight: 700;
  padding: 1px 6px; border-radius: 20px;
  font-family: 'Space Mono', monospace;
}
.nav-badge.amber { background: var(--amber); }
.sidebar-bottom {
  padding: 10px 8px;
  border-top: 1px solid var(--border);
}
.user-chip {
  display: flex; align-items: center; gap: 10px;
  padding: 8px 10px;
  border-radius: 8px;
  background: var(--bg3);
}
.user-avatar {
  width: 28px; height: 28px;
  border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-size: 11px; font-weight: 700;
  color: #fff; flex-shrink: 0;
}
.user-name { font-size: 12px; font-weight: 500; }
.user-role { font-size: 10px; color: var(--text3); }
.sidebar-backdrop {
  display: none;
  position: fixed; inset: 0;
  background: rgba(0,0,0,.4);
  z-index: 199;
}
.sidebar-backdrop.open { display: block; }

/* ============================================================
   MAIN LAYOUT
   ============================================================ */
.main {
  margin-left: var(--sidebar-w);
  flex: 1;
  display: flex; flex-direction: column;
  height: 100vh; overflow: hidden;
}

/* ============================================================
   TOPBAR
   ============================================================ */
.topbar {
  height: var(--header-h);
  background: var(--bg2);
  border-bottom: 1px solid var(--border);
  display: flex; align-items: center;
  padding: 0 20px; gap: 10px;
  flex-shrink: 0; position: relative;
}
.hamburger {
  display: none;
  background: none; border: none; cursor: pointer;
  padding: 4px; color: var(--text2); flex-shrink: 0;
}
.topbar-title {
  font-size: 15px; font-weight: 600;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  max-width: 200px;
}
.topbar-spacer { flex: 1; }
.search-bar {
  display: flex; align-items: center; gap: 8px;
  background: var(--bg3);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 6px 12px; width: 240px;
}
.search-bar input {
  background: none; border: none; outline: none;
  color: var(--text); font-size: 13px;
  font-family: 'DM Sans', sans-serif; width: 100%;
}
.search-bar input::placeholder { color: var(--text3); }

/* --- Role Chip --- */
.role-chip {
  display: inline-flex; align-items: center;
  font-size: 11px; font-weight: 600;
  padding: 3px 9px; border-radius: 20px;
  font-family: 'Space Mono', monospace; white-space: nowrap;
}
.role-chip.admin,
.role-chip.supervisor,
.role-chip.pm         { background: #fff4ed; color: var(--accent); }
.role-chip.operations { background: #ede9fe; color: #5b21b6; }
.role-chip.incharge   { background: #f0fdf4; color: #15803d; }
.role-chip.technician { background: #eff6ff; color: #1d4ed8; }

/* --- Notification Bell --- */
.notif-bell {
  position: relative;
  width: 36px; height: 36px;
  border-radius: 8px;
  border: 1px solid var(--border);
  background: #fff;
  display: flex; align-items: center; justify-content: center;
  cursor: pointer; flex-shrink: 0;
}
.notif-bell:hover { background: var(--bg3); }
.notif-dot {
  position: absolute; top: 6px; right: 6px;
  width: 8px; height: 8px;
  background: var(--red); border-radius: 50%;
  border: 2px solid #fff; display: none;
}
.notif-dot.show { display: block; }
.notif-panel {
  position: absolute;
  top: calc(var(--header-h) + 6px); right: 16px;
  width: 340px; max-width: calc(100vw - 32px);
  background: #fff;
  border: 1px solid var(--border2);
  border-radius: 14px;
  box-shadow: 0 8px 32px rgba(0,0,0,.1);
  z-index: 500; display: none;
}
.notif-panel.open  { display: block; }
.notif-ph {
  padding: 12px 14px;
  border-bottom: 1px solid var(--border);
  display: flex; align-items: center; justify-content: space-between;
}
.notif-ph-title { font-size: 13px; font-weight: 600; }
.notif-mark     { font-size: 11px; color: var(--accent); cursor: pointer; font-weight: 500; }
.notif-item {
  display: flex; gap: 10px;
  padding: 11px 14px;
  border-bottom: 1px solid var(--border);
  cursor: pointer; transition: background .1s;
  text-decoration: none;
}
.notif-item:hover  { background: var(--bg3); }
.notif-item.unread { background: #fffbf7; }
.notif-icon {
  width: 30px; height: 30px;
  border-radius: 8px;
  display: flex; align-items: center; justify-content: center;
  font-size: 13px; flex-shrink: 0;
}
.notif-ntitle { font-size: 12px; font-weight: 500; color: var(--text); margin-bottom: 2px; }
.notif-nmsg   { font-size: 11px; color: var(--text2); line-height: 1.4; }
.notif-ntime  { font-size: 10px; color: var(--text3); margin-top: 3px; font-family: 'Space Mono', monospace; }

/* --- Topbar CTA Button --- */
.topbar-btn {
  display: inline-flex; align-items: center; gap: 6px;
  background: var(--accent); color: #fff;
  border: none; border-radius: 8px;
  padding: 7px 14px; font-size: 13px; font-weight: 500;
  cursor: pointer; font-family: 'DM Sans', sans-serif;
  transition: opacity .15s; text-decoration: none; white-space: nowrap;
}
.topbar-btn:hover      { opacity: .85; color: #fff; }
.topbar-btn.secondary  { background: var(--bg3); color: var(--text); border: 1px solid var(--border2); }

/* ============================================================
   CONTENT AREA
   ============================================================ */
.content { flex: 1; overflow-y: auto; padding: 20px; }

/* ============================================================
   STAT CARDS
   ============================================================ */
.stats-row { display: grid; grid-template-columns: repeat(4,1fr); gap: 12px; margin-bottom: 20px; }
.stat-card {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: 12px;
  padding: 14px 16px;
  position: relative; overflow: hidden;
}
.stat-card::before {
  content: '';
  position: absolute; top: 0; left: 0; right: 0; height: 2px;
  border-radius: 12px 12px 0 0;
}
.stat-card.c-blue::before  { background: var(--blue); }
.stat-card.c-green::before { background: var(--green); }
.stat-card.c-amber::before { background: var(--amber); }
.stat-card.c-red::before   { background: var(--red); }
.stat-num   { font-size: 26px; font-weight: 600; font-family: 'Space Mono', monospace; margin-bottom: 4px; }
.stat-label { font-size: 12px; color: var(--text2); }
.stat-delta { font-size: 11px; color: var(--text3); margin-top: 2px; }

/* ============================================================
   BADGES
   ============================================================ */
.badge {
  display: inline-flex; align-items: center; gap: 4px;
  font-size: 11px; font-weight: 600;
  padding: 3px 8px; border-radius: 20px; white-space: nowrap;
}
.badge::before { content: ''; width: 5px; height: 5px; border-radius: 50%; flex-shrink: 0; }

.badge.available,.badge.valid,.badge.approved,.badge.renewed
  { background: #dcfce7; color: #15803d; }
.badge.available::before,.badge.valid::before,.badge.approved::before,.badge.renewed::before
  { background: #16a34a; }

.badge.issued,.badge.warehouse,.badge.dispatched-log
  { background: #dbeafe; color: #1d4ed8; }
.badge.issued::before,.badge.warehouse::before,.badge.dispatched-log::before
  { background: #2563eb; }

.badge.expired,.badge.rejected,.badge.condemned
  { background: #fee2e2; color: #b91c1c; }
.badge.expired::before,.badge.rejected::before,.badge.condemned::before
  { background: #dc2626; }

.badge.expiring,.badge.expiring_soon,.badge.pending,.badge.submitted,.badge.under_review
  { background: #fef3c7; color: #92400e; }
.badge.expiring::before,.badge.expiring_soon::before,.badge.pending::before,
.badge.submitted::before,.badge.under_review::before
  { background: #d97706; }

.badge.maintenance,.badge.transfer,.badge.in_progress,.badge.purple
  { background: #ede9fe; color: #5b21b6; }
.badge.maintenance::before,.badge.transfer::before,
.badge.in_progress::before,.badge.purple::before
  { background: #7c3aed; }

.badge.dispatched,.badge.completed
  { background: #ccfbf1; color: #0f766e; }
.badge.dispatched::before,.badge.completed::before
  { background: #0d9488; }

/* ============================================================
   BUTTONS
   ============================================================ */
.btn {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 8px 14px; border-radius: 8px;
  font-size: 13px; font-weight: 500;
  cursor: pointer; border: none;
  font-family: 'DM Sans', sans-serif;
  transition: all .15s;
  text-decoration: none; white-space: nowrap;
}
.btn-primary        { background: var(--accent); color: #fff; }
.btn-primary:hover  { opacity: .85; color: #fff; }
.btn-success        { background: #f0fdf4; color: #15803d; border: 1px solid #bbf7d0; }
.btn-danger         { background: #fef2f2; color: #b91c1c; border: 1px solid #fecaca; }
.btn-ghost          { background: var(--bg3); color: var(--text2); border: 1px solid var(--border); }
.btn-ghost:hover    { color: var(--text); }
.btn-blue           { background: #eff6ff; color: #1d4ed8; border: 1px solid #bfdbfe; }
.btn-sm             { padding: 5px 10px; font-size: 11px; }

/* ============================================================
   SECTION CARDS
   ============================================================ */
.sec-card {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: 12px;
  overflow: hidden;
  margin-bottom: 18px;
}
.sec-card-head {
  padding: 12px 16px;
  border-bottom: 1px solid var(--border);
  display: flex; align-items: center; justify-content: space-between;
}
.sec-card-title { font-size: 13px; font-weight: 600; }

/* ============================================================
   TABLES
   ============================================================ */
.table-wrap {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: 12px; overflow: hidden;
}
.table-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.tbl {
  width: 100%; border-collapse: collapse;
  font-size: 13px; min-width: 560px;
}
.tbl th {
  text-align: left; padding: 11px 14px;
  font-size: 11px; font-weight: 600;
  color: var(--text3); letter-spacing: .05em;
  text-transform: uppercase;
  background: #f8f9fb;
  border-bottom: 1px solid var(--border);
  font-family: 'Space Mono', monospace;
  white-space: nowrap;
}
.tbl td               { padding: 11px 14px; border-bottom: 1px solid var(--border); vertical-align: middle; }
.tbl tr:last-child td { border: none; }
.tbl tr:hover td      { background: rgba(0,0,0,.01); }
.tbl-link tbody tr    { cursor: pointer; }
.ref-code {
  font-family: 'Space Mono', monospace;
  font-size: 11px; color: var(--text3); letter-spacing: .04em;
}

/* ============================================================
   ALERT STRIPS
   ============================================================ */
.alert-strip {
  border-radius: 10px; padding: 11px 14px;
  margin-bottom: 16px;
  display: flex; align-items: flex-start; gap: 10px;
  font-size: 13px; line-height: 1.5;
}
.alert-strip.danger        { background: #fef2f2; border: 1px solid #fecaca; color: #991b1b; }
.alert-strip.warning       { background: #fffbeb; border: 1px solid #fde68a; color: #78350f; }
.alert-strip.success-strip { background: #f0fdf4; border: 1px solid #bbf7d0; color: #15803d; }

/* ============================================================
   FORMS
   ============================================================ */
.form-group  { margin-bottom: 14px; }
.form-label  { font-size: 12px; font-weight: 500; color: var(--text2); margin-bottom: 5px; display: block; }
.form-input {
  width: 100%;
  background: var(--bg3);
  border: 1px solid var(--border2);
  border-radius: 8px;
  padding: 9px 12px;
  color: var(--text); font-size: 14px;
  font-family: 'DM Sans', sans-serif;
  outline: none; transition: border .15s;
}
.form-input:focus        { border-color: var(--accent); }
.form-input::placeholder { color: var(--text3); }
.form-select {
  appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%238b92a5'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 10px center;
}
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }

/* ============================================================
   MODALS
   ============================================================ */
.modal-overlay {
  position: fixed; inset: 0;
  background: rgba(0,0,0,.4);
  z-index: 1000;
  display: none; align-items: center; justify-content: center;
  backdrop-filter: blur(3px); padding: 16px;
}
.modal-overlay.open { display: flex; }
.modal {
  background: #fff;
  border: 1px solid var(--border2);
  border-radius: 16px;
  width: 100%; max-width: 560px; max-height: 90vh;
  overflow-y: auto;
  box-shadow: 0 12px 40px rgba(0,0,0,.15);
}
.modal-header {
  padding: 18px 20px;
  border-bottom: 1px solid var(--border);
  display: flex; align-items: center; justify-content: space-between;
  position: sticky; top: 0; background: #fff; z-index: 1;
}
.modal-title { font-size: 14px; font-weight: 600; }
.modal-close {
  width: 28px; height: 28px;
  border-radius: 6px; background: var(--bg3);
  border: none; cursor: pointer; color: var(--text2);
  font-size: 18px;
  display: flex; align-items: center; justify-content: center;
}
.modal-body   { padding: 20px; }
.modal-footer {
  padding: 14px 20px;
  border-top: 1px solid var(--border);
  display: flex; justify-content: flex-end;
  gap: 8px; flex-wrap: wrap;
}

/* ============================================================
   GRID HELPERS
   ============================================================ */
.grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.grid3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12px; }

/* ============================================================
   PAGE & SECTION HEADERS
   ============================================================ */
.section-head    { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; }
.section-title   { font-size: 14px; font-weight: 600; }
.section-action  { font-size: 12px; color: var(--accent); font-weight: 500; text-decoration: none; }
.page-header     { margin-bottom: 20px; display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 10px; }
.page-title-text { font-size: 18px; font-weight: 600; }
.page-subtitle   { font-size: 13px; color: var(--text2); margin-top: 2px; }

/* ============================================================
   FLASH MESSAGES
   ============================================================ */
.flash          { padding: 10px 16px; border-radius: 8px; font-size: 13px; margin-bottom: 16px; display: flex; align-items: center; gap: 8px; }
.flash.success  { background: #f0fdf4; border: 1px solid #bbf7d0; color: #15803d; }
.flash.error    { background: #fef2f2; border: 1px solid #fecaca; color: #b91c1c; }

/* ============================================================
   CERTIFICATE BLOCKS
   ============================================================ */
.cert-block    { border-radius: 8px; padding: 10px 12px; margin-bottom: 10px; }
.cert-valid    { background: #f0fdf4; border: 1px solid #bbf7d0; }
.cert-expired  { background: #fef2f2; border: 1px solid #fecaca; }
.cert-expiring { background: #fffbeb; border: 1px solid #fde68a; }
.cert-label    { font-size: 10px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; margin-bottom: 3px; }
.cert-valid    .cert-label { color: #15803d; }
.cert-expired  .cert-label { color: #b91c1c; }
.cert-expiring .cert-label { color: #92400e; }
.cert-detail   { font-size: 12px; color: var(--text2); }

/* ============================================================
   UTILITY
   ============================================================ */
.dot       { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 5px; }
.dot-green { background: var(--green); }
.dot-red   { background: var(--red); }
.dot-amber { background: var(--amber); }
.dot-blue  { background: var(--blue); }
hr { border: none; border-top: 1px solid var(--border); margin: 18px 0; }

/* ============================================================
   SCROLLBAR
   ============================================================ */
::-webkit-scrollbar       { width: 4px; height: 4px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--bg4); border-radius: 4px; }

/* ============================================================
   ANIMATION
   ============================================================ */
@keyframes fadeIn {
  from { opacity: 0; transform: translateY(6px); }
  to   { opacity: 1; transform: translateY(0); }
}
.content > *:first-child { animation: fadeIn .18s ease; }

/* ============================================================
   RESPONSIVE BREAKPOINTS
   ============================================================ */

/* Tablet portrait — hide sidebar, show hamburger */
@media (max-width: 1023px) {
  .sidebar        { transform: translateX(-100%); }
  .sidebar.open   { transform: translateX(0); }
  .sidebar-close  { display: block; }
  .main           { margin-left: 0; }
  .hamburger      { display: flex; }
}

/* Mobile landscape */
@media (max-width: 767px) {
  .stats-row      { grid-template-columns: 1fr 1fr; }
  .grid2          { grid-template-columns: 1fr; }
  .grid3          { grid-template-columns: 1fr 1fr; }
  .content        { padding: 14px; }
  .role-chip      { display: none; }
  .topbar         { padding: 0 12px; }
  /* Modals become bottom-sheets on mobile */
  .modal-overlay  { padding: 0; align-items: flex-end; }
  .modal          { border-radius: 16px 16px 0 0; max-height: 92vh; }
  .form-row       { grid-template-columns: 1fr; }
  .modal-footer   { flex-direction: column-reverse; }
  .modal-footer .btn { width: 100%; justify-content: center; }
  .topbar-title   { max-width: 150px; }
}

/* Small mobile */
@media (max-width: 639px) {
  .stats-row  { grid-template-columns: 1fr 1fr; gap: 8px; }
  .grid3      { grid-template-columns: 1fr; }
  .search-bar { display: none; }
  .tbl        { min-width: 500px; }
}
