/* HMS Rebuild — hand-rolled design system, theme-driven via CSS custom properties. */

:root {
    --theme-header-bg: #0f4c81;
    --theme-header-text: #ffffff;
    --theme-sidebar-bg: #12294a;
    --theme-sidebar-text: #e6ecf5;
    --theme-accent: #1f7a53;
    --theme-button-bg: #0f4c81;
    --theme-button-text: #ffffff;
    --theme-table-header-bg: #f0f3f7;

    --bg-page: #f4f6f9;
    --bg-card: #ffffff;
    --text-primary: #1c2536;
    --text-muted: #6b7684;
    --border-color: #e1e6ed;
    --danger: #c0392b;
    --success: #1f7a53;
    --warning: #b8860b;

    --sidebar-width: 240px;
    --sidebar-width-collapsed: 68px;
    --topbar-height: 60px;
    --radius: 8px;
}

* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
body {
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif;
    background: var(--bg-page);
    color: var(--text-primary);
    font-size: 13px;
    line-height: 1.5;
}
a { color: var(--theme-accent); text-decoration: none; }
a:hover { text-decoration: underline; }

/* ---------- Shell layout ---------- */
.shell { display: flex; min-height: 100vh; }

.sidebar {
    width: var(--sidebar-width);
    background: var(--theme-sidebar-bg);
    color: var(--theme-sidebar-text);
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
    position: fixed;
    top: 0; left: 0; bottom: 0;
    z-index: 40;
    transition: width 0.2s ease, transform 0.2s ease;
    overflow-y: auto;
}
html.sidebar-collapsed .sidebar { width: var(--sidebar-width-collapsed); }
html.sidebar-collapsed .sidebar .brand-text,
html.sidebar-collapsed .sidebar .nav-group-label,
html.sidebar-collapsed .sidebar .nav-link span { display: none; }

.sidebar-brand {
    display: flex; align-items: center; gap: 10px;
    padding: 16px 16px;
    border-bottom: 1px solid rgba(255,255,255,0.1);
}
.brand-logo { width: 28px; height: 28px; flex-shrink: 0; }
.brand-text { font-weight: 700; font-size: 14px; white-space: nowrap; overflow: hidden; }

.sidebar-nav { padding: 8px 0; flex: 1; }
.nav-group-label {
    font-size: 10px; text-transform: uppercase; letter-spacing: 0.05em;
    color: rgba(255,255,255,0.5); padding: 16px 16px 6px;
}
.nav-link {
    display: flex; align-items: center; gap: 12px;
    padding: 10px 16px; color: var(--theme-sidebar-text);
    white-space: nowrap; overflow: hidden;
}
.nav-link:hover { background: rgba(255,255,255,0.08); text-decoration: none; }
.nav-link.active { background: var(--theme-accent); color: #fff; }
.nav-icon { width: 18px; height: 18px; flex-shrink: 0; }

.sidebar-backdrop {
    display: none;
    position: fixed; inset: 0; background: rgba(0,0,0,0.4); z-index: 35;
}

.main {
    flex: 1;
    margin-left: var(--sidebar-width);
    display: flex; flex-direction: column;
    min-height: 100vh;
    transition: margin-left 0.2s ease;
}
html.sidebar-collapsed .main { margin-left: var(--sidebar-width-collapsed); }

.topbar {
    height: var(--topbar-height);
    background: var(--theme-header-bg);
    color: var(--theme-header-text);
    display: flex; align-items: center;
    padding: 0 16px;
    gap: 12px;
    position: sticky; top: 0; z-index: 30;
}
.sidebar-toggle {
    background: none; border: none; color: var(--theme-header-text);
    cursor: pointer; padding: 6px; border-radius: 6px; display: flex;
}
.sidebar-toggle:hover { background: rgba(255,255,255,0.15); }
.topbar-logo { height: 26px; }
.topbar-spacer { flex: 1; }
.topbar-actions { display: flex; align-items: center; gap: 14px; }
.icon-btn {
    background: none; border: none; color: var(--theme-header-text);
    cursor: pointer; padding: 6px; border-radius: 6px; display: flex;
}
.icon-btn:hover { background: rgba(255,255,255,0.15); }
.user-menu { display: flex; align-items: center; gap: 10px; }
.user-name { font-weight: 600; font-size: 12px; }
.logout-btn {
    color: var(--theme-header-text); border: 1px solid rgba(255,255,255,0.4);
    padding: 5px 12px; border-radius: 6px; font-size: 12px;
}
.logout-btn:hover { background: rgba(255,255,255,0.15); text-decoration: none; }

.content { flex: 1; padding: 20px; }

.app-footer {
    padding: 14px 20px; border-top: 1px solid var(--border-color);
    background: var(--bg-card); font-size: 11px; color: var(--text-muted);
    display: flex; justify-content: space-between;
}

/* ---------- Breadcrumb ---------- */
.breadcrumb { font-size: 12px; color: var(--text-muted); margin-bottom: 14px; display: flex; flex-wrap: wrap; align-items: center; gap: 2px 0; }
.breadcrumb a { padding: 3px 4px; border-radius: 4px; }
.breadcrumb a:hover { background: rgba(15,76,129,0.08); text-decoration: none; }
.crumb-sep { margin: 0 4px; }
.crumb-current { color: var(--text-primary); font-weight: 600; }
@media (max-width: 768px) {
    .breadcrumb { font-size: 13px; gap: 4px 0; }
    .breadcrumb a { padding: 6px 6px; }
}

/* ---------- Common components ---------- */
.page-heading { font-size: 18px; margin: 0 0 16px; }

.card {
    background: var(--bg-card); border: 1px solid var(--border-color);
    border-radius: var(--radius); padding: 18px; margin-bottom: 18px;
}
.card-title { font-size: 14px; font-weight: 700; margin: 0 0 14px; }

.stat-grid {
    display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    gap: 14px; margin-bottom: 20px;
}
.stat-card {
    background: var(--bg-card); border: 1px solid var(--border-color);
    border-radius: var(--radius); padding: 18px;
}
.stat-value { font-size: 22px; font-weight: 800; color: var(--theme-accent); }
.stat-label { font-size: 11px; color: var(--text-muted); margin-top: 4px; }

.form-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 14px; }
.form-grid.cols-1 { grid-template-columns: 1fr; }
label { display: flex; flex-direction: column; gap: 5px; font-size: 12px; font-weight: 600; color: var(--text-primary); }
input:not([type="checkbox"]):not([type="radio"]):not([type="color"]), select, textarea {
    font: inherit; padding: 6px 4px; border: 1px solid var(--border-color);
    border-radius: 6px; background: #fff; color: var(--text-primary); width: 100%;
}
input[type="checkbox"], input[type="radio"] { width: auto; }
input[type="color"] {
    width: 100%; height: 40px; padding: 4px; border: 1px solid var(--border-color);
    border-radius: 6px; background: #fff; cursor: pointer;
}
input:focus, select:focus, textarea:focus { outline: 2px solid var(--theme-accent); outline-offset: 1px; }
input[type="checkbox"]:focus, input[type="radio"]:focus { outline-offset: 2px; }
label:has(> input[type="checkbox"]), label:has(> input[type="radio"]) { flex-direction: row; align-items: center; gap: 6px; }
fieldset { border: 1px solid var(--border-color); border-radius: var(--radius); margin: 0 0 16px; padding: 14px 16px; }
legend { font-weight: 700; padding: 0 6px; font-size: 12px; }

.btn {
    display: inline-flex; align-items: center; justify-content: center;
    padding: 5px 6px; border-radius: 6px; border: 1px solid transparent;
    font-weight: 600; font-size: 12px; cursor: pointer; text-decoration: none;
}
.btn:hover { text-decoration: none; opacity: 0.92; }
.btn-primary { background: var(--theme-button-bg); color: var(--theme-button-text); }
.btn-secondary { background: #fff; color: var(--text-primary); border-color: var(--border-color); }
.btn-danger { background: var(--danger); color: #fff; }
.btn-success { background: var(--success); color: #fff; }
.btn-sm { padding: 5px 10px; font-size: 11px; }
.btn-block { width: 100%; }

.actions-row { display: flex; gap: 10px; margin-top: 16px; flex-wrap: wrap; }

table.data { width: 100%; border-collapse: collapse; }
table.data th { background: var(--theme-table-header-bg); text-align: left; padding: 10px; font-size: 11px; text-transform: uppercase; letter-spacing: 0.03em; }
table.data td { padding: 10px; border-top: 1px solid var(--border-color); }

/* DataTables toolbar (export buttons + search) — see initDataTable() in app.js.
   Three-column grid keeps the buttons visually centered regardless of the
   search box's width, and the search box flush against the right edge. */
.dt-toolbar { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 10px; margin-bottom: 12px; }
.dt-toolbar .dt-buttons { grid-column: 2; justify-self: center; display: flex; gap: 8px; flex-wrap: wrap; }
.dt-toolbar .dt-search { grid-column: 3; grid-row: 1; justify-self: end; margin: 0; }
.dt-toolbar .dt-search label { display: flex; align-items: center; gap: 8px; font-size: 12px; font-weight: 400; margin: 0; white-space: nowrap; }
.dt-toolbar .dt-input { padding: 6px 10px; border: 1px solid var(--border-color); border-radius: 6px; font-size: 12px; }
.dt-buttons .dt-button { padding: 6px 14px; border-radius: 6px; border: 1px solid var(--border-color); background: #fff; color: var(--text-primary); font-size: 12px; cursor: pointer; }
.dt-buttons .dt-button:hover { background: var(--theme-table-header-bg); }

/* DataTables footer (row count + pagination) — these render as two separate
   block-level divs, so without this they stack instead of sitting on one row. */
.dt-container:after { content: ""; display: table; clear: both; }
.dt-info { float: left; padding-top: 8px; font-size: 12px; color: var(--text-muted); }
.dt-paging { float: right; }
.dt-paging nav { display: flex; gap: 4px; flex-wrap: wrap; }
.dt-paging .dt-paging-button {
    font: inherit; padding: 6px 12px; border-radius: 6px; border: 1px solid var(--border-color);
    background: #fff; color: var(--text-primary); font-size: 12px; cursor: pointer; min-width: 34px;
}
.dt-paging .dt-paging-button:hover:not(.disabled) { background: var(--theme-table-header-bg); }
.dt-paging .dt-paging-button.current { background: var(--theme-accent); border-color: var(--theme-accent); color: #fff; }
.dt-paging .dt-paging-button.disabled { color: var(--text-muted); cursor: default; opacity: 0.5; }

.badge { display: inline-block; padding: 3px 9px; border-radius: 20px; font-size: 10px; font-weight: 700; text-transform: uppercase; }
.badge-gray { background: #eceff3; color: #55606e; }
.badge-warning { background: #fdf1d6; color: var(--warning); }
.badge-success { background: #e2f3ea; color: var(--success); }
.badge-danger { background: #fbe6e3; color: var(--danger); }
.badge-info { background: #e1eefc; color: #1a5aa8; }

.flash { padding: 12px 16px; border-radius: 6px; margin-bottom: 16px; font-size: 12px; }
.flash-success { background: #e2f3ea; color: var(--success); }
.flash-error { background: #fbe6e3; color: var(--danger); }
.flash-info { background: #e1eefc; color: #1a5aa8; }
.flash-warning { background: #fdf1d6; color: var(--warning); }

.field-error { color: var(--danger); font-size: 11px; font-weight: 500; }

.workload-list { list-style: none; margin: 0; padding: 0; }
.workload-list li {
    display: flex; justify-content: space-between; align-items: center;
    padding: 10px 12px; border: 1px solid var(--border-color); border-radius: 6px; margin-bottom: 8px;
}
.workload-count { font-weight: 800; color: var(--theme-accent); }

/* ---------- Login page ---------- */
.login-body {
    display: flex; align-items: center; justify-content: center;
    min-height: 100vh; background: var(--theme-sidebar-bg);
}
.login-card {
    background: #fff; padding: 32px; border-radius: 10px; width: 100%; max-width: 340px;
    box-shadow: 0 10px 40px rgba(0,0,0,0.2); text-align: center;
}
.login-logo { width: 150px; margin-bottom: 8px;  }
.login-title { margin: 0 0 18px; font-size: 18px; }
.login-form { display: flex; flex-direction: column; gap: 14px; text-align: left; }

/* ---------- Tabs ---------- */
.tabs-nav { display: flex; gap: 4px; border-bottom: 1px solid var(--border-color); margin-bottom: 16px; flex-wrap: wrap; }
.tab-btn {
    background: none; border: none; padding: 10px 16px; font: inherit; font-weight: 600;
    color: var(--text-muted); cursor: pointer; border-bottom: 2px solid transparent; margin-bottom: -1px;
}
.tab-btn:hover { color: var(--text-primary); }
.tab-btn.active { color: var(--theme-accent); border-bottom-color: var(--theme-accent); }
.tab-panel { display: none; }
.tab-panel.active { display: block; }

/* ---------- Modal ---------- */
dialog.modal {
    border: none; border-radius: var(--radius); padding: 0; width: 90%; max-width: 560px;
    box-shadow: 0 10px 40px rgba(0,0,0,0.25);
}
dialog.modal::backdrop { background: rgba(0,0,0,0.45); }
.modal-header { display: flex; justify-content: space-between; align-items: center; padding: 16px 18px; border-bottom: 1px solid var(--border-color); }
.modal-title { font-weight: 700; font-size: 14px; margin: 0; }
.modal-close { background: none; border: none; font-size: 18px; cursor: pointer; color: var(--text-muted); line-height: 1; }
.modal-body { padding: 16px 18px; max-height: 60vh; overflow-y: auto; }

/* ---------- Typeahead ---------- */
.typeahead { position: relative; }
.typeahead-results {
    position: absolute; top: 100%; left: 0; right: 0; z-index: 50;
    background: #fff; border: 1px solid var(--border-color); border-radius: 6px;
    max-height: 240px; overflow-y: auto; box-shadow: 0 6px 20px rgba(0,0,0,0.12); margin-top: 2px;
}
.typeahead-item { padding: 8px 12px; cursor: pointer; font-size: 12px; }
.typeahead-item:hover, .typeahead-item.active { background: var(--bg-page); }
.typeahead-item small { display: block; color: var(--text-muted); }
.typeahead-item.disabled { cursor: not-allowed; opacity: .55; }
.typeahead-item.disabled:hover { background: transparent; }
.typeahead-item.disabled small { color: var(--danger, #b3261e); font-weight: 600; }

/* ---------- Vitals toggle panels ---------- */
.toggle-panel { display: none; margin-top: 12px; }
.toggle-panel.open { display: block; }

/* ---------- Responsive ---------- */
@media (max-width: 768px) {
    .sidebar { transform: translateX(-100%); width: var(--sidebar-width); }
    html.sidebar-open .sidebar { transform: translateX(0); }
    html.sidebar-open .sidebar-backdrop { display: block; }
    .main { margin-left: 0; }
    html.sidebar-collapsed .main { margin-left: 0; }
    .content { padding: 14px; }
}

/* ---------- Print ---------- */
@media print {
    .sidebar, .sidebar-backdrop, .topbar, .app-footer, .breadcrumb, .actions-row, .no-print { display: none !important; }
    .main { margin-left: 0 !important; }
    body { background: #fff; }
}

/* ---------- Charts (Chart.js) ---------- */
.chart-wrap { position: relative; width: 100%; }
.dash-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)); gap: 18px; }
.dash-grid .card { margin-bottom: 0; }
.dash-grid .card.span-2 { grid-column: 1 / -1; }
.card-title .card-sub { color: var(--text-muted); font-weight: 400; }
.stat-card.stat-accent { border-left: 4px solid var(--theme-accent); }
.stat-card.stat-danger { border-left: 4px solid var(--danger); }
.stat-card.stat-primary { border-left: 4px solid var(--theme-button-bg); }
.stat-card.stat-warning { border-left: 4px solid var(--warning); }
.stat-delta { font-size: 11px; margin-top: 4px; font-weight: 600; }
.stat-delta.up { color: var(--success); }
.stat-delta.down { color: var(--danger); }

/* ---------- Action-button colours by kind ----------
   data-kind is set from each button's label by initButtonKinds() in app.js;
   the colours are configured on Settings > Theme and injected as --btn-* variables by includes/header.php. */
:root {
    --btn-search: #0e7490;
    --btn-search-text: #ffffff;
    --btn-filter: #4f46e5;
    --btn-filter-text: #ffffff;
    --btn-submit: #0f4c81;
    --btn-submit-text: #ffffff;
    --btn-save: #1f7a53;
    --btn-save-text: #ffffff;
    --btn-request: #c2410c;
    --btn-request-text: #ffffff;
    --btn-upload: #7c3aed;
    --btn-upload-text: #ffffff;
    --btn-download: #475569;
    --btn-download-text: #ffffff;
    --btn-delete: #c0392b;
    --btn-delete-text: #ffffff;
}
.btn[data-kind="search"] { background: var(--btn-search); color: var(--btn-search-text); border-color: var(--btn-search); }
.btn[data-kind="filter"] { background: var(--btn-filter); color: var(--btn-filter-text); border-color: var(--btn-filter); }
.btn[data-kind="submit"] { background: var(--btn-submit); color: var(--btn-submit-text); border-color: var(--btn-submit); }
.btn[data-kind="save"] { background: var(--btn-save); color: var(--btn-save-text); border-color: var(--btn-save); }
.btn[data-kind="request"] { background: var(--btn-request); color: var(--btn-request-text); border-color: var(--btn-request); }
.btn[data-kind="upload"] { background: var(--btn-upload); color: var(--btn-upload-text); border-color: var(--btn-upload); }
.btn[data-kind="download"] { background: var(--btn-download); color: var(--btn-download-text); border-color: var(--btn-download); }
.btn[data-kind="delete"] { background: var(--btn-delete); color: var(--btn-delete-text); border-color: var(--btn-delete); }
